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

Generalizace

Úvod

Tato kapitola zavádí dva související pojmy CLM: Generalizaci — vztah mezi dvěma Class (obecnější a speciálnější) — a Abstraktní třídu, která z Generalizace vyplývá.

Oba pojmy žijí na úrovni analytického modelování (AM) s mírou detailu implementace 0 % (viz kapitola Analytické modelování).

Generalizace je vedle Asociace druhý vztah modelu tříd. Na rozdíl od Asociace nevede ke vztahu mezi instancemi — působí přímo mezi třídami. Při hledání vztahů se proto hledá až po Asociacích (viz kapitola Asociace).

Generalizace

Generalizace je vztah mezi dvěma Class: obecnější třídou (předek) a speciálnější třídou (potomek). Pojem Generalizace má v AAF synonymum dědičnost.

Generalizace je interakce přímo mezi třídami, ne mezi jejich instancemi. Nevede ke vztahu (Link) mezi instancemi — to je vlastnost Asociace. Generalizace působí už při vzniku instance potomka.

Předek a potomek

Vztah se kreslí spojnicí s trojúhelníkem u předka. Směr (šipka trojúhelníku) vede od potomka k předkovi a čte se „potomek je druh předka".

Instance potomka má vlastnosti definované potomkem i předkem dohromady, jako by se oba předpisy slily. Sdílí se definice struktury (společná políčka), ne instance — každá instance má své vlastní hodnoty.

Generalizace je tranzitivní. Má-li předek dalšího předka, nese instance potomka strukturu všech předků nad sebou.

Zástupnost rolí zespodu nahoru

Zástupnost rolí zespodu nahoru je klíčová vlastnost Generalizace. Všude, kde se v modelu objeví předek (na konci asociace, v odkazu, v seznamu), může tuto roli sehrát instance libovolného konkrétního potomka. Obecnější pojem předka je tak zástupným pojmem pro kteréhokoli potomka.

Projevem v instancích je rodina heterogenních linků: linky jednoho vztahu končí na instancích různých tříd (různých potomků), a přesto patří pod jeden vztah v modelu tříd.

Rozlišující znaky

Generalizace × Asociace. Asociace vede ke vztahu (Link) mezi instancemi a hledá se jako první. Generalizace působí přímo mezi třídami, k Linku nevede a hledá se až po Asociacích.

Nezávislost instancí potomků. Instance dvou různých potomků téhož předka spolu nejsou v žádném vztahu. Sdílí jen společnou definici struktury, ne instance.

Abstraktní třída

Abstraktní třída je třída, která už neslouží k rození instancí, ale jen jako předloha pro dědičnost (vystupuje jako předek). Instance z ní nevznikají.

Třída, ze které instance vznikají, je konkrétní. Konkrétní třídy se vyhledávají jako první (viz kapitola Class); abstraktní třída vzniká až zavedením Generalizace, kdy se vytkne společný předek.

Nejčastější chyby

Metoda generalizačního buldozeru. Z toho, že dvě třídy mají shodné atributy, neplyne Generalizace. Nalezená shoda struktury (například obě třídy nesou ) se ve většině případů řeší kompozicí — společná část se vloží jako samostatná instance do obou tříd — ne společným předkem. Generalizaci zakládá zástupnost rolí zespodu nahoru, ne shoda atributů.

Hledání Generalizace před Asociací. Vztahy se hledají vždy nejprve jako Asociace; Generalizace se nalézá až poté, když jsou patrné vztahy mezi instancemi.

Míchání úrovní abstrakce. Implementační mapování dědičnosti (varianty do RDB, vícenásobná dědičnost jako technika) patří do Designu a Kódování, ne do analytického modelu (viz kapitola Analytické modelování).

Vazby

Generalizace je vedle Asociace druhý vztah modelu tříd; spojuje dvě Class (viz kapitoly Class, Asociace).

Generalizace konceptuálně souvisí s Objektovým paradigmatem — instanci potomka vidíme zvenku jako instanci předka, aniž bychom interakci dědičnosti viděli (viz kapitola Objektové paradigma).

Na Generalizaci stojí složené (COMPLEX) vzory CLM Lite — Heterogenní seznam, Odkaz na vrchol stromu, Diskriminátor, Bridging, Party (viz dále).

Externí kotva: kniha Analytické modelování v praxi, kapitola 3.2.5 Vztah Generalizace. Z UML 2.5.1 (Generalization) se přebírají rysy slučitelné s AM (vztah mezi třídami, dědění struktury, abstraktní třída); nepřebírá se implementační mapování dědičnosti.

Verze a změny

  • 1.0 — Early Access.