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.

Způsoby volání chování (balík Communication)

Reception

Chování je v UML řízené událostmi. Jinými slovy běh (vykonání) chování je tedy vždy způsobeno nějakou událostí.

Balík Communication přidává infrastrukturu pro komunikaci mezi objekty v systému a pro vyvolání chování. Přesný způsob komunikace je vidět na následujícím obrázku (v rámci OCUP Fundamental to berte jen jako seznámení, ostatně jako celou kapitolu. Ta je zde pouze pro přehled, který je v OCUP Fundamental vyžadován, ovšem třídy z tohoto balíku nejsou součástí zkoušky.):

Communication Domain Model

Během vykonávání chování mohou vznikat další události.
Triggers


Vždy však dochází ke dvěma událostem: začátek a konec běhu chování.

Invocation Domain Model

Existuje několik druhů žádostí o vykonání chování, např. odesláním signálu nebo vyvoláním operace.

Domain Model Showing Request Kinds

Pokud je vyvolání běhu chování způsobené přijmutím události (tedy nikoliv zavoláním např. metody), potom mluvíme o signálu (který může být různě specializován, viz diagram Events). Takovým signálem může být např. výjimka. Typ žádosti je určen způsobem volání, které událost vyvolalo. Zodpovědný za výběr správného chování, které se má na základě události spustit, je příjemce signálu.

Posílání signálu je pro vyvolání reakce v přijímajícím objektu asynchronní a nelze tedy očekávat odpověď na tento signál (myšleno synchronní, nic však nebrání udělat asynchronní odpověď v podobě dalšího signálu).

SendInvocationOccurence vytvoří SendRequest a způsobí SignalOccurence v přijímajícím objektu.

CallInvocationOccurence vytvoří CallRequest a způsobí CallOccurence v příjemci.

Events

Parametry chování

Chování může mít libovolný počet parametrů (asociace ownedParameter). Vstupní parametry jsou dostupné ihned po zavolání běhu chování, stejně tak výstupní parametry jsou připraveny těsně před ukončením běhu chování.

Třída Behavior

Třída Behavior specifikuje, jak se kontext klasifikátoru mění v čase. Specifikací může být buďto definice možného běhu chování (possible behavior) nebo Emergent behavior nebo vybraná podmnožina možného vykonávání.

Chování klasifikátoru je vždy definice chování, nikdy nejde jen o ilustraci. Popisuje sekvenci změn stavů instance klasifikátoru.

Pokud je chování asociováno s metodou chovací vlastnosti (feature), definuje implementaci této vlastnosti.
Vytvoření instance potomka třídy Behavior je nazýváno vyvolání chování (invoking the behavior).

Vlastní instance je nazýván běh či vykonávání chování (execution).

Chování může být vyvoláno přímo nebo může jít o vyvolání chovací vlastnosti (feature), která toto chování specifikuje.

Při vyvolání chování jsou pak připravena sada vstupních parametrů a při dokončení je k disposici sada výstupních parametrů.

Atribut isReentrant říká, zda chování může být voláno několikrát po sobě, aniž by byl ukončen předchozí běh. Výchozí hodnota je false.

Asociace:
  • preconditions: omezení, která musí být splněna před vlastním vyvoláním běhu chování.
  • postconditions: omezení, která musí být splněna při dokončení běhu chování.
  • ownedParameters: sada vstupních a výstupních parametrů.
  • /context: BehavioredClassifier [0..1]: kontext, ve kterém je chování vykonáváno. Pokud je chování vlastněno instancí třídy BehaviorClassifier, pak tento klasifikátor je kontextem. Jinak je kontext první BehavioredClassifier, na který se lze dostat řetězcem vlastnění.
Detailní sémantiku definuje až potomek.

Třída BehavioredClassifier

Atribut ownedBehavior [0..*] určuje, pro který klasifikátor je chování definováno.

Atribut classifierBehavior: Behavior [0..1] je specifikace chování, které určuje chování samotného klasifikátoru.

Atribut isActive říká, zda instance třídy BehavioredClassifier má vlastní řízení toků. Pokud ano (hodnota je true), pak mluvíme o aktivním objektu (active object). Aktivní objekty odpovídají na události autonomně a nezávisle na dalších objektech.

Extensions to behavioral features

Pokud objekt není aktivní, pak jeho chování je vykonáváno jinými objekty ve společném řízení toku. V tomto případě můžeme určit, jak se mají obsloužit konkurenční volání (atribut concurrency, který je definován v balíku Communication):
  • concurent – vedle sebe vykonávané běhy jsou na sobě nezávislé
  • sequential – k žádné koordinaci vedle sebe vykonávaných běhů nedochází, všechny volající instance si musí situaci vyřešit samy.
  • guarded – vykonává se pouze jeden běh, ostatní čekají na jeho dokončení. Případné deadlocky si musí vyřešit vývojář.

Žá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.