1 / 106

Programozási nyelvek II.

Programozási nyelvek II. Objektumorientált programozás a Java nyelv eszközeivel 2007/08. Objektum, osztály. Objektum : Információkat tárol, és kérésre feladatokat hajt végre. Logikailag összetartozó adatok és rajtuk dolgozó algoritmusok összessége: adatok metódusok

naif
Download Presentation

Programozási nyelvek II.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programozási nyelvek II. Objektumorientált programozás a Java nyelv eszközeivel 2007/08

  2. Objektum, osztály • Objektum: Információkat tárol, és kérésre feladatokat hajt végre. Logikailag összetartozó adatok és rajtuk dolgozó algoritmusok összessége: • adatok • metódusok • Az objektumot üzenetek (kérelmek) által lehet megkérni a feladatok elvégzésére. (Ez egy metódus végrehajtását jelenti.) • Osztály (class): Objektumtípus, amely alapján példá-nyokat, azaz objektumokat hozhatunk létre.

  3. OO nyelvek • Simula-67 • Smalltalk (70’ eleje, XEROX) • Hibrid nyelvek: C++, Turbo Pascal • Java: ’91-96, SUN MicroSystem

  4. A Java főbb jellemzői • C++-- kevesebb nyelvi eszköz, szigorúbb, kötöttebb, kevesebb hibalehetőség • Hordozható kód: egy virtuális gépen (JVM, Java Virtual Machine) futó ún. bájtkód. Nincsenek implementációfüggő elemek. • Rohamos fejlődés kulcsa a JVM beépítése a Web böngészőkbe. • Fejleszthető: • Alkalmazás (application) • Applet • Servlet • JSP (Java Server Pages)

  5. JDK (Java Development Kit) • Fejlesztői és futtató környezet (java.sun.com) Részei: • API (Application Programming Interface) – osztály-könyvtár (a Java egyik ereje a rengeteg kész osztály) • Fordító • Értelmező • Appletnéző • Help, stb • Újabb neve: pl. J2SE (Java 2 Platform, Standard Edition) • Csomag: logikailag összetartozó osztályok. Csomag struktúra – könyvtár struktúra.

  6. public class Hello{ public static void main(String[] args){ System.out.println("Hello World!"); }} • A Hello nevű osztály publikus, más csomagokból is látni lehet. • A main metódus a program belépési pontja. • Publikus • A static kulcsszó azt jelenti, hogy ez osztálymetódus • void: nincs visszatérési értéke, azaz eljárás • String[] args: a parancssor paraméterek • A System egy osztály, amelyben található egy out objektum, melynek a println egy metódusa.

  7. Kiírás, beolvasás import extra.*; //importálni kell azon osztályokat, csomagokat, //amelyekre hivatkozunk ... int egysegar, mennyiseg, ar; //4 b. egész típus egysegar=Console.readInt("Egységár: "); mennyiseg=Console.readInt("Mennyiség: "); ar=egysegar*mennyiseg; System.out.println("Ön " + mennyiseg + " l benzint tankolt összesen " + ar + "Ft értékben"); //a System osztály a java.lang csomagban van //benne, amit nem kell importálnunk

  8. Kiírás, beolvasás • A Console osztály metódusai (függvényei): int readInt() int readInt(String str) Hasonlóan: readLong, readDouble, readChar, readLine • A print és println metódusoknak egyetlen paramé-terük lehet, de az többféle típusú. Ha egyszerre több dolgot is ki szeretnénk íratni, akkor ezeket össze kell adnunk. A Java automatikusan szöveggé konvertál. • Pl. print("a+b=" + a + b) • Pl. print("a+b=" + (a + b))

  9. A program alkotóelemei • Azonosítóban betűk, számjegyek, a _ jel és a valuta szimbólumok szerepelhetnek. Számjeggyel nem kezdőd-het. Akár ékezetes betűt is tartalmazhat (unikód), de ezt inkább kerüljük. • Kulcsszó • Literál: állandó, amely beépül a program kódjába. Lehet: • egész, • valós (pl: 2.3 2. .3), • logikai (true, false), • karakter (pl. '?', '\u1ac5' ), • szöveg (pl. "valami"), • null. Vezérlő szekvenciák: \n \t \" \' \\ pl. println("Egy idézet: \"Talpra magyar!\"")

  10. Java típusok • Primitív típusok: (numerikus vagy logikai) • byte 1 b. -128 .. 127 • short 2 b. -32768 .. 32767 • int 4 b. kb -2*109 .. 2*109 • long 8 b. kb. -1019 .. 1019 • float 4 b. • double 8 b. • char 2 b. • boolean • Referencia típus: olyan mutató, mely egy objektum hivatkozását tartalmazza. Numerikus típusok

  11. Változó deklarálás • Deklaráló utasítás • Adható kezdőérték is (inicializálás). • Pl: int a, b; double x, y = 2.4;

  12. A char is numerikus típus char c; int a; c=65; System.out.println(c); c='A'+1; System.out.println(c); a=c+1; System.out.println(a);

  13. Forrásprogram szerkezete • A forrásállomány (fordítási egység) egy vagy több osztályból állhat. • A forrásállomány neve a main metódust tartalmazó egyetlen publikus osztály neve lesz. • Fordításkor több class kiterjesztésű állo-mány keletkezhet.

  14. import java.utils.*; import extra.*; //Egy vagy több osztály deklarálása, a sorrend mindegy class C1{ ... } class C2{ ... } ... public class Prog{ ... public static void main(String[] args){ ... } ... }

  15. Operátorok • Unáris postfix és prefix operátorok • [ ] tömbképző • . minősítő • ( ) metódus képző • ~, ! ld. később • new példányosító • (típus)kifejezés típuskényszerítő • +, - előjel • ++, -- léptető, pl. i++ vagy ++i mindkettő növeli i értékét, de az első értéke i eredeti, míg a második i megnövelt értéke lesz.

  16. ++, -- int a = 0, b, c; b = ++a; a = 0; c = a++; c = ++b + a++; c = a+++++b; c = a++ + ++b;

  17. Multiplikatív operátorok • *, / • % maradékos osztás • Ha az operandusok egészek, akkor az eredmény is egész, ha legalább az egyik operandus valós, akkor az eredmény is valós. • Pl. int ossz = 2 + 3; double atlag = ossz / 2;

  18. Additív operátorok +, - • Relációs operátorok <, <=, >, >=,==, != • Logikai operátorok • !nem • &, &&és • |, ||vagy • ^kizáró vagy • Bitenkénti operátorok • ~komplementálás • &, |, ^ • (<<,>>,>>>léptetések)

  19. Feltételes operátorok (feltétel) ? kifejezés1: kifejezés2pl. kamat = (fiz>200000)?10:0; • Értékadó operátorok =, +=, -=, *=, /=, %= … Az összetett értékadás szintaktikája: változóoperátor = kifejezés a += b szemantikája: változó = (típus) változóoperátor kifejezésa = a + b ahol típus a változó típusa, amelyet rákényszerí-tünk a jobboldalra.

  20. Értékadó operátorok • Vigyázzunk az összetett ill. a „hagyományos értékadó utasítások nem minden esetben teljesen egyformák! int a=10; a+=5; megegyezik az a=a+5 ut.-al, mindkét oldal int a+=1.5; nem egyezik meg az a=a+1.5 ut.-al, mely szintaktikai hibás, hiszen a jobb oldal double • Lehetséges a többszörös értékadás, pl: a=b=5;

  21. Kiértékelés • Egy kifejezés kiértékelési sorrendjétmeg-határozzák: • zárójel • prioritás • asszociativitás (balról – jobbra vagy jobbról – balra szabály)

  22. Java utasítások • deklaráló; pl. int a; • értékadó; pl. a = b * 2; • postfix és prefix növelő és csökkentő; pl. a++; • metódushívás, pl. System.out.println("Hahó!"); • példányosítás, pl. auto = new Auto("ABC123"); • Programvezérlő, pl. elágazások, ciklusok • üres: ;

  23. Java utasítások • Minden utasítást pontosvessző zár le. • Blokk (vagy összetett utasítás): { ... }

  24. Értékadó utasítás, típuskonverziók • változó = kifejezés; • A kifejezés típusának értékadás szerint kompatíbilisnek kell lenni a változó típusával: • azonos típusok • a jobb oldal szűkebb, akkor implicit bővítő konverzió • a bal oldal byte, short vagy char, a jobb oldal int, és a fordító el tudja dönteni, hogy a jobboldal belefér a baloldalba, akkor implicit szűkítő konverzió. pl. byte b = 100; (az egész literál automatikusan int típusú). • minden más esetben fordítási hiba keletkezik

  25. Értékadó utasítás, típuskonverziók int i;double d; d = i; //implicit bővítő konverzió i = d; //szintaktikai hiba i = (int)d; //explicit szűkítő konv.

  26. Metódushívás • Osztály.metódus(paraméterek) pl. y=Math.sin(x); • Objektum.metódus(paraméterek)pl. hossz=szoveg.length(); • Saját osztályból elég csak a metódus neve: metódus(paraméterek) • Egy metódus lehet eljárás- vagy függvényszerű. • Túlterhelés (overloading): lehet több azonos nevű metódus, melyek a paraméterezésben és/vagy a visszatérési érték típusában térhetnek el egymástól. Pl. float max(float a, float b) illetve int max(int a, int b)

  27. A java.lang.Math osztály • Java API (Application Programming Interface): rengeteg csomag, osztály • Nem kell importálni. • Konstansok: E, PI • Függvények: abs, asin, sin, cos, atan, tan, exp, log, max, min, pow, sqrt, toDegrees, toRadians, random, round…

  28. Java API dokumentum részlet

  29. min • public static int min(int a, int b) • Returns the smaller of two int values. That is, the result the argument closer to the value of Integer.MIN_VALUE. If the arguments have the same value, the result is that same value. • Parameters: • a - an argument. • b - another argument. • Returns: • the smaller of a and b. • See Also: • Long.MIN_VALUE

  30. Szelekciók - if utasítás if(a>b) c=a;else c=b; if(feltétel)utasítás1;elseutasítás2; • feltétel: logikai kifejezés • az else ág elhagyható • a feltétel után nincs pontosvessző • az utasítás esetén viszont van pontosvessző • minden feltétel zárójelben • egy ágban több utasítás: blokk {...} • egymásba ágyazás

  31. Szelekciók - switch utasítás switch(kifejezés){ case érték1: utasítások; break; case érték2: utasítások; break; ... default: utasítások;} • akkor alkalmazható, ha egy kifejezés jól meghatározott, különálló értékeire szeretnénk bizonyos utasításokat végrehajtani • kifejezés: byte, short, int vagy char • a break hatására a switch blokk végére kerül a vezérlés, e nélkül a következő case ágra kerülne a vezérlés • egy case kulcsszóhoz csak egy érték tartozhat

  32. Szelekciók - switch utasítás switch(pont){ case 1: case 2: case 3: System.out.println("Elégtelen"); System.out.println("Készüljön tovább!"); break; case 4: System.out.println("Elégséges"); break; case 5: System.out.println("Közepes"); break; case 6: System.out.println("Jó"); break; default: System.out.println("Jeles"); }

  33. Iterációk - while utasítás while(feltétel)utasítás; • Amíg a feltétel igaz, újból végrehajtja az utasítást, ha hamis, akkor a ciklust követő utasításra lép. • Több utasítás esetén: blokk { ... } Példa: Bankba tesszük a pénzünket kamatozni, és addig tartjuk bent, amíg milliomosok nem leszünk. A program számolja ki, hogy hány évet kell várnunk.

  34. Iterációk - while utasítás import extra.*; public class Milliomos1{ public static void main(String[]args){ final double KAMAT=8.5; //konstans int ev=0; int penz=Console.readInt("Összeg: "); while(penz<1000000){ penz*=1+KAMAT/100; //Ft-ra kerekít ev++; } System.out.println(ev+ " ev mulva leszunk milliomosok!"); } }

  35. Iterációk - do...while utasítás doutasítás;while(feltétel) • Amíg a feltétel igaz, újból végrehajtja az utasítást, ha hamis, akkor a ciklust követő utasításra lép. • Több utasítás esetén: blokk { ... } Példa: Bankba tesszük a pénzünket kamatozni, és addig tartjuk bent, amíg milliomosok nem leszünk. A program számolja ki, hogy hány évet kell várnunk.

  36. Iterációk - do...while utasítás import extra.*; public class Milliomos2{ public static void main(String[]args){ final double KAMAT=8.5; //konstans int ev=0; int penz=Console.readInt("Összeg: "); do{ penz*=1+KAMAT/100; //Ft-ra kerekít ev++; }while(penz<1000000); System.out.println(ev+ " ev mulva leszunk milliomosok!"); } }

  37. Iterációk - for utasítás for(inicializálás; feltétel; léptetés)utasítás; • inicializálás: egy vagy több utasítás vesszővel elválasztva, mely(ek) egyszer hajtódik végre a ciklusmagba való első belépés előtt. Pl. ciklusváltozó deklarálása, inicializálása. A ciklusváltozó típusa tetszőleges. • feltétel: amíg igaz, újból végrehajtja az utasítást, ha hamis, akkor a ciklust követő utasításra lép. • léptetés: egy vagy több utasítás vesszővel elválasztva, mely(ek) a ciklusmag minden egyes lefutása után automatikusan végrehajtódik. Általában a ciklusváltozót szokás itt növelni vagy csökkenteni.

  38. Iterációk - for utasítás A while ciklus egy speciális esetének tekinthető: for(inicializálás; feltétel; léptetés)utasítás; inicializálás;while(feltétel){utasítás;léptetés}

  39. Iterációk - for utasításpéldák for(int i=1; i<=10; i++) System.out.print("*"); for(int i=1; i<=10; i++){ for(int j=1; j<=10; j++) System.out.print("*"); System.out.println();}

  40. for(char c='A'; c<='Z'; c++) System.out.print(c+" "); //(c+' ') esetén a kódokat írja ki for(char n='A',k='a'; n<='Z'; n++,k++) System.out.print(n+" "+k+" "); for(double d=500000; d<=1000000; d*=1.1) System.out.println(d);

  41. Kiugrás a ciklusból • Breakutasítás: az aktuális utasításblokk-ból (pl. ciklusból) való azonnali kiugrást eredményezi. • Continue utasítás: hatására a vezérlés az utasításblokk (ciklus) végére kerül.

  42. Metódusok írása • A metódus fej szintaktikája:[módosítók] visszatérésitípusmetódusneve( [paraméterlista] ) • Néhány példa: • public static int min(int a, int b) • public void vonalhuz() • public void vonalhuz(int hossz) • long fakt(byte n)//csomag szintű láthatóság • Módosítók lehetnek: • public, private, protected: láthatóság • static: osztálymetódus • stb.

  43. Függvény, eljárás • A metódusoknak két fajtáját különböztetjük meg: • Eljárás–szerű metódus: visszatérési értékének típusa void, azaz üres típus, nem tér vissza értékkel • Függvény–szerű metódus: visszatérési értéké-nek típusa valamilyen voidtól különböző típus, azaz igazi értékkel tér vissza • A függvény eljárásként is hívható.

  44. Metódusok jellemzői • Túlterhelés (overloading): lehet két egyforma nevű, de különböző paraméterezésű metódus. pl. vonalhuz() ill. vonalhuz(int hossz) vagy min(int a, int b) ill. min(double a, double b) • Paraméterátadás: érték szerinti. Az aktuális paraméter típusának értékadás szerint kompatíbilisnek kell lennie a formális paraméterrel. • Visszatérés a metódusból: függvény esetén return után kötelezően meg kell adnunk egy értéket.

  45. Metódusok jellemzői • Az osztály metódusainak deklarálási sor-rendje tetszőleges. A main-t elsőnek vagy utolsónak célszerű megadni. • A metódusok nem ágyazhatóak egymásba. • Lehet rekurzív metódusokat is definiálni. • A metódusban –mint egyébként is bármely blokkban– definiálhatunk lokális változót.

  46. public class Metodusok{ public static void vonalhuz(int hossz){ for (int i=1; i<=hossz; i++) System.out.print("-"); System.out.println(); } public static void vonalhuz(){ vonalhuz(50); } public static int abs(int n){ if (n>=0) return n; else return -n; }

  47. public static int jegySzam(int n){ int jszam=0; do{ n/=10; jszam++; }while(n!=0); return jszam; } public static void main(String[] args){ int a=-10; int b=12345678; vonalhuz(); System.out.println(a+" abszolut erteke: "+abs(a)); vonalhuz(40); System.out.println(b+" jegyeinek szama: "+jegySzam(b)); vonalhuz(); } }

  48. A String osztály A String osztályú objektum olyan szöveg tárolására szolgál, amelynek értékét nem akarjuk megváltoztatni. (Ha mégis szeretnénk, akkor ne a String, hanem a Stringbuffer osztályt használ-juk, de ezzel nem foglalkozunk.)

  49. Objektum létrehozása a new operátorral Auto auto; //csak referencia auto = new Auto("GHJ123”); //a konstruktor hívásával létrejön az objektum, //az auto referencia erre mutat vagy Auto auto = new Auto("GHJ123”); Osztályazonosító objektum = new Osztályazonosító(paraméterlista);

  50. String objektum létrehozása String szoveg; //csak referencia szoveg = new String(”Ez a tartalma”); csak String esetén ez egyszerűsíthető: szoveg=”Ez a tartalma”;

More Related