![]() |
Závislosti mezi profilovými balíky |
![]() |
Prvky definované v balíku Profiles |
UML poskytuje několik mechanismů, jak jej rozšířit. Toto rozšíření může být jednak stávajících prvků (lightweight extensit mechanism) a jednak přidávání prvků nových. Profily jako takové jsou určeny pro první uvedené rozšíření a v testu se s nimi potkáte v 10 % otázek.
Třída Stereotype
Základním pojmem je stereotyp (stereotype). Než si vysvětlíme mechanismus stereotypů, je nutno se trochu podívat na různé úrovně abstrakce a dobře je pochopit. Pokud si prohlédnete následující obrázek, uvidíte celkem čtyři úrovně abstrakce.
![]() |
Abstrakce |
Nultá, základní úroveň, představuje objekt, tedy to, co je v paměti počítače se svými hodnotami a co spolu komunikuje.
O úroveň výš jsou šablony pro naše objekty, tedy třídy. V nich určujeme, jaké atributy budou objekty mít a jakých hodnot budou smět nabývat. To je to, co dělá většina tvůrců modelu, tedy uživatelé UML. Pro zajímavost si všimněte, že specifikace instance je na této úrovni, nikoliv na nulté, jak se lze mylně domnívat!
Druhá úroveň abstrakce je metamodel UML. O tom si tu celou dobu povídáme. Představujeme si metatřídy, jako jsou Class, Package, Association, Element a mnohé další. Definujeme tu sémantiku jednotlivých tříd, jejich notace a další.
S tím vším jsme si až dosud vystačili. Jenže my teď půjdeme ještě o jednu úroveň výše. V rámci povídání o stereotypech se dostaneme na úroveň metametamodelu, tedy na úroveň infrastruktury UML (její základy se zkouší v certifikační zkoušce úrovně Advanced).
Sterotypy rozšiřujeme třídy na druhé úrovni, ale používáme je na první. Pamatujte, že na druhé úrovni pod pojmem třída myslíme metatřídu. Třídou na první úrovni myslíme instanci metatřídy Classes::Kernel::Class. Pokud na první úrovni mluvíme o případu užití, pak jde o instanci metatřídy (tedy z druhé úrovně) UseCases::UseCase. Pro připomenutí uvádím, že instancí třídy z první úrovně je pak na nulté úrovni objekt.
A k čemu jsou stereotypy dobré? Pokud např. máte model multiplatformní aplikace, pak můžete chtít dát vašemu modelu nějak vědět, která namodelovaná třída je pro kterou platformu. A k tomu můžete použít právě stereotypy. K jedné třídě lze přiřadit více stereotypů, takže jedna třída může být klidně pro více platforem.
Z pohledu metamodelu stereotyp není nic jiného než specializace třídy Class. To mimo jiné znamená, že s sebou může nést další atributy, kterým se v případě stereotypů nazývají tagy (ang. tag). Hodnotám těchto atributů se pak říká tagové hodnoty (ang. tagged values). Stereotypy také mohou používat generalizační vazbu, ale zde je nutné počítat s omezením, které zakazuje používat generalizaci mezi jinými třídami, než jsou právě stereotypy.
Stereotyp je vždy obsažen v nějakém profilu (třída Profile, viz dále).
Notace: Stereotyp se zobrazuje stejně jako třída, navíc před nebo nad názvem je ve francouzských uvozovkách klíčové slovo stereotype.
![]() |
Příklad: Notace třídy Stereotype |
V případě instance stereotypu se notace může různit. Základní je zobrazení názvu stereotypu (resp. seznamu stereotypů oddělených čárkou) ve francouzských uvozovkách před nebo nad názem klasifikátoru (případně na místě, kde by se zobrazil název, ale není žádný přiřazený nebo je jeho zobrazení potlačeno). V případě, že element navíc obsahuje ještě klíčové slovo, je nejprve zobrazeno toto a až pak aplikované stereotypy, např.: «interface» «MyStereotype».
![]() |
Příklad: Rozšířený případ užití |
Stejně tak si ale můžete definovat vlastní obrázek, který se bude zobrazovat v pravém horním rohu nebo dokonce přidat úplně nový obrázek namísto původní notace (díky asociaci s třídou Image). Pokud má element více stereotypů, pak obrázky v rohu mohou být vedle sebe, zde standard víceméně dává nástrojům volnou ruku.
Tagové hodnoty ostereotypovaných elementů mohou být zobrazeny jednou ze tří možností:
- Jako symbol komentáře připojený k elementu. Název stereotypu může být zobrazen ve francouzských uvozovkách před jednotlivými tagovými hodnotami či názvem elementu. Na každém řádku je pouze jeden tag a jeho hodnota.
- V samostatném oddílu daného elementu. Pro každý stereotyp aplikovaný na element je vytvořen samostatný oddíl. Každý takový oddíl má v záhlaví uveden název stereotypu ve francouzských závorkách. Na každém řádku je pouze jeden tag a jeho hodnota.
- Nad nebo před názvem daného elementu.
Jednotlivé tagy a jejich hodnoty jsou zobrazovány jako dvojice:
<název_tagu>'='<hodnota_tagu>
V případě, že tag může nabývat více hodnot, jsou tyto hodnoty odděleny čárkou.
Pokud je tag typu Boolean, pak lze použít pravidlo, že jestliže je název tagu zobrazen, pak je jeho hodnota True, jinak je False.
![]() |
Příklad: Notace tagů a jejich hodnot |
Třída Extension
Pokud tvoříme stereotyp, musíme říct, kterou metatřídu rozšiřujeme. To uděláme pomocí vazby (třída Extension) mezi stereotypem a metatřídou (tato vazba je nepřímá přes třídu ExtensionEnd, která zajistí napojení na stereotyp). Atribut isRequired říká, zda se má automaticky vytvořit instance stereotypu společně s instancí metatřídy.
Notace: šipka s plným (a vyplněným) zakončením vedoucí od stereotypu k metatřídě, linka je plná. Pokud je hodnota isRequired = True, pak se zobrazí vlastnost {required} poblíž třídy ExtensionEnd (tj. u stereotypu).
![]() |
Příklad: Rozšířený případ užití |
Na uvedeném příkladu je vidět rozšíření třídy UseCase. Stereotyp se nazývá EnhancedUseCase a při vytvoření jeho instance bude mít případ užití tři nové tagy. Hodnoty těchto tagů nejsou pouze řetězce, ale je možné použít standardní typy nebo si definovat vlastní (zde je uveden výčet).
Třída Profile
Profil (třída Profile) si můžeme přestavit jako balík (ostatně od třídy Package odvozená je), který rozšiřuje daný metamodel. Obsahuje množinu stereotypů, kterými pak metamodel rozšiřujeme. Zobrazuje se stejně jako balík, pouze se přidává klíčové slovo «profile» před nebo nad název balíku. Kromě stereotypů obsahuje profil i odkazy na metatřídy a metamodel, který rozšiřuje.
Třída ProfileApplication
Třída ProfileApplication je používána, pokud chcete ukázat, na které balíky byly použity (aplikovány) jaké profily. Jedná se o specializaci třídy Construct::PackageImport. Notace: zobrazuje se přerušovanou šipkou s otevřeným koncem směrem od balíku k použitému profilu. Poblíž šipky se zobrazí i klíčové slovo «apply». V případě, že aplikované profily mají některé stereotypy shodného jména, je nutné kvalifikovat název stereotypu (tedy tak, že před jeho název vložím ještě název profilu).
![]() |
Příklad: ProfileApplication |
UML definuje několik stereotypů, které byste mohli znát. Některé jsou uvedeny v kapitole věnované diagramům nasazení u artefaktů, zde uvádím některé další. Kompletní seznam včetně významu najdete ve standardu v příloze C.
![]() |
Obsah standardního balíku StandardProfileL2 |
Žádné komentáře:
Okomentovat