Osztályok közötti kapcsolatok

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson
Download our mobile app to listen on the go
Get App

Questions and Answers

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?

  • 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?

  • 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?

<p>Az aggregáció egy erősebb kapcsolat, ami rész-egész viszonyt fejez ki (C)</p> Signup and view all the answers

Mi a különbség az üres rombusszal és a teli rombusszal jelölt aggregáció között?

<p>Az üres rombusz azt jelzi, hogy a tartalmazó létezhet a tartalmazott nélkül is (A)</p> Signup and view all the answers

Mi a kompozíció?

<p>Egy speciális aggregáció, ahol a részek élettartama szigorúan megegyezik az egészével (D)</p> Signup and view all the answers

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?

<p>Mert a diagramon jelölni kell a tartalmazás erősségét (A)</p> Signup and view all the answers

Mi az öröklődés lényege az objektumorientált programozásban?

<p>A kód újrafelhasználása és a hierarchikus osztályszerkezet kialakítása (C)</p> Signup and view all the answers

Milyen előnyei vannak az öröklődésnek?

<p>Lehetővé teszi a polimorfizmust és a kód újrafelhasználását (B)</p> Signup and view all the answers

Mi a protected láthatóság jelentősége?

<p>Az adattagok és metódusok az adott osztályban és a leszármazott osztályokban érhetők el (C)</p> Signup and view all the answers

Mi a szerepe a super() hívásnak a gyermekosztály konstruktorában?

<p>Az ősosztály konstruktorának meghívása (A)</p> Signup and view all the answers

Mi a metódus felüldefiniálás (overriding) lényege?

<p>Egy örökölt metódus saját implementációjának megadása a származtatott osztályban (D)</p> Signup and view all the answers

Mikor kötelező a super(arg1, arg2... argn); meghívása a gyerekosztály konstruktorában?

<p>Ha az ősosztálynak nincs default (paraméter nélküli) konstruktora, vagy nem a default konstruktorát szeretnénk használni (D)</p> Signup and view all the answers

Mire kell figyelni a többszörös öröklődés használatakor?

<p>A kód átláthatatlanná és kezelhetetlenné válhat (D)</p> Signup and view all the answers

Mi a különbség a final adattag és a static final adattag között?

<p>A <code>final</code> egy objektumhoz tartozik, a <code>static final</code> az osztályhoz (B)</p> Signup and view all the answers

Mi a szerepe az @Override annotációnak?

<p>A fordító figyelmeztetése a felüldefiniált metódusokra (C)</p> Signup and view all the answers

Hogyan jelöljük UML diagramon a protected láthatóságú adattagokat/operációkat?

<h1>(D)</h1> Signup and view all the answers

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?

<p>Kompozíció (D)</p> Signup and view all the answers

Mi a Javadoc?

<p>Egy HTML alapú dokumentáció generáló eszköz Java forráskódból (B)</p> Signup and view all the answers

Milyen elemeket illendő dokumentációval ellátni Javadoc használatával?

<p>Az osztályokat, azok adattagjait, valamint a publikus metódusokat (B)</p> Signup and view all the answers

Flashcards

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ó

Az egyik objektum fizikailag tartalmazza vagy birtokolja a másikat.Rész-egész kapcsolat.

Kompozíció

Az aggregáció egy speciális formája, ahol a részek élettartama megegyezik az egészével.

Öröklődés

Osztályok közötti kapcsolat, ahol az egyik osztály megosztja a struktúráját/viselkedését egy vagy több másik osztállyal.

Signup and view all the flashcards

Többszörös öröklődés

Egy osztály több ősosztálytól örököl.

Signup and view all the flashcards

Protected láthatóság

Az adattagok, metódusok láthatóak a gyermekosztályok számára, de a külvilág számára nem.

Signup and view all the flashcards

Felüldefiniálás (Override)

Az ősosztály metódusának speciálisabb megvalósítása a gyermekosztályban.

Signup and view all the flashcards

Final adattag

A változó értéke a deklaráció után nem változtatható meg.

Signup and view all the flashcards

Konstans létrehozása

Valódi konstans létrehozása a static és final kulcsszavak együttes használatával.

Signup and view all the flashcards

Annotációk

A metódus felett lévő @ karakterrel kezdődő sorok.

Signup and view all the flashcards

Javadoc

Forráskódba írt kommentekből HTML alapú dokumentáció generálható.

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 macska simogatasokSzama 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éke null lesz. Ezt egyenlőségjellel hasonlítjuk össze, nem az equals 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ályban protected 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ő a super(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 a nev 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 és final 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.

Quiz Team
Use Quizgecko on...
Browser
Browser