Kezdőlap

|

Mi a kreditvadasz.hu Egy felsőoktatási közösségi oldal amely segít kapcsolatot tartani a hallgatók között, így segítséget nyújt a sikeres tanulmányokhoz...

Tételsor - kidolgozott

Országok listájaHungaryMiskolci EgyetemGépészmérnöki és Informatikai KarProgramtervező informatikusObjektum Orientált ProgramozásJegyzetekTételsor - kidolgozott

2009.05.10 17:28:04
(10)
Szerző: Szepessy Viktor
Cimkék: oop, objektum, objektum orientált, programozás, java


Az alábbi szöveg egy formázás és képek nélküli előnézete a dokumentumnak. A tökéletes megjelenítéshez jelentkezz be, majd töltsd le a dokumentumot.
1. Az objektum orientált programozás szemlélete, az objektum fogalma.
-----------------------------------------------------------------------

Program: a valós világ egy szeletének mqködQ modellje
Ebben a szemléletben a valós világ egy absztrakt modelljét (analízis modell) kell leképezni egy programozási
eszközre.
Ezt a folyamatot megkönnyíti az, ha az analízis modell elemei könnyen leképezhetQk nyelvi elemekre.
Az analízis modell elkészítése során a valóságot objektumok halmazaként tekintjük. Ezen objektumok egymással
kapcsolatban vannak és együttmqködnek.
A természetes objektumok jellemzQi
-struktúra (adatok)
-viselkedés (más objektumokkal való kapcsolata) állapot (adatainak aktuális értéke) egyéniség (különállás)
Az objektum: egyediséggel rendelkezQ diszkrét entitás
jellemzQi: attribútumok, mqveletek
attribútum együttes: objektum állapot, ennek idQbeli változása az objektum viselkedése
mqveletek(operations): ezek modellezik az objektum viselkedését.


2. Az objektum orientált programozás alapelvei.
-------------------------------------------------

1. Osztály (class)
2. Objektum (object)
3. Egységbezárás (encapsulation)
4. Információ rejtés (information hiding)
5. Üzenet (message)
6. ÖröklQdés (inheritance)
7. Polimorfizmus (polymorphism)

Osztály, amelynek részei:
- adatok (az attribútumok modellezésére)
- módszerek (a mqveletek modellezésére). Objektumok közös tulajdonságait definiálja. Programozás technikai
szempontból egy típus.

Objektum
- Egy osztály egy mqködQképes példánya.
- Egy adott osztályban definiált tulajdonságokkal tetszQleges számú objektum példányosítható.
- Minden objektum természeténél fogva különbözik az összes többitQl.
- Egy adott osztályból példányosított valamennyi objektumnak ugyanolyan lehetséges viselkedés módjai (mqveletei)
vannak, de saját állapotuk van.

Egységbezárás:
Az osztály az adatait és a módszereket egy egységgé teszi.
- az adatok lokálisak
- a módszerek hozzáférhetnek az adatokhoz

Információ rejtés:
- Egy objektum adatai a külvilág (más objektumok) számára hozzáférhetetlenek.
- Egy objektum a külvilággal csak az interface-én keresztül tarthatja a kapcsolatot. Interface: a külvilág
számára elérhetQ módszerek együttese.
- A módszerek implementációja rejtett.

Üzenet
- Az objektummal való kommunikáció módja.
- A módszerek aktivizálását (invocation) jelenti.

ÖröklQdés
- Hierachikus kapcsolat(rendszer).
- A leszármazott osztály örökli az Qs osztály adatait és módszereit.
- Az örökölt módszereket felül definiálhatja a maga számára.
- Új (saját, csak rá jellemzQ) adatokat és módszereket definiálhat.
- Egy leszármazott osztály csak bQvítheti, pontosíthatja az Qst, de nem utasíthat el örökölt adatokat
vagy módszereket.

Polimorfizmus (többalakúság)
- Bizonyos elemek viselkedése attól a környezettQl függ, amelyben alkalmazzuk.
- A gyakorlatban ez azt jelenti, hogy egy nyelvi elem (például egy kódrészlet) attól függQen, hogy hol
alkalmazzuk, más-más mqködést eredményezhet.


3. A Java nyelv története, alapvetQ tulajdonságai.
----------------------------------------------------

1990-es évek eleje: a SUN belsQ project-je James Gosling vezetésével (set topbox) platformfüggetlen
technológia szükségessége. Egyik akkori nyelv sem volt megfelelQ, ezért terveztek egy újat. A projekt
(és vele az új nyelv) aztán lassan elhalt. 1990-es évek közepe: az Internet rohamos terjedése újra
felvetette a platform-független technológia szükségességét.
Újraéledt a project, de általánosabb célkitqzéssel. Eredménye a Java nyelv elsQ verziója lett.
- 1995: Java 1 platform
- 1999: Java 2 platform (1.2-es verziószámtól)
- Jelenleg: (2005. szeptember) J2SDK 1.5 (Java 5 platform)
A Java egyszerre
- programozási nyelv
- platform
Magas szintq programozási nyelv
- platform-független
- általános célú
- teljesen objektum-orientált
- egyszerq
- interpretált (de speciális módon)
- elosztott (distributed)
- robosztus
- biztonságos
- hordozható
- architektúra független
- többszálú (multithreaded)
- A C++ ismeretében született, annak formalizmusát tekintette mintának
- A C++ hátrányait igyekezett kiküszöbölni
A Java egy tisztán software megvalósítású platform is. Két része van
a Java virtuális gép (JVM)
a Java programozási programozási interface (Java API)


4. Mi kell egy Java program fejlesztéséhez, illetve kész program futtatásához?
--------------------------------------------------------------------------------

Valamennyi Java szabvány, és a SUN által implementált alapvetQ fejlesztQeszközök nyílt forrásúak és ingyenesek.
Ezen kívül számtalan
- nyílt forrású, ingyenes
- zárt forrású, de ingyenes
- kereskedelmi termék.
A minimális fejlesztQkörnyeze:
A J2SE szolgáltatásaihoz:
- J2SDK vagy újabban JDK (Java Development Kit)
- a legfrissebb verzió: JDK 5.0 (2005. szeptember)
- Egy tetszQleges szövegszerkesztQ
JDK legfontosabb elemei
A Java API-t implementáló könyvtárak Segédprogramok:
- javac: java fordító -java: a JVM (futtatáshoz)
- javadoc: automatikus dokumentáció generáláshoz a forrás szöveg és a benne található speciális kommentek alapján
-jdb: debugger
- stb.
A minimális futtató környezet
A J2SE szolgáltatásaihoz:
- JRE (Java Runtime Environment)
- Ajava.sun.com címrQl letölthetQ számtalan platformra
- A JDK tartalmazza
- Ha egy gépen csak JRE van, bármely más gépen fejlesztett Java program futtatható, ha ugyanolyan, vagy korábbi
verziójú JDK segítségével készült.





5. A Java program (alkalmazás), a Java applet és a JavaScript fogalma.
------------------------------------------------------------------------

Java program: Java-fordítóval készült önálló alkalmazás.
- az adott architektúrán futó JVM hajtja végre
- mindazon j ogokkal rendelkezik, mint bármely más alkalmazás
Applet: HTML oldalba ágyazott Java-kód
- A HTML kódba egy hivatkozás kerül, az applet kódja maga bárhonnan letöltQdhet.
- a HTML oldal értelmezQje (a böngészQ) hajtja végre (a böngészQ valósítja meg a JVM-et)
- korlátozott jogokkal rendelkezik biztonsági okok miatt.
JavaScript: Eredetileg LiveScript néven a Netscape-nél kifejlesztett spript nyelv
Célja web oldalak dinamikussá tétele
A Java-hoz hasonlóan a C++ szintakszisához hasonló formalizmus
Nem objektum orientált, csak objektum alapú (nem implementálja valamennyi alapelvet)
Bár ezt is a böngészQ értelmezi, semmi köze a Java platformhoz (nem a JVM értelmezi)


6. A Java alpelemei: karakterkészlet, azonosító, megjegyzés, egyszerq típusok.
--------------------------------------------------------------------------------

A Java a Unicode karakterkészletet használja, tehát akár ékezetes azonosítókat is használhatunk.
Az azonosító betqvel kezdQdQ és betqvel vagy számmal folytatódó karaktersorozat.
- Az _ és a $ is a betqk közé sorolandó.
- A betqk bármelyik karakterkészletbQl származhatnak.
- Az azonosító hossza tetszQleges.
- A JAVA is kis- és nagybetq érzékeny {case sensitive).
- Kulcsszavak, valamint a const, goto, null, szavak nem lehetnek azonosítók.
Megjegyzések: Mint a C-ben:
/* Szöveg */
Egysoros:
// InnentQl a sor végéig komment
Dokumentációs
/** TetszQleges szöveg*/
A javadoc segédprogram feldolgozza.
Egyszerq típusok:
Hasonlóak, mint C-ben, de pontosan definiált helyfoglalással és ábrázolási móddal
Nincs unsigned minQsítQ
Konstans változó f inai minQsítQvel deklarálható (a const helyett).

Egyszerq típusok táblázata:
---------------------------
Típusnév Jelentés
--------------------
boolean Logikai típus (true vagy falsé értékkel)
char 16 bites Unicode karakter
byte 8 bites elQjeles egész
short 16 bites elQjeles egész
int 32 bites elQjeles egész
long 64 bites elQjeles egész
float 32 bites lebegQpontos szám (IEEE 754 szerint)
double 64 bites lebegQpontos szám (IEEE 754 szerint)

Literálok (konstansok):
Logikai értékek: true vagy
A C-vel teljesen egyezQ módon használandók:
- Egész konstans
- LebegQpontos konstans
- Karakter konstans (az escape szekvenciák is!)
- Szöveg konstans (csak Unicode szöveget is tartalmazhat)
A szöveg konstanst a fordító automatikusan String típusúként kezeli.


7. A Java alpelemei: lokális változó, tömb, vezérlQ utasítások.
-----------------------------------------------------------------

Lokális változó használata:
Definíciója csak metóduson belül. Nincs globális változó!
Formája mint a C-ben, beleértve a kezdQértékadást is.
Egyszerq típusú lokális változó definíciója egyben helyfoglalást is jelent.
Különbségek:
- Változó definíció egy metóduson belül bárhol lehet (nem csak blokk elején).
- Természetesen a változó csak a definíció után használható.
Egyszerq típusú tömb:
Definíciója eltér a C szintaktikától. Két lépés:
1. .Tömb típus deklarációja
típusnév azonosító[];
vagy
típusnév [] azonosító;
2.. Helyfoglalás a tömb elemeinek:
Azonosito=new típusnév[elemek száma];
Az elemekre való hivatkozás már ugyanaz.
Példa:
int jegyek[]; // Ez csak egy tömb
// tipus létrehozása
jegyek = new int[100]; // Helyfoglalás
// 100 elemnek
jegyek[16] = 1; // Elem értékének
// beállítása
Az indexelés itt is O-tól kezdQdik.
Különbség: az érvénytelen index hibajelzést okoz!
VezérlQ utasítások:
Lényegében megegyeznek a C utasításaival. Különbségek:
- Az if, while, do utasításokban a feltétel csak logikai kifejezés lehet.
- A for utasításban a második kifejezés csak logikai kifejezés lehet
- A switch utasításban a szelektor csak egész kifejezés lehet.
- Nincs goto utasítás.


8. Osztálydefiníció, adattag, metódus fogalma. Példányosítás.
----------------------------------------------------------------

Osztálydefiníció:
A Java program osztályok halmaza.
Egy osztály definíció egyben egy teljes fordítási egység (de általában nem teljes program).
Az osztály és a definícióját tartalmazó file neve meg kell egyezzen. Osztályok csomagokba rendezhetQk,
ezzel lehet modulokat képezni.
Az osztály definíció fejlécbQl és {} zárójelpárral határolt törzsbQl áll.
Az osztály neve egy azonosító. A törzsben adattagok és metódusok (együttesen tagok) és további elemek
definíciói állhatnak.
Az egységbe zárás alapelvének implementálása: minden osztály saját hatáskörrel rendelkezik.
Egy osztály minden eleme tehát lokális az osztályra nézve.
Adattagok:
Definíciója:
[módosítók] típusnév névlista
A típusnév valamelyik egyszerq típus, tömb típus, vagy osztálynév lehet.
A névlista elemeit veszQvel választjuk el, formájuk: azonosító[=inicializáló kifejezés]
Az inicializáló kifejezésben csak elQtte már deklarált adattagok használhatók.
Az inicializáló kifejezés minden példányosítás esetén kiértékelQdik.
Nem inicializált adattag az alábbi (típustól függQ) default értékkel inicializálódik:
Boolean: false
Char: '\u0000'
Minden egész tip.: 0
Minden lebegQpontos tip.: 0.0
Osztály tip.: null
Metódusok:
- Hasonló a C függvény definíciójához. Formája:
[módosítók] típus név (paraméterlista) [...]
- A módosítókkal és a [...] helyén álló elemmel késQbb foglalkozunk.
- A többi ugyanaz, mint a C-ben, kivéve a tömb paramétereket (hiszen nincs pointer!)
Példányosítás:
Az osztály objektumok létrehozásához használható mintaként tekinthetQ.
A Java programban az osztálynév típusként használható.
Az objektum létrehozásának folyamata a példányosítás.
Egy osztályból tetszQleges számú objektum példányosítható.
- A legegyszerqbb mód egy osztály típusú változó definiálása. Formája:
[módosítók] azonosító = new Osztálynév ( [paraméterek] )
- A () zárójelpár a paraméterek hiányában is kötelezQ.
- A folyamat:
- Lefoglalódik az objektumnak szükséges hely.
- Inicializálódik az objektum (a programozó befolyásolhatja az inicializálást).
- A lefoglalt memóriaterületre való hivatkozás kerül a változóba.





9. Hivatkozás típusú változó (referencia) fogalma, az egyszerq típusú és az osztály típusú változók
-----------------------------------------------------------------------------------------------------
közötti különbség. Hivatkozás az objektum elemeire.
---------------------------------------------------

Hivatkozás:
A Java-ban kulcsfogalom.
Osztály típusú változó mindig hivatkozás, nem objektum!
Hivatkozás típusú változó:
- értéke cím (ebben hasonlít a pointerre)
- használata indirekció nélkül magát az objektumot jelenti a kifejezésekben,
- az értéke (a cím) a programozó számára hozzáférhetetlen (és szükségtelen is).
Következmény: objektum csak futás közben, dinamikusan (a new operátor használatával)
hozható létre.
Hivatkozással végezhetQ mqveletek:
- definíció,
- értékének beállítása objektum létrehozásával,
- értékadás hivatkozások között,
- értékének beállítása a null konstansra (sehová nem mutató hivatkozás),
- két hivatkozás összehasonlítása (a == mqvelettel)
- használható objektum elemére való hivatkozásban.
Egyszerq típusú és osztály típusú változó:
Egyszerq típusú változó: a deklarációja egyben definíció is, hely foglalódik a memóriában, és a továbbiakban
a változó az ott tárolt értéket képviseli.
Osztálytípusú változó: deklarációja hatására csak egy cím számára foglalódik memória. Ezt a címet egy
példányosított objektum címére kell beállítani. Ezután a változó az általa hivatkozott objektumot fogja képviselni.
Objektum elemeire való hivatkozás:
Osztályon belül (mivel egy hatáskörben vannak): névvel
Minden más esetben az objektum (egyes esetekben az osztály) nevével minQsítve, a . (pont) operátorral.
Metódusra való hivatkozásnál aktuális paramétereket is kell adni, és a hivatkozás a metódus aktivizálását
(meghívását) jelenti.


10. Hozzáférési kategóriák és jelentésük. Használatukra vonatkozó konvenciók.
-----------------------------------------------------------------------------

Hozzáférési kategóriák:
feladata a hozzáférési kategóriák megadása.

Módosító Hozzáférési kategória
--------------------------------
nincs félnyilvános: csak az azonos csomagban levQ osztályok érhetik el
public nyilvános: bármely csomagban levQ bármely osztályból elérhetQ.
private privát: más osztályból nem, de az adott osztály összes példánya számára elérhetQ.
protected védett: magyarázata majd az öröklésnél

Osztály csak nyilvános vagy félnyilvános lehet.
Adattag és metódus bármelyik kategóriába tartozhat
Az információrejtés alapelvének betartása érdekében minden elem a lehetQ legszqkebb kategóriát kapja.
Szokásos konvenciók:
- Egy osztály csak akkor legyen public, ha általános használatra szántuk.
- Az adattagok private (esetleg protected)
minQsítést kapjanak. Ha szükséges, metódusokon keresztül legyenek elérhetQk. A public adattag hiba!
- A metódusok közül csak a "külvilág" számára szükségesek (az osztály interface-ét jelentQk) legyenek
public minQsítésqek.


11. A this pszeudó változó és szerepe.
--------------------------------------

Minden objektumhoz
- saját adattag-készlet tartozik
- az osztály összes objektumára közös a tagfuggvény-készlet.
hogyan tud a tagfüggvény az aktuális objektum adattagjaira hivatkozni?
- Minden objektumhoz létezik az elQredefiniált this pszeudó változó, amely az adott objektumra
hivatkozik.
- Ezen keresztül éri el az adattagot a tagfüggvény.
- A this pszeudó változó explicite is használható.


12. Metódusnév túlterhelés (overloading).
-----------------------------------------

Egy osztályon belül több metódus is definiálható
- azonos névvel
- de különbözQ paraméterszignatúrával.
- Paraméterszignatúra: a formális paraméterek száma és típus-sorrendje.
- Figyelem: a visszatérési érték típusa ebbQl a szempontból közömbös!
- A polimorfizmus egyik implementációs formája
- "környezet": paraméter szignatúra
A függvény hívásakor a fordítóprogram az
aktuális paraméterek szignatúráját sorban egyezteti az összes azonos nevq definíció formális paramétereinek
szignatúráival. Ennek az egyeztetésnek az alábbi eredményei lehetnek:
- Pontosan egy illeszkedQt talál: ilyenkor az ennek megfelelQ függvény hívását fordítja be.
- Egyetlen illeszkedQt sem talál: hibajelzést ad
- Több egyformán illeszkedQt talál: hibajelzést ad





13. Konstruktor fogalma, definíciójának és használatának szabályai. Az implicit konstruktor.
--------------------------------------------------------------------------------------------

Egy objektum adattagjai a létrehozáskor a default értékekkel inicializálódnak.
Ez nem mindig felel meg a programozónak.
Konstruktor: egy automatikusan meghívódó kódrészlet ("függvény").
A konstruktor majdnem olyan, mint egy metódus, az alábbi korlátozásokkal:
- neve egyezik az osztály nevével
- nem lehet visszatérési értéke (még void sem!)
- legfeljebb "üres" return utasítást tartalmazhat (de az sem kötelezQ)
- már létezQ objektumra nem hívható meg közvetlenül
- nem öröklQdik
- módosító csak hozzáférést szabályozó kulcsszó lehet.
A konstruktor legtöbbször public minQsítésq.
Példányosítás konstruktorral:
Minden példányosítás esetén az alábbi folyamat zajlik le:
- helyfoglalás az adattagoknak
- az adattagok inicializálása (default értékkel, vagy az inicializáló kifejezésnek megfelelQen)
- a konstruktQr meghívódása a példányosításban megadott aktuális paraméterlistával.
A konstruktornak szóló paraméterek a példányosítás során az osztálynév után, ()
zárójelpárban, vesszQvel elválasztva adhatók meg.
A konstruktor felhasználhatja az osztályban deklarált valamennyi adattagot.
Az adattagok kezdQértéke az elQzetes inicializálásnak megfelelQ lesz.
A konstruktQr az osztály bármely metódusát használhatj a.
A metódusnév túlterhelés szabályainak betartásával egy osztályban tetszQleges számú konstruktor definiálható.
A példányosítás utáni elsQ metódushívás feltételezheti, hogy valamelyik konstruktor már lefutott.
- Figyelem! Hibát okozhat, ha a konstruktor olyan metódust hív meg, amely feltételezi valamelyik konstruktor
lefutását!
Egy metódus nem tudja megállapítani, hogy melyik konstruktor inicializálta az objektumot.
Egy konstruktor elsQ utasítása lehet ugyanazon osztály vagy az Qsosztály egy másik konstruktorának meghívása
- Formátum:
this(aktuális paraméterlista)
- az aktuális paraméterlista nem használhatja fel az adattagokat.
Implicit konstruktor:
Egy osztálynak mindig van legalább egy konstruktora.
Ha a programozó definiál legalább egy konstruktort, akkor azok lesznek a konstruktorok.
Ha a programozó egyet sem ír, akkor az osztályhoz a fordító hozzárendeli az implicit konstruktort,
(default constructor)
- Ez public, paraméter nélküli és a törzse üres.
Következmény:
- Ha egy osztálynak nincs explicite definiált konstruktora, csak paraméter nélküli példányosítás lehetséges.
- Ha egy osztálynak van legalább egy explicit konstruktora, akkor paraméter nélküli példányosítás csak akkor
lehetséges, ha a programozó definiált paraméter nélküli konstruktort.
- Az implicit konstruktor ilyenkor nem rendelQdik hozzá az osztályhoz.


14. Objektumok megszqnése. A szemétgyqjtQ mechanizmus. A finalize metódus.
---------------------------------------------------------------------------

A C programozási nyelvben a futás közben, dinamikusan lefoglalt memória területek helyes felszabadításáért a
programozó felelQs. Ez számos hiba forrása lehet. A Java-ban csak dinamikusan lehet objektumot létrehozni,
de nem kell - és nem is lehet -megszüntetni.
Az objektumok automatikus megszüntetése a szemétgyqjtQ mechanizmus (garbage collector) feladata..
Számontartja, hogy egy objektumra hány referencia hivatkozik. Ha már nincs érvényes referencia, az objektum
haszontalanná válik. Egy külön szálban futó szemétgyqjtQ felszabadítja a felesleges objetumokhoz tartozó
memória területet. Hogy ez pontosan mikor történik meg, nem tudjuk.
Egy objektumra hivatkozó referencia megszqnik, például ha
- megszqnik maga a változó,
- megváltozik a változó értéke,
- a változónak a null értéket adjuk.
A f inalize metódus:
Minden osztályhoz definiálható egy
protected void finalize() throws Throwable
metódus.
- A szemétgyqjtQ hívja meg, még az objektum tárterületének megszüntetése elQtt.
- Feladata minden olyan mellékhatás megszüntetése, amelyet az objektum az élete során okozott.


15. Java csomagok és fordítási egységek. MinQsített (teljes) hivatkozás. Az import direktíva.
---------------------------------------------------------------------------------------------

A Java-ban a programok tagolásának eszköze a csomag (package).
- Összetartozó típusok (osztályok és intefészek) egysége
Minden csomagnak saját névtere van.
- ElkerülhetQk az egyezQ típusnevekbQl adódó problémák.
A csomagok a hozzáférési kategóriák használatának eszközei
A Java-ban a csomagokban lehetnek alcsomagok, a csomagszerkezet fastruktúrát alkot. A csomag tartalmát a
fordítási egységek adják meg. A fordítási egységekben találhatók a csomaghoz tartozó kódok, azaz típusok
(osztályok és interface-ek) definíciói.
A csomagokra hierarchikus szerkezetq azonosítóval hivatkozhatunk.
Az A csomag B alcsomagjában levQ C alcsomag: A.B.C
Az egyes csomagokban található típusokra teljesen analóg módon hivatkozhatunk. Például a fenti csomagban
definiált T típus: A.B.C.T

Csomagok és fordítási egységek összerendelése:
- leképezés az operációs rendszer file-rendszerére
- tárolás adatbázisban.
A továbbiakban az elsQ megoldással foglalkozunk.
- A fordítási egységek file-ok . java kiterjesztéssel
- a csomag-alcsomag nevek pedig katalógus nevek, amelyekbQl útvonal generálódik
A fenti példában említett A.B.C csomag T típusának megkeresése a következQképpen történik:
- egy elQre kijelölt katalógus A alkatalógusának B alkatalógusában levQ C alkaltalógusban a Java fordító a
T.java filet keresi
- a lefordított byte-kódot ugyanoda T. class néven helyezi el.
Egy fordítási egység az alábbi részekbQl áll
csomagdeklaráció
importdeklarációk
típusdeklarációk (osztály vagy interface deklarációk)
Egy másik csomagban deklarált publikus típust a teljes azonosítójával kell megnevezni. Ezt rövidíthetjük
az adott típus importálásával:
import A.B.C.T
- Ezután a fordítási egységben elég a T típusnév megadása.
- A fordító mindig a teljes azonosítót használja a munkája során.
Egy csomag valamennyi típusát is importálhatjuk az alábbi formában:
import A.B.C.*
Minden fordítási egységbe automatikusan importálódik a java. lang csomag összes
típusa, (import java. lang. *)
Szerepe nem azonos a C #include
direktívájával, mert nem másolódik be hatására semmi, csak a hivatkozást egyszerqsíti.


16. Osztályváltozó és osztálymetódus.
--------------------------------------

A statikus adattag az osztály valamennyi objektuma számára egy példányban létezik, azok osztottan használják.
Miután az osztály egészére vonatkoznak, szokás osztályváltozóknak is hívni. (Globális változó az osztályra nézve.)
Nem a this pszeudó változó segítségével történik az elérése. Az objektumok elQtt kell létrejönnie.
Inicalizálása az osztály inicializálás során történik.
- A JVM akkor inicializál egy osztályt, amikor elQször történik rá aktív hivatkozás (példányosítás, metódus
hívás vagy változó hozzáférés).
Az osztályon belül a nevével hivatkozhatunk. Hivatkozhatunk rá bármely objektum példánnyal. Az osztály bármely
metódusa használhatja.
Mivel egyetlen példány létrehozása nélkül is létezik, a hivatkozásban osztálynevet is használhatunk.
Osztálymetódus:
Bár az eddigi metódusok csak egy példányban léteznek minden példány számára, de mqködésükhöz egy aktuális példány
szükséges. Ezeket hívhattuk volna példánymetódusoknak is.
Metódus is kaphat static minQsítést: osztálymetódus.
Az ilyen metódus a példányváltozókhoz és a this pszedóváltozóhoz nem férhet hozzá.
- Következmény: csak osztályváltozókat és más osztálymetódusokat használhat.
Akkor is végrehajtható, ha az osztálynak nem léteznek példányai.
Hivatkozás:
- osztályon belül a nevével
- minQsített hivatkozásnál bármely példány vagy az osztály nevével.
Egy program indulásakor nincs, ami példányt hozzon létre, ezért a main metódusnak
minQsítésqnek kell lennie.


17. A final minQsítésq adattagok és metódusok.
----------------------------------------------

A final minQsítQ többféle célra is használható a Java nyelvben. Jelentése mindig "valami olyasmi, ami késQbb
nem változtatható meg". Rokon a C nyelv const minQsítQjével, de attól sokoldalúbb.
A final adattagok:
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óak.
- Minden példányosítás során végrehajtódik, tehát a változó értéke objektumonként egyedi lehet.
- Egyetlen metódus sem változtathatja meg az értékét.
static final adattagok:
Deklaráció:
static final típus azonosító=inicializáló kif.
- Az inicializáló kifejezés 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 minden példánya
számára ugyanaz.
- Egyetlen metódus sem változtathatj a meg az értékét..
Az egyszerq típusú final adattagok egy konstans
értéket képviselnek. (Nagyjából megfelelnek a C const változóinak.)
Az osztálytípusú final adattagok egy konstans referenciát képviselnek.
- Nem változtatható meg az értéke, hogy egy másik példányra hivatkozzon.
- Semmi sem akadályozza azonban azt, hogy a hivatkozott objektumot megváltoztassuk.
- A Java-ban egy objektum nem deklarálható konstansnak.
KezdQérték nélküli final adattag:
Másik elnevezése üres konstans, angol elnevezése: blank fínal.
A deklarációból az inicializáló kifejezés (az = jellel együtt) elhagyható.
Az adattag az elsQ használata elQtt inicializálandó. (A fordító ezt ellenQrzi!)
Veszélyes lehet, ezért az ajánlás:
- ne használjuk,
- ha használjuk, akkor minden konstruktQr állítsa be az értékét.
A f inal módosítóval megjelölt osztályoknak nem lehet leszármazottja.
- Az ilyen osztály mqködése nem változtatható meg az öröklQdési mechanizmussal.
A módosítót a hozzáférési kategória módosítója után írjuk. Például:
public final class System { ... }
Egy metódus kaphat final minQsítQt.
A final minQsítésq 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 mqködést.


18. Az öröklQdés fogalma, szintaktikai szabályai. Statikus és dinamikus típus fogalma.
--------------------------------------------------------------------------------------

Ÿ0¡0__®|²|ÜÅô¸%¼%fYjY

. 0 2 ëÙëÙëÙë×ëÙëÙëÙëÈh[-h_|HCJOJQJaJU"h[-CJOJPJQJaJnH tH (h[-h[-CJOJPJQJaJnH tH  " Ž j
~
F


n

´

à

¸
$ j šœžfh’À^ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-^ŠÄ
>’lšœ® ¾ J.npŽ2ˆŠ°N(tÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-tÄÆÔ*’¦îzö€Ptv°P"-|-~-€-ê-T V !î!ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-î!¶".#ì# $‚$ü$%J%b%¢%Î%ò%0&H&’&È&â&''P'Š'
(9(~(™(ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-™(Ï(Ð(Ñ(")s)t)x*¢*Ö* +<+z+®+,v,¾,î,X-º-ž.¼.Ê./:/~/ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-~/ì/
0{0ž0Ÿ0¡0¢0ë04151n1ž1Ý12¬2`3Ö3z4Ä4B5ì5–6˜6š6<7ÝÝÝÝÝÛÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-<7Þ7à7¢8D9–9:H:¸:R;Š;¤;¸;ú;>J>‚>¬>Ö>ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-Ö>@?Œ?Ò?@b@ª@A’A”AÄAúARBtB¤BCxCDDDŠD EEHE¼E(FÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-(FÀFÚFxGôG H‚HºHæHðHIdI°IJJTJ„JÒJúJBKlK´KL@L®LDMÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-DMÐM(N@NANBNƒNÄNÅN×NùNUOÐPQ¤Q9ROR«RæRñRþRS’TBUàUjVÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-jVW6WXW„WÂWêWXbX¼XHYôYZ Z [z[ð[€\ò\b]€]Ü]|^___ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-__Ö_Q`…`¹`º`Æ`ß`a2a\a©aùaœbºbcczc¼cNd¶dereLf¢fýÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-¢fpgXhžh

iÚiXjnjojpj¾j

k
k%kQkRksk”kFlÚl”mømúmZnÀnŽoÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-Žo¸oLp¢pnq s

s2svsòs€t@uXuÂu*v,v.v‚vÖvØv:wÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-:w\w¬w>xÌx,ytyÆyžz*{â{D|ª|¬|®|²|l}~ ~c~Œ~Î~:jŽ€ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÛÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-Ž€ö€„Þ‚Ž‚Ì‚Œƒ4„Ô„8…Ð…\†Ð†¬‡pˆL‰f‰ŠôŠ

‹H‹Ì‹ø‹1ŒÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-1Œ‰ŒíŒ4B°<ŽÈŽVXZòŠŒf‘>’˜’\“4”••–<–|–Æ–ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-Ɩð–6—Œ—ž—@˜™™™À™|š~šüšn›¶›&œœœpDž”žŸ€ŸT Š Œ ê ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-ê R¡„¡æ¡T¢ö¢¬£„¤°¤.¥ˆ¥ª¥Î¥¦‡¦¦¦µ¦ð¦2§v§…§Õ§ô§(¨Ö¨Ø¨ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-بڨ(©v©x©Tª:«¬n¬H­ˆ­h®–®`¯€¯f°Ú°D±ê±„²³³V³Þ³‚´¸´ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-¸´º´¼´µxµzµV¶ü¶"·~·9¸š¸Ñ¸é¸õ¸$¹…¹–¹ º6º¨º»»¼°¼X½ÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-X½È½

¾Š¾ ¿À¿À(ÀªÀ6ÁÖÁ^¢Âê˜ÃzÄ|Ä~Ä,ÅÚÅÜÅÄô
õBõlõöÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝ"
Æ2”( ¼
P äx

4 È#\'ð*„.2¬5@9dðgd[-Egy osztály deklarálható valamely más osztály (Qs osztály vagy szülQ osztály) leszármazottjaként.
A leszármazott osztály rendelkezik
- a szülQ osztály tagjaival
- a saját tagjaival.
Az Qs osztály elemeinek az elérése a leszármazott osztályból nem feltétlenül garantált.
Az öröklQdési hierarchia tetszQleges lehet.
- Egyetlen korlátozás: egy osztály még közvetett módon sem lehet saját maga Qse.
Az Qs osztály továbbra is használható önmagában is.
Ha egy Java osztálynak nincs megadva Qse, automatikusan az Object osztály leszármazottja
lesz. Minden osztálynak van tehát egy közös Qse. Angol kifejezések
- öröklQdés: inheritance
- Qsosztály: base class
- leszármazott osztály: derived class
Szintaktika: [módosító] class név extends Qsosztály
Mivel egy leszármazott az Qse minden tulajdonságával rendelkezik, bármikor használható Qs típusú objektumként is.
(Fordítva általában nem igaz!)
Ezért egy Qs típusú hivatkozás használható leszármazott típusú objektumhoz is.
- Következmény: bármely objektumra hivatkozhatunk Object típusú hivatkozással.
Egy változónak van statikus és dinamikus típusa.
Egy változó statikus típusa az, amelyet a deklarációjában megadtunk.
- Ez a változó teljes élete alatt változatlan.
Egy változó dinamikus típusa az általa éppen hivatkozott objektum tényleges típusa.
- Ez a program futása során bármikor változhat.
A változó dinamikus típusa csak a statikus típus vagy annak leszármazottja lehet.


19. Konstruktorok az öröklQdés során.
-------------------------------------

A konstruktor nem öröklQdik (nem metódus).
Mind az Qsosztály, mind a leszármazott osztály rendelkezik konstruktorral (akár többel is).
Egy leszármazott objektum példányosításánál tisztázni kell:
- a konstruktorok végrehajtási sorrendjét,
- azt, hogy hogyan választhatjuk ki az Qsosztály konstruktorai közül a végrehajtandót.
Konstruktorok végrehajtási sorrendje:
- ElQször mindig az Qsosztály, majd a leszármazott osztály konstruktora hajtódik végre.
- A pontos sorrend:
- az Qs osztály adattagjainak inicializálása (az inicializátor kifejezések kiértékelésével)
- az Qs osztály konstruktorának végrehajtódása
- a gyermek osztály adattagjainak inicializálása
- a gyermek osztály konstruktorának végrehajtódása
Ps osztály konstruktorának kijelölése:
- A gyermek osztály elsQ sorában szerepelhet egy
super(paraméterek)
konstruktorhívás.
- A paraméterlistának az Qs 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 kezdQdik a
konstruktor végrehajtása.
Következmények:
- Ha a gyermek osztálynak van olyan konstruktora, amelyben nincs explicit Qs konstruktQr hívás, a szülQ osztálynak
kell legyen paraméter nélküli konstruktora.
- Ha a gyermek osztálynak csak implicit konstruktora van, az is az Qs osztály paraméter nélküli konstruktorát hívja meg.
- A fenti szabályok megsértését a fordító hibajelzéssel honorálja!


20. Felüldefiniált metódusok: a definiálásra és a hívásra vonatkozó szabályok. Használatának célja.
---------------------------------------------------------------------------------------------------

- Egy Qs osztálybeli metódus felüldefiniálásához a következQ feltételeknek kell teljesülnie:
- A felüldefiniáló metódus visszatérési típusának, nevének, és paraméter szignatúrájának meg kell egyeznie az Qs
osztálybeli metóduséval.
- A felüldefiniáló metódus hozzáférési kategóriája nem lehet szqkebb az eredeti metódusénál. (BQvebb lehet.)
- A felüldefiniáló metódus csak olyan ellenQrzött kivételeket válthat ki, amilyeneket az eredeti is kiválthat.
Felüldefiniált metódus hívása:
- A hívásban szereplQ valamennyi információ illik minden metódus változatra - ez alapj án nem lehet dönteni.
- A döntés alapja a hivatkozás dinamikus típusa.
- A döntés csak futás idQben történhet.
- A felüldefiniáló metódus az Qs osztály metódusát elérheti a
super. metódusnév (...) formájú hivatkozással.
Az leszármaztatás lehetQséget teremt, hogy viselkedésformákat örököljön egy osztály. Bizonyos esetekben a változatlanul
öröklQdQ viselkedés nem felel meg a leszármazottnak. A felüldefiniálás lehetQsége ezt a problémát tudja megoldani.
A késQi kötés automatizmusa a használatot kényelmessé teszi.
- Nem kötelezQ a leszármazás minden szintjén felüldefiniálni a metódust.
- Egy osztály örökölheti a felüldefiniált metódust.
- Statikus metódus nem definiálható felül. (Értelmetlen lenne, mert hívása a statikus típus alapján történik.)
- Ugyanolyan nevq statikus metódus a leszármazott osztályban elfedi az Qs osztály metódusát.


21. Abszrakt metódus és absztrakt osztály.
------------------------------------------

Gyakran elQfordul 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 minQsítQvel kell ellátni. Ha az osztály tartalmaz absztrakt metódust,
az osztályt is az abstract minQsítQvel kell ellátni.
példa: public abstract class Sikidom {
public abstract double terület();
public abstract double kerület();
A fenti osztály definíció az alábbi tervezési meggondolásokat fejezi ki:
- minden síkidomnak van területe és kerülete,
- nincs algoritmus a terület és kerület számítására a síkidom tulajdonságainak ismerete nélkül.
Formai szabályok:
- Absztrakt egy metódus, ha nincs törzse. Megvalósítást (törzset), majd csak a felüldefiniálás során kap.
- Absztrakt metódusnak nem lehet módosítója a private, final, static hiszen az ilyen
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 Qs 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. Az absztrakt osztály is használható
referencia statikus típusaként.
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 meghatározott metódusok definiálására.
HibalehetQségek:
- Törzs nélküli metódus, abstract minQsítQ nélkül.
- Absztrakt metódust tartalmazó osztály
minQsítQ nélkül.





22. A Java interface fogalma, a definíció szintaktikája. Interface implementálása.
----------------------------------------------------------------------------------

Egy osztály interfészén a nyilvános elemeinek összességét értjük, ami a használatához szükséges. Az információ
rejtés elve miatt, általában csak metódusokból áll. Specifikáció, tervezés során készül el. Kényszeríti az
osztály készítQjét a megfelelQ elemek implementálására. Protokollok" (a kommunikáció szabályai) az objektumok között.
Interfészek JAVA-ban:
Mivel nincs globális változó, konstans, ezért lehetnek adat részei is. Szintaktikája hasonló az osztályhoz, de a
kulcsszó helyett interface. 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.
Megállapodás, hogy I"-vel kezdQdik a neve.
A "legabsztraktabb osztály", mivel tartalma:
- Csak a metódusok prototípusa, nincs implementáció
-Név
- Paraméter szignatúra
- Visszatérési érték
- Minden metódus implicite
-public
-abstract
Konstans definíciókat is tartalmazhat, azok minQsítése alapértelmezés szerint
- public
- static
- final
Nincs statikus inicializáló blokkja, csak a deklaráció során inicializálható.
Értékét be lehet állítani:
- Futás idQben, ha az inicializálás csak akkor kiértékelhetQ elemeket tartalmaz
- Fordítási idQben, ilyenkor hagyományos konstans.
Szintaktika:
[módositó] interface lazonosito [extends Iosl[,Ios2]]
{
[Elemek deklarációi]
}
Módosító lehet:
-public
-abstract (elavult, mert minden interfész alapértelmezés szerint absztrakt)
Interfészek kiterjesztése:
Minden interfész kiterjeszthet egy vagy több interfészt.
Fontos, hogy önmagát nem terjesztheti ki sem közvetve, sem közvetlen. Nem alakulhat ki körkörös lánc.
Ha egy osztály implementál egy interfészt, akkor köteles annak minden metódusát implementálni!
Szintaktika: [módosító] class osztálynév [extends Qsosztály] [implements Iint1,Iint2,& ]
Az implementált elemeket nem módosíthatja. Metódusok esetében a fejlécnek teljesen egyeznie kell!
Azonos nevq elemet az öröklQdés során és az implementálás során nem kaphat meg (fordítási hiba).
- Azaz például az Qs osztályban és valamelyik implementált interface-ben nem lehet azonos nevq metódus.
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 (megadhatja annak statikus típusát). Bármelyik osztállyal helyettesíthetQ, amely implementálja
(megadva ezzel a dinamikus típust).


23. A kivétel fogalma és a kivételkezelés utasításai a Java nyelvben. Kivétel keletkezése.
------------------------------------------------------------------------------------------

Futás idejq hiba / nem normális eset. Általában valamilyen hibához kötQdik. Számos beépített kivétel.
Saját kivétel definiálható. A Java szemléletében a kivétel egy objektum, ami a kivétel bekövetkezésekor jön létre.
Saját (programozói) kivétel kiváltása:
throw objektum
A kivétel keletkezésekor szokásos teendQk :
- értesíteni a felhasználót, vagy naplózni,
- maj d valamilyen plusz mqveletek után
- folytatni az alkalmazást,
- esetleg kilépni, súlyos hiba esetén.
- EllenQrzött kilépés lehetséges. (Például elQtte minden értékes adat elmenthetQ.)
- A kivétel objektum tartalmazhat információkat a kivétel keletkezésérQl, amelyet felhasználhatunk.
Kivételkezelés utasításai:
try - védett kód (blokk) kijelölése
throw - kivétel dobása, generálása
catch - kivétel elkapása, a blokkban definiált utasítások végrehajtása
finally - végül, akár volt kivétel, akár nem volt, lefut
- A védett kódot try blokkban helyezzük el
try { utasítások }
- A blokkban keletkezett kivételt mi kezelhetjük le.
- A blokkok egymásba ágyazhatóak.
- Érdemes minél kisebb blokkokat definiálni.
- Kivétel keletkezik, ha a try blokkban egy throw utasításra fut a vezérlés. Formája:
throw new kivételTípus (konstruktor paraméterek)
- A throw paramétere nem maradhat el!
Kivétel keletkezése:
Kivétel keletkezhet az alábbi módokon:
- Implicit módon: a JAVA rendszerbQl indul ki, azaz valamely utasítás vagy API elem végrehajtása során keletkezik.
- A programozó kódjában keletkezik, közvetlenül egy throw utasítás végrehajtásával.
- Aszinkron kivétel, amely a program egy másik szálán lépett fel.
A kivétel keletkezése esetén:
- Az elsQ kivételt kiváltó utasítással befejezQdik a try blokk végrehajtása.
- Kilép a blokkból a vezérlés, rendcsinálással
- verem visszaállítása,
- lokális objektumok megszüntetése,
- védett változók lezárásának megszüntetése.
- Létrejön a throw utasításban megjelölt objektum egy példánya.


24. Kivétel elkapása és lekezelése. A finally blokk szerepe.
------------------------------------------------------------

A kivétel elkapása:
- A kivétel objektumot minden esetben a virtuális gép hozza létre.
- A kivétel lekezelését szolgáló utasítások catch blok(kok)ban helyezkednek el. Formája:
catch (tipus paraméter) {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.
A virtuális gép megkeresi a sorrendben elsQ "illeszkedQ" blokkot, és annak végrehajtásával folytatódik a program.
Az illeszkedés feltétele: a kivétel objektum típusa megegyezik a catch blokk fejében megadott
típussal, vagy annak leszármazottja.
A kiválasztott blokk végrehajtása során a paramétere úgy használható, mint a függvények esetén a formális paraméter.
- így lehet felhasználni a kivétel objektumban tárolt információkat.
A futás az utolsó catch utáni sorral folytatódik.
Minden ellenQrzött kivételt kezelni kell (fordítási hiba, ha van lekezeletlen kivétel)!
Ha ha a catch blokk végrehajtása során újabb kivétel keletkezik, az eredeti kivétel kezelése megszakad,
és az új kivétel lekezelése kezdQdik el. Ha egyetlen catch blokk sem illeszkedett a kivételre, a keresés a beágyazó
try blokk catch blokkjaival folytatódik, amíg sikeres nem lesz.Ha a keresés belülrQl kifelé minden try blokkot
megvizsgált, és nem talált egyezést, a program terminálódik, és kiíródik a kivétel stack. (Lekezeletlen kivétel.)
Megjegyzés: a try blokk kivételt kiváltó utasítása utáni utasítások tehát mindig kimaradnak!
A finally blokk:
Nem kötelezQ. A cacth(ek) után szerepelhet. Az utolsó catch blokk és a f inally blokk között nem lehet más utasítás.
Nem lehet paramétere. 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.
Alkalmas például fájlok, adatbázis kapcsolatok lezárására.





25. ElQre definiált és saját kivétel osztályok.
-----------------------------------------------

A kivétel  mivel objektum- valamely definiált osztály példánya kell legyen (kivétel osztály).
Minden kivétel osztály a Java. lang. Throwable osztály leszármazottja kell legyen, de ez általában közvetve valósul
meg. A Java.lang.Throwable osztálynak van számos elQre definiált (a Java API részét képezQ) leszármazottja.

Kivétel osztályok:
Az Exception osztály:
Van egy String paraméterq konstruktora, amellyel egy leírás definiálható a kivételhez.
Számos hasznos metódust definiál, amely örökölQdik, és szükség esetén felüldefiniálható.
- String toString (): visszaad egy sztringet, amely az osztály azonosítójából és a konstruktorban megadott sztringbQl áll
- String getMessage (): visszaadja a konstruktorban megadott sztringet.
- printStack (): kiírja a keletkezett kivételeket, a keletkezésük sorrendjében és megadja a keletkezésük helyét.
- Hasznos lehet a hibakereséshez.
- Paraméter nélkül a standard hibacsatornára ír, de paraméterben megadható, hogy hová írjon.
Az Error és a RuntimeException osztályú kivételek nem ellenQrzött kivételek.
Az összes többi ellenQrzött kivétel.
Ajánlott: minden programozó által definiált kivétel az Exception osztályból származzon.
- Valamennyi ilyen kivétel ellenQrzött kivétel, kötelezQ lekezelni.
Konvenció: minden kivételosztály neve ValamiException legyen, ahol a Valami a kivétel jellegére utal.
Saját kivétel osztály:
- Az Exception leszármazotja legyen.
- Név konvenció! (ValamiException)
- A konstuktorának a paraméterei között legyen egy String, amivel az Qsosztály konstruktorát hívja meg.
- A további paraméterek a hibára jellemzQ adatokat fogadhatnak.
- A metódusai a catch blokkban használhatók a kivétel lekezelése során.
A kivételek csoportosítására célszerq leszármazási hierarciát létrehozni a saját kivételosztályok között is.


26. Az ellenQrzött és nem ellenQrzött kivétel fogalma. Kivételek specifikálása.
-------------------------------------------------------------------------------

Nem ellenQrzött kivételek:
Az Error és a RuntimeException osztályból származó kivételek
- Error: rendszerszintq hiba a JVM mqködésében. (Pl. OutOfMemoryError)
- RuntimeException: a program számos pontján
keletkezhetnek, ezért nem célszerq kötelezQvé tenni a lekezelésüket. (Pl. ArrayIndexOutOf Bounds).
A programozó, ha akarja, lekezelheti.
Lekezeletlen kivétel esetén a program terminálódik, és kiíródik a kivétel stack.
EllenQrzött kivételek:
A fordítóprogram hibát jelez, ha nincs lekezelve! A kivétel lekezelésének módjai:
- A try blokk utáni valamelyik catch blokk elkapja,
és teljes mértékben lekezeli. A metódus futása folytatódik a catch blokkok utáni elsQ utasítással.
- A try blokk utáni valamelyik catch blokk elkapja, és részben lekezeli.
- A lekezelés egy olyan throw utasítással fejezQdik be, amely a paraméterül kapott kivétel objektumot tartalmazza.
A metódus futása befejezQdik.
- A metódus fejlécében ezt a kivételt specifikálni kell.
A metódus nem kezeli le a kivételt, de specifikálja azt a fejlécében. A metódus futása befejezQdik.
- Ez akkor szükséges, amikor az adott metódus nem, csak a hívó tudja értelmesen lekezelni a kivételt.
- A hívó is tovább adhatja a kivétel lekezelését, így a kivétel tetszQleges hívási mélységbQl is eljuthat oda,
ahol lekezelhetQ.
Kivételek specifikálása:
Ha egy metóduson belül kivétel keletkezhet, de nem tartalmaz catch utasításokat annak kezelésére.
Ilyenkor a metódus hívójának kell azokat lekezelni. Erre számítania kell, ezért az ilyen kivételeket a metódus
fejlécében specifikálni kell.
Formája:
metódusnév ([parameterlista]) [throws kivételosztály1 [, kivételosztály2, ...] ]


27. Beágyazott osztályok.
-------------------------

Osztálydefiníció a programon belül:
A Java nyelvben a definíciók beágyazhatók
- osztály hatáskörbe (tagosztályok)
- utasításblokkba (lokális osztályok)
- egy utasításba (névtelen osztályok)
Tagosztály:
Osztálydefiníció egy osztály (befoglaló osztály) hatáskörében.
A befoglaló és a tagosztály kölcsönösen hozzáférnek egymás tagjaihoz (a private
tagokhoz is). A nevek minQsítése nem szükséges. A tagosztályok is öröklQdnek.
A befoglaló osztályon kívüli hozzáférés a tagosztály hozzáférési kategóriájának megfelelQen lehetséges.
A tagosztály tagjaira való hivatkozáshoz a nevet minQsíteni kell.
Statikus tagosztály:
Static módosítóval
Emellett még public, protected, private módosítója is lehet.
A program csomagon belüli tagolásához: egy típus, amely a befoglaló osztály hatáskörében van.
Használható a befoglaló osztályon belül típusként. Ha nem private, a programban ugyanúgy használható,
mint bármely más osztály. (Kivéve a bonyolultabb hivatkozást.)
Alkalmazási területei:
- Egy segédosztályt el akarunk rejteni a külvilág elQl. (private tagosztály).
- Egy osztály megvalósításakor egy olyan segédosztályra van szükség, amelyeknek hozzá kell férnie az
osztály privát tagjaihoz.
- Ki akarjuk fejezni, hogy egy osztály vagy interface egy másiknak logikai alárendeltje.
Nem statikus tagosztály:
A befoglaló és a tagosztály példányainak kapcsolatát implementálhatjuk vele.
- A tagosztály egy adott példányához a befoglaló osztály pontosan egy példánya tartozik.
- EllenkezQ irányban: A befoglaló osztály egy példányához a tagosztály tetszQleges számú (beleértve a nullát is)
példánya tartozhat.
A fenti kapcsolat automatikuson rögzítQdik, és fennáll mindaddig, amíg a befoglaló osztály példánya "él".
- Ha például egy "külsQ" osztály metódusa példányosít egy beágyazott típusú objektumot, az a befoglaló
objektumhoz kapcsolódik, és túléli a metódust (nem úgy, mint egy egyszerq osztály lokális példánya.)


28. Az osztály interface fogalma és a jól tervezett osztály interface jellemzQi.
--------------------------------------------------------------------------------

A jól tervezett osztály belsQ részleteinek ismerete szükségtelen a használatához
Az osztály használata csak annak interface-e segítségével lehetséges.
Egy objektum a külvilággal csak az interface-en keresztül képes kommunikálni.
Osztály interface fogalma:
- A public metódusok összessége.
Ezeket kell ismernie az osztály használójának.
Használatukhoz nem szükséges ismerni az osztály implementációs részleteit.
- protected metódusok és adattagok.
KibQvíti az interface-t a leszármazott osztályok számára
Használata veszélyeket rejt magában, mert implementációs függést hoz létre az Qs és a leszármazott osztály között.
Technikai szempontból az interface részét képezik az esetleges public minQsítésq adattagok is, de használatuk
nem ajánlott.
A jó osztály interface:
Teljes
-minden funkciót tartalmaz, ami az osztálytól elvárható
-nem az adott alkalmazás szempontjai határozzák meg
-újrafelhasználható egységet alkot az osztály
Minimális
-nem tartalmaz a felhasználó számára érdektelen (esetleg veszélyes) elemeket
-belsQ felhasználású funkciók private vagy protected minQsítésqek
-a belsQ áttervezés nincs rá hatással
KezelhetQ méretq
-általában legfeljebb néhány tíz metódus
-A sok funkció között nagyobb valószínqséggel lesznek hasonlóak (félreértés veszélye!)
-A terjedelmes interface általában tervezési hibára utal:
Az interface része belsQ funkció is
Az osztály interface részei:
KezelQ tagok és metódusok
KonstruktQrök, örökölt "kész" metódusok (pl. toString, clone, stb)
Sokszor nem is a programozó, hanem a program implicite hívja meg.
Elérési függvények
Az adattagok értékének elérésére vagy azok értékének módosítására.
MunkavégzQ függvények
Az osztály lényegi funkcióit aktivizáló függvények.


29. Az általánosítás/pontosítás (is-a) és a tartalmazás (has-a) kapcsolat implementálási lehetQségei Java nyelvi
----------------------------------------------------------------------------------------------------------------
eszközökkel.
------------

Logikai szintq kapcsolatok
- általánosítás/pontosítás (is-a)
- tartalmazás (has-a)
- használat (use)
Az általánosítás/pontosítás implementálása:
- Leszármaztatási mechanizmus (öröklQdés) segítségével
- A leszármazott osztály objektuma egyben Qs objektum is.
A tartalmazás implementálása:
Kétféle tartalmazás kapcsolat:
aggregáció: a rész az egészhez tartozik, de önállóan is létezQ entitás
kompozíció: a rész önmagában nem létezhet, csak valaminek a részeként
A tartalmazás implementálása: aggregáció
- A tag objektum referenciája a tartalmazó osztályban.
- Ez adattag, tehát általában private
- Az egy - több kapcsolat (több "rész") megvalósítása
különbözQ adatszerkezetekkel lehetséges (tömb, Vektor stb).
- A referenciák beállítása általában a befoglaló osztály konstruktorának feladata, már létezQ ("külsQ") objektumok
referenciáinak felhasználásával.
Tartalmazás implementálása: kompozíció
Lehetséges megoldások:
- A tartalmazó osztályban osztály definíció a tartalmazott számára, private hozzáférési kategóriával
- A tartalmazó osztály konstruktorának vagy valamelyik metódusának a feladata a "rész" példányosítása.
"KívülrQl" nem is lehetséges, a priváté minQsítés miatt.

Forrás: www.c1p0.hu - Köszönet érte: Fónyad Albertnek, Szqcs Miklósnak

Hasonló témájú dokumentumok
A mások által feltöltött dokumentumokat értékelheted. Ha úgy ítéled meg, hogy a vizsgára való felkészülés szempontjából hasznos volt egy dokumentum, akkor adj rá sokcsillagos értékelést.
Ha hibákat tartalmaz, vagy egyéb probléma van vele, akkor keveset.
A dokumentumok sorrendje az értékelések alapján adódik. Ami fentebb van a listában, azt hasznosabbnak ítélték társaid. Az új dokumentumok pedig (értékelések hiányában) szintén a lista tetején kezdenek.

Hozzászólások

Ha észrevételed van egy dokumentummal kapcsolatban (például hibát találtál benne), akkor a Hozzászólások részben jelezheted. Az olyan jellegű kérdéseket mint pl.: A 2. feladat 4. sorából milyen átalakítással jutottunk az 5. sorban szereplő képlethez? - szintén ide érdemes írni
Egy tipp az oldalhoz! - Szólj hozzá a feltöltött dokumentumokhoz. Minden feltöltött dokumentumhoz megírhatod a véleményed. Ha jónak találod, akkor adj rá sok pontot a csillagokkal. Ha nem találod jónak, akkor adj rá kevés csillagot, és írd le a Hozzászólásokhoz hogy milyen hiányosságok, hibák vannak benne. A dokumentumok a hallgatók értékelése alapján sorrendeződnek.

Cimkefelhő

11.05-2 2. óra 26 5. óra algebra állatrendszertan andragógia bácsó sándor dehumanizáció diák építésszervezés 1 europai uniós ismeretek feladatgyűjtemény frazer frei otto füst gazd.töri tétel6 gazdaságföldrajz glikoneogenezis gyakorló feladatok hull karrier kémia kérdés válasz keringés konzultáció kormány kötelmi jog középkori európa közgazdaságtan fő áramlata közigazgatási jog közjog kulturális ökológia metafora mintavizsga munkafüzet műanyag növénytan ókori kelet polgár prax pricing strategies progterv stat szupra termelés természetvédelmi biológia várak erődök vetőmag vizsgakérdés