![]() |
Metatřídy Portu |
Třída EncapsulatedClassifier
Třída EncapsulatedClassifier rozšiřuje možnosti strukturovaného klasifikátoru o možnost vlastnit porty.
Třída Port
Port je speciální vlastnost (property) klasifikátoru a je styčným komunikačním bodem mezi klasifikátorem a jeho okolím nebo mezi klasifikátorem (či jeho chováním) a vnitřní částí klasifikátoru. Jinými slovy požadavky nejsou adresovány klasifikátoru, ale portu, který tento požadavek předá dál. Podobně to funguje i opačným směrem. Pokud instance klasifikátoru něco potřebuje, komunikuje s okolním světem pomocí portu.
V případě, že port adresuje požadavek nikoliv své vlastnosti, ale „svému“ klasifikátoru (tedy tomu, které jej vlastní), hovoříme o chovacím portu (behavioral port) – viz atribut isBehavior třídy Port v diagramu.
To, že port je vlastnost (property) klasifikátoru, mimo jiné znamená, že nemůže implementovat žádné rozhraní. Pokud tedy port nějaká rozhraní poskytuje, musí tato být implementována klasifikátorem, ke kterému port náleží, případně nadtřídou tohoto klasifikátoru.
Všimněte si také, že třída ConnectableElement je výchozí třídou portu, což nám umožňuje spojit port s konektorem.
Atribut isService třídy Port nám říká, zda port poskytuje své služby navenek (výchozí stav) nebo se jedná o soukromý port.
Notace třídy Port
Port se kreslí na hranici klasifikátoru jako čtverec. K němu se dává doplňující řetězec:
jméno portu: typ portu násobnost
Zobrazení všech tří částí může být potlačeno. V knize [ocup-cg] se píše, že pokud je atribut isService = False, pak zmíněný čtverec nepřekrývá okraj klasifikátoru, ale pouze k němu zevnitř doléhá. Nicméně tato informace ve standardu uvedena není.
Pokud port není spojen s žádnou částí klasifikátoru, ale s klasifikátorem přímo, zobrazujeme elipsou uvnitř klasifikátoru spojenou s portem.
Rozhraní, které port poskytuje nebo vyžaduje, zakreslujeme klasickou lízátkovou notací známou z rozhraní. Toto rozhraní je uvedeno u portu. V následujícím příkladu tedy Rozhraní C není poskytováno portem, ale přímo třídou A.
![]() |
Příklad: Notace portu |
![]() |
Příklad: Notace portu |
Vyvolání akcí, triggery, proměnné
![]() |
Action Specific to Composite Structures |
Třída InvocationAction
Vyvolání akce (invocation action) je akce, která může zavolat chování dostupné přes port. Tímto chováním je operace nebo chování (např. stavový stroj). Protože toto vyvolání se může udít na portu, balík InvocationActions rozšiřuje třídu InvocationAction o tuto možnost. Pokud dojde k vyvolání akce pomocí portu, pak se v zápisu použije navíc řetězec via <portname>.
Více se o akcích budeme bavit v kapitole o akcích, po přečtení příslušné kapitoly se sem vraťte.
Třída Trigger
Podobně jako vyvolání akce, tak k použití portu může dojít díky triggeru. Opět jde o rozšíření metamodelu (balík Communication). V zápise se navíc použije řetězec «from» <portname>. Opět, mrkněte sem, až se více dozvíte o stavových diagramech.
![]() |
Příklad notace Triggeru na přechodu mezi stavy |
Třída Variable
Poslední třídou, kterou zde zmíním, je třída Variable, které rozšiřuje model strukturovaných aktivit (balík StructuredActivites) o možnost mít proměnnou jako připojitelný element (connectable element).
Poznámka ke knize [ocup-cg]
V knize je pro úroveň Intermediate popisována i spolupráce (třídy Collaboration a CollaborationUse), ale znalost těchto dvou tříd je požadována až na úrovni Advanced.
Žádné komentáře:
Okomentovat