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

Sdílená agregace

Motiv

Webhosting eviduje poskytnuté služby. S každou realizovanou službou vznikne řádek. Faktura ale zatím neexistuje — vzniká až na konci období agregací existujících řádků zákazníka. Majitel (faktura) tedy vzniká po svých částech (řádcích).

Firma eviduje organizační jednotky. Jednotka vlastní své podřízené jednotky téhož typu. Nejvyšší jednotka ale nad sebou nemá žádnou — kořen stromu nemá majitele.

V obou případech jde o vlastnictví celek/část, ale je porušena některá ze striktních podmínek kompozice — část vznikla dřív než majitel, případně část majitele nemá vůbec. Tento vztah je vzor Sdílená agregace.

Zkratka

vlastní, ale volněji → celek/část s výjimkou, kterou kompozice zakazuje (vznik dřív, přežití, migrace, více majitelů).

Popis

Vzor Sdílená agregace popisuje vlastnický vztah celek/část, ve kterém celek ovládá životní cyklus části, ale s volnějšími pravidly než kompozice.

Vztah je vlastnictví celek/část. Celek je majitel a ovládá životní cyklus části — stejně jako u kompozice.

Volnost spočívá v tom, že je porušena alespoň jedna ze striktních podmínek kompozice. AAF rozlišuje tři výjimky, z nichž aspoň jedna platí:

  • Část smí žít dočasně sama — narodit se dříve než majitel, anebo majitele přežít.
  • Část smí přejít k jinému majiteli za svého života.
  • Část smí mít více majitelů současně.

Pokud neplatí žádná z výjimek, vztah je kompozice, ne sdílená agregace.

Výjimky „vznik dřív / přežití" a „migrace" jsou životně-cyklové. Tato pravidla nenese Class ani Asociace; patří do scénáře Use Case příslušného přechodu stavu (viz kapitola Use Case 1. druhu). Vzor situaci značí agregačním druhem; samotné pravidlo žije ve scénáři. Výjimka „více majitelů současně" je strukturní — projeví se multiplicitou konce u celku větší než jedna.

Sdílená agregace jako přijatá nečistota

Sdílená agregace bývá vědomě nečistým, ale přijatelným řešením. Příklad: strom prvků téhož typu, kde kořen nemá majitele. Úplně čisté řešení (oddělit kořen od ostatních uzlů přes Generalizaci, viz dále) je u běžného stromu zbytečný overkill.

Sdílená agregace je v takovém případě legitimní pragmatické řešení za jedné podmínky: nečistota musí být v modelu výslovně doložená. Neoznačená (skrytá) nečistota je chyba; doložená nečistota je přijatelná.

Strukturovaný popis

Vzor spojuje dvě Class — celek a cast — jednou asociací. Konec u celek nese agregační druh shared (prázdný kosočtverec). Multiplicitu vzor nefixuje: sdílená agregace se vyskytuje ku 1 i ku N. Výjimka „více majitelů" se projeví multiplicitou konce u celek větší než jedna; výjimka „část bez majitele" spodní hranicí téhož konce rovnou nule (kořen stromu).

(Ilustrativní diagram: TBD.)

Účastníci

  • celek — typ Class, multiplicita dosazení 1. Třída, jejíž instance vlastní část a ovládá její životní cyklus.
  • cast — typ Class, multiplicita dosazení 1. Třída, jejíž instance je vlastněnou částí.
  • vazba — typ Asociace, multiplicita dosazení 0 (statický prvek). Asociace, kterou vzor zavádí; vzor přebírá pevnou vlastnost jejího konce u celek: agregační druh shared.

Nejčastější chyby

Modelování jako kompozice tam, kde platí výjimka. Agregaci ex post (majitel vzniká po částech) ani strom s kořenem bez majitele nelze modelovat kompozicí — ta vznik části před majitelem a část bez majitele zakazuje (viz dále Kompozice ku N, Kompozice ku 1).

Záměna za Odkaz do seznamu. Odkaz do seznamu není vztah celek/část — destination existuje samostatně a celek ji jen používá. Sdílená agregace je vlastnictví s ovládáním života (viz dále).

Skrytá nečistota. Sdílená agregace s nedoloženou výjimkou (kořen bez majitele, který není v modelu označen) je chyba. Nečistota musí být doložená.

Vazby

Vzor Sdílená agregace je parametrickým vyjádřením metaclass Asociace pro agregační druh shared (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 a Kompozice ku N (striktní vlastnictví, composite), Odkaz do seznamu (bez vlastnictví, none) — viz dále.

Čisté řešení stromu přes Generalizaci (oddělení kořene od ostatních uzlů) je alternativa, kterou sdílená agregace nahrazuje pragmatickou doloženou nečistotou (viz dále).

Životně-cyklová pravidla výjimek (vznik, zánik, migrace části) 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.3 Vztah Sdílená agregace, vzor Agregace položek ex post. UML ponechává výklad agregace shared na autorovi dokumentu; AAF jej fixuje na majitelství s ovládáním života a aspoň jednou výjimkou proti kompozici. Knižní příklad „GSM telefon má SIM-kartu" je názorný, ale je pojmový z reality, ne evidence v informačním systému — v AAF se jako vodicí příklad nepoužívá.

Verze a změny

  • 1.0 — Early Access.