r óbert novotný [email protected] 28. 9. 2006

33
paz1c Róbert Novotný [email protected] 28. 9. 2006 Programovanie, algoritmy, zložitosť ÚINF/PAZ1c

Upload: alaire

Post on 23-Jan-2016

65 views

Category:

Documents


0 download

DESCRIPTION

Programovanie, algoritmy, zložitosť ÚINF/PAZ1c. R óbert Novotný [email protected] 28. 9. 2006. Formality a byrokracie. Teoretické cvičenie piatok, 11.00, P17 prednáškové zameranie Praktické cvičenia štvrtok, 13.00, P3 Všetky inštrukcie na http://ics.upjs.sk/~novotnyr/vyucba/paz1c. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c

Róbert Novotný[email protected]

28. 9. 2006

Programovanie,

algoritmy, zložitosť

ÚINF/PAZ1c

Page 2: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c Formality a byrokracie

• Teoretické cvičenie– piatok, 11.00, P17– prednáškové zameranie

• Praktické cvičenia– štvrtok, 13.00, P3

• Všetky inštrukcie na

http://ics.upjs.sk/~novotnyr/vyucba/paz1c

Page 3: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1cSylabus a požiadavky na zápočet

• Požiadavky:– Účasť na praktických cvičeniach (20%)– Domáce úlohy (raz za dve cvičenia) (30%)– Záverečný projekt (30%)– Test po precvičení dedičnosti (20%)

• Sylabus:– Objektovo orientované programovanie– Jeho použitie v Jave

Page 4: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c Java

• Java– výslovnosť

• džova (Gosling a iní zakladatelia)•džava

,,To sú tí Američania, čo čítajú body ako báádíí"

• java (Poliaci a Rusi;-))

– objektovo orientovaný programovací jazyk

– základný softvér týkajúci sa Javy

• budeme používať verziu 5, resp. 6.

Page 5: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c Výhody Javy

• WORA: write once, run anywhere (Napíš raz, spusti hocikde)– kódenie na Windowse– nasadenie na Solaris

• platformová nezávislosť– Windows– Linux– mobil– sonda Mars Spirit

• tony kvalitných knižníc a nástrojov• väčšina zadarmo• obrovská komunita, haldy a haldy kníh,

seriálov...

Page 6: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c Výhody a nevýhody Javy

• malé spustiteľné súbory,,Heh. Až na to osemmegové JRE"

• žiadne smerníky• syntax prebratá z Ccka

,,To je výhoda?"

Page 7: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c Výhody a nevýhody Javy

Používateľ sa často stretáva s tými najhoršími stránkami Javy

• applety: hrozné, pomalé, nepoužiteľné– applety tvorili veľmi malý podiel programov v

Jave– historicky na odchode

• bežné aplikácie: hrozné, pomalé, nepoužiteľné– situácia sa zo dňa na deň zlepšuje

,,Porovnaj Together a Eclipse"– pozri JAlbum, či Azureus– Java 7 zameraná na použiteľnosť bežných

aplikácií

Page 8: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c Prečo by som mal ovládať Javu

• komerčné spoločnosti => množstvo pracovných ponúk

• Java je v súčasnosti na čele medzi požiadavkami– Ness, Siemens, VSL, CAI

• veľká perspektíva1. PHP: 1,152* 2. C# : 5,111 3. AJAX: 1,106 4. JavaScript: 4,406 5. Perl: 4,810 6. C: 6,1647. Ruby, Ruby on Rails: 210 a 548. Java: 14,408 9. Python: 811 10. Visual Basic .Net: 2,090

Page 9: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c

Ako spustím zázračný program v Pascale

• Spomni Pascal:– F9 kompiluje a zároveň spúšťa. Všetko

sa deje na pozadí

F9

Page 10: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1cAko spustím zázračný program v Jave

• Pravý programátor používa príkazový riadok a notepad/vi.

• Kompilácia– javac HelloWorld.java

• Spustenie– java HelloWorld

HelloWorld.java

public class...

HelloWorld.class010011001011javac java Hello World!

Page 11: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1cAko spustím zázračný program v Jave

• Potrebujem mať nainštalovaný Java Development Kit (zadarmo)– http://java.sun.com– inštrukcie na domácu inštaláciu budú na

stránke

• Prostý ľud používa integrované vývojové prostredie– Eclipse od IBM (zadarmo)– NetBeans od Sunu (zadarmo)

,,začínali ako softvérový projekt na MFF UK v Prahe"

– IntelliJ IDEA • najlepšie• za ťažké peniaze

Page 12: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c OOP

• Kedysi: procedurálne programovanie– procedúry, funkcie, moduly (unity)– Pascal, C, PHP...

• Dnes: objektovo orientované programovanie– triedy, inštancie, metódy, interfejsy,

dedičnosť• ,,a mnoho iných odborných termitov"

– Java, C#, Delphi, Python...

Page 13: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c

• prirodzený pohľad• objekty sú všade naokolo

– študent(i), prednášajúci, tabuľa, – počítač, vypínač, strom, – chlap, hrdina, dub, stroj...

Filozofický pohľad na objekty

Page 14: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c

• zamyslime sa nad objektom:– o čom má objekt vedomosti (stav)– aké činnosti dokáže vykonávať

• príklad: vypínač– stav: je zapnutý/vypnutý– činnosti: dokáže sa (= dokážeme ho)

zapnúť a vypnúť

Filozofický pohľad na objekty

Page 15: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c

• príklad: empétrojka– stav:

• má názov• má interpreta• má dĺžku• veľkosť dátového toku (128 kbps, 190

kbps...)

– schopnosť:• dokáže sa prehrať• dokáže sa preniesť do MP3 walkmana™

Filozofický pohľad na objekty

em pé három

Page 16: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c

• trieda: predstavuje koncept, resp. pojem• príklad: pes

• čo majú spoločné všetky psy• aký je koncept ,,psovitosti". Dohodnime sa:

– 4 nohy, chvost, chlpy– breše

Triedy, objekty a inštancie

Komissar Java?

Rum?

Page 17: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c

• trieda: všeobecný abstraktný pojem– Pes: 4 nohy, chvost, chlpy, breše

• objekt: konkrétny hmatateľný objekt spĺňajúci podmienky danej triedy:– Rex, Ariel Hviezdička, Lajka

• trieda je predlohou pre inštancie pojmy objekt a inštancia sa zamieňajú

Triedy, objekty a inštancie

Page 18: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c

Triedy vs objekty

• trieda vs. objekt• definícia vs. príklad

– def: bodom nazývame usporiadanú dvojicu (x, y)...

– príklad: A = (2, 3)

• abstraktný pojem vs. konkrétna vec• slovo v slovníku vs obrázok• tlačivo vs. dáta v ňom

Page 19: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c

• jemne upravíme našu definíciu psa– psa:

• 4 nohy – nie až taká dôležitá vlastnosť– černobyľský pes?

• chvost, chlpy... – rovnako neveľmi dôležité– možno farba

• rasa – porovnaj dve inštancie• vek• ... iné podľa dohody• breše – dôležitá: dva psy môžu brechať inak• ... iné podľa dohody

Triedy

Page 20: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1cTriedy

class Pes {String rasa;float vek;

}

•definujeme vlastný dátový typ Pes•stav (o čom má objekt vedomosti) je reprezentovaný v stavových premenných (alias inštančné premenné, alias fields)

•o tom, ako sa zapíše to, čo objekt dokáže, viac neskôr

• stavové premenné

• každý pes má rasu

• každý pes má vek

Page 21: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1cPôrod psa (vytváranie inštancie)

Pes.javaclass Pes {

String rasa;int vek;

}

PesTester.javaclass PesTester {

public static void main(String[] args) {Pes dunčo;dunčo = new Pes();

}}

nový súbor!

už máme dva...

Page 22: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c

• Pes dunčo;– trieda je užívateľom definovaný dátový

typ

• dunčo = new Pes();– inicializácia premennej– new Pes() = vytvor novú inštanciu

(objekt) typu Pes– priraď ju do premennej dunčo typu Pes.

vlastný dátový typ

Pôrod psa (vytváranie inštancie)

Page 23: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1cPôrod psa (vytváranie inštancie)

Deklaráciu (Pes dunčo;) a inicializáciu (dunčo = new Pes();) vieme zapísať jedným riadkom.

PesTester.javaclass PesTester {

public static void main(String[] args) {Pes dunčo = new Pes();

}}

Page 24: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1cŠtelujeme psa

PesTester.javaclass PesTester {

public static void main(String[] args) {Pes dunčo = new Pes();dunčo.rasa = "slovenský čuvač";dunčo.vek = 8;

System.out.println(dunčo.rasa);System.out.println(dunčo.vek);

}}

slovenský čuvač8

Page 25: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c

Svorka psov

pozorný čitateľ si domyslí class a main(...)Pes dunčo = new Pes();dunčo.rasa = "slovenský čuvač";dunčo.vek = 8;

Pes rambo = new Pes();rambo.rasa = "ťažko povedať";rambo.vek = 3;

System.out.println(dunčo.rasa);System.out.println(dunčo.vek);System.out.println(rambo.rasa);System.out.println(rambo.vek);

slovenský čuvač8

ťažko povedať3

Page 26: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c Psy štekajúce, psy brechajúce

• objekt má stav a schopnosti– výška a váha tvoria stav

• schopnosti sú záležitosti, ktoré sa dajú v ľudskej reči vyjadriť slovesom– štekaj! stoj! (udaj! kusaj!)

• štekanie zapíšeme ako procedúru / funkciu zviazanú s danou triedou

• takáto procedúra / funkcia sa nazýva metóda.

Page 27: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c

Štekajúci pesPes.java

class Pes {String rasa;int vek;

void stekaj() {System.out.println("Haf!");

}}

Page 28: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c

dlhokánsky zoznam parametrov

názov metódy

Analyzujeme štekanie

void stekaj() {System.out.println("Haf!");

}

návratový typ

• v Jave neexistuje delenie na procedúry a funkcie. Všetko je ,,funkcia". ,,Procedúry" vracajú typ void.

,,And the earth was without form and void."

• dve zátvorky () znamenajú metódu bez parametrov.

• Nemožno ich vynechať!

Page 29: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1cŠtekáme psom

Pes.javaclass Pes {

String rasa; int vek;void stekaj() {

System.out.println("Haf!");}

}

// domyslíme si public class a main(...)

Pes dunčo = new Pes();

dunčo.štekaj(); Haf!

Page 30: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c Využívame (psychické) stavy psa

Pes.javaclass Pes {

String rasa; int vek;void stekaj() {

if (vek < 1) {System.out.println("Píp!");

} else {System.out.println("Haf!");

}}

}

• v metódach môžeme veselo využívať stavové premenné.

• môžeme sa na ne dívať ako na ,,globálne" premenné známe z unitov v Pascale

Page 31: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1c Využívame (psychické) stavy psa

Pes.javaclass Pes {

String rasa; int vek;...void pridajRok() {

vek = vek + 1;}

}

• v metódach môžeme veselo využívať stavové premenné.

• môžeme sa na ne dívať ako na ,,globálne" premenné známe z unitov v Pascale

PesTester.javapublic static void main(String[] args) {

Pes pes = new Pes(); pes.vek = 7; System.out.println(pes.vek); pes.pridajVek(); System.out.println(pes.vek);}

78

Page 32: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1cŠtekanie s hodnotou

String stekaj() {if (vek < 1) {

return "Píp!";} else {

return "Haf!";}

}

•príklad metódy vracajúcej hodnotu

návratový typ

return: vráti z metódy danú hodnotu a ukončí beh metódy

Pes dunčo = new Pes();

String štek = dunčo.stekaj();

System.out.println(štek);

Page 33: R óbert Novotný robert.novotny@upjs.sk 28. 9. 2006

paz1cŠtekanie s parametrami

String stekaj(int pocet, boolean nahlas) { ...}

návratový typ

parametre oddelené čiarkou

• deklarácia parametrov presne taká, ako deklarácia premenných