![]() |
Namespaces diagram of the Kernel package |
Pojmenovaný element
Pojmenovaný element (abstraktní třída NamedElement) je prvek, který může mít jméno a definuje viditelnost. Jméno, stejně jako viditelnost, je volitelná. Jméno je používáno pro identifikaci v rámci jmenného prostoru.
Atribut qualifiedName je poskládaný výsledek jmen všech vnořených jmenných prostorů (např.: Bankovní produkty::Účty::Běžný účet::Výpis z běžného účtu).
![]() |
Příklad: Bankovnictví |
Viditelnost
Viditelnost je určována výčtovým typem nazvaným VisibilityKind.
![]() |
VisibilityKind |
Notace: viditelnost je určena takto:
- + veřejný (public)
- - soukromý (private)
- # chráněný (protected)
- ~ balík (package)
Jmenný prostor (třída Namespace) je abstraktní třída obsahující množinu pojmenovaných prvků (NamedElement), které mohou být dle jména (tedy pokud ho mají) jednoznačně identifikovány (jinými slovy nelze mít v jednom jmenném prostoru dva pojmenované elementy týmž jménem).
Jeden element může být vlastněn nanejvýše jedním jmenným prostorem.
Namespace může vlastnit omezení (constraints – viz kapitola Omezení). Tato omezení mohou být uplatněna na jmenný prostor nebo na elementy ve jmenném prostoru.
Jmenný prostor má možnost importovat jednotlivé prvky z balíků (Package) nebo všechny prvky balíku, čímž umožňuje odkazovat na ně bez nutnosti zadávat kvalifikované jméno v importujícím jmenném prostoru. Rozlišovat je nutné pouze v případě nejasností (viz dále třídy ElementImport a PackageImport).
Notace: není, definují ji až potomci.
Třída PackageableElement
Prvek typu PackageableElement je pojmenovaný element, který může patřit přímo do nějakého jmenného prostoru (např. třída oproti např. operaci, která nemůže). Atribut visibility se stává povinným, výchozí hodnota je public.
Třída Package
Třída Package (balík) je používán k seskupování prvků a poskytuje pro ně jmenný prostor. Balík může obsahovat další balíky. Balík může vlastnit pouze prvky odvozené od PackageableElement.
Díky předkovi (třída Namespace) balík může importovat jednotlivé prvky jiných balíků nebo celý balík.
Navíc může balík být sloučen (merge) s jiným balíkem.
Pokud element, který je vlastněn balíkem, má viditelnost (visiblity), pak je tato nastavena pouze na public nebo private.
Od UML 2.4.1 má třída Package atribut URI typu string, který lze používat k různým účelům. Pokud je URI vyplněné, musí splňovat podmínky dané RFC 2396 (nejedná se však o součást zkoušky).
Notace: Jsou tři možnosti, jak balík zakreslit. Pokaždé se jedná o obdélník s ouškem nahoře. V prvním případě se nezobrazují žádní členové balíku. V druhém jsou členové zobrazeni uvnitř oblasti balíku. V třetím jsou pak spojeni vztahem.URI se zakresluje do ouška do složených závorek a uvozené textem uri= pod název balíku.
![]() |
Příklad notace třídy Package |
Třídy ElementImport a PackageImport
ElementImport je orientovaný vztah mezi importujícím jmenným prostorem a PackageableElement z jiného balíku a umožňuje, aby tento element mohl být odkazován pouze jménem bez kvalifikace. Pomocí atributu visibility lze určit, zda tento již importovaný element může být dále importován.
Atributem alias: string [0..1] můžeme element přejmenovat. Jméno nesmí být v rozporu s jiným elementem v importujícím jmenném prostoru.
Pokud je visibility nastavena na public, pak importovaný element je viditelný i mimo importující balík (lze jej dále importovat do dalšího balíku).
Pokud je visibility nastavena na private, pak importovaný element je viditelné pouze v rámci importujícího balíku.
Importovaný element musí mít viditelnost public nebo viditelnost nesmí být přiřazena (což mi přijde divné, neboť PackageableElement má atribut visibility povinný. Pozor také na to, že až do UML 2.3 byla ve specifikaci třídy PackageableElement chyba, která jako výchozí hodnotu určovala false. Od UML 2.4.1 je výchozí hodnota již správně (oprava chyby trvala více než 4 roky).
V případě, že v importujícím jmenném seznamu již prvek se stejným názvem je, pak k importu nedojde a importující jmenný prostor musí i nadále používat celé kvalifikované jméno (lze obejít pomocí aliasu).
Notace: přerušovaná čára s otevřenou šipkou z importujícího jmenného prostoru do importovaného balíku. Dále je u šipky zobrazeno klíčové slovo «import», pokud je visibility = public, nebo «access», pokud je visibility = private. Pokud má element definovaný alias, pak tento může být zobrazen za nebo pod klíčovým slovem «import».
![]() |
Příklad: ElementImport |
PackageImport je orientovaný vztah umožňující používat nekvalifikovaná jména (tj. nepoužívat odvozený atribut NamedElement.qualifiedName) pro odkazování se na členy balíku z jiného pojmenovaného prostoru.
Povinný atribut visibility: VisibilityKind určuje viditelnost importovaných prvků (PackageableElements) z importovaného jmenného prostoru. Jsou povoleny pouze hodnoty public (výchozí hodnota) a private.
Pokud je visibility = public, pak importované elementy jsou viditelné mimo importující balík.
Pokud je visibility = private, pak importované elementy jsou viditelné pouze v rámci importujícího balíku.
PackageImport si lze představit jako ElementImport na všechny prvky typu PackageableElement z importovaného balíku.
Notace: přerušovaná čára s otevřenou šipkou z importujícího jmenného prostoru do importovaného balíku. Dále je u šipky zobrazeno klíčové slovo «import», pokud je visibility public, nebo «access» pokud je visibility private.
Na rozdíl od PackageElement zde nelze definovat alias.
Příklad:
![]() |
Příklad: PackageImport |
1 komentář:
U PackageImport - nejsou ty šipky vazby "import" obráceně? Neměly by vést spíš z B, C směrem do A a z A směrem do X?
Okomentovat