r óbert novotný [email protected] 28. 9. 2006
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 PresentationTRANSCRIPT
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
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
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.
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...
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?"
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í
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
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
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!
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
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...
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
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
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
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?
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
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
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
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
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...
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)
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();
}}
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
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
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.
paz1c
Štekajúci pesPes.java
class Pes {String rasa;int vek;
void stekaj() {System.out.println("Haf!");
}}
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ť!
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!
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
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
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);
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