Kompozice ku 1¶
Motiv¶
Evidujeme osoby. Každá osoba má adresu trvalého bydliště. Adresa má vlastní strukturu (ulice, město, PSČ), patří právě jedné osobě, zakládá se jen pro ni a nesdílí ji nikdo jiný. Osoba drží tuto jednu adresu jako svou vloženou součást.
Evidujeme objednávky. Každá objednávka má jednu dodací adresu se stejnou povahou — vlastní struktura, jen pro tu objednávku, nesdílená.
V obou případech celek vlastní jedinou vloženou část, která má vlastní strukturu. Chová se jako atribut majitele, ale je to složenina (Class), ne primitivní hodnota. Tento vztah je vzor Kompozice ku 1.
Zkratka¶
má vloženinu → Osoba má adresu. Jedna vlastní složenina, jako by to byl atribut.
Popis¶
Vzor Kompozice ku 1 popisuje vlastnický vztah celek/část, ve kterém celek drží jedinou vloženou část.
Vztah je vlastnictví celek/část. Instance části je nedílnou součástkou instance celku a její význam existuje pouze v kontextu majitele.
Část je vloženina, ale složenina. Chová se jako atribut majitele, ale je to Class s vlastní strukturou (vlastními atributy a vztahy), ne primitivní hodnota. Tím se liší od Atribut (viz kapitola Class).
Celek drží jedinou část. Jedna instance celku vlastní jednu instanci části, volitelně žádnou.
Vztah je bez sdílení. Instance části nemůže být vlastněna dvěma celky; i kdyby měly dvě instance celku obsahově stejnou část, každá si drží svou.
Pokud táž Class vstupuje do více kompozic ku 1 vůči témuž celku, odlišují je role konce asociace (viz kapitola Asociace) — například C_Adresa v rolích trvalé bydliště a přechodné bydliště u C_Fyzicka_osoba.
Z vlastnictví plynou tytéž zákazy jako u Kompozice ku N: část se nesmí narodit bez majitele ani ho 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. Konec u cast má multiplicitu 1 (povinná část) nebo 0..1 (volitelná část) — jedna vložená část.
V instanční rovině drží instance celek jednu instanci cast, která není sdílena s jiným celkem.
(Ilustrativní diagram: TBD.)
Účastníci¶
celek— typClass, multiplicita dosazení1. Třída, jejíž instance vlastní vloženou část.cast— typClass, multiplicita dosazení1. Třída, jejíž instance je vlastněnou vloženou částí.vazba— typAsociace, multiplicita dosazení0(statický prvek). Asociace, kterou vzor zavádí; vzor přebírá pevné vlastnosti jejích konců: ucelekagregační druhcomposite, ucastmultiplicitu1nebo0..1.
Nejčastější chyby¶
Záměna za Atribut. Atribut je vlastněná hodnota primitivního typu (viz kapitola Class). Má-li vložená část vlastní strukturu, je to Kompozice ku 1; je-li to jednoduchá hodnota (řetězec, číslo, datum), je to atribut.
Záměna za Kompozici ku N. Kompozice ku N drží seznam více částí; Kompozice ku 1 drží jedinou. Rozdíl nese multiplicita konce u cast (viz dále).
Záměna za Odkaz do seznamu. Odkaz do seznamu je použití bez vlastnictví se sdílením. Pokud se vložená část vybírá z existujícího sdíleného seznamu, není to Kompozice ku 1 (viz dále).
Záměna za sdílenou agregaci. Sdílená agregace dovoluje sdílení a migraci části; Kompozice ku 1 je zakazuje (viz dále).
Vazby¶
Vzor Kompozice ku 1 je parametrickým vyjádřením metaclass Asociace pro agregační druh composite a multiplicitu 1 na konci části (viz kapitola Asociace). Stojí na BASE pojmech Class a Asociace (viz kapitoly Class, Asociace); vlastní BASE pojem nemá.
Vzor je strukturním rozpracováním vlastnictví ku 1 pro případ Class — na rozdíl od Atribut, který je vlastnictví ku 1 primitivní hodnoty (viz kapitola Class).
Sousední a konkurenční vzory CLM Lite: Kompozice ku N, Odkaz do seznamu, Sdílená agregace, Asociační třída (viz dále).
Externí kotva: kniha Analytické modelování v praxi, kapitola 3.2.1 Vztah Kompozice, vzor Osoba má adresu. Konkrétní třídy C_Osoba a C_Adresa jsou použitím vzoru v modelu, ne jeho součástí.
Verze a změny¶
- 1.0 — Early Access.