Přeskočit obsah
    Axiom AAF: Neztratit během vývoje hodnotu užitku systému očekávanou zákazníkem.

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 — typ Class, multiplicita dosazení 1. Třída, jejíž instance vlastní seznam částí.
  • cast — typ Class, multiplicita dosazení 1. Třída, jejíž instance jsou vlastněnými částmi.
  • vazba — typ Asociace, multiplicita dosazení 0 (statický prvek). Asociace, kterou vzor zavádí; vzor přebírá pevné vlastnosti jejích konců: u celek agregační druh composite, u cast otevř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.