Kihagyás

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 A osztály egy objektumának egy metódusa vagy paraméterként kapja, vagy példányosítja B egy 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 A osztályszintű metódusainak egyike meghív egy osztályszintű metódusát B-nek
    • Ez nem kapcsolat az objektumok között (az osztályszintű metódusok az objektumok felett állnak)
  • Az A osztály típusértékként használja a B á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

Fogalmi szintű absztrakció


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

Asszociáció - Tulajdonságok

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

Asszociáció hatásiránnyal

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

Kapcsolatok és multiplicitás

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

Aritás

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

Megkötések - Példa

A kék kiemelések csak magyarázó jellegűek

Egy asszociáció kapcsolatai közül a hatékonyan elérendő

  • Nyíl az asszociáció végén
  • X jelzé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 SQLite Chache, vagy az android életciklusban (képernyő forgatáskor) a UserPreferences Tá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 tulajdonságainak jelölése

Szerepnév gyűjteményre

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

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

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)

Asszociáció kapcsolatainak létrehozása

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.

Aggregáció

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

Kompozíció

Aggregáció vs. Kompozíció

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