![]() |
The Packages diagram of the Kernel package |
Balík (rozněžněnci často používají slovo balíček) je sada elementů různých typů. Balík se používá pro rozdělení modelu do menších, lépe upravovatelných částí.
Balík může obsahovat libovolný prvek odvozený od PackageableElement.
Balík definuje jmenný prostor, tzn. názvy prvků, které balík obsahuje, musí být jednoznačné.
Prvek může patřit pouze jednomu balíku.
Balík může obsahovat další balíky (právě proto, že i třída Package je odvozená od PackageableElement), čímž lze tvořit logickou hierarchii.
Prvek z jiného balíku je zmiňován jménem balíku a jménem prvku podle šablony:
Package name::class name
To v důsledku znamená závislost.
Notace (více je v kapitole Jmenné prostory (Namespaces)):
![]() |
Příklad: Notace Package 1 |
![]() |
Příklad: Notace Package 2 |
Třída PackageMerge (spojení balíků) představuje orientovaný vztah mezi dvěma balíky, který říká, že obsah přijímacího balíku (viz dále) je za předem daných pravidel spojen s připojovaným balíkem.
Názvosloví:
- Připojovaný balík (merged package) je balík, který rozšiřuje přijímající balík. V notaci je to ten, u kterého je hrot šipky.
- Přijímající balík (receiving package) je balík, který na konci operace spojení obsahuje výsle-dek spojení. Nicméně v této terminologii jde o stav před spojováním.
- Výsledný balík (resulting package) je balík, který je výsledkem operace spojení.
- Podobně se definuje připojovaný element, přijímající element a výsledný element.
Tato třída je velmi často používána v UML metamodelu.
Omezení, která jsou u pravidel uvedena (mluvíme o omezení definovaná ve standardu UML), musí být splněna před tím, než je operace spojení prováděna. Mezi ně patří následující:
- Operaci spojení nelze provádět v cyklu.
- Balík nemůže uplatnit vztah PackageMerge na balík, ve kterém je obsažen.
- Balík nemůže uplatnit vztah PackageMerge na balík, který obsahuje.
Pravidla pro spojení uvedená ve standardu jsou poměrně rozsáhlá (nikoliv však komplikovaná). Doporučuji alespoň si je přečíst a pochopit.
Všechna pravidla pro spojení můžeme shrnout (zjednodušit) do několika základních:
- Elementy s viditelností private jsou z operace spojení vyjmuty (stejně jako v případě PackageImport).
- Pro elementy, které existují pouze v připojovaném balíku, se použije operace PackageImport.
- Pro elementy stejného názvu se použije generalizace. Přijímající element je potomkem připojovaného elementu. Všechny vlastnosti (features) v přijímajícím elementu jsou předefinovány, což mj. znamená, že všechny vlastnosti (features) jsou vlastněny přijímajícím elementem.
- Generalisace z přijímajícího balíku jsou převedeny do výsledného balíku.
- Na balíky stejného jména jsou uplatněny tatáž pravidla (rekursivní operace spojení).
- PackageImport a ElementImport z přijímaného balíku jsou převedeny do výsledného balíku.
![]() |
Příklad: Spojení dvou balíků |
Podobně jako generalizace, i PackageMerge pouze implikuje transformace, ale výsledek jako takový není součástí modelu. Nicméně přijímající balík a jeho obsah je považován za výsledek operace spojení. To tedy znamená, že odkaz na element v přijímajícím balíku je vlastně odkaz na výsledný element.
Příklad:
![]() |
Příklad: Spojení balíků |
• Třída B::X je výsledný element operace spojení přijímajícího balíku B::X a připojovaného balíku A::X.
• Výsledný element B::X má dva atributy: A1 a A2.
• Třída K::PotomekX je potomkem připojované třídy A::X, takže dědí pouze atribut A1.
• Třída L::PotomekX je potomkem výsledné třídy B::X, tedy dědí oba atributy.
Žádné komentáře:
Okomentovat