04.11.2014 Views

elektronická verzia publikácie - FIIT STU - Slovenská technická ...

elektronická verzia publikácie - FIIT STU - Slovenská technická ...

elektronická verzia publikácie - FIIT STU - Slovenská technická ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Znovupoužitie návrhových vzorov na úrovni modelu 161<br />

Kompozícia vzorov Composite a Decorator<br />

Pri vytváraní kompozície viacerých vzorov je nutné vybra také alternatívy jednotlivých<br />

spájaných vzorov, aby bolo možné zabezpei ich vzájomnú spoluprácu o možno najjednoduchšie.<br />

V rámci príkladu došlo k použitiu vzoru Decorator so samostatným rozhraním<br />

pre dekorátory, pretože inštancia obsahuje viac dekorátorov. Súasne bol použitý variant<br />

vzoru Composite s metódami na pridávanie a odoberanie objektov len v rámci kompozitnej<br />

triedy, nakoko pridanie metód do celej hierarchie by znamenalo pridanie týchto metód<br />

aj do tried definovaných vzorom Decorator, o by zbytone komplikovalo návrh.<br />

Realizácia transformácií<br />

Existuje viacero jazykov urených na transformáciu medzi modelmi. Jednou z alternatív je<br />

jazyk QVT (Query View Transformation), ktorý bol definovaný pre potreby MDA skupinou<br />

OMG. Jeho špecifikácia je však natoko zložitá, že momentálne neexistuje implementácia,<br />

ktorá by úplne vyhovovala tomuto jazyku. Preto je vhodné prikloni sa k niektorému<br />

z jazykov, ktoré sa svojou funknosou blížia ku QVT, ale na rozdiel od neho už majú<br />

funknú implementáciu. Príkladom takého jazyka je ATL, ktorý bol vytvorený v rámci<br />

Eclipse Modeling Framework. V úvahu pripadajú aj jazyky definované v rámci existujúcich<br />

vývojových prostredí, akými sú napr. Borland Together alebo Rational Software Architect.<br />

Nasledujúci príklad je ukážkou transformácie vzoru Singleton, ktorá pridáva triede<br />

statickú metódu urenú na vytvorenie inštancie.<br />

rule SingletonClass {<br />

from s : UML2!uml::Class (<br />

if thisModule.inElements->includes(s) then<br />

s->oclIsTypeOf(UML2!uml::Class) and<br />

s->getAppliedStereotypes()-><br />

exists(m|m.qualifiedName='MyProfile::Singleton')<br />

else false endif)<br />

}<br />

to<br />

t : UML2!uml::Class (name

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!