Programovanie

Asociácia, agregácia a zloženie v OOP vysvetlené

Unified Modeling Language (UML) je de facto štandardom pre modelovanie objektovo orientovaných systémov. V UML existuje päť rôznych typov vzťahov: asociácia, agregácia, zloženie, závislosť a dedičstvo. Tento článok predstavuje diskusiu o prvých troch z týchto konceptov a zvyšné z nich ponecháva na ďalší blogový príspevok.

Asociácia v objektovo orientovanom programovaní

Asociácia je sémanticky slabý vzťah (sémantická závislosť) medzi inak nesúvisiacimi objektmi. Priradenie je vzťah „použitia“ medzi dvoma alebo viacerými objektmi, v ktorom majú objekty svoju vlastnú životnosť a neexistuje žiadny vlastník.

Ako príklad si predstavte vzťah medzi lekárom a pacientom. Lekár môže byť spájaný s viacerými pacientmi. Jeden pacient môže súčasne navštíviť viacerých lekárov kvôli liečbe alebo konzultácii. Každý z týchto objektov má svoj vlastný životný cyklus a neexistuje žiadny „vlastník“ alebo rodič. Objekty, ktoré sú súčasťou asociačného vzťahu, je možné vytvárať a ničiť nezávisle.

V UML je asociačný vzťah reprezentovaný jedinou šípkou. Asociačný vzťah môže byť reprezentovaný ako jeden na jedného, ​​jeden na veľa alebo viac na veľa (tiež známy ako mohutnosť). Asociačný vzťah medzi dvoma alebo viacerými objektmi v zásade označuje cestu komunikácie (nazývanú tiež odkaz) medzi nimi, takže jeden objekt môže odoslať správu druhému. Nasledujúci úryvok kódu ilustruje, ako sú dve triedy, BlogAccount a BlogEntry, navzájom spojené.

verejná trieda BlogAccount

   {

private BlogEntry [] blogEntries;

// Ostatní členovia triedy BlogAccount

   }

verejná trieda BlogEntry

   {

Int32 blogId;

popis reťazca;

text reťazca;

// Ostatní členovia triedy BlogEntry

   }

Agregácia v objektovo orientovanom programovaní

Agregácia je špecializovaná forma asociácie medzi dvoma alebo viacerými objektmi, v ktorej má každý objekt svoj vlastný životný cyklus, ale existuje tiež vlastníctvo. Agregácia je typický vzťah celku / časti alebo rodiča / dieťaťa, ale môže, ale nemusí, naznačovať fyzickú izoláciu. Podstatnou vlastnosťou agregačného vzťahu je, že celok alebo rodič (t. J. Vlastník) môže existovať bez časti alebo dieťaťa a naopak.

Napríklad zamestnanec môže patriť do jedného alebo viacerých oddelení v organizácii. Ak je však oddelenie zamestnanca odstránené, objekt zamestnanca by nebol zničený, ale žil by ďalej. Upozorňujeme, že vzťahy medzi objektmi, ktoré sa zúčastňujú na agregácii, nemôžu byť vzájomné - tj. Oddelenie môže zamestnanca „vlastniť“, ale zamestnanec toto oddelenie nevlastní. V nasledujúcom príklade kódu je zrejmý agregačný vzťah medzi triedami BlogAuthor a BlogAccount.

verejná trieda BlogAuthor

   {

private Int32 authorId;

súkromný reťazec meno;

súkromný reťazec priezvisko;

// Ostatní členovia triedy BlogAuthor

   }

verejná trieda BlogAccount

   {

private BlogEntry [] blogEntries;

// Ostatní členovia triedy BlogAccount

   }

Agregácia je zvyčajne reprezentovaná v UML pomocou čiary s dutým kosoštvorcom. Rovnako ako asociácia, aj agregácia môže zahŕňať vzájomný vzťah medzi dvoma účastníkmi, medzi dvoma účastníkmi alebo medzi mnohými účastníkmi. V prípade vzťahu jeden na jedného alebo viacerých na viacerých môžeme povedať, že ide o nadbytočný vzťah.

Skladba v objektovo orientovanom programovaní

Zloženie je špecializovaná forma agregácie. V kompozícii, ak je nadradený objekt zničený, potom zaniknú aj podradené objekty. Zloženie je v skutočnosti silný typ agregácie a niekedy sa označuje ako vzťah „smrti“. Napríklad dom môže pozostávať z jednej alebo viacerých miestností. Ak je dom zničený, zničia sa aj všetky miestnosti, ktoré sú jeho súčasťou. Nasledujúci úryvok kódu ilustruje vzťah kompozície medzi dvoma triedami, House a Room.

verejná trieda House

{

súkromná izba izba;

verejný dom ()

   {

izba = nová izba ();

   }

}

Rovnako ako agregácia, aj zloženie je vzťahom celku / časti alebo rodiča / dieťaťa. V zložení je však životný cyklus časti alebo dieťaťa kontrolovaný celým alebo rodičom, ktorý ich vlastní. Je potrebné poznamenať, že táto kontrola môže byť buď priama, alebo prechodná. To znamená, že rodič môže byť priamo zodpovedný za stvorenie alebo zničenie dieťaťa alebo rodič môže použiť dieťa, ktoré už bolo vytvorené. Podobne môže nadradený objekt delegovať kontrolu na iného rodiča, aby zničil podradený objekt. Kompozícia je v UML zastúpená pomocou čiary spájajúcej objekty s plným kosoštvorcom na konci objektu, ktorý vlastní druhý objekt.

Dúfam, že táto diskusia o asociačných, agregačných a kompozičných vzťahoch vám pomohla pochopiť, v čom sa tieto tri pojmy líšia. Pamätajte, že agregácia a zloženie sú podskupinami asociácií. V agregácii aj v kompozícii môže byť objekt jednej triedy vlastníkom objektu inej triedy. Agregáciou aj kompozíciou patria podradené objekty k jednému nadradenému objektu, t. J. Môžu mať iba jedného vlastníka.

Nakoniec, v agregačnom vzťahu sú životné cykly rodičovských a podradených objektov nezávislé. V kompozičnom vzťahu znamená smrť rodičovského objektu aj smrť jeho detí.

$config[zx-auto] not found$config[zx-overlay] not found