Objektorienteeritud programmeeriminekodu.ut.ee/~eno/oop12loeng/oop12loeng1h.pdfObjektorienteeritud...

Post on 30-Mar-2021

3 views 3 download

Transcript of Objektorienteeritud programmeeriminekodu.ut.ee/~eno/oop12loeng/oop12loeng1h.pdfObjektorienteeritud...

Objektorienteeritud programmeerimine

Eno Tõnisson

1

Plaan

• Sissejuhatus – organisatsiooniliselt

• Milleks?

• Kuidas?

• Millal?

• Kas?

– teemasse • Java

• Esimene programm

• …

• …

2

Inimesed on erinevad

• Siin võib-olla neid, kes

– programmeerivad igapäevaselt suure innuga

– said Programmeerimises hinde E

– on edukalt osalenud (rahvusvahelisel) informaatikaolümpiaadil

– suhtlevad mingis programmeerimiskeeles palju vabamalt kui mistahes inimkeeles

– on selle aine püsikliendid

– ei saa päriselt aru, miks nad seda eriala õpivad

– …

3

Keda järgnevatest inimestest usute kõige rohkem?

1. 2. 3.

0% 0%0%

1. Andus Ansipit

2. Andrus Kivirähki

3. Andrus Veerpalu

4

Response Grid

Countdown

10

Programmeerimise (Progr. alused II) kursus oli

5 1. 2. 3. 4. 5.

0% 0% 0%0%0%

1. väga lihtne

2. lihtne

3. paras

4. keeruline

5. väga keeruline

Millise hinde saite Programmeerimise (Progr. alused II) kursusel?

0%0%0%0%0%

1. 2. 3. 4. 5.

1. A

2. B

3. C

4. D

5. E

Milleks OOP?

• Silmaring, maailmavaade

– objektid, subjektid

• Õppimine

– jätk esimese semestri programmeerimisele

– eeldus mitmetele järgmistele ainetele

• Töö

– töökuulutused

• http://www.cv.ee/too/infotehnoloogia/q-java

• …

Millele (veel) tähelepanu? • Looming

– programmeerimine

• Keskendumine – Loengusse-praktikumi selleks, et õppida (luua tingimused

õppimiseks) – piisavalt iseseisvat õppimist tunnivälisel ajal

• Koostöö – üliõpilased omavahel

• paaristööd loengus, praktikumis • rühmatöö • foorum

– üliõpilane ja õppejõud • küsitakse-vastatakse

• Eestikeelne terminoloogia – kui meie ei kasuta ja ei arenda, siis ei tee seda (varsti) keegi

Miks just siin?

• On olemas hulgaliselt

– materjale

– videoid

– programminäiteid

– …

• Miks just kursusel, miks just nii?

Kursus • Loengud

– loodetavasti auditooriumi aktiivsusega, aga ikkagi teatud tempos

– mittestatsionaarne rühm

• Praktikumide tunnitööd, kodutööd – suhteliselt omas tempos, kindlad teemad

• Kontrolltööd – ajapiiriga

• Rühmatööd – ISE!

• Eksam

Loengud

• Milleks?

• Üks räägib, teised

– kuulavad ja mõtlevad kaasa

– teevad näo, et kuulavad ja mõtlevad kaasa

– ei tee isegi nägu, et kuulavad ja mõtlevad kaasa

http://uudised.err.ee/index.php?06244893

11

Sülearvuti kasutamine loengus

12

0%0%0%0%0%

1. 2. 3. 4. 5.

1. toetab loengu mõistmist, õhkkonda jm.

2. pigem toetab loengu mõistmist, õhkkonda jm.

3. ei mõjuta loengu mõistmist, õhkkonda jm.

4. pigem ei toeta loengu mõistmist, õhkkonda jm.

5. ei toeta loengu mõistmist, õhkkonda jm.

Hindamine • Loengud

– 12 punkti

• Praktikumid – 12 punkti – 1. kontrolltöö, 14 punkti – 2. kontrolltöö, 14 punkti – 1. rühmatöö, 5 punkti – 2. rühmatöö, 5 punkti – 3. rühmatöö, 5 punkti – rühmatöö esitlus, 5 punkti

• Eksamitöö, 36 punkti – Eksamile pääsemiseks peab olema praktikumidest (sh. rühmatööd)

kogutud vähemalt 35 punkti, loengutest vähemalt 6 punkti.

• Hindeskaala "E" 51-60, "D" 61-70, "C" 71-80, "B" 81-90, "A" 91-

13

Millise hindega oleksite selles aines rahul?

0%0%0%0%0%0%

1. 2. 3. 4. 5. 6.

1. A

2. B

3. C

4. D

5. E

6. F

Tahaks juba programmeerimisest ka kuulda

• Objektorienteeritud programmeerimine

– programmeerimiskeel Java

• Slaidide allikad

– Helle Heina slaidid

– Y. Daniel Liang Introduction to Java programming

– http://docs.oracle.com/javase/tutorial/

15

Eesmärk • Kursuse eesmärgiks on anda alusteadmised objekt-orienteeritud

programmeerimise eripärast, oskused programmide koostamiseks ning esmased rühmatööoskused

• Kursuse läbinud üliõpilane:

– on võimeline selgitama objekt-orienteeritud paradigma põhimõisteid (kapseldus, abstraktsioon, pärimine, polümorfism, üledefineerimine, ülekate) ning analüüsima vastavaid programme

– on võimeline kirjeldama erinevaid andmestruktuure (massiiv, ahel, magasin, järjekord, paisktabel) ja nende kasutusviise

– oskab selgitada rakendusteekide väärtust ja olemust ning leida nendest vajalikku informatsiooni

– oskab selgitada sündmuspõhise programmeerimise eripära ja erindite käitlemist ning tuua näiteid nende kasutamisest

– oskab ühes objekt-orienteeritud programmeerimiskeeles kasutades integreeritud programmeerimiskeskkonda koostada, testida ja siluda programme, rakendades selleks eelmistes punktides loetletut

– oskab kirjeldada isikliku kogemuse põhjal rühmaprojekti keskseid elemente.

16

Täna

• Java ajaloost

• Java omadused

• Esimene programm

• Muutujad ja tüübid

• Põhikonstruktsioonid

17

Java

• Lihtsus

• Objektorienteeritus

• Staatiliselt rangelt tüübitud

• Interpreteeritav

• Turvalisus

• Arhitektuurist sõltumatu – write once, run anywhere

• Multilõimelisus

• Dünaamilisus

• Vt. – http://www.cs.armstrong.edu/liang/intro6e/JavaCharacteristics.pdf

19

API, JDK, IDE

• API – Application Programming Interface – rakendusteek, eelnevalt programmeeritud objektid (Java) programmi koostamiseks

– meil Java SE 7

• JDK – Java Development Toolkit – Java programmide koostamise tarkvara komplekt

– meil JDK 7

• IDE – Integrated Development Environment – integreeritud programmeerimiskeskkond

– meil Eclipse Classic 3.7.1 Indigo

20

Tehnoloogiad

• Java SE • Java Embedded • Java EE • Java ME • JavaFX • Java Card • Java TV • Java DB

• http://www.oracle.com/technetwork/java/index.html

21

Mis firmas Java loodi?

22 1. 2. 3. 4.

0% 0%0%0%

1. Dragon Ltd

2. Sun Microsystems

3. Smilers Computers

4. Grape International

Java programmide koostamise tarkvara komplekt on

23 1. 2. 3. 4.

0% 0%0%0%

1. JFK

2. JDK

3. API

4. ACTA

Esimene programm

Python: /*

Mitmerealine kommentaar

*/

//Üherealine kommentaar

public class TereMaailm {

public static void main(String[] args) {

System.out.println("Tere, maailm");

}

}

Fail nimega: TereMaailm.java

Kompileerimine: >javac TereMaailm.java

Käivitamine: >java TereMaailm 24

Klassimeetod, mitte

isendimeetod

public class TereMaailm {

public static void main(String[] args) {

System.out.println("Tere, maailm");

}

}

Kõik võivad programmi käivitada

Programmeerimine seisneb klasside

koostamises

Klassi nimi

Klassi alustav

sulg

Kõik võivad meetodit käivitada

Tühitüüp, väärtust ei tagastata Peameetod

Meetodit alustav

sulg

Parameetri tüüp

Parameetri nimi

Meetodit lõpetav

sulg

Klassi lõpetav

sulg

Meetodi nimi

Argument Käsku lõpetav

semikoolon

25

Tekstist tööle

Programmitekst

Baitkood

Redigeeri programmiteksti

Kompileeri javac Tere.java

Käivita java Tere

Tulemus

Pole see Pole

see

Pole see

26

Baitkood

• masinkeel JVM (Java Virtual Machine) jaoks

27

0: iconst_2 1: istore_1 2: iload_1 3: sipush 1000 6: if_icmpge 44 9: iconst_2 10: istore_2 11: iload_2 12: iload_1 13: if_icmpge 31 16: iload_1 17: iload_2

Millest programm koosneb? • Kommentaarid

• Võtmesõnad

– public, class, static, void

• Piiritlejad

– public, static

• Laused

– lõppevad semikooloniga

• Plokid

– { }

• Klassid

• Meetodid

– Peameetod main

28

Võtmesõnad abstract assert boolean break byte case

catch char class const* continue default

double do else enum extends final

finally float for goto* if implements

import instanceof int interface long

native new package private protected

public return short static strictfp

super switch synchronized this throw

throws transient try void volatile while

• Tunduvad võtmesõnadena, aga on literaalid false null true

29

Muutujad ja tüübid

• Igal Java muutujal on

– tüüp

• algtüüp või viittüüp

– nimi

– väärtus

• int x = 17;

30

Algtüüp • Täisarvud

– byte

– short

– int

– long

• Ujukomaarvud – float

– double

• Tõeväärtused – boolean

• Sümbolid – char

31

Täisarvud • Teine täiendväärtus (two's complement)

– byte • 8-bitiline

• -128 kuni 127

– short • 16-bitiline

• -32 768 kuni 32 767

– int • 32-bitiline

• -2 147 483 648 kuni 2 147 483 647

– long • 64-bitiline

• -9 223 372 036 854 775 808 kuni 9 223 372 036 854 775 807

• int x; 32

• 9 223 372 036 854 775 807

• üheksa kvintiljonit kakssada kakskümmend kolm kvadriljonit kolmsada seitsekümmend kaks triljonit kolmkümmend kuus miljardit kaheksasada viiskümmend neli miljonit seitsesada seitsekümmend viis tuhat kaheksasada seitse

33

Ujukomaarvud

• IEEE 754 – float

• 32-bitiline

– double

• 64-bitiline

• double raadius = 7.8;

34

Tõeväärtus

• boolean

– true

– false

• boolean tv = true;

35

Sümbolid

• char

– 16-bitiline Unicode-sümbol

– '\u0000' (0) kuni '\uffff' (65535)

• char ch1 = 'a';

• char ch2 = 65;

• System.out.print("ch1 ja ch2: ");

• System.out.println(ch1 + " " + ch2);

36

Nimi

• on tõstutundlik

• võib sisaldada tähti, numbreid, _ , $

• ei tohi alata numbriga

• ei tohi olla Java võtmesõna,

• ei tohi olla true, false, null

37

Kirjeldamine, väärtustamine

• double raadius;

• int x, y, z, k;

• char a;

• raadius = 3.4;

• a = 'e';

• x = y = z = 1;

• int i = 1, j = 2;

• k = 1 + 5;

38

Ühiksuurendamine, ühikvähendamine

39

++muutuja

Muutujat suurendatakse ühe võrra ja seejärel arvutatakse avaldise väärtus kasutades muutuja uut väärtust

muutuja++

Avaldise väärtus arvutatakse kasutades muutuja vana väärtust ja seejärel suurendatakse muutujat ühe võrra

--muutuja

Muutujat vähendatakse ühe võrra ja seejärel arvutatakse avaldise väärtus kasutades muutuja uut väärtust

muutuja--

Avaldise väärtus arvutatakse kasutades muutuja vana väärtust ja seejärel vähendatakse muutujat ühe võrra

Mille toob järgmine programmi lõik ekraanile?

40 1. 2. 3. 4. 5.

0% 0% 0%0%0%

int i = 5;

int uus = 5 * i++;

System.out.println(uus);

1. 25

2. 26

3. 30

4. veateate

5. midagi muud

Mille toob järgmine programmi lõik ekraanile?

41 1. 2. 3. 4. 5.

0% 0% 0%0%0%

int i = 5;

int uus = 5 * ++i;

System.out.println(uus);

1. 25

2. 26

3. 30

4. veateate

5. midagi muud

Kas on lubatud int Public = 50000;

42

0%0%0%

1. 2. 3.

1. Jah

2. Ei

3. Ei oska öelda

Kas on lubatud int x = 50_0_00;

43

0%0%0%

1. 2. 3.

1. Jah

2. Ei

3. Ei oska öelda

Tüübiteisendus

• Avaldise arvutamisel – Kui ühe operandi tüüp on double, siis teine

teisendatakse ka double-tüüpi

– vastasel juhul, kui ühe operandi tüüp on float, siis teine teisendatakse ka float-tüüpi

– vastasel juhul, kui ühe operandi tüüp on long, siis teine teisendatakse ka long-tüüpi

– vastasel juhul teisendatakse mõlemad int-tüüpi

1.0/2

1/2

44

Tüübiteisendus

• Laienemise järjekord

– byte, short, int, long, float, double

– laiemaks automaatselt

– kitsamaks tuleb ilmutatult näidata

double f = 4;

double d = 6.4;

int i = (int) d; // d ise ei muutu, i on 6

45

Sõne

• Ei ole Javas algtüüp, hiljem käsitleme põhjalikumalt

String s1 = "On";

String s2 = "veebruar";

String s3 = s1 + " " + s2;

46

Kui palju on 1 + 2?

47 1. 2. 3. 4. 5.

0% 0% 0%0%0%

1. 1

2. 2

3. 3

4. 12

5. midagi muud

Mida väljastab ekraanile?

48 1. 2. 3. 4. 5.

0% 0% 0%0%0%

int i = 1, j = 2;

System.out.println("i + j = " + i + j);

1. i + j = 1

2. i + j = 2

3. i + j = 3

4. i + j = 12

5. midagi muud

Mida väljastab ekraanile?

49 1. 2. 3. 4. 5.

0% 0% 0%0%0%

int i = 1, j = 2;

System.out.println("i + j = " + (i + j));

1. i + j = 1

2. i + j = 2

3. i + j = 3

4. i + j = 12

5. midagi muud

Klaviatuurilt import java.util.Scanner;

class Klaviatuurilt {

public static void main(String [] args) {

Scanner scan = new Scanner(System.in);

System.out.println("Mis Su nimi on? ");

String nimi = scan.nextLine();

System.out.println("Sisesta täisarv");

int taisarv = scan.nextInt();

System.out.println("Sisesta reaalarv");

double ujukomaArv = scan.nextDouble();

System.out.println("Tere, " + nimi + "!");

System.out.println("Sisestasid täisarvu: " + taisarv);

System.out.println(" ja reaalarvu: " + ujukomaArv);

}

}

50

Loengu tempo oli

51 1. 2. 3.

0% 0%0%

1. liiga kiire

2. paras

3. liiga aeglane

Materjal tundus

52 1. 2. 3.

0% 0%0%

1. liiga lihtne

2. parajalt jõukohane

3. liiga keeruline

What is your opinion?

53 1. 2. 3. 4. 5. 6. 7.

0% 0% 0% 0%0%0%0%

1. Strongly Agree

2. Agree

3. Somewhat Agree

4. Neutral

5. Somewhat Disagree

6. Disagree

7. Strongly Disagree

Suur tänu osalemast ja kohtumiseni!

54