Kompozice ku N¶
Motiv¶
Evidujeme faktury. Každá faktura obsahuje své řádky. Řádek patří právě jedné faktuře, vzniká a zaniká s ní, a nesdílí ho žádná jiná faktura. Faktura jich drží seznam s dopředu neznámým počtem.
Evidujeme nákupní košíky. Každý košík obsahuje své položky. Položka patří právě jednomu košíku, žije jen v jeho kontextu, není sdílená. Košík jich drží seznam.
V obou případech celek vlastní seznam nedílných částí. Část žije pouze v kontextu svého celku a není sdílená. Tento vztah je vzor Kompozice ku N.
Zkratka¶
má svoje řádky → Faktura má řádky faktury. Celek drží seznam součástek, které jsou jen jeho.
Popis¶
Vzor Kompozice ku N popisuje vlastnický vztah celek/část, ve kterém celek drží seznam svých částí.
Vztah je vlastnictví celek/část. Instance části jsou nedílné součástky instance celku. Jejich význam existuje pouze v kontextu majitele.
Celek drží seznam. Jedna instance celku vlastní kolekci instancí části s dopředu neznámým počtem prvků.
Část žije v kontextu celku. Instance části vzniká, žije a zaniká pouze v kontextu jedné instance celku.
Vztah je bez sdílení. Instance části nemůže být vlastněna dvěma celky. Každý majitel si rodí své vlastní části — „svůj k svému".
Z vlastnictví plynou zákazy, které instance části nesmí porušit: nesmí se narodit bez majitele ani majitele přežít, nesmí přejít k jinému majiteli, nesmí být vlastněna dvěma majiteli.
Strukturovaný popis¶
Vzor spojuje dvě Class — celek a cast — jednou asociací. Konec u celek nese agregační druh composite (vlastnictví, černý kosočtverec). Konec u cast má otevřenou horní hranici multiplicity (0..*, 1..*, *) — celek drží seznam.
V instanční rovině drží instance celek seznam instancí cast. Žádná instance cast není sdílena dvěma instancemi celek.
(Ilustrativní diagram: TBD.)
Účastníci¶
celek— typClass, multiplicita dosazení1. Třída, jejíž instance vlastní seznam částí.cast— typClass, multiplicita dosazení1. Třída, jejíž instance jsou vlastněnými částmi.vazba— typAsociace, multiplicita dosazení0(statický prvek). Asociace, kterou vzor zavádí; vzor přebírá pevné vlastnosti jejích konců: ucelekagregační druhcomposite, ucastotevřená horní hranice multiplicity.
Nejčastější chyby¶
Záměna za Odkaz do seznamu. Odkaz do seznamu je použití bez vlastnictví se sdílením; část tam má vlastní životní cyklus. Pokud se část vybírá z existujícího sdíleného seznamu, není to Kompozice ku N (viz dále).
Záměna za sdílenou agregaci. Sdílená agregace je celek/část s volnějšími pravidly — část smí být sdílena, přežít celek nebo migrovat. Kompozice ku N to zakazuje (viz dále).
Záměna za Kompozici ku 1. Kompozice ku 1 drží jedinou vloženou část; Kompozice ku N drží seznam. Rozdíl nese multiplicita konce u cast (viz dále).
Sdílení části. Návrh, kde tatáž instance části patří dvěma celkům, porušuje podstatu vzoru.
Modelování agregace ex post jako kompozice. Pokud části vznikají dřív než celek a teprve se do něj sdružují, není vztah kompozicí (majitel vznikl až po částech).
Vazby¶
Vzor Kompozice ku N je parametrickým vyjádřením metaclass Asociace pro agregační druh composite a otevřenou multiplicitu na konci části (viz kapitola Asociace). Stojí na BASE pojmech Class a Asociace (viz kapitoly Class, Asociace); vlastní BASE pojem nemá.
Sousední a konkurenční vzory CLM Lite: Kompozice ku 1, Odkaz do seznamu, Sdílená agregace, Asociační třída (viz dále).
Děj a kontroly při vzniku, zániku nebo změně částí patří do scénáře Use Case 1. druhu (viz kapitola Use Case 1. druhu), ne ke vzoru.
Externí kotva: kniha Analytické modelování v praxi, kapitola 3.2.1 Vztah Kompozice, vzor Faktura má řádky faktury. Konkrétní třídy C_Faktura a C_RadekFaktury jsou použitím vzoru v modelu, ne jeho součástí.
Verze a změny¶
- 1.0 — Early Access.