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.
14 HOOFDSTUK 2. STATE-OF-THE-ART<br />
te schrijven. Controle voor geldigheid en consistentie van constraints is door het tool gedaan.<br />
Er is geen mogelijkheid om de structuur van de gegenereerde code te veranderen.<br />
Een van de positieve punten van dit tool is dat het tool ondersteuning biedt voor zowel<br />
invarianten als voor pre- en postcondities. Binnen elke gegenereerde klasse uit het model is<br />
een statische klasse gedenieerd met de bijbehorende constraints. Het skelet van een klasse<br />
ziet als volgt uit:<br />
Listing 3 Together<br />
class X{<br />
private int attribute;<br />
public void operation(){<br />
assert ( OCL.preOperation());<br />
// ... <br />
assert(OCL.AllInvariants() && OCL.postOperation());<br />
}<br />
protected static class OCL{<br />
private OCL(){<br />
}<br />
static boolean inv0(){<br />
}<br />
static boolean inv1(){<br />
}<br />
static boolean allInvariants(){<br />
return inv0()&& inv1();<br />
}<br />
static boolean preOperation(){<br />
}<br />
static boolean postOperation(){<br />
}<br />
}<br />
}<br />
Het tool genereert code voor alle attributen, associaties en operaties en natuurlijk ook voor<br />
de constraints uitgedrukt in OCL. Constructoren, mutatoren en inspectoren worden niet gegenereerd.<br />
De vertaalde OCL code refereert naar de attributen of associaties zelf en niet naar<br />
hun inspectoren. Vermits visibiliteit van attributen meestal beperkt is tot de klasse waarin ze<br />
gedenieerd zijn, is de gegenereerde code soms niet compileerbaar omwille van het probleem<br />
van visibiliteit. Een oplossing is om alle attributen publiek te maken wat niet altijd gewenst is.<br />
Operaties op collecties zijn ook ondersteund. Indien in een OCL expressie collectieiteratoren<br />
aanwezig zijn, zijn deze niet ingekapseld in aparte methoden maar tussen try-catch blokken<br />
binnen de invariant of pre- en postconditie methode zelf. Dat leidt bij complexe OCL expressie<br />
tot lange en soms niet overzichtelijke methoden met een aantal grote try-catch blokken.<br />
Indien we de code structuur van de gegenereerde code bekijken, zien we dat de controle op de<br />
constraints gebeurt door het gebruik van asserties. Dat beschouwen we als een goede techniek.<br />
Postcondities mogen meer geavanceerde constructies hebben. De sleutel worden @pre en result<br />
zijn geimplementeerd.