Objektumok kapcsolatai
Fajtái
- Függőség
- Dependency
- Asszociáció
- Association (társítás)
- Aggregáció
- Shared aggregation (tartalmazás)
- Kompozíció
- Composite aggregation (szigorú tartalmazás)
- Öröklődés
- Inheritence
Függvények
A osztály függ a B osztálytól, ha
- A két osztály egy-egy objektuma ideiglenesen (rövid időre) kerül kapcsolatba úgy, hogy az
Aosztály egy objektumának egy metódusa vagy paraméterként kapja, vagy példányosítjaBegy objektumát ennek céljából:- Metódushívás
- Szignál küldése
- Továbbadja a hivatkozást
- Visszatérés, vagy Hibakezelés
- Az
Aosztályszintű metódusainak egyike meghív egy osztályszintű metódusátB-nek- Ez nem kapcsolat az objektumok között (az osztályszintű metódusok az objektumok felett állnak)
- Az
Aosztály típusértékként használja aBáltal leírt típust- Ez lehet adattag értéke
- Lehet metódus visszatérési típusa
Asszociáció
- Hosszabb ideig fennálló kapcsolat, ami sorozatos üzenetekkel jár.
- A matematikai értelmezés szerint az asszociáció egy reláció az adott osztályok objektumait tartalmazó halmazainak direkt szorzatán
- Több objektum kapcsolatot ír le
Fogalmi szintű absztrakció
Az osztály objektumok, az asszociáció a kapcsolatok absztrakt leírására szolgál

Asszociáció tulajdonságai
- Név
- Kapcsolatok közös megnevezése
- Hatásirány
- Kapcsolódó objektumok közti fogalmi viszony
- Multiplicitás
- Egy objektumhoz kapcsolható objektumok száma
- Aritás
- Egyes kapcsolatokban résztvevő objektumok száma
- Navigálhatóság
- A kapcsolatban melyik objektumot kell gyorsan elérni
- Asszociációvég nevek
- Kapcsolatban álló objektumok hivatkozási nevei
- Asszociációvég neveinek láthatósága
- Asszociációvég neveinek tulajdonsága
- Asszociációvég neveinek jellemzett gyűjtemény viselkedése

Nevek és hatásirány
Az OOP modell asszociációi és a feladat leírása közt szoros kapcsolat van
A bináris (két objektum kapcsolatát leíró) asszociációnál a hatásirány háromszöggel van jelölve.
Nyelvtani megfeleltetés
Mondat formájában
- Állítmánya az objektumok osztályait leíró asszociáció neve
- Neve gyakran érintett osztályok egyikének metódusneve is
- A nem állítmány, nem jelző szavai adják az asszociáció-végek
- Szerepnevek
- A kapcsolatban levő objektumok ezzel hivatkozhatnak egymásra
- Az asszociációt jellemző mondat alanyát adó objektum felől mutat a hatásirány

Multiplicitás
Megmutatja az asszociáció alapján egy objektum másik objektummal egyszerre létesített kapcsolatának számosságát
- Alapértelmezett értéke
1 *-gal jelölhető, hogy tetszőleges számban előállhat- pl.: Listák, File-ok
- Megadható a kapcsolt objektumok közötti
- Különbségeket (azonosítás)
- Sorrenddet (pl. helyezés, precedencia)
- Körkörös hivatkozás is megadható
- Ahogyan a rekurzív kapcsolat is lehetséges (pl. Vitrual-DOM)
Multiplicitás - Kapcsolatok és körhivatkozás példa

Aritás
Arra utal, hogy az asszociáció egyetlen kapcsolata hány objektumok köt össze.
A binárist külön vettük, ami csak 2 objektum között létezik

Asszociációk közti megszorítások
- Logikai feltételekkel korlátozhatóak a megkötések
- Jelölés az asszociációk (vonalak) közti szaggatott nyíl, a hozzájuk tartozó feltétellel

A kék kiemelések csak magyarázó jellegűek
Navigálhatóság
Egy asszociáció kapcsolatai közül a hatékonyan elérendő
- Nyíl az asszociáció végén
Xjelzés azon osztályon van, melynek objektumait nem kell hatékonyan elérni tudni- Jelöletlen asszociáció a navigálhatóság támogatásának bizontalanságát jelenti
- Nincs eldöntve, hogy kell-e navigálhatónak lennie
A hatásirány és a navigálhatóság iránya eltérő fogalom!
Az egyik az asszociáció megértését, míg másik annak implementációját segíti.
Asszociációs osztály
Egy kapcsolatra olyan önálló egységekként tekinthetünk, amely tárolja az összekötött objektumok hivatkozásait, emellett rendelkezhet egyéb adattagokkal (sőt akár metódusokkal is). Egy ilyen asszociáció kapcsolatainak leírására szolgál az asszociációs osztály.
A programozási nyelvek többsége azonban nem kezeli önálló entitásként a kapcsolatokat, nem foglal le számukra külön memóriaterületet, ezért az asszociációs osztály fogalmát sem ismeri. Így ennek megvalósítása igazi kihívás.
Basically, adatbázisoknál hasznos elképzelés, OOP-n nem túl szerencsés
Szerepnév tulajdonosa
- A szerepnevek hasznosak
- Modellezési fogalom-alkotáskor
- Segít a kapcsolatban levő objektumokra hivatkozni
- Ha egy kapcsolatban hatékonyan kell navigálni, ahhoz kell a hivatkozás
Legkönnyebb a szerepnevet a programon túli kapcsolatként értelmezni, ami olykor gyorsabban válaszolhat a megfelelő hívásra
Ilyen pl. egy
SQLiteChache, vagy az android életciklusban (képernyő forgatáskor) aUserPreferencesTároló
A szerepnév tulajdonosa
- A kapcsolat, ha
- A kapcsolat rendelkezik olyan önálló tárhelyel, amelyet akapcsolat objektumai elérnek
- Az asszociációs osztály adattagjaként jelenik meg
- A kapcsolat másik (többi) objektuma, ahonnan hatékonyan el kell érni a megjelölt objektumot
- Megjelenés a másik objektum adattagjaként
- Ez az elterjettebb
A szerepnevek láthatósága az adattagokéhoz hasonló módon szabályozható
Szerepnév jelölések
Szerepnév tulajdonságainak jelölése

Szerepnév gyűjteményre

Ha egy szerepnév többszörös multiplicitással van jelölve, akkor a szerepnév az általa jelzett objektumainak a gyűjteményét azonosítja.
Asszociációs osztály elkerülése

Ha a nyelv nem támogatja az asszociációs osztályok kezelését, akkor a kapcsolatoknak nem lesz önálló tárhelye, ennek elkerülésére közönséges osztály alkalmazható
Modellezési szintek példa

Asszociáció kapcsolatainak létrehozása
- Az asszociációt mindíg egy metódus hozza létre (jellemzően konstruktor)
- Vagy maga példányosítja
- Vagy egy részét paraméterként kapja meg
- Továbbítva a megfelelő szerepneveknek
Kapcsolat létrehozásakor fontos
- Az asszociáció multiplicitásából adódó korlátok
- A szerepnevek korlátozása (egyediség)
- Más asszociációkhoz való viszonyok (pl. implies)

Aggregáció
- Birtoklási kapcsolat
- Olyan bináris kapcsolat, ami nem lehet még közvetetten sem rekurzív
- Megengedi
- Egy tulajdonos objektumnak ne legyen tulajdon objektuma
- Egy tulajdon objektum önmagában is létezzen
- Egy tulajdon objektum több tulajdonoshoz tartozzon
- A kapcsolat a tulajdon objektum irányáva hatékonyan navigálható
- A tulajdonosnál van a tulajdon szerepneve
Az aggregációs kapcsolat felelőssége a tulajdonosé
A tulajdonos metódusa (akár konstruktora) helyezi el a tulajdon objektum hivatkozását a tulajdonos erre szolgáló adattagjában.

Kompozíció
- Speciális aggregáció
- A tartalmazó nem létezhet tartalmazott objektum nélkül
- A tartalmazott objektum egyszerre csak egy objektum része lehet
Másik megfogalmazásban
- Van tartalmazója
- Tartalmazó önmagában nem létezhet
- A tartalmazója nem változik
- A tartalmazó példányosít, és szűntet meg
- Éllettartama azonos a tartalmazóéval

Aggregáció vs. Kompozíció

További példa az előadás anyagában (Gömbben a pont)
Származás, öröklődés
Ha az új objektum az előző objektum adattagjait és metódusait tartalmazza (viselkedésében eltérhet), akkor az új osztály származhat az előző osztályból, annak adattagjait és metódusait örökli
Modellezéskor használt fogalmak
- Általánosítás
- Ősosztály
- Specializálás
- Alosztályok
Öröklés: Az ősosztály adattagjai és metódusai alapértelmezetten részét képezik az új osztály
Az ősosztály változója megkaphatja az alosztályt értékként
Absztrakt osztály
Nem példányosított objektumot bepőle, kizárólag ősosztályként szolgál származtatásokhoz
UML jelölése a dőlt betűk
Jellemzői:
- Konstruktorai nem publikusak
- Legalább egy metódusa absztrakt
- Nem rendelkezik törzzsel, azt származtatáskor kell megadni
Interfész
Tisztán absztrakt (pure absztract)
Nincsenek adattagjai, és egyik metódusának sincs törzse
A származtatott osztálynak implementálnia kell minden, azt interfészben definiált metódusát
- Úgymond "megvalósítja az interfészt"
Származtatás
Az alosztály az ősosztály minden publikus és védett adattagját örökli, de a privátokat nem éri el.
A privát adattagok csak indirekt módon érhetőek el (pl. védett getterek és setterek)
Láthatóság
A származtatás módja maga is lehet
- publikus (public)
- Az ősosztály publikus és védett tagjai az ősosztályban definiált láthatóságukkal együtt öröklődnek az alosztályra
- UML szerint ez az alapértelmezett
- Az ősosztály publikus és védett tagjai az ősosztályban definiált láthatóságukkal együtt öröklődnek az alosztályra
- védett (protected)
- Az ősosztály publikus és védett tagjai mind védettek lesznek az alosztályban
- privát (private)
- Az ősosztály publikus és védett tagjai mind privátok lesznek az alosztályban
Dinamikus altípusos polimorfizmus
A metódus túlterhelésekor (override) a metódus polimorffá válik, azaz több formában áll elő
Mivel az ősosztály típusa kiváltható az alosztály típusával, így futási időben dől el, hogy melyik metódus kerül valóban meghívásra.
Ha egy ősosztály típusú változóra egy polimorf virtuális metódust hívunk meg, a változó által hivatkozott osztály metódusa kerül meghívásra.