Generalizace v UML 2

Autor: Michael Jesse Chonoles, James A. Schardt

Je přirozené třídit objekty do kategorií a organizovat kategorie do podkategorií. Pokud hledáte místo k bydlení, můžete kategorizovat bytovou jednotku jako dům, byt, městský dům, kondominium, panské sídlo atd. Domy lze zase dále organizovat podle stylů, jako je ranč, mezipatro, koloniální a solná nádrž. UML vám poskytuje notaci k zachycení těchto typů klasifikací - známých také jako zobecnění a specializace - a jejich využití jako modeláře a programátora.



Někteří objektově orientovaní vývojáři vynaloží maximální úsilí, aby ušetřili trochu práce. Když mohou něco modelovat jednou a znovu to použít, zajímá je to. Pokud mohou napsat metodu (programový kód operace) pro třídu pouze jednou a použít ji mnohokrát, přihlaste se k jejich vyšší produktivitě. Pokud si chcete ušetřit čas zadáním atributů a operací jednou a následným opakovaným použitím, čtěte dále.



Při definování tříd si můžete všimnout, že některé třídy mají stejné atributy nebo stejné operace. V takovém případě umístíte tyto společné funkce (atributy, operace atd.) Do obecnější třídy zvané nadtřída. Třídy, které sdílejí společné funkce, jsou známé jako podtřídy nadtřídy. Například délka zaznamenaného materiálu na videokazetě, audiopásce, kompaktním disku nebo filmovém filmu je atributem všech čtyř druhů zaznamenaných médií. Tyto třídy mohou sdílet i další atributy, například jejich fyzické rozměry a datum, kdy byl každý použit k vytvoření záznamu. V tomto případě nadtřída by RecordedMedia, podtřídami by byly Videotape, Audiotape, CompactDisc a MovieFilm a některé sdílené atributy by mohly zahrnovat zaznamenanou délku a celkovou délku.

Tento proces hledání podobných atributů nebo operací napříč třídami je známý jako zobecnění. Například zobecníte atribut recordLength na obecnější třídu nazvanou RecordedMedia. Proces zobrazování zobecnění v UML je jednoduchý:



1. Určete podtřídy.

Vyhledejte třídy, které mají stejné atributy nebo operace. Tyto třídy jsou vaše podtřídy.

2. Vytvořte nadtřídu.



Poskytněte nadtřídu k uložení společných atributů a / nebo operací podtříd. Pojmenujte nadtřídu, která kategorizuje všechny podtřídy. Umístění nadtřídy nad podtřídy v diagramu usnadňuje čtení, ale není to nutné.)

dávkování acykloviru pro opary

3. Přidejte do supertřídy společné funkce.

Odeberte společné atributy a operace z podtříd a umístěte je (jednou) do nadtřídy.

4. Nakreslete vztah zobecnění.

Z každé podtřídy do nadtřídy nakreslíte zobecňující čáru. V UML je generalizační čára představována jako plná čára s dutou šipkou na konci nadtřídy. V UML je čára s dutým hrotem šipky, která spojuje podtřídu se supertřídou, známá jako generalizační vztah.

Poté, co vytvoříte nadtřídu se společnými funkcemi, jako jsou atributy a operace, podtřídy zdědit ty vlastnosti ze supertřídy. Tímto způsobem musíte společné funkce zapsat pouze jednou do nadtřídy namísto mnohokrát do každé z podtříd.

Můžete zjistit, zda máte zevšeobecnění, když se podíváte na jazyk, který (nebo ostatní) používáte k popisu vztahu mezi třídami. Všimněte si, že při popisu zaznamenaného média a jeho různých typů, jako je videokazeta dříve v této části, se objevila fráze čtyři druhy zaznamenaných médií. Pokud zjistíte, že používáte fráze, jako je druh nebo typ, je pravděpodobné, že máte zevšeobecnění.

Řekněme, že jeden z vašich klientů má zájem o sledování materiálů v archivu. Tento klient nashromáždil různé druhy zaznamenaná média, jako jsou videokazety a zvukové pásky. Jako modeláři musíte zachytit rozdíly mezi těmito médii i jejich podobnosti. Diagram na obrázku 1 ukazuje počátky několika zevšeobecnění, uspořádaných do hierarchie dědičnosti.

Obrázek 1: Jednoduchá hierarchie dědičnosti.

Vývojáři používají termín zobecnění nebo dědičnost k označení stejného konceptu opětovného použití sdílených atributů a operací, které ukážete v nadtřídě a opětovné použití v podtřídách. Generalizace odkazuje na koncept zobecnění od specifik (podtřídy) k obecným (nadtřída). Dědičnost se týká účinku zobecnění na podtřídy.

Když uvidíte a zobecnění vztah mezi třídami, jeho význam je velmi odlišný od vztahu sdružení vztah mezi třídami. Sdružení je nakonec vztah mezi mnoha předměty - některé instance jedné třídy mají vztah (odkaz) s instancemi druhé třídy. Ve vztahu generalizace mezi třídy , vztah je opravdu o třídách. Nejlepší, co můžete říct, je, že objekt vytvořený z podtřídy obsahuje všechny funkce podtřídy a nadtřídy.

m pilulka bílá kulatá

Máte pouze jeden objekt ze třídy v generalizačním vztahu. I když ukážete dvě třídy, podtřídu a nadtřídu, máte vytvořen pouze jeden objekt. Můžete si myslet, že objekt třídy Videotape je z důvodu dědičnosti také objektem třídy RecordedMedia. Obrázek 2 ukazuje objekt vytvořený ze třídy Videotape se všemi jeho atributy. (Instance třídy je reprezentována jako symbol objektu.) Nemáte dva různé objekty (jeden pro RecordedMedia a druhý pro Videotape), pouze jeden objekt. Když byl objekt vtu83-1023 vytvořen, byly nastaveny hodnoty všech jeho atributů. Záznam na kazetu je 57 minut. Celková délka fyzické pásky je 60 minut. Páska je videokazeta Umatic s výškou 10 palců, šířkou 7 palců a hloubkou 1,5 palce. Záznam je analogový a k pásku je připojen protokol obsahu pásky, na který se může archivář odkazovat.

Obrázek 2: Instance zobrazující všechny zděděné atributy.

Máte pouze jednu instanci definovanou podtřídou a její nadtřídou. Podtřída a nadtřída mohou mít operátor konstruktoru (k vytvoření instance) a operaci destruktoru (ke zničení instance). Když je váš software spuštěn a vytvoříte instanci podtřídy, nejprve se provede konstruktor nadtřídy a poté konstruktor podtřídy. Když nastane čas eliminovat instanci, kterou jste vytvořili, nejprve se zavolá destruktor podtřídy a poté destruktor nadtřídy. Pokud jsou věci složitější, protože máte podtřídy podtříd, nezapomeňte: Konstruktory jsou vyvolány od horní části hierarchie dědičnosti dolů; destruktory jsou volány v pořadí od nejnižší podtřídy až po nejvyšší nadtřídu.