Transcript Slaidid

Objektorienteeritud
programmeerimine
6. september 2013
Eno Tõnisson
1
Tänane plaan
• Sissejuhatus
– organisatsiooniliselt
•
•
•
•
Milleks?
Kuidas?
Millal?
Kas?
– teemasse
•
•
•
•
Java
Esimene programm
…
…
2
Milleks OOP?
• Silmaring, maailmavaade
– objektid, subjektid
• Õppimine
– jätk esimese semestri programmeerimisele
• Programmeerimine
• Programmeerimise alused, Programmeerimise alused II
– eeldus mitmetele järgmistele ainetele
3
Keel
• Java
– populaarsus
• http://www.tiobe.com/index.php/content/paperinfo/tp
ci/index.html
– töökuulutused
• http://www.cvkeskus.ee
• http://www.cv.ee/too/infotehnoloogia/q-java
4
Inimesed on erinevad
• Siin võib-olla neid, kes
– õpivad hoopis muud eriala
– 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
–…
5
Mis teaduskonnast te olete?
A.
B.
C.
D.
E.
F.
G.
H.
I.
J.
UsuÕigusArstiFilosoofiaKehakultuuriLoodus- ja tehnoloogiaMajandusMatemaatika-informaatikaSotsiaal- ja haridusMuu
1
1
1
1
1
1
1
1
A.
B.
C.
D.
E.
F.
G.
H.
1
I.
1
J.
6
Programmeerimise (Progr. alused II)
kursus oli
1.
2.
3.
4.
5.
väga lihtne
lihtne
paras
keeruline
väga keeruline
0%
1.
0%
0%
2.
3.
0%
0%
4.
5.
7
Millise hinde saite Programmeerimise
(Progr. alused II) kursusel?
1.
2.
3.
4.
5.
A
B
C
D
E
0%
1.
2.
3.
4.
5.
8
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
• @ut.ee aadressid, ÕIS
• Eestikeelne terminoloogia
– kui meie ei kasuta ja ei arenda, siis ei tee seda (varsti) keegi9
Miks just siin?
• On olemas hulgaliselt
– materjale
– videoid
– programminäiteid
–…
• Miks just kursusel, miks just nii?
10
Kursus
• Loengud
– reedel kell 14-16
– eelmiste aastate video?
• Praktikumide tunnitööd, kodutööd
– suhteliselt kindlas tempos, kindlad teemad
• Kontrolltööd
– ajapiiriga
• Rühmatööd
– ISE!
– mängud?
• Eksam
11
Hindamine
• Loengud
– 15 punkti
• Praktikumid
–
–
–
–
–
–
–
12 punkti
1. kontrolltöö, 17 punkti
2. kontrolltöö, 13 punkti
1. rühmatöö, 5 punkti
2. rühmatöö, 5 punkti
3. rühmatöö, 3 punkti
rühmatöö esitlus, 3 punkti
• Eksamitöö, 30 punkti
– Eksamile pääsemiseks peab olema praktikumidest (sh. rühmatööd)
kogutud vähemalt 30 punkti, loengutest vähemalt 7 punkti.
• Hindeskaala
"E" 51-60, "D" 61-70, "C" 71-80, "B" 81-90, "A" 9112
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
• 90 minutit järjest?
– vaheaeg
– klikkerid aitaksid
• aruteluga
13
Sülearvutid loengus?!
• Konspekteerida?
• Kohe läbi proovida?
• Otsida lisamaterjali?
• …
• Suhelda?
• Teha tööd?
• Jälgida uudiseid?
• Vaadata filme?
• …
http://uudised.err.ee/index.php?06244893
14
Loengu eel
• Selleks, et vajaliku tempoga edasi minna (ja
loengu eest punkte saada) tuleb enne iga
reedet
– läbi vaadata eelmise aasta loengu video
– saata vastused antud küsimustele selle loengu
kohta
– saata küsimused selle loengu kohta
• Selle eest on võimalik saada kuni 1 punkt
(olenemata sellest, kas tulete loengusse või
mitte)
15
Reedel
• Reedel tuleb teha otsus, kas tulla loengusse.
• Loengus eeldatakse, et osalejad on video läbi töötanud.
Rohkem keskendutakse saabunud vastuste analüüsile
ja arutelule. Samuti saabunud küsimustele.
• Need, kes loengu läbivaatamise vastuseid/küsimusi ei
saatnud, võivad siiski loengusse tulla, aga nende
saagiks on ülimalt 1/2 punkti.
• Kuna tegemist on esmakordselt sellise skeemiga, siis
analüüsime mõne aja pärast olukorda ja vajadusel
muudame.
16
Kuivõrd on võimalik loengusse
sülearvuti kaasa võtta?
1. nagunii tavaliselt
kaasas
2. vajadusel võib
kaasa võtta
3. ei taha/saa kaasa
võtta
33%
1.
33%
2.
33%
3.
17
Praktikumid
•
•
•
•
E 16
T8
T 10 tühjem praegu
K 16
18
Millise hindega oleksite selles aines
rahul?
1.
2.
3.
4.
5.
6.
A
B
C
D
E
F
0%
1.
2.
3.
4.
5.
6.
19
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/
20
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
21
elemente.
Täna
•
•
•
•
•
Java ajaloost
Java omadused
Esimene programm
Muutujad ja tüübid
Põhikonstruktsioonid
22
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-index198355.html
23
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
24
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 4.2.1
– uusim Eclipse 4.3
25
Tehnoloogiad
•
•
•
•
•
•
•
•
Java SE
Java Embedded
Java EE
Java ME
JavaFX
Java Card
Java TV
Java DB
• http://www.oracle.com/technetwork/java/index.html
26
Mis firmas Java loodi?
1.
2.
3.
4.
Dragon Ltd
Sun Microsystems
Smilers Computers
Grape International
0%
1.
0%
2.
0%
3.
0%
4.
27
Java programmide koostamise tarkvara
komplekt on
1.
2.
3.
4.
JFK
JDK
API
ACTA
0%
1.
0%
2.
0%
3.
0%
4.
28
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
29
Kõik võivad
programmi
käivitada
Programmeerimine
seisneb klasside
koostamises
Tühitüüp,
väärtust ei
tagastata
Klassi nimi
Klassi
alustav
sulg
Peameetod
Parameetri
tüüp
Meetodit
alustav
sulg
Parameetri
nimi
public class TereMaailm {
public static void main(String[] args) {
System.out.println("Tere, maailm");
Meetodit
}
lõpetav
}
sulg
Kõik võivad
meetodit
käivitada
Klassi
lõpetav
sulg
Meetodi nimi
Argument
Klassimeetod,
mitte
isendimeetod
Käsku lõpetav
semikoolon
30
Tekstist tööle
Redigeeri
programmiteksti
Programmitekst
Kompileeri
javac Tere.java
Pole
see
Pole
see
Tulemus
Baitkood
Käivita
java Tere
Pole
see
31
Baitkood
• masinkeel JVM (Java Virtual Machine) jaoks
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
32
Millest programm koosneb?
• Kommentaarid
• Võtmesõnad
– public, class, static, void
• Piiritlejad
– public, static
• Laused
– lõppevad semikooloniga
• Plokid
–{
}
• Klassid
• Meetodid
– Peameetod main
33
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
34
Muutujad ja tüübid
• Igal Java muutujal on
– tüüp
• algtüüp või viittüüp
– nimi
– väärtus
• int x = 17;
35
Algtüüp
• Täisarvud
–
–
–
–
byte
short
int
long
• Ujukomaarvud
– float
– double
• Tõeväärtused
– boolean
• Sümbolid
– char
36
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;
37
Ujukomaarvud
• IEEE 754
– float
• 32-bitiline
– double
• 64-bitiline
• double raadius = 7.8;
38
Tõeväärtus
• boolean
– true
– false
• boolean tv = true;
39
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);
40
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
41
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;
42
Ühiksuurendamine, ühikvähendamine
++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
43
Mille toob järgmine programmi lõik
ekraanile?
int i = 5;
int uus = 5 * i++;
System.out.println(uus);
1.
2.
3.
4.
5.
25
26
30
veateate
midagi muud
0%
1.
0%
0%
2.
3.
0%
4.
0%
5.
44
Mille toob järgmine programmi lõik
ekraanile?
int i = 5;
int uus = 5 * ++i;
System.out.println(uus);
1.
2.
3.
4.
5.
25
26
30
veateate
midagi muud
0%
1.
0%
0%
2.
3.
0%
4.
0%
5.
45
Mille toob järgmine programmi lõik
ekraanile?
int i = 5;
int uus = (5 * i)++;
System.out.println(uus);
1.
2.
3.
4.
5.
25
26
30
veateate
midagi muud
0%
1.
0%
0%
2.
3.
0%
4.
0%
5.
46
Suur tänu osalemast ja
kohtumiseni!
47