22.11.2013 Views

Dankwoord - martes

Dankwoord - martes

Dankwoord - martes

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

50 HOOFDSTUK 4. REALISATIE IN HAT<br />

tegenhangers in JAVA API hebben.<br />

Bij het doorlopen van een expressieboom gaan we voor elk OCL modelelement de bijbehorende<br />

schrijver oproepen. Deze schrijvers zullen een JAVA representatie voor het OCL modelelement<br />

produceren. Voor collectieiteratoren moeten we nieuwe hulpmethoden genereren die geen<br />

tegenhangers in JAVA hebben. Bij het doorlopen van een OCL expressieboom willen we<br />

maar een oproep naar deze extra hulpmethoden produceren. Natuurlijk moeten deze extra<br />

hulpmethoden ergens anders gegenereerd worden.<br />

Nu wordt duidelijk dat indien we met een generator te werk gaan komen we terecht in een probleem.<br />

De oproep naar een gewenste hulpmethode wordt wel geproduceerd maar de methode<br />

zelf is nergens gegenereerd.<br />

We hebben dat opgelost door voor elk OCL modelelement dat extra hulpmethoden vereist,<br />

nieuwe generatoren te creëren. Deze nieuwe generatoren zullen voor elk OCL modelelement een<br />

schrijver hebben. Natuurlijk deze schrijvers zullen een verschillende representatie (sjabloon)<br />

bevatten.<br />

Met andere woorden gaan we voor een run-time OCL expressie de operatie GenerateCode()<br />

telkens met verschillende generatoren oproepen. Bij de eerste oproep van de GenerateCode()<br />

operatie wordt een oproep naar een gewenste hulpmethode gecreëerd. Vervolgens wordt opnieuw<br />

de GenerateCode() operatie met een andere generator opgeroepen. Deze generator zal<br />

maar schrijvers voor OCL elementen van type LoopExpr hebben. Deze schrijver zal de sjablonen<br />

voor de verschillende collectieiteratoren bevatten die eigenlijk de hulpmethoden zullen<br />

produceren.<br />

4.2.3 OCL If-then-else en let modelelementen<br />

De voorgestelde sjabloon in hoofdstuk 3 voor OCL if-then-else expressie kunnen we ook<br />

in HAT implementeren. We doen dat door in de schrijvers voor OCL modelelementen van<br />

type IfExpr de sjabloon voor if-then-else expressie toe te voegen. Indien de if-then-else<br />

expressies een of meerdere collectieiteratoren bevatten dan moeten we de aanpak van subsectie<br />

4.2.2 implementeren. Namelijk roepen we een tweede keer de GenerateCode() operatie op met<br />

de generator voor collectieiteratoren.<br />

Voor OCL let-expressies gaan we de bijbehorende sjabloon in een aparte hulpmethode inkapselen<br />

zoals in hoofdstuk 3 uitgelegd was. Om dat te kunnen implementeren gaan we bij<br />

de eerste oproep van de GenerateCode() operatie een oproep naar een let methode produceren.<br />

Vervolgens gaan we een tweede keer GenerateCode() oproepen met een andere generator<br />

(generator voor OCL let expressie) die de let methode zelf gaat genereren.<br />

4.2.4 Inkapseling van collectieoperaties<br />

In subsectie 3.2.3.3 hebben we verschillende oplossingen voorgesteld voor inkapseling van OCL<br />

collectieoperatiesjablonen in JAVA methoden. Voor de transformatie van run-time OCL expressie<br />

naar JAVA in HAT hebben we de eerste oplossing geimplementeerd. We hebben dat<br />

al in subsectie 4.2.2 op de vorige pagina besproken.<br />

De tweede voorgestelde oplossing waarbij we een keer een standaard bibliotheek met alle collectieoperaties<br />

genereren, is moeilijk in de huidige versie van HAT te implementeren. Het idee

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

Saved successfully!

Ooh no, something went wrong!