vod do Javy do OOP Peter Borovansk KAI
Úvod do Javy, do OOP Peter Borovanský KAI I-18 borovan 'at' ii. fmph. uniba. sk
Vývoj programátorských kultúr n Neštruktúrované programovanie n n Štruktúrované programovanie n n základné typy záznamy a množiny Objektovo-orientované programovanie n n n triedno-inštančný model polymorfizmus, dynamická väzba aktorový model Zdroj: Andrej Lúčny, Katedra aplikovanej informatiky FMFI UK
Neštruktúrované programovanie n do počítača prenášame len jednotlivé parametre entity, ktoré môžeme merať v reálnom svete n premenné, hlavný program, podprogramy n základné typy premenných: integer, real, double, boolean, complex, . . . n polia, 1, 2, 3 -trojrozmerné polia n dynamika: dĺžka polí, inak statické štruktúry Zdroj: Andrej Lúčny, Katedra aplikovanej informatiky FMFI UK
Neštruktúrované programovanie public class Gulicka 1 { public static void main(String[] args) { double x=0. 0, y=5. 0, fi=0. 56; int t; for (t=0; t<10; t++) { x += Math. cos(fi); y -= Math. sin(fi); } } } Súbor: Gulicka 1. java
Procedúry, knižnice procedúra - implementácia na inom mieste než použitie procedúra - abstrakcia public class Gulicka 2 { public static double posun. X( double x, double fi) { return x+Math. cos(fi); } public static double posun. Y( double y, double fi) { return y-Math. sin(fi); } n public static void main(String[] args) { double x=0. 0, y=5. 0, fi=0. 56; int t; for (t=0; t<10; t++) { x = posun. X(x, fi); y = posun. Y(y, fi); } } } knižnica - zoskupenie viacerých procedúr Súbor: Gulicka 2. java
Štruktúrované programovanie n n n n entita = štruktúra môže mať viac parametrov predstavuje dodefinovaný zložený typ štruktúra typu záznam (record/struct/class) varianty (case of, union) skladanie štruktúr dynamika: statické aj dynamické štruktúry Zdroj: Andrej Lúčny, Katedra aplikovanej informatiky FMFI UK
Štruktúrované programovanie public class Gulicka 3 { static double x; static double y; public static void main(String[] args) { x=0. 0; y=5. 0; double fi=0. 56; int t; for (t=0; t<10; t++) { posun(fi); } } public static void posun(double fi) { x += Math. cos(fi); y -= Math. sin(fi); } } Súbor: Gulicka 3. java
Objektovo-orientovаné programovanie n entita obsahuje nielen dáta, ale aj kód, ktorý s nimi manipuluje n štruktúra má mať viac atribútov a metód n triedno-inštančný prístup n dynamika: hlavne dynamické štruktúry, statické napr. atribúty triedy Zdroj: Andrej Lúčny, Katedra aplikovanej informatiky FMFI UK
OOP public class Gulicka { double x; double y; public Gulicka(double xx, double yy) { x = xx; y = yy; } public void posun(double fi) { x += Math. cos(fi); y -= Math. sin(fi); } } public class Gulicka 4 { public static void main(String[] args) { Gulicka g = new Gulicka(0. 0, 5. 0); Gulicka h = new Gulicka(1. 0, 4. 0); double fi=0. 56; int t; for (t=0; t<10; t++) { g. posun(fi); h. posun(fi); } } } Súbor: Gulicka 4. java
Triedno-inštančný prístup n každý objekt vzniká ako/je inštancia triedy n trieda definuje jeho atribúty a metódy n zložený typ je obohatený na triedu n štruktúra je obohatená na objekt n z premenných sa stávajú atribúty n z funkcií a procedúr metódy
OOP pojmy n trieda – definícia dát a metód – abstraktný dátový typ objekt – inštancia triedy – jedinečnosť, stav, metódy ukrývanie/encapsulation – public/private - interface dedičnosť – subclass/superclass, viacnásobné dedenie virtuálne a statické metódy polymorfizmus – rôzne správanie objektov na správu n preťažovanie – overloading metód a operátorov n object-base language – bez dedenia n n n
Algorithms+Data Structures = Programs -- N. Wirth Objektové vs. procedurálne myslenie n program ako proces n dekompozícia problému na jednoduchšie problémy (funkcie/procedúry) n kompozícia ich riešení n metodológia – komunikácia medzi procedúrami, špecifikácia divide et conquer (rozdeľ a panuj) - strom o-o myslenie n data (objekt) entita (real. ) sveta n stav n správanie. . . ukrýva algoritmy n n triedy n n reaguje na správy vysiela správy simulujú správanie objekty s rovnakým správaním hierarchia n abstrakcia podobných objektov client/server = web (pavučina) oop prístup vraj lepšie zobrazuje reálny svet zjednodušuje vývoj, údržbu, . . . prerod p-programátora na oo-programátora trvá 12 -18 mes.
OOP jazyky n SIMULA, 1960 n Smalltalk, 1971 -80, Xerox PARC n n triedy, objekty, dedenie, virtuálne metódy, GC všetko sú objekty, dynamicky typovaný, reflexívny, interaktívny C++, 1983, Bell Labs Java, 1990, Sun Microsystems n n n 1991, jazyk Oak (neskôr premenovaný na Java) 1993, Java for WWW 1995, oficiálne predstavenie JAVA n Eiffel, 1995, n C#, J# n Delphi design by contract, viacnásobná dedičnosť, generics Microsoft, . NET James Gosling
”Saying Java is simpler than C++ is like saying K 2 is shorter then Everest”… Java je … n n n vylepšenie C++ inšpirácia: Smalltalk = čistý štýl OOP internet programming language Java nie je: n operačný systém, ale pokúša sa. . . n ľahká. . .
Základné pojmy n n n Java Runtime Environment (jre) Java Development Kit (jdk) Java Virtual Machine (jvm) Documentation (javadoc) druhy programov: n n aplikácie, applety, . . . Java Integrated Environment n n n Eclipse, Net. Beans, …
Vývojové nástroje (JDK) http: //www. javasoft. com/ JDK 1. 0 – nepoužíva sa, JDK 1. 1 – stará Java (zmeny v jazyku), JDK 1. 2 – Java 2 SDK (nové knižnice, Swing, …), JDK 1. 3 – zmeny v API, rýchlejšia, JDK 1. 4 – stabilná, JDK 1. 5 – jazykové úpravy, generics, … JDK 1. 6 – XML web servisy, Java. DB, monitoring
5 pravidiel OOP (Alan Kay) n n všetko je objekt program je hŕba objektov oznamujúcich si, čo robiť, posielaním si správ n každý objekt má svoj kus pamäte n každý objekt má typ n objekty rovnakého typu môžu prijímať rovnaké správy
Java vs. C++ Typy: Java: boolean, char, byte, short, int, long, float, double reprezentácia základných typov je definovaná jazykom, nie implementáciou char je 16 bit, Unicode Java nemá union typ (record-case) Java nemá neinicializované lokálne premenné Pointre: Java nemá pointre, pointrovú artimetiku Java má implicitný garbage collector Templates (generics): Java od verzie 1. 5
Java vs. C++ Polia: C++ : pointre a polia splývajú, chýba range checking Predávanie argumentov: Java: argument-by-value, neexistuje by-reference Operátory: Java: Overloading operátorov je zakázaný Riadenie výpočtu: Java: neexistuje goto Správa výnimiek
trieda Prvy je definovana v súbore Prvy. java Prvý hlavička hlav. programu public class Prvy { public static void main(String[] args) { System. out. println("Ahoj"); } } C: borovanjava>javac Prvy. java C: borovanjava>java Prvy Ahoj C: borovanjava> volanie kompilátora volanie interpretera Súbor Prvy. java
Java nemá predprocesor a la C++ nehľadajte #ifdef … #endif Komentáre public class Komentare { // Píšte komentáre, sú zdravé ! public static void main(String[] args) { int ucet; int pocet. Piv = 5; ucet = pocet. Piv * 25; // typický komentár System. out. println("Platis = " + ucet); ucet = pocet. Piv * /* 25 */ 35; /* 25 je za desinku */ System. out. println("Platis = " + ucet); } } Platis = 125 Platis = 175 Súbor Komentare. java
Základné celočíselné typy neexistuje neznamienková verzia unsigned n n byte java. lang. Byte [8 bitov] -128. . 127 short java. lang. Short [16 bitov] -215. . 215 -1 int java. lang. Integer [32 bitov] -231. . 231 -1 long java. lang. Long [64 bitov] MIN_VALUE. . MAX_VALUE
Základné typy Znaky (Unicode, 16 bitov) n char java. lang. Character Reťazce n String java. lang. String Reálne čísla n n float java. lang. Float double java. lang. Double Logické hodnoty n boolean java. lang. Boolean
Konštanty n n n Desiatkové: 32, 12, . . Osmičkové: 0126, 015, 01 Šestnástkové: 0 x 56, 0 x 1, 0 x. CD, . . . Long int: 123456789123 L Znakové: ’A’, ’%’, ’u 00 E 1’, ’ n n n n’ (nový riadok), ’t’ (tabulátor), . . . Reťazcové: ” toto je retazec v Jave” Logické typu boolean: true, false Reálne float, double: 15. 8, 7 E 23, 3. 14 F, . . .
Deklarácia premenných a konštánt int char float int final int … Hint pre pascalistov: typ var 1, … , varn; namiesto var 1, … , varn: typ; i, j; c; f, g; j = 1; MAX = 10; // definícia konštanty MAX = 11; // chyba public class Konstanta { public static final int MAX = 10; } public static void main(String[] args) { System. out. println("MAX = " + MAX); System. out. println("MAX = " + Konstanta. MAX); } final typ var 1, … , varn; namiesto const var 1, … , varn: typ; MAX = 10 Súbor Konstanta. java
java. io public class Vystup { public static void main(String[] args) { int i = 4; int j = 7; System. out. print("Toto je hodnota premennej i: " + i + "n"); System. out. println("Toto je premenna i: "+i+" a toto j: "+j); System. out. println("Sucet nie je " + i + j); System. out. println("Sucet je " + (i + j)); } Toto je hodnota premennej i: 4 } Toto je premenna i: 4 a toto j: 7 Sucet nie je 47 Sucet je 11 Súbor Vystup. java
if-then-else • nepíšte then • zátvorkujte boolean výraz • používanie { } nie je chyba • ; sa pred else píše if (booleovský výraz) príkaz; else príkaz; if (d > 0) x = d*d; else x = d/2; if (i > 0) if (j > 0) { j++; i--; } else i++; // { } zložený príkaz, begin-end podmienený výraz // príklad: max = (i > j) ? i : j; // else patrí k najvnútornejšiemu if (booleovský výraz)? výraz 1: výraz 2
= namiesto : = == namiesto = Priradenie, porovnanie float f; f = 3. 14; // definícia // inicializácia/priradenie int j, i = 5; boolean b = true; // definícia s inicializáciou if (i == (j = 5)) System. out. println(i); // priradenie a porovnanie if (b = (j == 5)) System. out. println(i); // porovnanie a priradenie i = j = 7; // j = 7; i = 7; i += j; // i = i + j
do-while je negáciou repeat-until cykly while (booleovský výraz) príkaz; while (N > 0) { N = N-1; A = A+A; } while (N-- > 0) { A = A+A; } while (N-- > 0) A += A; do príkaz; while (booleovský výraz); do { A += A; } while (N-- > 0); for (výraz štart; výraz stop; výraz iter) príkaz; for(int i=0; i<N; i++) { … } for(i=1; i<=N; i++) { … } for(i=N; i>0; i--) { … } chyba: for(int i=1, sum=0; i<=10; i++)
break, continue break - vyskočenie z cyklu (označeného návestím) continue - na začiatok cyklu (označeného návestím) int i = 0; for(int i = 0; i<N; i++) { while (i++ < N) {. . . if (found) break; if (zly) continue; // zober ďalší }. . . // našiel som. . . } navestie: for (int n = 0; n < 4; n++) { for (int m = 0; m < 2; m++) { if (n == 2 && m == 1) continue navestie; System. out. print(n + "-" + m + " "); } }
nezabudnite na break !!! switch, return switch (citaj. Znak()) { case 'a' : case 'b' : case 'c' : System. out. print("1"); break; case 'd' : System. out. print("2"); break; default : System. out. print("3"); break; } return výraz; // result výraz;
• na začiatok použijeme modul Input. java • nachádza sa v 01_java. zip Vstup public class Vstup { public static void main(String[] args) { Input in = new Input(); System. out. println("Vase meno: "); final String meno = in. next. Line(); System. out. println("Vas vek: "); final int vek = in. next. Int(); } } Vase meno: peter Vas vek: 12 1 2 3 4 5 sucet: 15 int suma = 0; while (in. has. Next. Int()) suma += in. next. Int(); System. out. println("sucet: "+suma); Súbor Vstup. java
Fibonacci public class Fibonacci { } public static void main(String[] args) { Input in = new Input(); System. out. println("Zadaj N: "); int N = in. next. Int(); int a = 1; int b = 0; while (N-- > 0) { System. out. println(b); a = a + b; b = a - b; } } Zadaj N: 10 0 1 1 2 3 5 8 13 21 34 Súbor Fibonacci. java
Pascalov trojuholník Napíšte program, ktorý spočíta a vypíše kombinačné čísla v tvare približne: 1 public class Pascal { 1 1 1 2 1 public static void main(String[] args) { 1 3 3 1 for(int n=0; n < 6; n++) { for(int k=n; k<5; k++) System. out. print("t"); System. out. print("1"); for (int k = 0, a=1; k <n; k++) { a = a*(n-k)/(k+1); // C(n, k+1) = C(n, k)*(n-k)/(k+1) System. out. print("tt" + a); } System. out. println(); } } } Súbor Pascal. java
- Slides: 34