UPOZORNĚNÍ

Zkoušky OCUP Fundamental a OCUP Intermediate již není možné absolvovat. Nově jsou k dispozici OCUP 2 Foundation a OCUP 2 Intermediate. Texty uvedené na těchto neodpovídají plně novým zkouškám. Aktuální text najdete na nových stránkách.

Testy znalostí UML

Chcete si kdykoliv před, při nebo po čtení těchto stránek udělat test znalostí UML? Máte možnost absolvovat takový, který připravil autor těchto stránek. Vše podstatné najdete na http://www.kurzy-uml.cz.

Balíky (Packages)

The Packages diagram of the Kernel package
Třída 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

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.
Tento vztah je velmi podobný generalizaci v tom smyslu, že připojovací element rozšiřuje charakteristiku přijímajícího elementu. Výsledkem je pak kombinace těchto dvou elementů. Oproti generalizaci však není výsledek operace spojení zahrnut do modelu, byť se přijímající element chová jako výsledný element. To tedy znamená, že při odkazu na prvek z přijímajícího balíku se ve skutečnosti odkazuji na výsledek spojení.

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.
Obecný princip říká, že výsledný element toho nesmí umět méně než přijímající element.

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:
  1. Elementy s viditelností private jsou z operace spojení vyjmuty (stejně jako v případě PackageImport).
  2. Pro elementy, které existují pouze v připojovaném balíku, se použije operace PackageImport.
  3. 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.
  4. Generalisace z přijímajícího balíku jsou převedeny do výsledného balíku.
  5. Na balíky stejného jména jsou uplatněny tatáž pravidla (rekursivní operace spojení).
  6. 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

Líbila se vám právě přečtená kapitola?

Líbil se vám článek? Přinesl vám užitek? Pokud ano, můžete mi zaslat pár drobných, čímž jednak dáte najevo, že se vám tu opravdu líbilo, a jednak mi ukážete, že má práce není zbytečná. Informace o darovací platbě zde.