Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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

Hasonló előadás


Az előadások a következő témára: "Programozási nyelvek II. Objektumorientált programozás a Java nyelv eszközeivel 2007/08."— Előadás másolata:

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: Objektum: Információkat tárol, és kérésre feladatokat hajt végre. Logikailag összetartozó adatok és rajtuk dolgozó algoritmusok összessége: adatok adatok metódusok 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.) 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 (): Objektumtípus, amely alapján példá- nyokat, azaz objektumokat hozhatunk létre. Osztály ( class ): Objektumtípus, amely alapján példá- nyokat, azaz objektumokat hozhatunk létre.

3 OO nyelvek Simula-67 Simula-67 Smalltalk (70’ eleje, XEROX) Smalltalk (70’ eleje, XEROX) Hibrid nyelvek: C++, Turbo Pascal Hibrid nyelvek: C++, Turbo Pascal Java: ’91-96, SUN MicroSystem 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 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. 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. Rohamos fejlődés kulcsa a JVM beépítése a Web böngészőkbe. Fejleszthető: Fejleszthető: Alkalmazás (application) Alkalmazás (application) Applet Applet Servlet Servlet JSP (Java Server Pages) JSP (Java Server Pages)

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

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

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): A Console osztály metódusai (függvényei): int readInt() int readInt(String str) Hasonlóan: Hasonlóan: readLong, readDouble, readChar, readLine A és 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. 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. Pl. print("a+b=" + a + b) Pl. 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. 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ó Kulcsszó Literál: állandó, amely beépül a program kódjába. Lehet: Literál: állandó, amely beépül a program kódjába. Lehet: egész, egész, valós (pl: ), valós (pl: 2.3 2..3 ), logikai (), logikai ( true, false ), karakter (pl., ), karakter (pl. '?', '\u1ac5' ), szöveg (pl. ), szöveg (pl. "valami" ),. null. Vezérlő szekvenciák: Vezérlő szekvenciák: \n \t \" \' \\ pl. pl. println("Egy idézet: \"Talpra magyar!\"")

10 Java típusok Primitív típusok: (numerikus vagy logikai) Primitív típusok: (numerikus vagy logikai) byte1 b.-128.. 127 byte1 b.-128.. 127 short2 b.-32768.. 32767 short2 b.-32768.. 32767 int4 b.kb -2*10 9.. 2*10 9 int4 b.kb -2*10 9.. 2*10 9 long8 b.kb. -10 19.. 10 19 long8 b.kb. -10 19.. 10 19 float4 b. float4 b. double8 b. double8 b. char2 b. char2 b. boolean boolean Referencia típus: olyan mutató, mely egy objektum hivatkozását tartalmazza. 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 Deklaráló utasítás Adható kezdőérték is (inicializálás). Adható kezdőérték is (inicializálás). Pl: 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 (fordítási egység) egy vagy több osztályból állhat. A forrásállomány neve a metódust tartalmazó egyetlen publikus osztály neve lesz. 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. 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 Unáris postfix és prefix operátorok tömbképző [ ] tömbképző minősítő. minősítő metódus képző ( ) metódus képző ld. később ~, ! ld. később példányosító new példányosító típuskényszerítő (típus)kifejezés típuskényszerítő előjel +, - 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. ++, -- 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;

17 Multiplikatív operátorok *, / maradékos osztás % 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. 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 Additív operátorok +, - Relációs operátorok Relációs operátorok, >=,==, != Logikai operátorok Logikai operátorok nem ! nem és &, && és vagy |, || vagy kizáró vagy ^ kizáró vagy Bitenkénti operátorok Bitenkénti operátorok komplementálás ~ komplementálás &, |, ^ (léptetések) ( >,>>> léptetések)

19 Feltételes operátorok Feltételes operátorok pl. (feltétel) ? kifejezés1: kifejezés2 pl. kamat = (fiz>200000)?10:0; Értékadó operátorok Értékadó operátorok =, +=, -=, *=, /=, %= … Az összetett értékadás szintaktikája: változó operátor = kifejezés 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és szemantikája: változó = (típus) változó operátor kifejezés a = 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! 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 ut.-al, mindkét oldal int megegyezik az a=a+5 ut.-al, mindkét oldal int a+=1.5; nem egyezik meg az ut.-al, mely szintaktikai hibás, hiszen a jobb oldal double 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: 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ét meg- határozzák: Egy kifejezés kiértékelési sorrendjét meg- határozzák: zárójel zárójel prioritás prioritás asszociativitás (balról – jobbra vagy jobbról – balra szabály) asszociativitás (balról – jobbra vagy jobbról – balra szabály)

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

23 Java utasítások Minden utasítást pontosvessző zár le. Minden utasítást pontosvessző zár le. Blokk (vagy összetett utasítás): 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: A kifejezés típusának értékadás szerint kompatíbilisnek kell lenni a változó típusával: azonos típusok azonos típusok a jobb oldal szűkebb, akkor implicit bővítő konverzió a jobb oldal szűkebb, akkor implicit bővítő konverzió a bal oldal vagy, a jobb oldal, és a fordító el tudja dönteni, hogy a jobboldal belefér a baloldalba, akkor implicit szűkítő konverzió. pl. (az egész literál automatikusan típusú). 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 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 A java.lang.Math osztály Java API (Application Programming Interface): rengeteg csomag, osztály Java API (Application Programming Interface): rengeteg csomag, osztály Nem kell importálni. Nem kell importálni. Konstansok: Konstansok: E, PI Függvények: Függvények: abs, asin, sin, cos, atan, tan, exp, log, max, min, pow, sqrt, toDegrees, toRadians, random, round…

27 Java API dokumentum részlet static int Returns the smaller of two int values. min(int a, int b) Returns the smaller of two int values. min static long Returns the smaller of two long values. min(long a, long b) Returns the smaller of two long values. static double Returns of value of the first argument raised to the power of the second argument. pow(double a, double b) Returns of value of the first argument raised to the power of the second argument. static double Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0. random() Returns a double value with a positive sign, greater than or equal to 0.0 and less than 1.0.

28 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

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

30 Szelekciók - utasítás 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 akkor alkalmazható, ha egy kifejezés jól meghatározott, különálló értékeire szeretnénk bizonyos utasításokat végrehajtani : byte, short, int vagy char kifejezés : byte, short, int vagy char a hatására a blokk végére kerül a vezérlés, e nélkül a következő ágra kerülne a vezérlés 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 kulcsszóhoz csak egy érték tartozhat egy case kulcsszóhoz csak egy érték tartozhat

31 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"); } Szelekciók - utasítás Szelekciók - switch utasítás

32 Iterációk - utasítás 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. 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 {... } 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. 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.

33 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!"); } } Iterációk - utasítás Iterációk - while utasítás

34 Iterációk - do...while utasítás do utasí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. 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 {... } 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. 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.

35 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!"); }

36 Iterációk - for utasítás for(inicializálás; feltétel; léptetés) utasítá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. 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. : amíg igaz, újból végrehajtja az utasítást, ha hamis, akkor a ciklust követő utasításra lép. 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. : 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. 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.

37 Iterációk - for utasítás A ciklus egy speciális esetének tekinthető: 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 }

38 Iterációk - for utasítás pé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(); }

39 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);

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

41 Metódusok írása A metódus fej szintaktikája: A metódus fej szintaktikája: [módosítók] visszatérésitípus metódusneve( [paraméterlista] ) Néhány példa: 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: Módosítók lehetnek: : láthatóság public, private, protected : láthatóság : osztálymetódus static : osztálymetódus stb. stb.

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

43 Metódusok jellemzői Túlterhelés (overloading): lehet két egyforma nevű, de különböző paraméterezésű metódus. pl. ill. vagy ill. 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. 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 után kötelezően meg kell adnunk egy értéket. Visszatérés a metódusból: függvény esetén return után kötelezően meg kell adnunk egy értéket.

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

45 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; }

46 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(); } }

47 Osztály készítése

48 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: Objektum: Információkat tárol, és kérésre feladatokat hajt végre. Logikailag összetartozó adatok és rajtuk dolgozó algoritmusok összessége: adatok adatok metódusok 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.) 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 (): Objektumtípus, amely alapján példá- nyokat, azaz objektumokat hozhatunk létre. Osztály ( class ): Objektumtípus, amely alapján példá- nyokat, azaz objektumokat hozhatunk létre.

49 Előnyök, célok A szoftverfejlesztés során az együtt változó részek elkülöníthetők A szoftverfejlesztés során az együtt változó részek elkülöníthetők Projektek közötti újrahasznosíthatóság növelése Projektek közötti újrahasznosíthatóság növelése

50 Konstruktor, példánytag, osztálytag Az objektumot létre kell hozni, és inicializálni kell. Az inicializálást végző metódust konstruktornak nevezzük. Az objektumot létre kell hozni, és inicializálni kell. Az inicializálást végző metódust konstruktornak nevezzük. További fogalmak: További fogalmak: példányváltozó, példányváltozó, példánymetódus, példánymetódus, osztályváltozó (közös változó), osztályváltozó (közös változó), osztálymetódus (objektum létrehozása nélkül is tud dolgozni, csak az osztályváltozókat manipulálhatja) osztálymetódus (objektum létrehozása nélkül is tud dolgozni, csak az osztályváltozókat manipulálhatja)

51 OOP jellemzők Bezárás, az információ elrejtése: az adatokat csak interfészeken (metódusok) keresztül lehet elérni. Bezárás, az információ elrejtése: az adatokat csak interfészeken (metódusok) keresztül lehet elérni. Öröklődés: az utód osztály örökli az ős adatait, metódusait, valamint tartalmazhat újakat, és felülírhat régi metódusokat. Öröklődés: az utód osztály örökli az ős adatait, metódusait, valamint tartalmazhat újakat, és felülírhat régi metódusokat. Polimorfizmus – többalakúság: ugyanarra az üzenetre (kérelemre), azaz metódus hívásra, különböző objektumok különbözőképpen reagál- hatnak. Polimorfizmus – többalakúság: ugyanarra az üzenetre (kérelemre), azaz metódus hívásra, különböző objektumok különbözőképpen reagál- hatnak.

52 Láthatóság Az osztály deklarálásakor megadhatjuk, hogy mely adatokat lehet az objektumon kívülről elérni Az osztály deklarálásakor megadhatjuk, hogy mely adatokat lehet az objektumon kívülről elérni Nyilvános (public): kívülről elérhető Nyilvános (public): kívülről elérhető Védett (protected): hozzáférés csak saját és az örökös metódusok számára Védett (protected): hozzáférés csak saját és az örökös metódusok számára Privát (private): hozzáférés csak saját metó- dusok számára Privát (private): hozzáférés csak saját metó- dusok számára

53 OO program fut vezérlő objektum objektum1 üzenet3 üzenet1 objektum2 objektum3 üzenet2üzenet1 Egy objektumorientált program egymással kommunikáló objektumok összessége, melyben minden objektumnak megvan a feladatköre

54 Példa - Ember osztály és példányai pozíció(x,y) iránySzög megy(táv) elmegy(x,y) fordul(szög) Ember kati andor zsófi

55 Az OOP fontosabb definícióinak összefoglalása Példánydeklaráció (példánytag): Példánydeklaráció (példánytag): A példányonként (objektumonként) helyet foglaló változók a példányváltozók (példányadatok). A példányonként (objektumonként) helyet foglaló változók a példányváltozók (példányadatok). Azon metódusokat, melyek példányadatokon dolgoznak, példánymetódusoknak nevezzük. Azon metódusokat, melyek példányadatokon dolgoznak, példánymetódusoknak nevezzük. Osztálydeklaráció (osztálytag) () Osztálydeklaráció (osztálytag) ( static ) Az osztályváltozó az osztály saját változója, az egyes példányokban nem szerepel, valamilyen közös adatot tárol. Az osztályváltozó az osztály saját változója, az egyes példányokban nem szerepel, valamilyen közös adatot tárol. Az osztálymetódus az osztály saját metódusa, amely csak osztályváltozókon dolgozik. Az osztálymetódus az osztály saját metódusa, amely csak osztályváltozókon dolgozik.

56 Láthatóság Privát (): csak az osztály saját metódusai fér- hetnek hozzá. Privát ( private ): csak az osztály saját metódusai fér- hetnek hozzá. Nyilvános (): minden, az objektummal kapcsolat- ban álló kliens eléri, használhatja. Nyilvános ( public ): minden, az objektummal kapcsolat- ban álló kliens eléri, használhatja. Egy osztály adatai általában privát adatok. Egy osztály adatai általában privát adatok. Egy fordítási egység (java fájl) több osztályt is tartalmaz- hat, de közülük csak egy lehet nyilvános (). Ha valamelyik osztályban szerepel a metódus, akkor az nyilvános kell hogy legyen. Egy fordítási egység (java fájl) több osztályt is tartalmaz- hat, de közülük csak egy lehet nyilvános ( public ). Ha valamelyik osztályban szerepel a main metódus, akkor az nyilvános kell hogy legyen.

57 Egy osztályban ugyanazon a néven dekla- rálható metódus és változó, sőt a metódu- sok túlterhelhetőek. Egy osztályban ugyanazon a néven dekla- rálható metódus és változó, sőt a metódu- sok túlterhelhetőek. A deklarálás sorrendje általában: A deklarálás sorrendje általában: változók változók konstruktorok konstruktorok metódusok metódusok metódus, ha van. main metódus, ha van.

58 A lokális változók eltakarják az ugyanolyan nevű osztály-, illetve példányváltozókat. A lokális változók eltakarják az ugyanolyan nevű osztály-, illetve példányváltozókat. Ha az osztály deklarációjára szeretnénk hivat- kozni, akkor osztályváltozó esetén az osztály nevével, példányváltozó esetén pedig a this referenciával kell azt minősítenünk. Ha az osztály deklarációjára szeretnénk hivat- kozni, akkor osztályváltozó esetén az osztály nevével, példányváltozó esetén pedig a this referenciával kell azt minősítenünk. Változók alapértelmezés szerinti kezdeti értékei: osztályváltozó vagy példányváltozó esetén 0, lokális változó esetén határozatlan. Változók alapértelmezés szerinti kezdeti értékei: osztályváltozó vagy példányváltozó esetén 0, lokális változó esetén határozatlan.

59 Konstruktorok Feladata az objektum operátorral való létrehozásakor annak inicializálása. Feladata az objektum new operátorral való létrehozásakor annak inicializálása. Auto auto = new Auto("GHJ123”); A konstruktor speciális metódus, a következő szabályok érvényesek rá: A konstruktor speciális metódus, a következő szabályok érvényesek rá: Neve kötelezően megegyezik az osztály nevével. Neve kötelezően megegyezik az osztály nevével. Csak a operátorral hívható. Csak a new operátorral hívható. Túlterhelhető. Túlterhelhető. Nincs visszatérési értéke, és nem is void. Nincs visszatérési értéke, és nem is void. Ha az osztályban nem adunk meg explicit módon konstruktort, akkor az osztálynak lesz egy alapértelmezés szerinti (default), paraméter nélküli konstruktora. Ha az osztályban nem adunk meg explicit módon konstruktort, akkor az osztálynak lesz egy alapértelmezés szerinti (default), paraméter nélküli konstruktora. Ha az osztályban létezik egy explicit konstruktor, akkor nem lesz implicit, alapértelmezés szerinti konstruktora. Ha az osztályban létezik egy explicit konstruktor, akkor nem lesz implicit, alapértelmezés szerinti konstruktora.

60 Példa - Raktárprogam Adott egy zöldségraktár, melyben pillanatnyilag egyetlen árut, paradicsomot raktározunk. A raktárba gyakran te- szünk be, illetve veszünk ki onnan paradicsomot. A para- dicsom pillanatnyi egységára 300 Ft, de ez változhat. Készítsünk olyan programot, mely segítségével rögzíteni tudjuk a megfelelő adatokat, és bármikor jelentést tudunk adni a paradicsom aktuális mennyiségéről, egységáráról és értékéről! Végezzük el a következő akciókat: Tegyünk a raktárba 125 kg paradicsomot, aztán vegyünk ki 25 kg-ot, majd szállítsuk le a paradicsom egységárát 210 Ft-ra! Mindhárom akció után írjuk ki, mennyi paradicsom van raktáron és milyen értékben!

61 Osztálydiagram RaktarProgram -aru -nev: String -egysegar: double -menny: double Aru +Aru(aNev:String,aEgysegar:double) +getNev(): String +getEgysegar(): double +setEgysegar(aEgysegar:double) +getMenny(): double +getAr(): double +hozzatesz(aMenny:double) +elvesz(aMenny:double) +toString(): String +main(args)

62 Osztálydiagram RaktarProgram -aru -nev: String -egysegar: double -menny: double Aru +Aru(aNev:String,aEgysegar:double) +getNev(): String +getEgysegar(): double +setEgysegar(aEgysegar:double) +getMenny(): double +getAr(): double +hozzatesz(aMenny:double) +elvesz(aMenny:double) +toString(): String +main(args)

63 class Aru { private String nev; private double egysegar; private double menny; public Aru(String aNev, double aEgysegar) { nev = aNev; egysegar = aEgysegar; menny = 0; } public String getNev() { return nev; } Példányváltozók Konstruktor Osztálydiagram

64 public double getEgysegar() { return egysegar; } public void setEgysegar(double aEgysegar) { if (aEgysegar >= 0) egysegar = aEgysegar; } public double getMenny() { return menny; } public double getAr() { return menny*egysegar; } Osztálydiagram

65 public void hozzatesz(double aMenny) { if (aMenny>0) menny += aMenny; } public void elvesz(double aMenny) { if (aMenny>0 && aMenny<=menny) menny -= aMenny; } public String toString() { return nev+"\tEgysegar: "+egysegar+ "\tMenny: "+menny+"\tAr: "+getAr(); } } Osztálydiagram

66 public class RaktarProgram { public static void main(String [] args){ Aru aru; aru = new Aru("Paradicsom",300); aru.hozzatesz(125); System.out.println(aru); aru.elvesz(25); System.out.println(aru); aru.setEgysegar(210); System.out.println(aru); } } Osztálydiagram Kapcsolat


Letölteni ppt "Programozási nyelvek II. Objektumorientált programozás a Java nyelv eszközeivel 2007/08."

Hasonló előadás


Google Hirdetések