Podcast
Questions and Answers
Milyen alapvető kapcsolatok léteznek az osztályok között a szoftvertervezésben?
Milyen alapvető kapcsolatok léteznek az osztályok között a szoftvertervezésben?
- Interfész, implementáció, példányosítás
- Asszociáció, aggregáció, öröklődés (correct)
- Kompozíció, absztrakció, polimorfizmus
- Adatkapszulázás, elrejtés, modularitás
Mi jellemző az asszociációra az osztályok közötti kapcsolatokban?
Mi jellemző az asszociációra az osztályok közötti kapcsolatokban?
- Erős, fizikai tartalmazási viszony
- Az egyik osztály teljes mértékben birtokolja a másikat
- Gyenge kapcsolat, ahol az osztályok léte független (correct)
- Az egyik osztály a másiknak egy speciális esete
Hogyan valósulhat meg egy asszociáció a forráskódban?
Hogyan valósulhat meg egy asszociáció a forráskódban?
- Csak globális változóként
- Csak függvényparaméterként
- Lokális változóként, függvényparaméterként, visszaadott értékként (correct)
- Csak adattagként
Miben különbözik az aggregáció az asszociációtól?
Miben különbözik az aggregáció az asszociációtól?
Mi a különbség az üres rombusszal és a teli rombusszal jelölt aggregáció között?
Mi a különbség az üres rombusszal és a teli rombusszal jelölt aggregáció között?
Mi a kompozíció?
Mi a kompozíció?
Miért fontos a tervezés során különbséget tenni az aggregáció és a kompozíció között, még akkor is, ha Java nyelven technikailag hasonlóan valósulnak meg?
Miért fontos a tervezés során különbséget tenni az aggregáció és a kompozíció között, még akkor is, ha Java nyelven technikailag hasonlóan valósulnak meg?
Mi az öröklődés lényege az objektumorientált programozásban?
Mi az öröklődés lényege az objektumorientált programozásban?
Milyen előnyei vannak az öröklődésnek?
Milyen előnyei vannak az öröklődésnek?
Mi a protected láthatóság jelentősége?
Mi a protected láthatóság jelentősége?
Mi a szerepe a super()
hívásnak a gyermekosztály konstruktorában?
Mi a szerepe a super()
hívásnak a gyermekosztály konstruktorában?
Mi a metódus felüldefiniálás (overriding) lényege?
Mi a metódus felüldefiniálás (overriding) lényege?
Mikor kötelező a super(arg1, arg2... argn);
meghívása a gyerekosztály konstruktorában?
Mikor kötelező a super(arg1, arg2... argn);
meghívása a gyerekosztály konstruktorában?
Mire kell figyelni a többszörös öröklődés használatakor?
Mire kell figyelni a többszörös öröklődés használatakor?
Mi a különbség a final
adattag és a static final
adattag között?
Mi a különbség a final
adattag és a static final
adattag között?
Mi a szerepe az @Override
annotációnak?
Mi a szerepe az @Override
annotációnak?
Hogyan jelöljük UML diagramon a protected láthatóságú adattagokat/operációkat?
Hogyan jelöljük UML diagramon a protected láthatóságú adattagokat/operációkat?
Mi az az osztályok közötti kapcsolat, ami egy olyan erős fizikai tartalmazást jelent, ahol a részek élettartama szigorúan megegyezik az egészével?
Mi az az osztályok közötti kapcsolat, ami egy olyan erős fizikai tartalmazást jelent, ahol a részek élettartama szigorúan megegyezik az egészével?
Mi a Javadoc?
Mi a Javadoc?
Milyen elemeket illendő dokumentációval ellátni Javadoc használatával?
Milyen elemeket illendő dokumentációval ellátni Javadoc használatával?
Flashcards
Asszociáció
Asszociáció
Osztályok közötti kétirányú összeköttetés, mely megadja az üzenet irányát.Legalább az egyik ismeri/használja a másikat.
Aggregáció
Aggregáció
Az egyik objektum fizikailag tartalmazza vagy birtokolja a másikat.Rész-egész kapcsolat.
Kompozíció
Kompozíció
Az aggregáció egy speciális formája, ahol a részek élettartama megegyezik az egészével.
Öröklődés
Öröklődés
Signup and view all the flashcards
Többszörös öröklődés
Többszörös öröklődés
Signup and view all the flashcards
Protected láthatóság
Protected láthatóság
Signup and view all the flashcards
Felüldefiniálás (Override)
Felüldefiniálás (Override)
Signup and view all the flashcards
Final adattag
Final adattag
Signup and view all the flashcards
Konstans létrehozása
Konstans létrehozása
Signup and view all the flashcards
Annotációk
Annotációk
Signup and view all the flashcards
Javadoc
Javadoc
Signup and view all the flashcards
Study Notes
Osztályok közötti kapcsolatok
- Az Ember és a Macska osztályok közötti kapcsolat lehetővé teszi az objektumok közötti kölcsönhatásokat, például egy ember megsimogathat egy macskát.
- Alapvető kapcsolatok osztályok között: asszociáció, aggregáció (gyenge, erős), öröklődés.
- Ezeknek a kapcsolatoknak különböző tulajdonságai lehetnek: név, irány, szerep, multiplicitás.
- Az osztályok közötti kétirányú összeköttetés megadható iránnyal.
- A kapcsolatban részt vevő osztályok léte általában független, de legalább az egyik ismeri vagy használja a másikat.
- Az asszociációk a forráskódban lokális változóként, függvényparaméterként, visszaadott értékként stb. jelenhetnek meg.
Asszociáció példa
- Az Ember megsimogathatja a Macska példányokat a
simogatastKap
metóduson keresztül. - A
simogatastKap
metódus növeli a macskasimogatasokSzama
tulajdonságát, és ha a macska nem barátságos, megkarmolja az embert. - A nem barátságos macskák idővel barátságossá válnak, és nem karmolnak többet.
- Az asszociáció tulajdonságát szaggatott vonallal jelöljük az osztálydiagramon. Például a Macska és Orvos osztályok közötti kapcsolatnak lehet egy "Vizsgálat" tulajdonsága.
- Egy Személy 1 vagy 2 Lakásban lakhat, de egy Lakáshoz bármennyi személy tartozhat.
Aggregáció
- Az aggregáció egy rész-egész kapcsolat, az asszociáció egy speciális, erősebb formája.
- Az egyik objektum fizikailag tartalmazza vagy birtokolja a másikat.
- Az aggregáció jelölése a két osztály között húzott vonal, egy rombusszal a tartalmazó oldalán (üres vagy teli rombusz).
- Gyenge aggregáció esetén a tartalmazó létezhet a tartalmazott nélkül is (alma és kukac).
- Erős aggregáció esetén a részek élettartama szigorúan megegyezik az egészével (macska-fej).
Aggregáció példa: Macska és Nyakörv
- A macskáknak lehet nyakörvük, amire a gazda adatai vannak írva.
- Egy Macska példányhoz tartozhat egy Nyakörv példány, de a Macska létezhet Nyakörv nélkül is.
- A Nyakörv osztály tartalmazhatja a Macska nevét, a gazda nevét, és bolhairtó tulajdonságot.
- Az aggregációt az osztálydiagramon adattagként vagy az aggregáció vonalára írva jelölhetjük.
- Egy Macskához 0 vagy 1 Nyakörv tartozhat.
- A Nyakörv példányt a Macska osztályon belül lehet létrehozni/beállítani, például egy setter segítségével vagy a konstruktorban.
Kóbor macska példa
- Egy
kobor
nevű függvény visszaadja, hogy egy Macska példány kóbor-e. - Egy macska akkor kóbor, ha nincs nyakörve (ebben a programban).
- A Java referencia alapú nyelv, a nem primitív adattagok kezdőértéke
null
. - Ha nincs létrehozva nyakörv, a
nyakorv
adattag értékenull
lesz. Ezt egyenlőségjellel hasonlítjuk össze, nem azequals
metódussal.
Kompozíció
- Erősebb fizikai tartalmazás, ahol a részek élettartama szigorúan megegyezik az egészével. Például: hűtő-kompresszor, lakás-gerendaszerkezet.
- Az Állatkórház és a Vizsgáló között kompozíció van, mivel a Vizsgálónak önmagában nincs értelme, csak az állatkórházon belül létezik.
- A Vizsgáló és a Macska között aggregáció van, mivel a Vizsgáló tartalmazhat Macskát, de a létük nem szigorúan függ egymástól.
- Technikailag Java nyelven a szigorú tartalmazás nem teljesen kivitelezhető a memória kezelése miatt.
- Tervezéskor különbséget kell tenni az aggregáció és a kompozíció között a tartalmazás "erőssége" alapján.
- A kompozíció esetén a tartalmazott nem létezik a tartalmazója nélkül.
- A kompozíció implementációja megegyezik a hagyományos aggregációval Java nyelven, általában adattag formájában láthatjuk a kompozíciókat.
Öröklődés
- Olyan osztályok közötti kapcsolat, ahol az egyik osztály megosztja a struktúráját és/vagy viselkedését egy vagy több másik osztállyal.
- Az örökölt metódusokat felül lehet írni (override), vagy akár újakat is definiálhatunk.
- Az öröklődéssel egy egész hierarchiát készíthetünk.
- Nincs neve, multiplicitása.
- A származtatott osztály mindent örököl az őstől (attribútumokat, viselkedést, kapcsolatokat is), és kiegészítheti ezeket sajátokkal.
- A tipikus öröklődési szintek száma 3-5 körül szokott lenni.
- Többszörös öröklődés esetén egy osztály több ősosztálytól is örökölhet, de ez átláthatatlanná teheti az osztályt. Java nem támogatja a többszörös öröklődést.
- Létrejön egy új láthatóság, a protected.
- A protected láthatóságú adattagok, metódusok a gyermekosztályok számára is láthatóak, azonban a külvilág számára nem. Az UML diagramokban # jelöléssel láthatjuk.
Macska példa öröklődéssel
- A Macska osztályból leszármaztatunk egy Tigris osztályt.
- Először a Macska osztályt tisztázzuk, kettéválasztva a Macskaféléhez tartozó és a házi macska tulajdonságokat.
- A
bolhakSzama
tulajdonság a Macskaféle osztálybanprotected
láthatóságú, így a leszármazott osztályokban elérhető. - A
private
tulajdonságokat a leszármazott osztályokból csak getter/szetter segítségével érhetjük el. - A Macskaféle osztálynak van egy adattagja, ami az adott fajta pontos rendszertani nevét tárolja.
Macskaféle osztály
- Minden Macskaféle a "Felidae" családba tartozik alapértelmezetten.
- Ez egy általános Macskaféle osztály, lesznek speciálisabb osztályok (Házi macskák, Tigrisek), amik esetében szeretnénk használni a már elkészült Macskafele osztályt, de szeretnénk speciálisabb működést adni neki, esetleg kiegészíteni több tulajdonsággal.
- Mivel a "Macskaféle" mint fogalom nem igazán értelmezhető, hiszen a programban majd Házi macskákat, Tigriseket szeretnénk tárolni.
- extends - ezzel a kulcsszóval érhetjük el az öröklődést, az osztály deklarációjában, az osztály neve után kell írnunk, majd az extends kulcsszó után az ősosztály nevét írjuk.
- Ha az ősosztály paraméter nélküli konstruktorát szeretnénk meghívni, akkor a
super();
hívás a gyermekosztály konstruktorában elhagyható. Ha nem a default konstruktorát használjuk az ősosztálynak (vagy nincs default konstruktora), akkor viszont kötelező asuper(arg1, arg2... argn);
meghívása a gyerekosztály konstruktorában! - A gyerekosztályban felüldefiniálhatjuk (override) az ősből örökölt metódusokat, speciálisabb működést adva nekik (nyavog()).
- Mivel a
suly
és anev
adattag privát láthatóságú, így ezekben az esetekben a getter/szetter függvényeken keresztül tudjuk elérni ezeket az adattagokat. - A Tigris osztályban felüldefiniáljuk az örökölt
nyavog
metódust. - A Tigris osztály a Macskafele osztályhoz képest nincs semmilyen speciális plusz tulajdonsága, természetesen megörököl mindent a Macskafele osztálytól.
- A Tigris osztálynak van egy saját metódusa, ami speciális a Tigris példányokra, ez pedig az
erosebb
metódus, ami az adott tigrisről el tudja dönteni, hogy erősebb-e, mint a paraméterben érkező tigris. - Egy tigris akkor erősebb egy másiknál, ha nagyobb a súlya, tehát nagyobbat üvölt (nyávog).
- A KardfoguTigris osztály reprezentál egy speciális Tigris fajtát (egyébként egyúttal speciális Macskafele fajtát is).
- Az örökölt
nyavog
metódust itt is felüldefiniáljuk, mivel a kardfogú tigrisek még nagyobbat tudnak üvölteni, mint egy sima tigris.
Öröklődési hierarchia
- Minden Tigris (és KardfoguTigris) egyben Macskaféle is, viszont nem minden Macskaféle lesz Tigris (vagy KardfoguTigris).
- A HáziMacska osztály speciális esete a Macskaféle osztálynak, hiszen a házi macskák speciális macskafelék.
- A Macska osztály általánosítása a Macskaféle osztálynak, hiszen a macskafélék a speciális macskák (Tigris, Házi macska, stb.) általános, közös tulajdonságait, viselkedését tartalmazó őse.
Final adattagok
- Ha primitív típusú adatunk van, akkor annak az értéke nem változtatható meg a deklaráció után.
- Ha nem primitív a final adattagunk, maga az adattag értéke nem módulhat, tehát a referencia nem változhat meg.
- Maga az objektum módosulhat, például, ha van egy final változónk, ami egy Hűtőszekrényre mutat, akkor a hűtőszekrénybe pakolhatunk dolgokat be/ki, de nem "cserélhetjük le" a hűtőszekrényt.
Konstansok
- Valódi konstans létrehozása a
static
ésfinal
kulcsszavak együttes használatával. - Az így létrejövő változó statikus lesz (bármely objektumpéldány esetén ugyanazt az egy konkrét adatot látjuk/módosítjuk), és a final miatt a kezdőérték nem változtatható meg.
- A konstans változók nevét általában csupa nagybetűvel szoktuk írni, szóhatárnál aláhúzást teszünk.
Annotációk
- Ha az IDE generál nekünk metódust, például toString metódust, a metódus fejléce felett láthatunk egy
@Override
sort. - Ennek a gyakorlatban nincs hatása, el is hagyhatjuk, de meg is tarthatjuk, és célszerű is megtartani.
- Javaban a metódus felett lévő
@
karakterrel kezdődő sorokat annotációknak hívjuk. - Az
@Override
annotáció csak egy jelzés a fordító számára, hogy felüldefiniáltunk egy őstől örökölt metódust. - Ha véletlen módosítjuk az ősosztályt (átírjuk a függvény fejlécét, amit felüldefiniálunk), de a gyerek osztályban lévő metódus fejlécét nem igazítjuk hozzá, akkor fordítási hibát kapunk, mivel override-nak jelöljük a metódust, de nem definiálunk felül semmit.
Javadoc
- A forráskódba írt kommentekből HTML alapú dokumentáció generálható.
- A kommenteket a
/** */
közé írjuk, majd ezekben használhatunk különféle speciális hivatkozásokat. - Az osztályokat, azok adattagjait, valamint a publikus metódusokat illendő dokumentációval ellátni.
- Célszerű a private, protected láthatóságú metódusokat is dokumentálni.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.