Java Programozás 5. Ea: OOP alapok. Abstract Javaságok

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Java Programozás 5. Ea: OOP alapok. Abstract Javaságok"

Átírás

1 Java Programozás 5. Ea: OOP alapok Abstract Javaságok 89/1 B ITv: MAN

2 89/2

3 OOP alapelvek Adatok és a hozzájuk kapcsolódó tevékenységek egységbe zárása (encapsulation) Alapegység: osztály, melynek építőkövei: adattagok, metódusok. Információ rejtés: Egy objektum adatai a külvilág számára hozzáférhetetlenek. Egy objektum a külvilággal csak az interfészén keresztül tarthatja a kapcsolatot. (Interface: a külvilág számára elérhető módszerek metódusok együttese.) A módszerek implementációja rejtett. Öröklődés (inheritance): az osztályok egy részét már meglévő osztályok továbbfejlesztésével hozzuk létre, úgy, hogy további adattagokkal, illetve metódusokkal bővítjük. Többalakúság (polimorphism): A származtatott osztályokban lehetnek ugyanolyan elnevezésű, de más tevékenységű metódusok, mint az ős osztályban => áttekinthető kód, nem kell az 89/3 elnevezéseket variálnunk.

4 További OOP alapfogalmak Osztály: Objektumok közös tulajdonságait definiálja. Programozástechnika szempontból egy típus. Építőkövei: adattagok (attribútumok, jellemzők, tulajdonságok), metódusok (műveletek, viselkedés). Objektum: Egy osztály egy működőképes példánya. Egy adott osztályban definiált tulajdonságokkal tetszőleges számú objektum példányosítható. Minden objektum természeténél foga különbözik az összes többitől. Egy adott osztályból példányosított valamennyi objektumnak ugyanolyan lehetséges viselkedési módjai vannak, de mindnek saját állapota van. Üzenet: Az objektummal való kommunikáció módja. A módszerek (metódusok) aktivizálását jelenti. 89/4

5 89/5

6 Öröklődés Fogalma: új osztály létrehozása (gyermek) egy már meglévő osztályt (szülő) felhasználva (kód újrafelhasználás). A gyermek osztály örökli a szülő osztály összes tagját, - kivéve a konstruktorokat és az inicializáló blokkokat -, definiálhat új tagokat és módosíthat örökölt tagokat. 89/6

7 Öröklődés Gyakran előfordul, hogy egy program különböző osztályai azonos adattagokkal és metódusokkal rendelkeznek Példa: Neptun felhasználók 89/7

8 Öröklődés Az előző példában minden osztályban szerepel három azonos adat: 89/8 név, neptunkód, jelszó Minden osztályban szerepel a: Bejelentkezés() metódus Az osztályok ezen kívül rendelkeznek csak rájuk jellemző adattagokkal és metódusokkal is Az adattagok és metódusok ismétlődése problémákat okozhat: pazarlás metódusoknál biztosítani kell az azonos működést a módosításokat több helyen át kell vezetni. A megoldás: öröklődés

9 Öröklődés A közös adatok és metódusok egy ős osztályba gyűjthetők. Ennek neve legyen NeptunFelhasznaló Az egyes felhasználó osztályok ezek leszármazottjaiként deklarálhatók. A leszármazottak öröklik a közös tagokat. Ezzel kód megosztás jön létre: a leszármazottak használhatják a szülő osztály metódusait. 89/9

10 Öröklődés Az öröklődés jele: A nyíl a leszármazott osztály felől az ősosztály felé mutat 89/10

11 Öröklődés Jellemzői: Egyszeres öröklés: egy gyermeknek csak egy szülője lehet. (C++-ban többszörös) Egy szülőnek több gyermeke lehet Egy gyermek szintén lehet szülő Egyetlen korlátozás: egy osztály még közvetett módon sem lehet saját maga őse Elnevezések: Ősosztály, szülő (super class, base class) Leszármazott, gyermek (subclass, derivered class) 89/11

12 Öröklődés Megadása: class osztálynév extends ősosztály { 89/12 Ha nem adunk meg szülő osztályt, akkor automatikusan a java.lang.object osztály a szülő. Az Object tehát minden osztály őse, tagjait minden osztály örökli! A gyermek osztály örökli szülője tagjait, de: a private tagokhoz nem fér hozzá, a félnyilvános tagokhoz pedig csak akkor, ha ugyanabban a csomagban van (ezeket a szülő osztály hozzáférhető tagjainak segítségével kezelheti) a protected, public tagokhoz közvetlenül hozzáfér.

13 Konstruktorok az öröklődés során A konstruktor nem öröklődik. Mind az ős osztály, mind a leszármazott osztály rendelkezhet konstruktorral (akár többel is). Egy leszármazott objektum példányosításánál tisztázni kell: 89/13 A konstruktorok végrehajtási sorrendjét Azt, hogy hogyan választhatjuk ki az ősosztály konstruktorai közül a végrehajtandót Végrehajtási sorrend: először mindig az ősosztály, majd a leszármazott osztály konstruktora hajtódik végre. A pontos sorrend: Az ős osztály adattagjainak inicializálása Az ős osztály konstruktorának végrehajtódása A gyermek osztály adattagjainak inicalizálása A gyermek osztály konstruktorának végrehajtódása

14 Konstruktorok az öröklődés során Az ős osztály konstruktorának kijelölése: 89/14 A gyermek osztály első sorában szerepelhet egy super(paraméterek) konstruktorhívás. A paraméterlistának az ős osztály valamelyik konstruktorára illeszkednie kell. Ha ilyen hívás nem szerepel a gyermek osztály konstruktorában, akkor egy implicit super() hívással kezdődik a konstruktor végrehajtása. Következmények: ha a gyermek osztálynak van olyan konstruktora, amelyben nincs explicit ős konstruktor hívás, a szülő osztálynak kell legyen paraméter nélküli konstruktora. Ha a gyermek osztálynak csak implicit konstruktora van, az is az ős osztály paraméter nélküli konstruktorát hívja meg.

15 public class Szemely { String nev; int kor; Dolgozo d = new Dolgozo("tanár", 550); 3 public Szemely(String nev, int kor){ this.nev = nev; this.kor = kor; public Szemely(){ 1 this("kis Béla", 25); 4 2 public class Dolgozo extends Szemely { String munkakor; int fizetes; public Dolgozo(String munkakor,int fizetes){ super(); this.munkakor = munkakor; this.fizetes = fizetes; 89/15

16 Konstruktorok az öröklődés során public class Szemely { String nev; int kor; Szemely()?? NO! 3 Szemely(){ nev = null; kor = 0; 2 public class Dolgozo extends Szemely { String munkakor; 4 int fizetes; public Dolgozo(String munkakor,int fizetes){ this.munkakor = munkakor; this.fizetes = fizetes; 1 Dolgozo d = new Dolgozo("tanár", 550); 89/16

17 Konstruktorok az öröklődés során public class Szemely { String nev; int kor; public Szemely(String nev, int kor){ this.nev = nev; this.kor = kor; Szemely()?? NO! 2 1 public class Dolgozo extends Szemely { String munkakor; int fizetes; 89/17 public Dolgozo(String munkakor,int fizetes){ this.munkakor = munkakor; this.fizetes = fizetes;

18 Konstruktorok az öröklődés során public class Szemely { String nev; int kor; {nev = "Kis Béla"; kor = 25; public Szemely(String nev, int kor){ this.nev = nev; this.kor = kor; Szemely()?? NO! 2 1. Adattagok deklarálása 2. Inicializálás 3. Konstruktor végrehajtás 4. A változó referenciájának beállítása 1 public class Dolgozo extends Szemely { String munkakor; int fizetes; 89/18 public Dolgozo(String munkakor,int fizetes){ this.munkakor = munkakor; this.fizetes = fizetes;

19 Öröklődés Adattagok öröklése: A leszármazott örökli az összes adattagot, és új adattagokat is definiálhat Definiálhat egy örökölt adattaggal megegyező nevű adattagot is, ilyenkor az örökölt tagot elrejti (hide) Az elrejtett tagra a super kulcsszóval hivatkozhatunk: super.adattag super.super.adattag hívás nem lehetséges! 89/19

20 public class Szemely { String nev; int fizetes; public Szemely(String nev, int fizetes){ this.nev = nev; this.fizetes = fizetes; Adattagok öröklődéskor public class Dolgozo extends Szemely { int fizetes; public Dolgozo(String nev, int fiz1, int fiz2){ super(nev, fiz1); fizetes = fiz2; public class OuterP { public static void main(string args[]) { Dolgozo d = new Dolgozo("Béla", 550, 200); System.out.println(d.nev+" - "+d.fizetes); Szemely sz = d; System.out.println(sz.nev+" - "+sz.fizetes); 89/20

21 public class Szemely { String nev; int fizetes; public Szemely(String nev, int fizetes){ this.nev = nev; this.fizetes = fizetes; Adattagok öröklődéskor public class Dolgozo extends Szemely { int fizetes; public Dolgozo(String nev, int fiz1, int fiz2){ super(nev, fiz1); fizetes = fiz2; public int getszemfiz(){ return super.fizetes; public static void main(string args[]) { Dolgozo d = new Dolgozo("Béla", 550, 200); System.out.println(d.nev+" - "+d.fizetes); 89/21 System.out.println(d.getSzemFiz());

22 Öröklődés Metódusok öröklése A leszármazott örökli az összes nem private metódust és újakat is definiálhat, valamint megváltoztathat örökölt metódust 89/22 Esetek: 1. Új metódus: Az örökölt metódusoktól eltérő nevű metódus definiálása 2. Új metódus örökölt metódus túlterhelésével (overloading): az egyik örökölt metódussal megegyezik a név, de eltér a paraméter szignatúra. 3. Példányszintű metódus felüldefiniálása (override): az egyik örökölt példányszintű metódussal megegyezik a szignatúra és a visszatérési érték típus Paraméter szignatúra: A formális paraméterek száma és típus-sorrendje. A visszatérési érték típusa ebből a szempontból közömbös.

23 Öröklődés 89/23 Metódusok öröklése Esetek (folytatás): 4. Örökölt metódus elrejtése új metódussal (hide): az örökölt osztályszintű metódussal megegyező szignatúra és visszatérési érték. 5. Hibás definiálás: Az örökölt metódustól gyengébb hatáskörű metódus (private < félnyilvános < protected < public) Az örökölt metódussal azonos szignatúrájú de eltérő visszatérési értékű metódus (hibás felüldefiniálás vagy elrejtés) Az örökölt osztályszintű metódussal azonos szignatúrájú példányszintű metódus Az örökölt példányszintű metódussal azonos szignatúrájú osztályszintű metódus final módosítójú metódussal azonos szignatúrájú metódus

24 Öröklődés Egy osztályhoz több metódus is tartozhat azonos névvel, de különböző paraméterszignatúrával. A metódus hívásakor a fordítóprogram az aktuális paraméterek szignatúrája alapján dönti el, hogy melyik metódust kell alkalmaznia. Ha egy megfelelőt sem talál, vagy ha többet is talál hibajelzést ad. Egy osztályhoz úgy tartozhat több azonos nevű metódus, hogy: az osztályban definiálhatók azonos nevű metódusok ugyanilyen nevű metódusokat örökölhet is az osztály A saját és örökölt metódusok együttesére érvényes az overloading szabályrendszere 89/24

25 Metódusnév túlterhelés public class Szemely { String név; int fizetés; int getfizetés(){ return fizetés; void fizetéstemel(int fizetés){ this.fizetés += fizetés; public class Alkalmazott extends Szemely { String beosztás; void fizetéstemel(){ fizetés += 20000; void fizetéstemel(alkalmazott a){ if (a.getfizetés() > fizetés) fizetés = a.getfizetés(); Az Alkalmazott osztályban a fizetéstemel metódus három különböző paraméterszignatúrával is használható. 89/25

26 Metódusnév felüldefiniálás public class Alkalmazott { String név; int nyelvekszama; public int potlek() { return nyelvekszama*20000; public class Fonok extends Alkalmazott { int beosztottakszama; public int potlek() { return super.potlek() + beosztottakszama*10000; Az ősosztály potlek() metódusának meghívása 89/26

27 Teszt 1. Helyes vagy hibás az alábbi kód? public class Komplex { int x, y, z; Komplex(int x, int y, int z){ this(x, y, z); 89/27

28 Teszt 2. Mire van lehetőségünk az utód osztályban egy osztály örökítésekor? Az adatok láthatóságát szűkíthetjük Az ősosztály adatait felüldefiniálhatjuk Új metódusokat deklarálhatunk Az ős osztály metódusait felüldefiniálhatjuk 89/28

29 Teszt 3. Névegyezőség esetén egy konstruktorban milyen minősítővel hivatkozhatunk az osztály adattagjaira? this() super. super() this. 89/29

30 Teszt 4. Mi a konstruktor? Osztályt definiáló metódus Öröklődést beállító metódus Objektumot létrehozó metódus Példányosításkor meghívódó metódus 89/30

31 Teszt 5. Milyen típusú konstruktor van az osztályban? public class Alma { String nev; Alma (){ Implicit Explicit 89/31

32 A kötés (binding) fogalma A fordítóprogram elsődleges feladata, hogy az általunk megírt forráskódot elolvassa, elemezze, megértse. Ezen elemzés közben listát vezet a kód olvasása során felismert változókról, konstansokról, típusokról, függvényekről. Az egyes programozási elemekhez rendelt nevek alapján képes felismerni melyik programsorban melyik, korábban definiált elemre hivatkozunk. Kötés-nek nevezzük azt a folyamatot, amikor a fordítóprogram a forráskód fordítása során felfedezett metódushívásokhoz konkrét metódust rendel. 89/32

33 A kötés (binding) fogalma A fordítóprogram elsődleges feladata, hogy az általunk megírt forráskódot elolvassa, elemezze, megértse. Ezen elemzés közben listát vezet a kód olvasása során felismert változókról, konstansokról, típusokról, függvényekről. Az egyes programozási elemekhez rendelt nevek alapján képes felismerni melyik programsorban melyik, korábban definiált elemre hivatkozunk. Kötés-nek nevezzük azt a folyamatot, amikor a fordítóprogram a forráskód fordítása során felfedezett metódushívásokhoz konkrét metódust rendel. 89/33

34 A kötés (binding) fogalma A kötés típusai: 89/34 Korai kötés: a fordítóprogram egy objektum statikus típusa, vagy az aktuális paraméterek statikus típusa alapján az azonosítást egyértelműen el tudja végezni. Egyedi metódusnevek Egy osztályon belül azonos nevű függvények, eltérő paraméter szignatúrával. Késői kötés: a fordítóprogram az azonosítást nem tudja elvégezni, a kötés csak futásidőben jöhet létre: Felüldefiniált metódusok, ahol metódus hívásánál dönteni kell, hogy az örökölt vagy a saját változat hívódjon meg. A döntés alapja a hivatkozás dinamikus típusa. Mivel a dinamikus típus fordítási időben nem ismert, a felüldefiniált metódusok közötti választást futásidőre kell halasztani.

35 Statikus és dinamikus típus Egy változónak van statikus és dinamikus típusa. Egy változó statikus típusa az, amelyet a deklarációjában megadtunk 89/35 Ez a változó teljes élete alatt változatlan Ez határozza meg, hogy milyen műveleteket végezhetünk a referenciával hivatkozott objektummal Egy változó dinamikus típusa az általa éppen hivatkozott objektum tényleges típusa. Csak olyan típus lehet, amely rendelkezik ugyanazokkal az adatokkal és műveletekkel, mint a statikus típus, ezért a változó dinamikus típusa csak a statikus típus vagy annak leszármazottja lehet. A dinamikus típus a program futása során bármikor változhat

36 Statikus és dinamikus típus típus név érték Alma 89/36 Gyümölcs Körte Egy gyümölcs példány lehet Gyümölcs, Alma, vagy Körte típusú. Alma példány csak Alma típusú lehet. Körte példány csak Körte típusú lehet. Egyszerű példa: miből mi lehet? Gyümölcs a, b; a = new Alma("Jonatán"); Gyümölcs a Alma Jonatán b = new Gyümölcs("Kiwi"); Gyümölcs b a = b; Gyümölcs a Gyümölcs a Gyümölcs b Gyümölcs Kiwi Gyümölcs Kiwi a = new Körte("Vilmos"); Gyümölcs a Körte Vilmos Deklarálás Statikus értékadás Példányosítás Dinamikus értékadás Értékadás Dinamikus értékváltás Újra példányosítás Dinamikus értékadás

37 Statikus és dinamikus típus típus név érték Gyümölcs Mi történik? Gyümölcs a = new Körte("Vilmos"); Gyümölcs a Körte Vilmos Alma Körte Körte c = new Körte("Vilmos"); Körte c Körte Vilmos Egy gyümölcs példány lehet Gyümölcs, Alma, vagy Körte típusú. Alma példány csak Alma típusú lehet. Körte példány csak Körte típusú lehet. a = c; c = a; A Gyümölcs típusú statikus változóba berakunk egy Körte típusú statikus változót! Működik? Igen, mert a Gyümölcs lehet Körte A Körte típusú statikus változóba beraknánk egy Gyümölcs típusú statikus változót! Működik? Nem, mert a Körte csak Körte lehet! 89/37 Értékadáskor változik a referencia (a dinamikus típus), de csak olyan érték adható át, amelynek a statikus típusa megfelelő!

38 Statikus és dinamikus típus típus név érték Gyümölcs Mi történik? Gyümölcs a = new Körte("Vilmos"); Gyümölcs a Körte Vilmos Alma Körte Körte c = new Körte("Vilmos"); Körte c Körte Vilmos Egy gyümölcs példány lehet Gyümölcs, Alma, vagy Körte típusú. Alma példány csak Alma típusú lehet. Körte példány csak Körte típusú lehet. c = (Körte)a; Ha értékadáskor a jobb oldalon álló dinamikus típus megegyezik a bal oldalon álló statikus típussal, akkor konvertálással megoldható az értékadás. 89/38 Értékadáskor változik a referencia (a dinamikus típus), de csak olyan érték adható át, amelynek a statikus típusa megfelelő!

39 Típuskonverzió referenciákra Automatikus konverzió: Akkor lehetséges, ha a konvertálandó statikus típusa azonos típus az eredmény statikus típusával vagy annak leszármazottja. (Biztos, hogy a konvertálandó dinamikus típusa is leszármazott vagy ugyanaz.) Kikényszerített konverzió: Gyümölcs a = new Körte("Vilmos"); Akkor alkalmazható, ha a konvertálandó statikus típusa nem azonos vagy nem leszármazottja az eredmény statikus típusának, de a dinamikus típusa igen. Az instanceof operátor a referencia dinamikus típusát vizsgálja, segítségével megvizsgálhatjuk a konverzió előtt, hogy végbemehet-e a konverzió. 89/39 Gyümölcs a = new Körte("Vilmos"); Körte c = new Körte("Vilmos"); System.out.println(a instanceof Körte); true

40 s 89/40

41 A final minősítésű adattagok A final minősítő többféle célra is használható a Java nyelvben. Jelentése mindig "valami olyasmi, ami később nem változtatható meg". Final adattagok: 89/41 Deklaráció: final típus azonosító=inicializáló_kifejezés; Az inicializáló kifejezés csak olyan elemeket tartalmazhat, amelyek az addigi deklarációk ismeretében feldolgozhatók. public class Fém { String név; final double tömeg; Fém(String név, double tömeg){ this.név = név; this.tömeg = tömeg; Miden példányosítás során végrehajtódik, tehát a változó értéke objektumként egyedi lehet. Egyetlen metódus sem változtathatja meg az értékét.

42 A final minősítésű adattagok Static final adattagok: deklaráció: static final típus azonosító = inicializáló_kifejezés; Az inicializáló kifejezések csak konstansokat és olyan static adattagokat tartalmazhat, amelyek már deklaráltak. Csak egyszer, az osztály inicializálása során hajtódik végre, tehát a változó értéke az osztály miden példánya számára ugyanaz. Egyetlen metódus sem változtathatja meg az értékét. public class Személy { String név; static final int minimálbér = ; 89/42

43 A final minősítésű metódusok Final metódus: Egy metódus is kaphat final minősítést. A final minősítésű metódust nem definiálhatja felül egyetlen leszármazott osztály sem. Szerepe, hogy megakadályozza bizonyos viselkedés formák megváltoztatását, ha az veszélyezteti a helyes működését. public class Kör { int sugár; final double terület(){ return sugár*sugár*math.pi; 89/43

44 Absztrakt metódus és osztály Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus szükséges lesz a leszármazottakban, de még nem lehet megadni az implementációját. Ezért a Java nyelv megengedi törzs nélküli metódus definiálását. Az ilyen metódust az abstract minősítővel kell ellátni. Ha az osztály tartalmaz absztrakt metódust, az osztályt is az abstract minősítővel kell ellátni. abstract class Termek{ private String nev; 89/44 Termek(String nev){ this.nev = new String(nev); abstract void kiir();

45 Absztrakt metódus és osztály Az absztrakt metódusokra vonatkozó szabályok: Absztrakt egy metódus, ha nincs törzse, megvalósítást csak a felüldefiniálás során kap. Absztrakt metódusnak nem lehet a módosítója a private, final, static hiszen az ilyen módosítókkal ellátott metódusokat nem lehet felüldefiniálni! Absztrakt egy osztály, ha van legalább egy absztrakt metódusa Absztrakt osztályt nem lehet példányosítani Egy absztrakt osztály arra szolgál, hogy ős osztálya legyen további osztályoknak A leszármazott osztály(ok) feladata az absztrakt metódusok felüldefiniálása Absztrakt osztály gyermeke lehet absztrakt, ha nem minden absztrakt metódust valósít meg 89/45 Az absztrakt osztály is használható referencia statikus típusaként

46 Absztrakt metódus és osztály Az absztrakt metódusok szerepe: rögzít egy tervezési döntést (szükséges metódusok halmaza), kényszeríti a leszármazott osztály(ok) programozóját az így meghatározott metódusok definiálására. Hibalehetőségek: törzs nélküli metódus, abstract minősítő nélkül, absztrakt metódust tartalmazó osztály abstract minősítő nélkül. 89/46

47 Teszt 6. Mely kulcsszavak szerepelnek egy visszatérési értékkel nem rendelkező, a leszármazott osztályban felülírható, védett példánymetódus fejében? static final void private abstract 89/47

48 Teszt 7. Mely kulcsszók szerepelhetnek egy osztálydefiníció fejrészében? public private abstract final static 89/48 extends

49 Teszt 8. Helyes vagy hibás az alábbi kód? public abstract class Komplex { int x, y, z; abstarct Komplex(int x, int y, int z){ this.x = x; this.y = y; this.z = z; 89/49

50 Interfész Technikailag: 89/50 Egy olyan osztályféle, amely csak absztrakt metódusokat és konstansokat tartalmazhat, tehát nem példányosítható. Nem örökléssel használjuk fel mint az absztrakt osztályokat, hanem implementálással. Implementálás: megvalósítjuk az interfészben deklarált metódusokat. Egy osztály implementálhat tetszőleges számú interfészt. Tervezésileg: Egy viselkedési leírás, amelyet egy osztály megvalósít. Lehetővé teszi, hogy ne egy konkrét megvalósításhoz (osztályhoz), hanem viselkedéshez (interfész) kössünk dolgokat.

51 Interfész Egy osztály interfészén a nyilvános elemeinek összességét értjük, azokat, amelyek az osztály megfelelő használatához szükségesek Az információ rejtés elve miatt az interfész általában csak metódusokból áll. Szintaktikája hasonló az osztályhoz, de a class kulcsszó helyett interface kulcsszót kell használni. Az interfészt tartalmazó fájl nevének meg kell egyeznie a kódban szereplő interfész névvel. interface Nyomtathato{ void nyomtat(); 89/51 class Konyv implements Nyomtathato{ String tartalom = "ABC"; public void nyomtat(){ System.out.println(tartalom);

52 Interfész Minden interfész automatikusan abstract, ezt módosítóval jelezni nem kell. Egy interfész kiterjeszthet más interfészeket (extends). Létezik többszörös interfész öröklés. Az interfész nem tartalmaz végrehajtható kódot, azt a megvalósító osztályban (implements) kell megadni. Konvenció, hogy az interfészek neve I -vel kezdődik. [módosító] interface Iazonosító extends If1, If2 { [elemek deklarációja] 89/52

53 Interfész Interfész implementálása: [módosító] class osztálynév implements If1, If2() { Szabályok: Ha egy osztály implementál egy interfészt, akkor köteles annak minden metódusát implementálni Az implementált elemeket nem módosíthatja Metódusok esetében a fejlécnek teljesen egyeznie kell Azonos nevű elemet az öröklődés során és az implementálás során nem kaphat meg 89/53

54 Interfész Tagok: 89/54 Csak konstansai vagy abstract tagjai lehetnek. Konstans: automatikusan public static final módosítóval rendelkeznek, de kiírhatók a módosítók. Metódusok: automatikusan public abstract módosítóval rendelkeznek, a public kiírható, az abstract nem ajánlott. Más módosítója nem lehet (pl. static, final, stb.). Interfész használata: Egy interfész új referencia típust vezet be -> mindenhol használható, ahol egy osztály. Változó deklarációban szerepelhet. Értékül minden olyan osztály objektumának felveheti a referenciáját, amely megvalósítja az interfészt!

55 Interfész Példák public interface A { public class B implements A { public class C implements A { public class D { A ref; ref = new B(); //OK! ref = new C(); //OK! ref = new D(); //NO! Hibás! ref = new A(); //NO! Hibás! A x = new B(); System.out.println(ref instanceof A); System.out.println(ref instanceof C); true true 89/55

56 Interfész Példák interface I1 { interface I2 extends I1 { class A implements I2 { class B implements I1 { I1 a = new A(); //OK! I2 b = new A(); //OK! a = b; //OK! Automatikus típuskonverzió b = (I2)a; //OK! Kikényszerített típuskonverzió A c = (A)a; //OK! Kikényszerített típuskonverzió a = new B(); //OK! b = (I2)a; //NO! Hibás! 89/56

57 Teszt 9. Jelölje meg az összes igaz állítást! Egy interfészben metódusfejeket és konstansokat definiálhatunk. Az interfész metódusai csak példánymetódusok lehetnek Egy interfésznek az osztályhoz hasonlóan csak egy interfész őse lehet. Az interfészekből példányok hozhatók létre, akárcsak az osztályokból. 89/57

58 Teszt 10. Az adott a Base interfész mellett melyik kód fordul le? interface Base { boolean m1 (); byte m2(short s); abstract class Class2 implements Base { public boolean m1() { return (7 > 4); interface Base2 implements Base { abstract class Class2 extends Base { public boolean m1() { return true; 89/58 class Class2 implements Base { boolean m1() { return false; byte m2(short s) { return 42;

59 Generikus típusok, metódusok 89/59

60 Generikus típusok, metódusok Általános jellegű, nem konkrét típust használó típusok, metódusok definiálása. Tipikus példa: adattároló osztály Régebbi megoldás: Object referencia használata. public class Tarolo { private Object object; public void set(object object) { this.object = object; public Object get() { return object; 89/60

61 Generikus típusok, metódusok A Tarolo osztályt egészek tárolására használjuk 89/61 Véletlenül belekerül egy String Az eredeti típusos objektum visszakapásához castolni kell A program lefordul, a hiba csak futtatáskor derül ki! public class TaroloPrg { public static void main(string args[]) { Tarolo t = new Tarolo(); t.set(3); int i = (Integer)t.get(); t.set("retek"); int k = (Integer)t.get(); c:\java8>java TaroloPrg Exception in thread "main" java.lang.classcastexception: java.lang.string cannot be cast to java.lang.integer at TaroloPrg.main(TaroloPrg.java:7)

62 Generikus típusok, metódusok Megoldás: generikus "típussal paraméterezett típus" használata public class GenericTarolo<T> { private T t; public void set(t t) { this.t = t; public T get() { return t; Konvenció: Paraméterként használt típusok jelölése: E - Elemek K - Kulcs N - Szám T - Típus V - Érték 89/62

63 Generikus típusok, metódusok A GenericTarolo osztályt egészek tárolására használjuk Az adat közvetlenül kinyerhető, nincs cast! Véletlenül belekerül egy String, a hiba már fordításkor jelentkezik! public class GTPrg { public static void main(string args[]) { GenericTarolo<Integer> gt = new GenericTarolo<Integer>(); gt.set(3); int i = gt.get(); gt.set("retek"); c:\java8>javac -d. GTPrg.java GTPrg.java:5: set(java.lang.integer) in GenericTarolo<java.lang.Integer> cannot be applied to (java.lang.string) gt.set("retek"); ^ 89/63

64 Generikus típusok, metódusok public class GenArray { 89/64 public static <E> void printarray(e[] inputarray) { for(e elem : inputarray) System.out.printf("%s ", elem); System.out.println(); //üres elválasztó sor kiírása public static void main(string args[]) { Integer[] intarray = { 1, 2, 3, 4, 5 ; Double[] doublearray = { 1.1, 2.2, 3.3, 4.4 ; Character[] chararray = { 'H', 'E', 'L', 'L', 'O' ; System.out.println("Az egész típusú tömb tartalma:"); printarray(intarray); System.out.println("\nA valós típusú tömb tartalma:"); printarray(doublearray); System.out.println("\nA karakter típusú tömb tartalma:"); printarray(chararray);

65 Hibakezelés 89/65

66 Hiba, biztonságos program Szintaktikai hiba 89/66 imt i = 0; system.out.println('alma'); for (int i = 0, i<= 10, i++)... Szemantikai hiba int a=0, b=10/a; x1=(-b+math.sqrt(b*b-4*a*c))/2*a; args[++i] Biztonságos program A szemantikai hibákat megpróbálja lekezelni a belőlük következő hibákkal együtt Ennek módja: kivételkezelés

67 Kivételkezelés Fogalma: A hibakezelés egy formája, amelyben elválasztható a hibalekezelő kódrészlet a normál működés kódjától, valamint a jelezhetjük a kódunkban előforduló hibákat és előírhatjuk kezelésüket a kódunkat használó kód számára. Kivételek keletkezése Kivétel létrejöhet egy végrehajtás során előforduló hiba hatására (I/O hiba, tömbindex túllépés, stb.), valamint saját magunk is létrehozhatunk kivételeket. A kivétel létrejöttét a kivétel megdobódásának nevezzük. A kivétel elkapását a kivétel lekezelésének nevezzük. 89/67

68 Kivételkezelés Kivételek: Javaban a kivételek objektumok. A kivétel osztályok az Exception osztály leszármazottai Fajtái: 89/68 Kötelezően lekezelendő kivételek: a fordító ellenőrzi, hogy ezeket lekezeljük-e. Például az I/O műveletek során előforduló kivételek. Nem kötelezően lekezelendő kivételek: nem kötelező lekezelni. Ezek a RuntimeException leszármazottai, ami viszont az Exception leszármazottja. Például a null referencia hiba, tömb index túllépés, stb. A saját kivételosztályokat ez alapján vagy az Exception osztályból származtatjuk (közvetve, közvetlenül) (ekkor kötelező lekezelni) vagy a RuntimeException-ból (ekkor nem kötelező lekezelni).

69 Kivételosztályok néhány fontosabb Ellenőrzött kivételek IOException Ki- és bemeneti hibák esetén váltódik ki, pl. konzolról való beolvasáskor. FileNotFoundException EOFException Nem ellenőrzött kivételek Az IOException egyik alkivételosztálya. Akkor kapjuk például, ha nem létező fájlba próbálunk írni. Fájl végét jelző kivétel. Szintén az IOException alosztálya. RuntimeException NullPointerException ArithmeticException Valamennyi futásidejű kivétel ősosztálya. Olyan esetben kapjuk, ha null értékű, azaz inicializálatlan változóra vagy objektumra hivatkozunk. Túlindexelést jelző kivétel. Akkor kapjuk, ha egy tömb, karakterlánc, vagy más indexelhető szerkezet nem létező indexére hivatkozunk. Aritmetikai műveletek hibájakor kapjuk, például nullával való osztáskor. NumberFormatException Akkor kapjuk például, ha nem megfelelő számot tartalmazó karakterláncot próbálunk szám típusúvá konvertálni. IndexOutOfBoundsException IllegalArgumentException 89/69 Akkor váltódik ki, ha egy metódust nem megfelelő paraméterekkel hívunk.

70 Kivételkezelés A védett kódot try blokkban helyezzük el: try { utasítások Az első kivételt kiváltó utasítással befejeződik a try blokk végrehajtása, létrejön egy kivétel objektum. Fontos: a try blokk kivételt kiváltó utasítása utáni utasítások tehát mindig kimaradnak! try { X kód, ami kiválthat egy kivételt további utasítások catch ( Kivétel típusa Azonosító ) { 89/70

71 Kivételkezelés A kivétel lekezelését szolgáló utasítások catch blok(kok)ban helyezkednek el. catch (típus, azonosító) { utasítások A catch minden esetben a try blokkot követi, nem lehet köztük más utasítás. Egy try blokkhoz tartozhat több catch is. Mindig a szűkebb kivételt követi a bővebb kivétel lekezelése. catch ( Kivétel típusa Azonosító ) { kód, ami a kivétel kiváltódásakor lefut catch ( Kivétel típusa Azonosító ) { 89/71 kód, ami a kivétel kiváltódásakor lefut

72 Kivételkezelés finally: A cacth(ek) után szerepelhet. Az utolsó catch blokk és a finally blokk között nem lehet más utasítás. Minden esetben lefut: Ha kivétel keletkezett a try blokkban, egy catch blokk végrehajtása után. Ha nem volt kivétel, a try blokk utolsó utasítása után. try { X kód, ami kiválthat egy kivételt catch ( Kivétel típusa Azonosító ) { 89/72 finally { kód, ami a kivétel kiváltódásakor lefut kód, ami mindig lefut

73 Kód belépési pont try { Kód végrehajtás kivétel esetén Kód végrehajtás hibamentes esetben X kód, ami kiválthat egy kivételt catch ( Kivétel típusa Azonosító ) { kód, ami a kivétel kiváltódásakor lefut finally { 89/73 Kód kilépési pont kód, ami mindig lefut

74 Kivételkezelés A Java kivételkezelése nyitott, ami azt jelenti, hogy bárki létrehozhat saját névvel és funkcionalitással ellátott kivételosztályokat, amelyeket célszerű az Exception osztályból származtatni. Az új kivételosztályok nevében célszerű az "Exception" szót is szerepeltetni, hogy utaljon annak szerepére. Kivétel dobása (throw utasítás) throw kivételobjektumref; pl: throw new IOException("Hiba van"); throw sajátkivételosztálynév("saját hibaüzenet"); 89/74

75 Kitérő verem adatszerkezet Verem: Verem esetén azt az elemet vehetjük ki legelőször, amelyiket utoljára tettük be. Működési módja miatt LIFO (last in first out) adatszerkezetnek nevezik. Műveletek: berakás, kivétel C, B, A A, B, C Berak C B Kivesz 89/75 A

76 Kivételkezelés Példa Készítsünk egy komplett verem kezelő alkalmazást Ha a verembe nem lehet betenni, vagy nem lehet belőle kivenni adatot, használjunk hibakezelést A hibakezeléshez írjunk saját hiba osztályt public class Verem_Exception extends Exception { public Verem_Exception(String hibauzenet){ super(hibauzenet); 89/76

77 Kivételkezelés Példa public class Verem{ private final static int MERET = 3; private int[] verem = new int[meret]; private int mutato = 0; 89/77 public void betesz(int i) throws Verem_Exception { if (mutato < MERET) { verem[mutato] = i; System.out.println("A szám: ("+i+") a verembe helyezve!"); mutato++; else throw new Verem_Exception("A verem megtelt!"); public int kivesz() throws Verem_Exception { if (mutato == 0) throw new Verem_Exception("A verem üres!"); mutato--; int i = verem[mutato]; System.out.println("A szám: ("+i+") a veremből kivéve!"); return i;

78 public class VeremPrg{ public static void main(string args[]) { Verem v = new Verem(); try { v.betesz(21); v.betesz(52); v.betesz(77); v.betesz(99); catch (Verem_Exception ve) { System.err.println(ve); 89/78 System.out.println(); try { v.kivesz(); v.kivesz(); v.kivesz(); v.kivesz(); catch (Verem_Exception ve) { System.err.println(ve);

79 Kivételkezelés Kivétel terjedése A kivétel nem képes tovább terjedni egy metódusblokkból, hacsak a metódus fejlécében nincs megadva a kivétel típusa vagy annak őse. Ha egy metódus fejlécében kötelezően lekezelendő kivételtípus van megadva, akkor a hívását kötelező olyan try utasításba ágyazni (közvetlenül vagy közvetve), amelyik lekezeli a kivételtípust. Mivel a catch blokkok keresése sorban történik mindig előbbre kell írni azt a catch blokkot, amelyik egy leszármazott típust kap el és csak utána azt, amelyik az őst. A utolsó catch blokként lehet írni egy Exception-t elkapót, hiszen az minden kivételt képes elkapni. 89/79

80 Teszt 11. Helyes vagy hibás az alábbi kód? public class Teszt { public static void main(string args[ ]) { int x = new int(5); Helyes Hibás Miért? 89/80

81 Teszt 12. Mit ír ki a kód? 89/81 public class SuperClass { int i, j; SuperClass(int i, int j) { this.i = i; this.j = j; SuperClass() { this(2, 3); public class Program extends SuperClass { public Program() { System.out.println(i + j); 0 5 null Szintaktikailag hibás, így nem fut le a kód. public static void main(string[ ] args) { new Program();

82 Teszt 13. Jelölje meg az összes igaz állítást! 89/82 Egy konstruktorból meghívható az osztály egy másik konstruktora. Egy objektum létrehozásakor az öröklési ág minden osztályának lefut legalább egy konstruktora. Ha a konstruktor első sorában nem szerepel this() vagy super() hívás, akkor futási hiba keletkezhet Az osztályadatokat csak a konstruktorban lehet inicializálni. A konstruktor a leszármaztatott osztályban felüldefiniálható

83 Teszt 14. Milyen típusú kivételt dob a parseint() metódus, ha illegális adatot kap? NumberFormatError NumberException NumberFormatException ArithmetricException 89/83

84 Teszt 15. Helyes vagy hibás az alábbi kód? public class Fut { public static void main(string[] args) { try { finally { System.out.println("BB"); Helyes Hibás 89/84

85 Teszt 16. Helyes vagy hibás az alábbi kód? public class Fut { public static void main(string[] args) { try { System.out.println("BB"); catch (Exception e) { System.out.println(e.getMessage()); catch (ArithmeticException a) { System.out.println(a.getMessage()); 89/85 Helyes Hibás

86 89/86 Teszt 17. Az alábbi kód egy A.java nevű fájlban van. Mi történik, ha megpróbáljuk lefordítani? public class A { public void m1() {System.out.print("A.m1,"); protected void m2() {System.out.print("A.m2,"); private void m3() {System.out.print("A.m3,"); void m4() {System.out.print("A.m4,"); class B { public static void main(string[] args) { A a = new A(); a.m1(); a.m2(); a.m3(); a.m4(); Lefordul, minden OK. Nem fordul, mert egy fájlban csak egy osztály lehet Nem fordul, mert hiba van az A osztályban Nem fordul, mert hiba van a B osztályban

87 89/87 Teszt 18. Az alábbi kód egy A.java nevű fájlban van. Lefordítjuk. Hogyan indítjuk el a programot? public class A { public void m1() {System.out.print("A.m1,"); protected void m2() {System.out.print("A.m2,"); public void m3() {System.out.print("A.m3,"); void m4() {System.out.print("A.m4,"); class B { public static void main(string[] args) { A a = new A(); a.m1(); a.m2(); Sehogy, csak az A osztály fordul le. a.m3(); java A a.m4(); java A.B java B

88 Felhasznált irodalom Ficsor Lajos elektronikus jegyzetei Elek Tibor elektronikus jegyzetei Fenyvesi Tibor, Szabó László elektronikus anyagai oldal anyagai prog.hu oldal anyagai Nyékiné G. Judit (szerk.): JAVA 2 útikalauz programozóknak, ELTE TTK Hallgatói Alapítvány, Budapest, 1999 Daniel J. Berg, J. Steven Fritzinger: JAVA felsőfokon,wiley, 1999 Joshua Bloch: Hatékony Java, /88

89 VÉGE VÉGE 89/89

OOP: Java 8.Gy: Abstract osztályok, interfészek

OOP: Java 8.Gy: Abstract osztályok, interfészek OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus

Részletesebben

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN Objektum Orientált Programozás 11. Kivételkezelés 44/1B IT MAN B IT v: 2016.05.03 MAN Pici elmélet A Java kivételkezelésének célja a programfutás során keletkezett hibák kiszűrése és megfelelő kezelése.

Részletesebben

és az instanceof operátor

és az instanceof operátor Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1 Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum

Részletesebben

7. K: JAVA alapok Konzultáció

7. K: JAVA alapok Konzultáció Objektum Orientált Programozás 7. K: JAVA alapok Konzultáció 35/1B IT MAN B IT v: 2017.05.03 MAN Hiba, biztonságos program 01. Szintaktikai hiba imt i = 0; system.out.println( alma ); for (int i = 0, i

Részletesebben

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat Kivételkezelés, beágyazott osztályok Nyolcadik gyakorlat Kivételkezelés Nem minden hibát lehet fordítási időben megtalálni Korábban (pl. C-ben) a hibakezelést úgy oldották meg, hogy a függvény hibakódot

Részletesebben

JAVA PROGRAMOZÁS 2.ELŐADÁS

JAVA PROGRAMOZÁS 2.ELŐADÁS Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 2.ELŐADÁS 2014-2015 tavasz Tömbök, osztályok, objektumok, konstruktorok Tömbök 2 Referencia típusú változó Elemtípus Primitív Referencia: osztály,

Részletesebben

Java programozási nyelv 5. rész Osztályok III.

Java programozási nyelv 5. rész Osztályok III. Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni? A "java Villa -v" parancs jelentése: A java interpreter elindítja a Villa osztály statikus main metódusát, és átadja neki paraméterként a "-v" stringet. A java interpreter elindítja először a Villa osztály

Részletesebben

Java IX. telkezelés a Java-ban

Java IX. telkezelés a Java-ban Java IX. Kivétel telkezelés a Java-ban Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 11. 17. Java IX. Kivételkezelés JAVA9 / 1 A kivételkezel telkezelés célja Kivételes

Részletesebben

Java IX. telkezelés a Java-ban

Java IX. telkezelés a Java-ban Java IX. Kivétel telkezelés a Java-ban Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 11. 17. Java IX. Kivételkezelés JAVA9 / 1 A kivételkezel telkezelés célja Kivételes

Részletesebben

Osztályok. 4. gyakorlat

Osztályok. 4. gyakorlat Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum

Részletesebben

Java VII. Polimorfizmus a Java nyelvben

Java VII. Polimorfizmus a Java nyelvben Java VII. Polimorfizmus a Java nyelvben Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 19. Java VII. Polimorfizmuss JAVA7 / 1 A kötés (binding( binding) ) fogalma Kötés (binding)

Részletesebben

Java programozási nyelv 4. rész Osztályok II.

Java programozási nyelv 4. rész Osztályok II. Java programozási nyelv 4. rész Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/17 Tartalomjegyzék

Részletesebben

Már megismert fogalmak áttekintése

Már megismert fogalmak áttekintése Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése Eseménykezelési módszerek 2 Már megismert fogalmak

Részletesebben

Java III. I I. Osztálydefiníció (Bevezetés)

Java III. I I. Osztálydefiníció (Bevezetés) Java III. I I. Osztálydefiníció (Bevezetés) Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 02. 27. Java III.: Osztály definíció JAVA3 / 1 Szintaktikai jelölések A továbbiakban

Részletesebben

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07.

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum

Részletesebben

Java III. I I. Osztálydefiníció (Bevezetés)

Java III. I I. Osztálydefiníció (Bevezetés) Java III. I I. Osztálydefiníció (Bevezetés) Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 02. 27. Java III.: Osztály definíció JAVA3 / 1 Szintaktikai jelölések A továbbiakban

Részletesebben

Java VII. Polimorfizmus a Java nyelvben

Java VII. Polimorfizmus a Java nyelvben Java VII. Polimorfizmus a Java nyelvben Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 19. Java VII. Polimorfizmuss JAVA7 / 1 A kötés (binding( binding) ) fogalma Kötés (binding)

Részletesebben

OOP: Java 8.Gy: Gyakorlás

OOP: Java 8.Gy: Gyakorlás OOP: Java 8.Gy: Gyakorlás 43/1 B ITv: MAN 2019.04.10 43/2 Egy régebbi beszámoló anyaga 1. Feladat: Készítsen egy Szemely nevű osztályt a szokásos konvenciók betartásával, amely tárolja egy ember nevét

Részletesebben

Interfészek. PPT 2007/2008 tavasz.

Interfészek. PPT 2007/2008 tavasz. Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése 2 Már megismert fogalmak áttekintése Objektumorientált

Részletesebben

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN vizsgatételek 1. Az objektumorientált programozás szemlélete, az objektum fogalma 2. Az objektumorientált programozás alapelvei 3. A Java nyelv története, alapvető

Részletesebben

Abstract osztályok és interface-ek. 7-dik gyakorlat

Abstract osztályok és interface-ek. 7-dik gyakorlat Abstract osztályok és interface-ek 7-dik gyakorlat Abstract metódusok és osztályok Az OO fejlesztés során olyan osztályokat is kialakíthatunk, melyeket csak továbbfejlesztésre, származtatásra lehet használni,

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 8. előadás Öröklődés - megnyitunk egy osztályt egy másik előtt zárt egységeket szeretünk készíteni (láthatósági kérdés:

Részletesebben

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Függvények, csomagok Csomagok Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges számú osztályt tartalmazhat Pl.: java.util.scanner Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Célja:

Részletesebben

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás: Java V. szint lyszintű ű tagok A final minősítő Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 05. Java V.: szintű tagok JAVA5 / 1 Példányváltozó Az eddig megismert adattagokból

Részletesebben

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás Számítástechnika II. BMEKOKAA153 5. Előadás Dr. Bécsi Tamás Kivételkezelés try Azon utasítások kerülnek ide, melyek hibát okozhatnak, kivételkezelést igényelnek catch( típus [név]) Adott kivételtípus esetén

Részletesebben

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu Programozás III. Varjasi Norbert varjasin@sze.hu 1 A java virtuális gép (JVM) Képzeletbei, ideális számítógép. Szoftveresen megvalósított működési környezet. (az op. rendszer egy folyamata). Feladata:

Részletesebben

Java Programozás 3. Ea: Java osztályok. OOP alapalapok

Java Programozás 3. Ea: Java osztályok. OOP alapalapok Java Programozás 3. Ea: Java osztályok OOP alapalapok 62/1 B ITv: MAN 2018.02.05 Osztály fogalma A Java program osztályok halmaza Egy osztálydefiníció egyben egy teljes fordítási egység (de általában nem

Részletesebben

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban Tartalom OOP ismétlés Osztályok létrehozása Adattagok láthatóságai, elnevezési ajánlások Konstruktor, destruktor this pointer Statikus és dinamikus

Részletesebben

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title; PHP5 objektumok 1 Osztályok class, new book.php: construct () destruct() $b=new Book(); törlés: $b=null; vagy unset ($b); -elnevezési konvenciók private $isbn; public $title; function

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 9. előadás Interface - típust vezet be, de osztálypéldány nem készíthető belőle (statikus típust ad) - több osztály is

Részletesebben

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

Részletesebben

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

Részletesebben

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*; Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely

Részletesebben

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 5. gyakorlat 1 Objektumorientáltság Egységbezárás és információ elrejtése (absztrakt adattípus) Adatok és rajtuk végzett műveletek egységbezárása (osztályok írása, múlt hét) Öröklődés Polimorfizmus

Részletesebben

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN OOP: Java 11.Gy: Enumok, beágyazott osztályok 13/1 B ITv: MAN 2019.04.24 ArrayList Rugalmas tömb A tömbök korlátai Fix méret, nem lehet menet közben megnövelni Ha túl nagyra választjuk, fölösleges helyfoglalás

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 13. előadás Throwable Error Exception RuntimeException IOException Saját (általában) Nem ellenörzött kivételek (Unchecked

Részletesebben

OOP. Alapelvek Elek Tibor

OOP. Alapelvek Elek Tibor OOP Alapelvek Elek Tibor OOP szemlélet Az OOP szemlélete szerint: a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással kapcsolatban vannak és együttműködnek. Program készítés: Absztrakciós

Részletesebben

Öröklés és Polimorfizmus

Öröklés és Polimorfizmus Öröklés és Polimorfizmus Egy létező osztályból egy (vagy több) újat készítünk A létező osztályt ősnek, az újakat utódnak nevezzük Az utódok öröklik az ős minden tagját Az utódok az öröklött tagokat újakkal

Részletesebben

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés Kivételek kezelése (exception handling) Hibakezelés old style class Szamolo { void szamol( String s, int i ) { int d; if (i!= 0) d = (i+1)/i; else if (s!= null) d = s.length(); else if (i > 10) // applikációs

Részletesebben

Globális operátor overloading

Globális operátor overloading Programozás II. 9. gyakorlat Operátor overloading 2: Unáris operátorok, globálisan megvalósított operátorok, > operátorok Kivételkezelés, IO library Globális operátor overloading Előző alkalommal

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 3. rész Tulajdonságok Indexelők Kivételkezelés Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát

Részletesebben

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás 2015-2016

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás 2015-2016 Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS 2015-2016 Objektumorientált programozás OOP PHP-ben 2 A PHP az 5.0-as verziójától megvalósítja az OO eszközrendszerét OO eszközök:

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve

Részletesebben

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. Az osztály egy olyan típus leíró struktúra, amely tartalmaz adattagokat

Részletesebben

Java programozási nyelv 9. rész Kivételkezelés

Java programozási nyelv 9. rész Kivételkezelés Java programozási nyelv 9. rész Kivételkezelés Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/24 Tartalomjegyzék

Részletesebben

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben Eötvös Loránd Tudományegyetem Informatikai Kar Objektumelvű alkalmazások fejlesztése 6. gyakorlat, polimorfizmus 2011.10.27. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Kódismétlődés

Részletesebben

OOP és UML Áttekintés

OOP és UML Áttekintés OOP és UML Áttekintés Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) OOP és UML Áttekintés 2013 1 / 32 Tartalom jegyzék 1 OOP Osztály Öröklődés Interfész, Absztrakt Osztály Kivétel kezelés

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály

Részletesebben

JAVA PROGRAMOZÁS 3.ELŐADÁS

JAVA PROGRAMOZÁS 3.ELŐADÁS Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 3.ELŐADÁS 2014-2015 tavasz Polimorfizmus, absztrakt osztályok, interfészek 2 Példa - Hengerprogram 3 Példa - Hengerprogram 4 Példa - Hengerprogram

Részletesebben

Programozás módszertan p.1/46

Programozás módszertan p.1/46 Programozás módszertan Öröklődés Pere László (pipas@linux.pte.hu) PÉCSI TUDOMÁNYEGYETEM TERMÉSZETTUDOMÁNYI KAR INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK MAGYAR TUDOMÁNYOS AKADÉMIA SZÁMÍTÁSTECHNIKAI ÉS

Részletesebben

Interfészek. Programozás II. előadás. Szénási Sándor.

Interfészek. Programozás II. előadás.  Szénási Sándor. Interfészek előadás http://nik.uni-obuda.hu/prog2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Polimorfizmus áttekintése Interfészek Interfészek alkalmazása

Részletesebben

Objektum orientált programozás Bevezetés

Objektum orientált programozás Bevezetés Objektum orientált programozás Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 03. 04. OOPALAP / 1 A program készítés Absztrakciós folyamat, amelyben a valós világban

Részletesebben

Web-technológia PHP-vel

Web-technológia PHP-vel Web-technológia PHP-vel A PHP programnyelv 2, futtatókörnyezet beálĺıtások Erős Bence February 26, 2013 Erős Bence () Web-technológia PHP-vel February 26, 2013 1 / 19 Szuperglobális változók $ GET : request

Részletesebben

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás: Objektum orientált programozás Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 03. 04. OOPALAP / 1 A program készítés Absztrakciós folyamat, amelyben a valós világban

Részletesebben

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus Eötvös Loránd Tudományegyetem Természettudományi Kar Alkalmazott Modul III 6. előadás Objektumorientált programozás: öröklődés és polimorfizmus 2011.10.24. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Részletesebben

Programozási alapismeretek 4.

Programozási alapismeretek 4. Programozási alapismeretek 4. Obejktum-Orientált Programozás Kis Balázs Bevezetés I. Az OO programozási szemlélet, egy merőben más szemlélet, az összes előző szemlélettel (strukturális, moduláris, stb.)

Részletesebben

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozási nyelvek II. JAVA EA+GY 1. gyakolat Programozási nyelvek II. JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2017/2018. őszi félév Tartalom 1 Amit tudni kell a félévről

Részletesebben

C++ programozási nyelv

C++ programozási nyelv C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. november A C++ programozási nyelv Soós Sándor 1/12 Tartalomjegyzék Miért

Részletesebben

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék Speciális adattagok és tagfüek Miskolci Egyetem Általános Informatikai Tanszék CPP7 / 1 Statikus adattagok Bármely adattag lehet static tárolási osztályú A statikus adattag az osztály valamennyi objektuma

Részletesebben

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás.   Szénási Sándor. Eseménykezelés előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Függvénymutatókkal Származtatással Interfészekkel Egyéb

Részletesebben

Virtuális függvények (late binding)

Virtuális függvények (late binding) Virtuális függvények (late binding) Miskolci Egyetem Általános Informatikai Tanszék Virtuális függvények CPP5 / 1 Azonos nevű függvények megkülönböztetése paraméterszignatúra (függvény overloading) - egy

Részletesebben

Programozás I. Első ZH segédlet

Programozás I. Első ZH segédlet Programozás I. Első ZH segédlet Ezen az oldalon: kiírás az alapértelmezett (hiba) kimenetre, sztring konkatenáció, primitív típusok, osztály létrehozás, példányosítás, adattagok, metódusok Kiíratás alapértelmezett

Részletesebben

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error Generics Egyszerűbb példák (java.util csomagból): public interface List { void add(e x); Iterator iterator(); public interface Iterator { E next(); boolean hasnext(); E - formális típusparaméter,

Részletesebben

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015 Objektumorientált programozás Pál László Sapientia EMTE, Csíkszereda, 2014/2015 9. ELİADÁS Kivételkezelés (Exception handling) 2 Mi a kivétel (exception)? A kivétel, olyan hibás állapot vagy esemény, amely

Részletesebben

C++ programozási nyelv Konstruktorok-destruktorok

C++ programozási nyelv Konstruktorok-destruktorok C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt

Részletesebben

Bevezetés a Python programozási nyelvbe

Bevezetés a Python programozási nyelvbe Bevezetés a Python programozási nyelvbe 7. Gyakorlat osztályok, objektumok (utolsó módosítás 2018. aug. 28.) Szathmáry László Debreceni Egyetem Informatikai Kar 2018-2019, 1. félév OO programozás Pythonban

Részletesebben

Informatika terméktervezőknek

Informatika terméktervezőknek Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások

Részletesebben

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag C# osztálydeníció Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem.net C# technológiák tananyag objektum orientált programozás tananyag Tartalom 1 Bevezetés 2 Osztály létrehozása, deníció

Részletesebben

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani Mi a legabsztraktabb típus a JAVA-ban? Object Mikor preferált interface-ek használata a konkrét típusok helyett? Ha egy osztály több interfacet is használhasson, vagy ha fvek implementálását a az osztályra

Részletesebben

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok A szemantikus elemzés helye Forrásprogram Forrás-kezelő (source handler) Lexikális elemző (scanner) A szemantikus elemzés feladatai Fordítóprogramok előadás (A, C, T szakirány) Szintaktikus elemző (parser)

Részletesebben

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o Miért Java? széleskörben elterjedt Micro Edition - beágyazott rendszerek, régi telefonok Standard Edition - PC, android ezen alapul Enterprise Edition - vállalati programok, web service-ek multiplatform

Részletesebben

Java és web programozás

Java és web programozás Budapesti Műszaki Egyetem 2015. 02. 11. 2. Előadás Mese Néhány programozási módszer: Idők kezdetén való programozás Struktúrált Moduláris Funkcionális Objektum-orientált... Mese Néhány programozási módszer:

Részletesebben

Programozás II. labor

Programozás II. labor Programozás II. labor 1. rész Programozási tételek Öröklődés Interfészek Eseménykezelés Kivételkezelés Visszalépéses keresés Programozás II. Programozási tételek OOP alapok ismétlése Öröklődés Öröklődés

Részletesebben

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva Smalltalk 3. Osztályok létrehozása Készítette: Szabó Éva Metaosztály fogalma Mint korában említettük, a Smalltalkban mindent objektumnak tekintünk. Még az osztályok is objektumok. De ha az osztály objektum,

Részletesebben

Kivételek. A program végrehajtása során ritkán bekövetkező események Nem a fő végrehajtási ág ; logikailag alacsonyabbrendű feladat jelzése

Kivételek. A program végrehajtása során ritkán bekövetkező események Nem a fő végrehajtási ág ; logikailag alacsonyabbrendű feladat jelzése Kivételek A program végrehajtása során ritkán bekövetkező események Nem a fő végrehajtási ág ; logikailag alacsonyabbrendű feladat jelzése Hiba Felhasználó butaságot csinál Speciális/abnormális számítási

Részletesebben

Programozási technológia

Programozási technológia Programozási technológia Osztályszintű elérés Kivételkezelés, Fájlkezelés Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Osztályszintű elérés (statikusság) Az osztályban definiált attribútumok és műveletek

Részletesebben

Osztályszintű elérés, kivételkezelés, fájlkezelés

Osztályszintű elérés, kivételkezelés, fájlkezelés Programozási, kivételkezelés, fájlkezelés Informatikai Kar Eötvös Loránd Tudományegyetem 1 Tartalom 1 2 3 4 2 (statikusság) Az osztályban definiált attribútumok és műveletek az osztályból példányosított

Részletesebben

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance

OOP alapok Egy OOP nyelvet három fontos dolog jellemez. egységbezárás ( encapsulation objektumoknak öröklés ( inheritance Az objektum-orientált programozás (röviden OOP) a természetes gondolkodást, cselekvést közelítő programozási mód, amely a programozási nyelvek tervezésének természetes fejlődése következtében alakult ki.

Részletesebben

Programozási nyelvek II.: JAVA

Programozási nyelvek II.: JAVA Programozási nyelvek II.: JAVA 12. gyakorlat 2017. december 4-8. 12. gyakorlat Programozási nyelvek II.: JAVA 1 / 39 Az 12. gyakorlat tematikája equals és hashcode metódusok Comparable Set, Map Absztrakt

Részletesebben

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto Pázmány Péter Katolikus Egyetem Információs Technológiai és Bionikai Kar Bevezetés a Programozásba II 8. előadás 2014.03.31. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Öröklődés

Részletesebben

Segédanyag: Java alkalmazások gyakorlat

Segédanyag: Java alkalmazások gyakorlat Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2009/2010-2 félév, 2. gyakorlat 1 Osztályok és objektumok default, public, protected, private láthatóság a metódusokra és adattagokra (első

Részletesebben

Magas szintű programozási nyelvek 2 Előadás jegyzet

Magas szintű programozási nyelvek 2 Előadás jegyzet Magas szintű programozási nyelvek 2 Előadás jegyzet 1. Rendszerfejlesztés 0. lépés: Elemzés (analízis) 1. lépés: Tervezés a, technológia független rész b, technológia függő rész 2. lépés: Megvalósítás

Részletesebben

Objektumok inicializálása

Objektumok inicializálása Objektumok inicializálása Miskolci Egyetem Általános Informatikai Tanszék Objektumok inicializálása CPP4 / 1 Tartalom public adattagok inicializálása felsorolással konstruktor objektum tömbök osztály típusú

Részletesebben

Java programozási nyelv 6. rész Java a gyakorlatban

Java programozási nyelv 6. rész Java a gyakorlatban Java programozási nyelv 6. rész Java a gyakorlatban Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. október A Java programozási nyelv Soós Sándor 1/16 Tartalomjegyzék

Részletesebben

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás Számítástechnika II. BMEKOKAA153 2. Előadás Dr. Bécsi Tamás Tömbök (Arrays) Definíció: típus[] név; (pld. int[] szamok; ) Inicializálás: int[] szamok = new int[4]; int[] szamok = 1,2,4,3,5}; int[] szamok

Részletesebben

1. Egyszerű (primitív) típusok. 2. Referencia típusok

1. Egyszerű (primitív) típusok. 2. Referencia típusok II. A Java nyelv eszközei 1. Milyen eszközöket nyújt a Java a programozóknak Korábban már említettük, hogy a Java a C nyelvből alakult ki, ezért a C, C++ nyelvben járatos programozóknak nem fog nehézséget

Részletesebben

III. OOP (objektumok, osztályok)

III. OOP (objektumok, osztályok) III. OOP (objektumok, osztályok) 1. Természetes emberi gondolkozás Az Objektumorientált paradigma alapelvei nagyon hasonlítanak az emberi gondolkozásra. Érdemes ezért elsőként az emberi gondolkozás elveit

Részletesebben

Kivételkezelés, naplózás. Exception handling, logging

Kivételkezelés, naplózás. Exception handling, logging Kivételkezelés, naplózás Exception handling, logging Try-catch try { // Kódrészlet, amely kivételt eredményezhet catch (Exception1 object1 ) { // Az Exception1 kivétel kezelésének megfelelő kód catch (Exception2

Részletesebben

S ha kettészelik is: balfelöl belőle Valamivel mindig - Valamivel mindiq több marad. (Nyugat )

S ha kettészelik is: balfelöl belőle Valamivel mindig - Valamivel mindiq több marad. (Nyugat ) S ha kettészelik is: balfelöl belőle Valamivel mindig - Valamivel mindiq több marad. (Nyugat 1919. 1049-1050. 1.) A hetvenéves Eötvös Loránd köszöntésekor Alexander Bernád filozófus így jellemezte:...

Részletesebben

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem C# nyelv alapjai Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem Objektumorientált programozás C# alapokon tananyag Tartalom Bevezetés Lokális változó Utasítások Szójáték Why do all real

Részletesebben

Bánsághi Anna anna.bansaghi@mamikon.net

Bánsághi Anna anna.bansaghi@mamikon.net ESEMÉNYVEZÉRELT PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 2. ELŐADÁS - C# ÁTTEKINTÉS - 2 2015 Bánsághi Anna 1 of 64 TEMATIKA I. C# ÁTTEKINTÉS II. WPF III. Modern UI 2015 Bánsághi Anna 2 of 64

Részletesebben

Pénzügyi algoritmusok

Pénzügyi algoritmusok Pénzügyi algoritmusok A C++ programozás alapjai Tömbök (3. rész) Konstansok Kivételkezelés Tömbök 3. Többdimenziós tömbök Többdimenziós tömbök int a; Többdimenziós tömbök int a[5]; Többdimenziós tömbök

Részletesebben