Dankwoord - martes
Dankwoord - martes
Dankwoord - martes
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