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.

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

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

Saved successfully!

Ooh no, something went wrong!