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.

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.

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

Saved successfully!

Ooh no, something went wrong!