Programování

Vysvětlení asociace, agregace a složení v OOP

Unified Modeling Language (UML) je de-facto standard pro modelování objektově orientovaných systémů. V UML existuje pět různých typů vztahů: asociace, agregace, složení, závislost a dědičnost. Tento článek představuje diskusi o prvních třech z těchto konceptů a zbývající ponechává na jiném blogovém příspěvku.

Asociace v objektově orientovaném programování

Asociace je sémanticky slabý vztah (sémantická závislost) mezi jinak nesouvisejícími objekty. Přidružení je „používající“ vztah mezi dvěma nebo více objekty, ve kterém mají objekty vlastní životnost a neexistuje žádný vlastník.

Jako příklad si představte vztah mezi lékařem a pacientem. Lékař může být spojen s více pacienty. Současně může jeden pacient navštívit několik lékařů za účelem léčby nebo konzultace. Každý z těchto objektů má svůj vlastní životní cyklus a neexistuje žádný „vlastník“ nebo rodič. Objekty, které jsou součástí asociačního vztahu, lze vytvářet a ničit nezávisle.

V UML je asociační vztah reprezentován jedinou šipkou. Vztah asociace může být reprezentován jako jedna ku jedné, jedna k mnoha nebo mnoho k mnoha (také známé jako mohutnost). V zásadě asociační vztah mezi dvěma nebo více objekty označuje komunikační cestu (nazývanou také odkaz) mezi nimi, takže jeden objekt může odeslat zprávu jinému. Následující fragment kódu ukazuje, jak jsou dvě třídy, BlogAccount a BlogEntry, přidruženy k sobě navzájem.

veřejná třída BlogAccount

   {

soukromý BlogEntry [] blogEntries;

// Ostatní členové třídy BlogAccount

   }

veřejná třída BlogEntry

   {

Int32 blogId;

titulek řetězce;

text řetězce;

// Ostatní členové třídy BlogEntry

   }

Agregace v objektově orientovaném programování

Agregace je specializovaná forma asociace mezi dvěma nebo více objekty, ve kterých má každý objekt svůj vlastní životní cyklus, ale existuje také vlastnictví. Agregace je typický vztah celek / část nebo rodič / dítě, ale může, ale nemusí, označovat fyzickou izolaci. Základní vlastností agregačního vztahu je, že celek nebo rodič (tj. Vlastník) může existovat bez části nebo dítěte a naopak.

Jako příklad může zaměstnanec patřit do jednoho nebo více oddělení v organizaci. Pokud je však oddělení zaměstnance odstraněno, objekt zaměstnance by nebyl zničen, ale žil by dál. Všimněte si, že vztahy mezi objekty účastnícími se agregace nemohou být vzájemné - tj. Oddělení může „vlastnit“ zaměstnance, ale zaměstnanec toto oddělení nevlastní. V následujícím příkladu kódu je agregační vztah evidentní mezi třídami BlogAuthor a BlogAccount.

veřejná třída BlogAuthor

   {

private Int32 authorId;

soukromý řetězec jméno;

soukromý řetězec příjmení;

// Ostatní členové třídy BlogAuthor

   }

veřejná třída BlogAccount

   {

soukromý BlogEntry [] blogEntries;

// Ostatní členové třídy BlogAccount

   }

Agregace je obvykle reprezentována v UML pomocí čáry s dutým diamantem. Stejně jako přidružení může agregace zahrnovat účastnický vztah, vzájemný vztah nebo vzájemný vztah mezi zúčastněnými objekty. V případě vztahu jeden na víc nebo mnoho na mnoho můžeme říci, že se jedná o nadbytečný vztah.

Složení v objektově orientovaném programování

Složení je specializovaná forma agregace. Ve složení, pokud je nadřazený objekt zničen, potom podřízené objekty také přestanou existovat. Složení je ve skutečnosti silný typ agregace a někdy se označuje jako vztah „smrti“. Jako příklad může být dům složen z jedné nebo více místností. Pokud je dům zničen, jsou zničeny také všechny místnosti, které jsou jeho součástí. Následující fragment kódu ilustruje vztah kompozice mezi dvěma třídami, House a Room.

veřejný dům

{

soukromý pokoj pokoj;

hostinec()

   {

room = new Room ();

   }

}

Stejně jako agregace je kompozice také vztahem celek / část nebo rodič / dítě. Ve složení však životní cyklus části nebo dítěte řídí celý rodič nebo rodič, který je jeho vlastníkem. Je třeba poznamenat, že tato kontrola může být buď přímá, nebo přechodná. To znamená, že rodič může být přímo zodpovědný za vytvoření nebo zničení dítěte nebo rodič může použít dítě, které již bylo vytvořeno. Podobně by nadřazený objekt mohl delegovat ovládací prvek na nějakého jiného rodiče, aby zničil podřízený objekt. Složení je v UML reprezentováno pomocí čáry spojující objekty s plným diamantem na konci objektu, který vlastní druhý objekt.

Doufám, že tato diskuse o asociačních, agregačních a kompozičních vztazích vám pomohla pochopit, jak se tyto tři koncepty liší. Pamatujte, že agregace a složení jsou obě podmnožiny sdružení. V agregaci i ve složení může být objekt jedné třídy vlastníkem objektu jiné třídy. A v agregaci i složení patří podřízené objekty k jednomu nadřazenému objektu, tj. Mohou mít pouze jednoho vlastníka.

Konečně v agregačním vztahu jsou životní cykly nadřazených a podřízených objektů nezávislé. Ve vztahu kompozice znamená smrt nadřazeného objektu také smrt jeho dětí.

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