![]() |
Contents of Interfaces package |
Rozhraní (třída Interface) je specializace třídy Classifier, který deklaruje množinu souvisejících vlastností (features) a pravidel. Pravidla jsou ve formě omezení (constraints): pre- a post-condition.
Rozhraní nespecifikuje pouze metody, ale i atributy.
Rozhraní má stejnou notaci jako klasifikátor, pouze má navíc uvedeno klíčové slovo «interface».
Rozhraní je potomek klasifikátoru, což mj. znamená, že může být asociováno s jiným rozhraním či třídami.
V UML se rozlišuje mezi rozhraním, které klasifikátor nabízí (supplied interface) a které se požaduje (required interface), resp. je elementem požadováno.
Implementační třída musí implementovat nejen vlastnosti (features) rozhraní, ale i vlastnosti všech předchůdců implementovaného rozhraní. Implementovat se musí všechny metody a atributy (im-plementační třída tyto atributy musí poskytovat).
Poskytované rozhraní (supplied interface) je rozhraní, které klasifikátor implementuje. V notaci lze značit „lízátkem“ a názvem rozhraní uvedeným nad kolečkem.
![]() |
Příklad: Lízátko |
Vyžadované rozhraní: značí se půlkruhem a říká, že jde o klasifikátor, který pro svoji činnost vyžaduje jiný klasifikátor implementující dané rozhraní.
![]() |
Příklad: Lízátko |
Tip pro lepší zapamatování notace s lízátkem: Ten, kdo má lízátko, není žádný sobec a rád se rozdělí. Lízátko poskytne ostatním, tedy jde o poskytovatele rozhraní (supplied interface). Pak je to někdo, kdo by rád po lízátku chňapnul, to je klasifikátor, který rozhraní-lízátko vyžaduje. Proto v notaci si to můžeme představit jako pařátek natahující se po lízátku.
Další možnou notací je využití závislostí:
![]() |
Příklad: Rozhraní pomocí závislostí |
Rozdíl mezi „lízátkovou notací“ a té s realizační šipkou je ten, že v první jmenované vidíme pouze název rozhraní, kdežto v druhé jmenované jsou vidět i jednotlivé vlastnosti (features) rozhraní.
Lízátková notace je vhodná pro redukci čar v diagramu.
Rozhraní je klasifikátor, tudíž lze na něj implementovat generalizaci.
Klasifikátor může implementovat libovolné množství rozhraní.
Z rozhraní nelze dělat instance.
Viditelnost všech vlastností (features) rozhraní je public.
Příklad:
Mějme dvě rozhraní. Jedno nazvané Auto, které poskytuje to základní, co by auto mělo dělat. Od toho je pak odvozené pomocí generalizace Luxusní auto, které má minibar a možnost lůžkové úpravy, pokud se nabere nějaká ta pěkná stopařka. Řidič k takovému autu je samozřejmostí.
![]() |
Příklad: Auta a uživatelé |
A nyní máme dvě třídy, které implementují každá jiné rozhraní. Třída Škoda Favorit implementuje rozhraní Auto. K tomu je také možné přiřadit lufťáka (třída Víkendový řidič). Pokud by bylo třeba, pak tento Víkendový řidič může sednout i do Lexusu, neboť rozhraní LuxusníAuto je potomkem rozhraní Auto (pouze tento sváteční řidič nebude umět využít všech páček a čudlíků, které Lexus nabízí).
Dále máme třídu Lexus, která implementuje všechny vlastnosti (features) rozhraní LuxusníAuto, ale samozřejmě i rozhraní Auto. K tomu je možné „dodat“ pouze schopného řídícího pracovníka (možná někdo znáte pejorativní synonymum manažer). Ten by do Favorita rozhodně nemohl sednout.
![]() |
Příklad: Auta a uživatelé (pokračování) |
Třída InterfaceRealization
Třída InterfaceRealization je specializace třídy Depencency::Realization. Jde o závislost mezi klasifikátorem a rozhraním. Říká, že klasifikátor splňuje pravidla rozhraní (implementuje vlastnosti (features) rozhraní). Šipka vede od klasifikátoru k rozhraní.
V návrhu UML 2.x se mluvilo o třídě Implementation, která nakonec byla přejmenována na InterfaceRealization.
V UML není přesně řečeno, která notace pro realizaci rozhraní se má používat. Naskytují se dvě, více intuitivní je ta s přerušovanou linkou a „generalizační“ šipkou na konci.
![]() |
Příklad: Notace realizace rozhraní |
Žádné komentáře:
Okomentovat