330 likes | 522 Views
Programovanie, algoritmy, zložitosť ÚINF/PAZ1c. R óbert Novotný robert.novotny@upjs.sk 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.
E N D
Programovanie, algoritmy, zložitosťÚINF/PAZ1c 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 PAZ1c
Sylabus a požiadavky na zápočet • Sylabus: • Objektovo orientované programovanie • Jeho použitie v Jave • 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%) 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íva 1. PHP: 1,152* 2. C# : 5,111 3. AJAX: 1,106 4. JavaScript: 4,406 5. Perl: 4,810 6. C: 6,164 7. Ruby, Ruby on Rails: 210 a 54 8. 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 PAZ1c
Ako 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 Hello World! HelloWorld.java public class... HelloWorld.class 010011001011 javac java PAZ1c
Ako 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
Filozofický pohľad na objekty • prirodzený pohľad • objekty sú všade naokolo • študent(i), prednášajúci, tabuľa, • počítač, vypínač, strom, • chlap, hrdina, dub, stroj... rád stínam binárne stromy (a iné objekty) PAZ1c
Filozofický pohľad na objekty • 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úť PAZ1c
Filozofický pohľad na objekty • 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™ em pé három PAZ1c
Triedy, objekty a inštancie • 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 Rum? Komissar Java? PAZ1c
Triedy, objekty a inštancie • 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ú 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
Triedy • 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 stav schopnosti PAZ1c
class Pes { String rasa; float vek; } Triedy • stavové premenné • každý pes má rasu • každý pes má 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 PAZ1c
Pes.java class Pes { String rasa; int vek; } PesTester.java class PesTester { public static void main(String[] args) { Pes dunčo; dunčo = new Pes(); } } Pôrod psa (vytváranie inštancie) nový súbor! už máme dva... PAZ1c
Pôrod psa (vytváranie inštancie) • 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 PAZ1c
Deklaráciu (Pes dunčo;) a inicializáciu (dunčo = new Pes();) vieme zapísať jedným riadkom. Pôrod psa (vytváranie inštancie) PesTester.java class PesTester { public static void main(String[] args) { Pes dunčo = new Pes(); } } PAZ1c
Štelujeme psa slovenský čuvač 8 PesTester.java class 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); } } PAZ1c
Svorka psov slovenský čuvač 8 ťažko povedať 3 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); 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
Pes.java class Pes { String rasa; int vek; void stekaj() { System.out.println("Haf!"); } } Štekajúci pes PAZ1c
Analyzujeme štekanie void stekaj() { System.out.println("Haf!"); } návratový typ názov metódy dlhokánsky zoznam parametrov • 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
Pes.java class Pes { String rasa; int vek; void stekaj() { System.out.println("Haf!"); } } Štekáme psom Haf! PesTester.java // domyslíme si public class a main(...) Pes dunčo = new Pes(); dunčo.štekaj(); PAZ1c
Pes.java class Pes { String rasa; int vek; void stekaj() { if (vek < 1) {System.out.println("Píp!"); } else { System.out.println("Haf!"); } } } Využívame (psychické) stavy psa • 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
Pes.java class Pes { String rasa; int vek; ... void pridajRok() { vek = vek + 1; } } Využívame (psychické) stavy psa 7 8 • 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.java public static void main(String[] args) { Pes pes = new Pes(); pes.vek = 7; System.out.println(pes.vek); pes.pridajVek(); System.out.println(pes.vek); } PAZ1c
String stekaj() { if (vek < 1) { return "Píp!"; } else { return "Haf!"; } } Štekanie s hodnotou návratový typ • príklad metódy vracajúcej hodnotu 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
String stekaj(int pocet, boolean nahlas) { ... } Štekanie s parametrami návratový typ parametre oddelené čiarkou • deklarácia parametrov presne taká, ako deklarácia premenných PAZ1c