Objektorienteeritud programmeeriminekodu.ut.ee/~eno/oop12loeng/oop12loeng1h.pdfObjektorienteeritud...
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 • James Gosling, Sun Microsystems • Oak • 1995 • Nimest
– Definition of JAVA • coffee
– Examples of JAVA • a hot cup of java
– Jaava saar, jaava keel • 85 miljonit, "köögikeel"
– http://www.javaworld.com/javaworld/jw-10-1996/jw-10-javaname.html
• Ajaloost – http://www.oracle.com/technetwork/java/javase/overview/javahistory-index-
198355.html 18
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