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.
4.3. NAÏEVE AANPAK IN HAT 51<br />
van deze oplossing is dat we voor elke collectieoperatie de source (de collectie waarop we<br />
de collectieoperatie zullen toepassen) en de body ( het lichaam van de collectieoperatie in de<br />
vorm van een expressie) moeten als parameters doorgeven. Voor de source is dat geen probleem<br />
maar vermits de body meestal een uitvoerbare expressie is wordt dan de implementatie<br />
onmogelijk.<br />
De derde voorgestelde oplossing is ook niet mogelijk te implementeren in de huidige versie van<br />
HAT. De datastructuur die bijhoudt welke collectieoperatie met de bijbehorende source en<br />
body al gegenereerd was bevindt zich in het OCL metamodel horend bij een gegeven generator.<br />
We hebben al gezien dat de overgang van het UML metamodel naar het OCL metamodel<br />
gaat met de GenerateCode operatie. Maar de GenerateCode operatie wordt telkens met<br />
verschillende generatoren opgeroepen. Op deze manier is de referentie naar deze datastructuur<br />
verloren<br />
4.3 Naïeve aanpak in HAT<br />
De implementatie van de naïeve aanpak in HAT gebeurt aan de hand van een UML proel.<br />
Dit UML proel bevat eigenlijk de transformaties (vertaling van run-time OCL expressies)<br />
naar JAVA.<br />
De geproduceerde code komt overeen met de methodologie die wie in hoofdstuk 3 voorgesteld<br />
hebben. Klasse-invarianten worden in booleaanse methoden ingepakt en er is een gemeenschappelijke<br />
methode gegenereerd die een conjunctie van alle invarianten bevat.<br />
Bij operaties worden zowel pre- als postcondities gegenereerd. Deze zijn in booleaanse methoden<br />
geencapsuleerd. Vervolgens zijn deze pre- en postconditiemethoden bij de horende<br />
operatie (respectievelijk in het begin en op het einde van de operatie) toegevoegd met de<br />
assert constructie. In het begin en op het einde van het lichaam van een operatie is ook de<br />
gemeenschappelijke methode toegevoegd die alle klasse-invarianten nagaat.<br />
4.4 Intelligente aanpak in HAT<br />
Voor de implementatie van de intelligente aanpak in HAT maken we opnieuw gebruik van een<br />
UML proel dat onze transformaties bevat.<br />
Voor de vertaling van klasse-invarianten, pre- en postcondities hebben we de implementatie van<br />
de naïeve aanpak overgenomen en vervolgens hebben we een aantal aanpassingen toegevoegd<br />
om de intelligente aanpak te kunnen implementeren. Met andere woorden inkapseling van<br />
klasse-invarianten, pre- en postcondities gebeurt op precies dezelfde manier als in de naïeve<br />
aanpak: elke invariant, pre- en postconditie is in een booleaanse methode ingepakt.<br />
De aanpassing die we gemaakt hebben betreft de assertie van relevante klasse-invarianten op<br />
het einde van het uitvoeren van operaties in plaats van een conjunctie van alle aanwezige<br />
invarianten te nemen.<br />
Deze aanpassingen zijn gebaseerd op string matching.<br />
Het idee is als volgt: voor elke postconditie van een operatie zoeken we of er een object of<br />
variabele tijdens de uitvoering van de operatie aangepast is. Dat doen we aan de hand van