Pravidlo 6: Rozlišitelnost prvků

V rámci jmenného prostoru (prvek Namespace, zástupcem je např. třída nebo komponenta) je možné se na prvky odkazovat pouze jejich jménem. Např. operace jedné třídy se mohou názvem přímo odkazovat samy na sebe nebo např. na atributy téže třídy. Nebo v jednom balíku se mohou prvky v něm obsažené odkazovat na sebe přímo (např. třídy).

V UML existuje pravidlo members_distinguishable, které přikazuje prvkům ve jmenném prostoru být rozlišitelný. A co znamená tato rozlišitelnost? Výchozí pravidlo říká, že prvky musí mít různé názvy. To jistě znáte. Když vytváříte atributy pro třídu, tyto atributy budou mít různé názvy.

Jedinou výjimkou z tohoto pravidla jsou operace. V rámci jednoho jmenného prostoru mohou být operace stejného názvu, ale v takovém případě se musí lišit tzv. signaturou. Signatura je určena počtem, pořadím, typem a směrem parametrů (směrem je myšleno, zda je parametr vstupní, výstupní, vstupně-výstupní, nebo návratový).

Existuje ještě jedna podmínka pro nepojmenované prvky, ale ta se v praxi nepoužívá téměř vůbec. Nechávám ji tedy jako znalost nutnou pouze pro certifikační zkoušku.

Co na to Sparx EA?

Pokud používáte okno pro zadávání atributů, tak vám nedovolí zadat více atributů téhož názvu. Ovšem pokud atribut později pouze přejmenujete, již vás EA na nic neupozorní. Stejně tak dovolí mít např. dvě třídy téhož názvu v jednom balíku.

Douška

Celý seriál 30 pravidel UML byl revidován, upraven a knižně vydán. Pokud jej chcete mít k dispozici v papírové podobě, navštivte stránky nakladatelství Elebedial.

About Slávek Rydval 134 Článků
Slávek Rydval začínal jako programátor, ale postupem času se dostal k návrhu softwaru, posléze k integrační architektuře a v současní době pracuje jednak jako architekt řešení a jednak jako školitel UML (základů i příprav k certifikační zkoušce OCUP 2) a nástroje Sparx Enterprise Architect. S UML přišel do styku již na univerzitě, ale opravdu intenzivně se mu věnuje posledních deset let. Na programování však nezanevřel a občas pár řádek kódu napíše.

2 Comments

  1. Předpokládejme, že se dvě operace liší pouze názvy parametrů např.:

    Sečti(a: integer, b:integer): integer
    Sečti(x: integer, y:integer): integer

    mají uvedené operace stejnou signaturu, či nikoliv?

    Děkuji, seriál se mi velmi líbí.
    Sam F. Polívka

    • Pokud bychom byli naprosto přesní, tak ano. Podle UML standardu se do signatury započítává z parametru: název, typ, efekt, směr, zdali jde o výjimku, zdali je streamovaný, seřazenost, unikátnost, dolní hranice násobnosti a konečně horní hranice násobnosti (viz předefinovaná operace isDistinguishableFrom metatřídy BehavioralFeature, ze které je odvozena mj. metatřída Operation). V praxi to však zakazuji, protože rozumné programovací jazyky název parametru do signatury nezapočítávají (např. C#).

      Jinak mě těší, že se seriál líbí.

Napište komentář

Vaše e-mailová adresa nebude zveřejněna.


*