Refactoring 1: het aanpassen van het generieke model.

Maat: px
Weergave met pagina beginnen:

Download "Refactoring 1: het aanpassen van het generieke model."

Transcriptie

1 Refactoring 1: het aanpassen van het generieke model. Nog even voor de duidelijkheid een globaal overzicht van de oude opbouw van de RevJava applicatie: User Interface Parser Critcs en properties files Parser model Reader Meta-Model Figuur 1: de opbouw van de RevJava applicatie. De reader krijgt een classpath binnen waarin.class of.jar files staan. Deze worden door de parser omgezet in Java entiteit objecten. Deze vormen het model. Hiermee wordt dus het oude Java specifieke model gevuld. In figuur 1 staat het oude RevJava model. Dit model is gebaseerd op gecompileerde Java code. We hebben een model ontwikkeld dat zoveel mogelijk programmeer talen kan representeren. Dit generieke model is gebaseerd op gecompileerde dotnet code (Msil) en gecompileerde Java code. In figuur 2 staat globaal de nieuwe situatie. User Interface Critcs en properties Java files Java Parser MSIL files MSIL Parser Meta-Model MSI Java Reader Figuur 2: Het model is nu in 3 delen gesplitst: Java specifiek, Msil specifiek en het generieke model. De Msil parser zullen we later pas gaan implementeren, dus het msil specifieke model wordt na de eerste refactoring nog niet gebruikt.

2 Aan het critics gedeelte zal ook nog o weinig mogelijk veranderd worden. Wel is alles zoveel mogelijk gebaseerd op het generieke model. Dus wanneer het model gevuld is vanuit de reader zullen de operaties op het model op het generieke model werken.

3 1. Het nieuwe meta-model Het nieuwe meta-model bestaat uit de volgende classes en packages: Package: nl.serc.revs.core.model Dit package bevat de generieke elementen (voornamelijk interfaces) van het meta-model. Elementen waarvan de naam met Gen begint worden gespecialiseerd naar MSIL en Java elementen in het model. Hierop zijn twee uitzonderingen: ModelFactory en DeploymentUnit. Dit soort elementen bepalen ook het generieke gedrag van de elementen. Op dit niveau moeten de meeste critics gaan werken. Specifieke MSIL of Java eigenschappen van elementen zitten in de J/Il specifieke elementen van het meta-model. - Argument.java: Een argument (parameter) van een methode. Dit een subclass van Variable.java. - CodeBlock.java: CodeBlock is toegevoegd. Het codeblock van een methode. Bevat lokale variabelen en operaties. Een codeblock is precies wat de naam aangeeft: een block code van die methode. Een CodeBlock wordt geimplementeerd door CodeBlockImpl. Een CodeBlock heeft de volgende fields en methoden: o een GenMethod holder: de methode die dit codeblock bevat. Een get/set methode hiervoor is aanwezig. Aangezien een codeblock geen specialisatie heeft naar MSIL en Java maakt deze gebruik van GenMethod. o een Vector locals: de lokale variabelen van de methode. Een get methode is hiervoor aanwezig welke de vector returnt. o een Vector typeoperations: de typeoperaties van de methode. Een get methode is hiervoor aanwezig welke de vector returnt. o Verschillende methoden om in de type operaties en lokale variabelen te zetten wat hun containing codeblock is. Deze heten allen grabholdof() met als mogelijke parameters: een vector van LocalVars od TypeOperations of een enkele LocalVar of TypeOperation. - CodeBlockTags.java: De modifiers (static,synchronized) die op een block code gedefinieerd kunnen zijn. - CritiquedElement.java: Een element in het meta-model waar critics op te definieren zijn. In het originele model was dit JcritiquedElement. - GenDeploymentUnit.java: GenDeploymentUnit is toegevoegd. (nl.serc.revs.core.model. GenDeploymentUnit). Het geeft het fysieke element weer van de programmeertalen. In MSIL de IlAssembly, in Java de JJar. Het neemt in wezen voor een gedeelte de functie van het oude JSystem over. - ElementTags.java: In het oude model Jtags. Deze class draagt zorg voor het beheer van de tags zoals public, static, protected e.d.. Het is de super van TypeTags, FieldTags, MethodTags, PropOrEventTags, VariableTags en CodeBlockTags. Het voordeel van deze opdeling is dat duidelijk is welk element welke tags kan hebben, en tijdens het draaien van het programma kan er geheugen bespaard worden. Tags zijn generiek en worden zowel voor Java als MSIL gebruikt. - Feature.java: JTypeElement heet nu Feature, aangezien methoden en fields eigenlijk de features van een class zijn. Feature is ook de superclass van GenEvent en GenProperty. Een type bevat Features zoals methodes, fields, events en properties. - FieldTags.java: Modifiers die op een GenField van toepassing kunnen zijn. - GenClass.java: De superclass van IlClass en Jclass, bevat de generieke methodes voor die twee. - GenElement.java: Het basis element voor alle model elementen. Zijn toegevoegde functionaliteit is vooral gebaseerd op het beheren van de properties. van de elementen in het meta-model. Deze class heette in het originele model Jelement. - GenEvent.java: Een event binnen een Type. Is een subclass van Feature. - GenField.java: Een field van een Type. Is een subclass van Feature. - GenInterface.java: een Interface, is de superclass van JInterface en IlInterface en bevat de generieke methodes hiervoor. - GenMethod.java: Een methode van een Type, is de superclass voor IlMethod en JMethod en bevat de generieke methodes hiervoor.

4 - GenNamespace.java: De superclass van JPackage en IlNamespace - GenProperty.java: geeft een property binnen een Type aan. Is een subclass van Feature. - GenRepository.java: Bevat referenties naar de geladen systemen, is de superclass van JRepository en IlRepository. - GenSystem.java: Bevat referenties naar de geladen DeploymentUnits. Superclass van JSystem en IlSystem. - GenType.java: Superclass van GenClass,GenInterface,JType en IlType. - IdElement.java: Een element met een unieke id, gegenereerd door de GenRepository. De id wordt door de repository geproduceerd. In het oude model JidElement. - JESet.java: Beheert sets van GenElements - LocalVar.java: Een lokale variabele in de codeblock van een methode. Dit is een subclass van Variable. - MethodTags.java: de modifiers welke op een methode gedefinieerd kunnen zijn - ModelFactory.java: Een factory voor het aanmaken van Geneireke elementen zoals de operaties en de variabelen. ModelFactory is de super van JmodelFactory en IlModelFactory. ModelFactory maakt de generieke elementen aan, JModelFactory de Java specifieke elementen en IlModelFactory de MSIL specifieke elementen. - NamedElement.java: Een element met een naam, bevat de getname() methode. In het oude model JNamedElement. - NullElement.java: Geeft een null element aan tijdens het afleiden van de properties als er geen element kan worden gevonden. - OpCall.java: Een TypeOperation: methode aanroep - OpCheck.java: Een TypeOperation: checks als instanceof of casts - OpCreate.java: Een TypeOperation: instantie creaties - Operation.java: Superclass van TypeOperation. - OpFieldRef.java: Een TypeOperation: field manipulaties - PropOrEventTags.java: De modifiers die op een property of event gedefinieerd kunnen zijn. - Props.java: Ieder element heeft een JProps waarin de properties voor dat element bijgehouden worden. - TaggedElement.java: JTaggedElement heet nu TaggedElement. Tevens heeft TaggedElement een implementatie TaggedElementImpl gekregen, met o.a. de methode hastag(string key) die standaard false retourneert en geherdefinieerd kan worden in de subclasses. - TypeOperation.java: JTypeElementPart heet nu TypeOperation. Het is het supertype van alle type-operaties in een methode body. Er is een nieuwe interface Operation als super class toegevoegd, welke zelf een subclass van GenElement is. OperationImpl implementeert deze interface Operation. Operation is toegevoegd omdat er naast TypeOperations ook ander soort Operations zijn zoals b.v. returnstatements e.d. In de toekomst zouden dit soort operaties wel eens nodig kunnen zijn en nu kan men deze makkelijk toevoegen.typeref.java: een holder van een referentie naar een type. - TypeTags.java: Modifiers die op een GenType gedefinieerd kunnen worden. - UndefinedValue.java: Als een object null is: niet gedefinieerd - Variable.java: De superclass van LocalVar en Argument. - VariableTags.java: JVariable heet nu Variable. Modifiers die op een Variable gedefinieerd kunnen zijn (vooral voor msil toegevoegd). Tevens is het nu een subclass van TaggedElement, en is het de superclass van LocalVar en Argument. Hierin kunnen respectievelijk de lokale variabelen en de methode-argumenten in opgeslagen worden. Het zijn TaggedElements, maar deze eigenschap wordt momenteel met het inlezen van Java bytecode niet ondersteund. Package nl.serc.revs.core.model.impl Dit package bevat de implementaties van de generieke elementen van het meta-model. De volgende implementaties zijn aanwezig: - ArgumentImpl.java - CodeBlockImpl.java - DeploymentUnitImpl.java

5 - FeatureImpl.java - GenClassImpl.java - GenElementImpl.java - GenEventImpl.java - GenFieldImpl.java - GenInterfaceImpl.java - GenMethodImpl.java - GenNamespaceImpl.java - GenPropertyImpl.java - GenRepositoryImpl.java - GenSystemImpl.java - GenTypeImpl.java - IdElementImpl.java - LocalVarImpl.java - OpCallImpl.java - OpCheckImpl.java - OpCreateImpl.java - OperationImpl.java - OpFieldRefImpl.java - Storable.java - TaggedElementImpl.java - TypeOperationImpl.java - VariableImpl.java Van de ElementTags, ModelFactory, UndefinedValue en NullElement zijn geen interfaces maar zijn al een class, daarom is er daarvan geen Impl class in dit package. Package nl.serc.revs.core.model.java Dit package bevat de J-elementen: - JClass.java - JField.java - JInterface.java - JJar.java - JMethod.java - JModelFactory.java: Maakt J-elementen aan. - JPackage.java - JRepository.java - JSystem.java - JType.java: Superclass van JClass of JInterface. Behalve JModelFactory hebben al deze classes een implementatie in package: nl.serc.revs.core.model.java.impl - JClassImpl.java - JFieldImpl.java - JInterfaceImpl.java - JJarImpl.java - JMethodImpl.java - JPackageImpl.java - JRepositoryImpl.java - JSystemImpl.java - JTypeImpl.java Package nl.serc.revs.core.model.msil Dit package bevat de IL-elementen: - IlClass.java - IlModule.java: Een module in de MSIL - IlEvent.java

6 - IlProperty.java - IlField.java - IlInterface.java - IlAssembly.java - IlMethod.java - IlModelFactory.java: Maakt IL-elementen aan. - IlPackage.java - IlRepository.java - IlSystem.java - IlType.java: Superclass van ILClass of IlInterface. Behalve IlModelFactory hebben al deze classes een implementatie in package: nl.serc.revs.core.model.msil.impl - ILClassImpl.java - IlModuleImpl.java - IlEventImpl.java - IlPropertyImpl.java - IlFieldImpl.java - IlInterfaceImpl.java - IlAssemblyImpl.java - IlMethodImpl.java - IlPackageImpl.java - IlRepositoryImpl.java - IlSystemImpl.java - IlTypeImpl.java - Het gehele package.core.model zoals het geimplementeerd is:

7 GenElement Operation ElementTags NamedElement GenRepostitory TypeOperation MethodTags TypeTags PropOrEventTags CritiquedElement JRepostitory IlRepostitory OpCheck OpCall OpCreate VariableTags FieldTags CodeBlockTags IdElement IlModule GenNamespace GenSystem IlSystem JSystem OpFieldRef TaggedElement JPackage IlNamespace GenDeploymentUnit Feature CodeBlock GenType JJar IlAssembly GenClass GenInterface Variable GenField GenMethod JClass IlClass JInterface IlInterface JField IlField JMethod GenProperty IlMethod GenEvent JType IlType LocalVar Argument IlProperty IlEvent Figuur 3: Een overzicht van de implementatie van het meta-model. Generiek, Java-specifiek en Msil-specifiek.

8 2. Aanpak: We hebben ervoor gekozen in eerste instantie de code vanuit de J-classes te kopieren in de generieke classes, en het programma op deze elementen te laten compileren. Hierna zijn waar nodig casts ingevoerd, of types terug gespecificeerd om het programma weer werkend te maken en de java-specifieke gedeelten ook J-elementen te laten gebruiken. Hierna hebben we de classes in het ingelezen model toegevoegd, zoals GenDeploymentUnit en CodeBlock, welke een ingrijpende verandering aan de structuur inhielden. We hebben zo weinig mogelijk veranderingen aan het reader gedeelte en het kritieken gedeelte gemaakt: 1. De Java reader maakt nu een JJar (GenDeploymentUnit) aan die de jar file voor Java class file representeert. Dit gaat nog niet naar wens want er moet per class verzameling een JJar aangemaakt worden, en dat gebeurt (nog) niet. 2. In de namespaces worden de ouder-kind relaties gelegd. Dus package nl.serc.revs heeft als parent (als deze bestaat) nl.serc. 3. De tags zijn opgesplitst naar entiteit. De methode maketags is nu opgesplitst voor de verschillende ElementTags. Bij niet-typetags vervalt de boolean forclass. Misschien moet er een ElementTagsFactory komen die de creatie van de ElementTags op zich gaat nemen. Aan LocalVar en Argument (voorheen JVariable) worden nu ook elementtags meegegeven, dit is in het model weergegeven door ze onder TaggedElement te hangen. In Java zijn deze leeg aangezien de BCEL java bytecode parser geen tags hiervoor inleest. 4. Er zijn metrics aangepast/toegevoegd om de deployment unit toe te kunnen voegen. Er zullen voor het toevoegen van MSIL zeer waarschijnlijk aanpassingen moeten plaatsvinden in de model structuur van de visitors en aan de properties en critics. We zijn nog niet in staat dit precies te overzien, dit moet beter onderzocht worden en zal dus binnen de vervolgopdracht vallen die met de critics aan de slag gaat. We hebben zoveel mogelijk als we konden overzien met betrekking tot de invoer van MSIL code geimplementeerd. Dit houdt in principe in dat de specifieke Il-elementen binnen het model een (her)implementatie hebben zover die ten opzichte van de J-elementen verschilt. Sommige Il-specifieke elementen waarvan we nog niet precies weten hoe die in het metamodel moeten worden toegevoegd, b.v. pointer => ispointer(), hebben we slechts in de Genclasses geimplementeerd en ze daar voor Java een default waarde gegeven. Toen het model in het programma geimplementeerd was hebben we ons programma naast de nieuwste RevJava release (0.8.5) gedraaid op dezelfde Jar file en de uitkomsten naast elkaar gelegd. Als ontwikkelomgeving gebruikten we Eclipse, voor versie beheer een CVS tool voor DOS.

9 Dubbele code: Duplicaat code hebben we zo veel mogelijk vermeden, echter in enkele gevallen was het onvermijdelijk het te gebruiken. Methode hastag() in de GenMethod GenType GenField GenEvent GenProperty GenVariable CodeBlockImpl vanwege de verschillende soorten elementtags die ze meekregen. Default returnt de methode false in TaggedElement. De access-modifier methoden staan zowel in Feature en Gentype i.v.m. de beschikbaarheid van de hastag() methoden. De ontworpen overervings-structuur van de ElementTags was niet geheel mogelijk omdat er veel statische elementen in de class ElementTags zaten. Dit bracht dubbele code met zich mee. Problemen/Todo: De BCEL bytecode parser die gebruikt wordt voor Java leest geen modifiers in voor methode argumenten en lokale variabelen. Dit houdt in dat voor het Java specifieke gedeelte dit niet beschikbaar is. De elementen krijgen een lege set ElementTags bij de creatie vanuit Java invoer. De java parser moet uitgebreid worden voor de naam van de class file verzamelingen (zoals de jar files). Dit nodig om de DeploymentUnits te kunnen scheiden. Op dit moment is er maar één DeploymentUnit per system. Wanneer er in verschillende DeploymentUnits dezelfde namespace voorkomt moet deze gemerged worden in GenSystem.

10 3. Aanpassingen aan het meta model Gedurende de implementatie waren we vanwege praktische redenen gedwongen enkele kleine veranderingen aan het door ons ontworpen model te maken. GenDeploymentUnit is een subclass van CritiquedElement geworden. Eerst had GenDeploymentUnit geen super gekregen. JType en IlType zijn subclasses van GenType. IlEvent en IlProperty zijn toegevoegd onder GenEvent en GenProperty. We hadden eerst gedacht dat we wel af konden met generieke events en properties, maar om het geheel overzichtelijk en consistent te houden, hebben we ervoor gekozen om deze classes en interfaces toch toe te voegen. Omdat we ervan uit moeten gaan dat ook interfaces andere interfaces kunnen implementeren, hebben we de JESet interfaces van GenClass omhoog gerefactored naar GenType. Voorheen waren we ervan uitgegaan dat interfaces geen andere interfaces implementeren maar Gert was het hiermee niet eens. LocalVars en TypeOperations hebben ook weet van hun methode holder. Deze wordt in GenMethod gezet door het opvragen via de get-methode en dan via grabholdof (in GenMethod) wordt setcontainingmethod() aangeroepen. Dit houdt in dat CodeBlock eigenlijk vooral als doorgeefluik fungeert. Een CodeBlock zou handig kunnen zijn wanneer in de toekomst de code (gedecompileerd) van een methode erbij opgeslagen zou gaan worden. Nu we een codeblock hebben geintroduceerd kan dit in de toekomst ook gebruikt worden om b.v. statische blokken code in types aan te geven. Om o.a. deze reden is CodeBlock een subclass van TaggedElement. Geheel kloppen doet dit niet aangezien een codeblock dan subclass van NamedElement is, maar een codeblock eigenlijk geen naam heeft. LocalVar heeft de volgende extra methoden t.o.v. Variable: public void setcontainingcodeblock(codeblock container): zet het codeblock waartoe de LocalVar behoort. public CodeBlock getcontainingcodeblock():get het codeblock waartoe de LocalVar behoort. public boolean ispointer(): in MSIL kan een LocalVar een pointer zijn. Operation wordt geimplementeerd door OperationImpl en deze bevat de volgende methoden en fields: GenMethod holder: met get/set methoden CodeBlock container: met get/set methoden

11 4. Relaties in het model Onderstaande figuren geven een beeld van de bevat relaties in het meta-model, met als extra verduidelijking een paar inheritance relaties. Deze diagrammen zijn niet heel gedetailleerd, maar geven een beeld van hoe het meta-model in elkaar steekt. Figuur 4: de bevat relaties op het generieke deel van het model (en stukje inheritance). GenTypes hebben geen GenEvents en GenProperties, maar slechts GenFields en GenMethods. Wanneer dit wel het geval zou zijn zou men deze aan een JType kunnen opvragen, terwijl een JType geen events en properties kan hebben. Figuur 5: de bevat relaties op het Java deel van het model (en stukje inheritance). Java heeft geen events en properties.

12 Figuur 6: de bevat relaties op het MSIL deel van het model (en stukje inheritance). Hier is te zien dat in MSIL de namespaces in een module bevat zijn. Aangezien de module weinig behaviour heeft (is gewoon een holder-object) is deze gestippeld weergegeven. Verder bevat een IlType ook IlEvents en IlProperties.

13 5. Gevolgen voor reader en critics Om het inlezen en het verwerken van de properties en critics iets beter te begrijpen zullen we beschrijven hoe door de sofware een project gestart, ingelezen en bekritiseerd wordt. 5.1 Reader In JEProject wordt een project geïnitieerd. Daar wordt de repository aangemaakt en geconfigureerd. Deze Repository bevat feitelijk de gehele boomstructuur van de ingelezen class files. Tevens wordt er een JFilteringLoader aangemaakt. Deze JFilteringLoader leest met behulp van de FastAnajaReader alle geselecteerde classes in. De JFilteringLoader bekijkt welke classes er wel en niet geladen kunnen/moeten worden. In de methode loadall(pset names) wordt aan de reader gevraagd een verzameling namen van classes in te lezen. Daar wordt tevens het main JSystem (de geselecteerde files) en het import JSystem (de classes waarnaar de ingelezen classes verwijzen) aangemaakt. Na het inlezen van de classes draagt de JFilteringLoader zorg voor het cross referencen. Het echte parsen gebeurt met behulp van de Byte Code Engineering Library, geïnitieerd door Markus Dahm. (Zie: Het cross referencen gebeurt in 2 stappen. Bij de eerste stap wordt een JXRefDeriver aangemaakt. Het main JSystem accepteert via het visitor pattern een JPostTraverser die een instantie van de JXRefDeriver beheert. De JPostTraverser vertelt de JXRefDeriver welke elementen hij moet bezoeken. Die weet bij het bezoeken van een entiteit precies wat er gedaan moet worden. Zie ook figuur 7. Wanneer een entiteit bezocht wordt, beslist deze over welke entiteiten erna bezocht gaan worden. Hij bezoekt respectievelijk: 1. Systems: in visitsystem(jsystem s) wordt niets gedaan. 2. DeploymentUnits: in visitdeploymentunit(jjar j) wordt (nog) niets gedaan, maar omdat de visit methoden de visitor doorsturen naar de sub-entiteiten (in dit geval de namespaces), moet deze functie wel toegevoegd worden. 3. Namespaces: in visitnamespace(jpackage p) wordt de parent (en dus ook de child) namespace gezet. 4. Classes en Interfaces: visitinterface(jinterface i) en visitclass(jclass c) doen precies hetzelfde. Eerst worden de supers en geïmplementeerde interfaces als bekende types geregistreerd. Daarna wordt aan het super type verteld dat dit een subclass van hem is. Tevens wordt de impementer van al de geïmplementeerde interfaces geset. Vervolgens wordt deze methode recursief aangeroepen voor de superclass en de interfaces. De Fields en Methoden zijn als laatste aan de beurt. 5. Fields: visitfield(jfield f) registreert het type van het field. Vervolgens wordt ook dit type nog een keer bezocht. 6. Mehoden: visitmethod(jmethod m) registreert de bekende typerefs van een methode, zoals het return type, exceptions, argumenten en lokale variabelen. Vervolgens worden achtereenvolgens de TypeRef die bij het return type hoort, de argumenten, de lokale variabelen en de operaties van de methode, bezocht. In de tweede cross referencing stap wordt door de entiteiten een JPostfixTraverser aangemaakt die een JAdditionalRelationDeriver beheert. De laatste voert de volgende opdrachten uit: 1. Voor alle types worden de inner en outer types berekend. 2. Er wordt voor gezorgd dat alle methoden in de super types ook in de sub types bekend zijn. 3. De field referenties van de super classes worden gezet. 4. Er wordt geprobeerd om nog zoveel mogelijk in OpCall de aangeroepen methode te vinden.

14 Figuur 7: Het visitor pattern zoals dit gebruikt wordt bij het cross referencen. Elke entiteit bekijkt in de methode do[entiteit]() welke referenties geset moeten worden voor dit element. Tot nu toe is er zo weinig mogelijk aangepast aan het inlees gedeelte. De methode maketags(int access_flags, boolean forclass) had als return een JTags. Nu JTags veranderd is in ElementTags en ieder TaggedElement een aparte ElementTags heeft is de methode gespecialiseerd naar de tags welke er gegenereerd moeten worden: maketypetags(int access_flags, boolean forclass) makemethodtags(int access_flags) makefieldtags(int access_flags) Wanneer er ook PropOrEventTags, VariableTags en CodeBlockTags aangemaakt gaan worden is het misschien het beste deze elementen in een TagsFactory aan te maken. Omdat de methode maketags() veranderde werd ook het aanmaken van de elementen veranderd en er werd de methode makecodeblock() toegevoegd: CodeBlock makecodeblock(localvar[] vars, TypeOperation[] ops) We hebben zoveel mogelijk geprobeerd de reader implementatie met rust te laten, echter op een paar plaatsen moesten er wat aanpassingen gedaan worden. De Java reader maakt nu een JJar (GenDeploymentUnit) aan die de jar file voor Java class file representeert. Dit gaat nog niet naar wens want er moet per class verzameling een JJar aangemaakt worden, en dat gebeurt (nog) niet. In de namespaces worden tijdens het cross ereferencen de ouder-kind relaties gelegd. Dus package nl.serc.revs heeft als parent (als deze bestaat) nl.serc.

15 5.2 Critics Na het initialiseren van de repository wordt er een PropertyManger, een PluginManager en een MetricManager geïnitieerd: JMetricManger zorgt ervoor dat alle metrics voor alle entiteiten gevonden worden. JPropertyManager zorgt ervoor dat alle properties die in JBaseProperties, AllProperties en MetricProperties staan gevonden worden. JPluginManager zorgt ervoor dat alle critics-plugins die in de configuratie file van RevJava gedefinieerd staan, gevonden worden. In een later stadium zal deze file gesplitst worden; er komt een config file voor de generieke kritieken en voor elke taal een afzonderlijke file met taal specifieke kritieken. Nadat alle types ingelezen zijn wordt vanuit het project gezorgd dat de metrieken berekend worden (dit gebeurt in de methode collectcritics()). Hier wordt een JCriticCollector aangemaakt. Deze haalt uit de JCriticsManger alle critics per entiteit. Daarna wordt met behulp van het visitor pattern deze JCriticCollector door de hele boom toegepast op de gewenste entiteiten. Hieronder een globaal schema van hoe dit werkt: Figuur 8: Het visitor pattern zoals dit gebruikt wordt bij het toepassen van de critics. Elke subclass van critiquedelement bekijkt in de methode calculatecriticismsforcritics(vector critics) welke critics overtreden worden. Deze violations worden in een Vector terug gegeven.

16 Omdat nu alleen nog maar Java files ingelezen worden is er nog niet heel erg veel veranderd aan de properties en critics. We hebben zoveel mogelijk geprobeerd alles generiek te maken. Dat betekent dat alle visitor classes alleen de generieke entiteiten bevatten.

Rev**** Model Aanpassingen

Rev**** Model Aanpassingen Rev Model Aanpassingen Jaco Peeman en Casper de lange Februari 2003 SERC/UU Abstract Dit document beschrijft de aanpassingen die gemaakt zijn aan het interne meta-model van het programma RevJava, geschreven

Nadere informatie

Analyse op.net software

Analyse op.net software Analyse op.net software Auteur: Casper de Lange Stud. Nr.: 9745467 E-mail: clange@cs.uu.nl Een woord van dank gaat uit naar de volgende personen: - Gert Florijn en Jurriaan Hage voor hun begeleiding tijdens

Nadere informatie

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double. Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort

Nadere informatie

Kleine cursus PHP5. Auteur: Raymond Moesker

Kleine cursus PHP5. Auteur: Raymond Moesker Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven

Nadere informatie

Zelftest Programmeren in Java

Zelftest Programmeren in Java Zelftest Programmeren in Java Document: n0883test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST PROGRAMMEREN IN JAVA Deze test

Nadere informatie

NHibernate als ORM oplossing

NHibernate als ORM oplossing NHibernate als ORM oplossing Weg met de SQL Queries Wat is ORM? ORM staat in dit geval voor Object Relational Mapping, niet te verwarren met Object Role Modeling. ORM vertaalt een objectmodel naar een

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde

Nadere informatie

Dynamiek met VO-Script

Dynamiek met VO-Script Dynamiek met VO-Script Door Bert Dingemans DLA Ontwerp & Software bert@dla-architect.nl Inleiding Op de SDGN nieuwsgroep voor Visual Objects ontstond laatst een draad van berichten over de nieuwe libraries

Nadere informatie

Vakgroep CW KAHO Sint-Lieven

Vakgroep CW KAHO Sint-Lieven Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be

Nadere informatie

Overerving & Polymorfisme

Overerving & Polymorfisme Overerving & Polymorfisme Overerving Sommige klassen zijn speciaal geval van andere klasse Docent is een speciaal geval van werknemer, dwz. elke docent is ook werknemer Functionaliteit van docent = functionaliteit

Nadere informatie

OBJECT SPAGHETTI : PATTERNS BIEDEN UITKOMST? Wat is het probleem nou eigenlijk? public class CoffeeDrinker { private CoffeeProducer mycoffeeproducer;

OBJECT SPAGHETTI : PATTERNS BIEDEN UITKOMST? Wat is het probleem nou eigenlijk? public class CoffeeDrinker { private CoffeeProducer mycoffeeproducer; OBJECT SPAGHETTI : PATTERNS BIEDEN UITKOMST? Object georiënteerde (OO) systemen kennen vele voordelen ten opzichte van traditionele procedurele systemen. Zo zouden OO systemen flexibeler en beter onderhoudbaar

Nadere informatie

Datastructuren Werkcollege Intro

Datastructuren Werkcollege Intro Bart Hijmans, Universiteit Leiden. Universiteit Leiden The Netherlands Focus 1 19 ˆ Ervaring in gebruik en implementatie van datastructuren ˆ Kennis van mogelijkheden ˆ Programmeren voor andere programmeurs

Nadere informatie

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces. Hoofdstuk 1: Inleiding Objectoriëntatie: 1. Objecten & klassen: samenwerking van componenten om bepaald doel te bereiken; herbruikbaarheid. 2. Encapsulation: afschermen gedragingen en kenmerken van de

Nadere informatie

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele

Informatica. Objectgeörienteerd leren programmeren. Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele Informatica Objectgeörienteerd leren programmeren Van de theorie met BlueJ tot een spelletje met Greenfoot... Bert Van den Abbeele http://creativecommons.org/licenses/by-nc-nd/3.0/legalcode Objectgeörienteerd

Nadere informatie

Modeleren. Modelleren. Together UML. Waarvan maken we een model? overzicht les 14 t/m 18. ControlCenter 6.2

Modeleren. Modelleren. Together UML. Waarvan maken we een model? overzicht les 14 t/m 18. ControlCenter 6.2 Modelleren Werkelijkheid Modelleren Modeleren Waarvan maken we een model?!analyse " Maak een model van de te automatiseren werkelijkheid of van het op te lossen probleem! Domeinkennis = structuur! Functionele

Nadere informatie

Programmeren in Java 3

Programmeren in Java 3 26 september 2007 Deze les korte herhaling vorige les Unified Modelling Language notatie van een class afleiding pointers abstracte classes polymorphisme dubieuze(?) constructies interfaces Meer over class

Nadere informatie

Programmeren in C# Interfaces. Hoofdstuk 23

Programmeren in C# Interfaces. Hoofdstuk 23 Programmeren in C# Interfaces Hoofdstuk 23 Programmeren in C# 2 Gradaties overerving Klassieke overerving Iets functioneels uitbreiden Code duplicatie Niet teveel aanpassingen aan bestaande code Objecten

Nadere informatie

Jaco Peeman en Casper de Lange November 2002 ABSTRACT... 2 INDEX... 2

Jaco Peeman en Casper de Lange November 2002 ABSTRACT... 2 INDEX... 2 Abstract Dit artikel is geschreven in het kader van het afstuderen van Jaco Peeman en Casper de Lange, studenten aan de universiteit van Utrecht. Het onderzoek is gedaan in opdracht van Gert Florijn van

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 6 december 2013 Terugblik Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in

Nadere informatie

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden.

Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden. Herhaling Objectgeorïenteerd werken is gebaseerd op de objecten die door het systeem gemanipuleerd worden. De basisbouwsteen is het object; een geïntegreerde eenheid van data en operaties werkend op deze

Nadere informatie

Dynamische webapplicaties in Java

Dynamische webapplicaties in Java Dynamische webapplicaties in Java October 7, 2006 In java is het mogelijk dynamische webpagina s te implementeren. De code om de dynamische gegevens te genereren staat in servlets of Java Server Pages

Nadere informatie

Design patterns Startbijeenkomst

Design patterns Startbijeenkomst Design patterns Startbijeenkomst Harrie Passier Docenten Sylvia Stuurman (1 e examinator) Sylvia.Stuurman@ou.nl Harrie Passier (2 e examinator) Harrie.Passier@ou.nl Aarzel niet vragen te stellen! Rooster

Nadere informatie

WCF claims-based authorization

WCF claims-based authorization WCF claims-based authorization In elk project waar ik tot nu toe aan heb meegewerkt is beveiliging altijd een belangrijk onderdeel gebleken. De vraag is vaak wat de meest geschikte manier van authenticeren

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 13 december 2013 Terugblik Fibonacci public class Fibonacci { public static void main(string[] args) { // Print het vijfde Fibonaccigetal System.out.println(fib(5));

Nadere informatie

Java Generics: een introductie

Java Generics: een introductie 25/Langer 24-03-2004 11:13 Pagina 17 Deze zomer zal de 1.5-versie van de Java 2 Standard Edition beschikbaar komen. J2SE 1.5 zal ondersteuning bieden voor generieke types en methods. Deze nieuwe feature

Nadere informatie

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel:

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel: Eenvoudig voorbeeld. Er wordt verondersteld dat er met VS 2008 EXPRESS gewerkt wordt. Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel: (Sommige schermafdrukken zijn afkomstig

Nadere informatie

RELEASE NOTES. VERSIE Revisie 1.0. Imtech ICT Application Solutions

RELEASE NOTES. VERSIE Revisie 1.0. Imtech ICT Application Solutions RELEASE NOTES VERSIE 3.3.07 Revisie 1.0 Imtech ICT Application Solutions Carlo Mertens, Zaltbommel, 4 November 2010 Inhoudsopgave Inhoudsopgave... 2 Documentgegevens... 3 Inleiding... 4 1. Nieuwe / Gewijzigde

Nadere informatie

Practicumopgave 3: SAT-solver

Practicumopgave 3: SAT-solver Practicumopgave 3: SAT-solver Modelleren en Programmeren 2015/2016 Deadline: donderdag 7 januari 2016, 23:59 Introductie In het vak Inleiding Logica is onder andere de propositielogica behandeld. Veel

Nadere informatie

Programmeren 3. 1. Het gesloten boek examen 1.1

Programmeren 3. 1. Het gesloten boek examen 1.1 Programmeren 3 1. Het gesloten boek examen Het gesloten boek examen bestaat uit meerkeuzevragen of vragen waarin gevraagd wordt een stukje code te schrijven of om het resultaat van een stuk code te voorspellen.

Nadere informatie

Introductie in C++ Jan van Rijn. September 2013

Introductie in C++ Jan van Rijn. September 2013 Introductie in C++ Jan van Rijn September 2013 Inhoud Classes Overerving Const correctness Standard C++ library Templates Classes Voordelen van classes: Modelleren Modulariteit Informatie afschermen Makkelijk(er)

Nadere informatie

IMP Uitwerking week 13

IMP Uitwerking week 13 IMP Uitwerking week 13 Opgave 1 Nee. Anders moet bijvoorbeeld een venster applicatie een subklasse zijn van zowel Frame en WindowListener. Als de applicatie ook een button of een menu heeft, dan moet het

Nadere informatie

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf

Nadere informatie

Variabelen en statements in ActionScript

Variabelen en statements in ActionScript Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer

Nadere informatie

De Vergeten Abstracties

De Vergeten Abstracties De Vergeten Abstracties Cesario Ramos Senior Consultant bij Xebia B.V. 2009 Inleiding Rollen zijn een belangrijk concept in object georiënteerde software ontwikkeling dat vaak vergeten wordt. Het gebruik

Nadere informatie

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, 13.00-15.00 uur 1. De situatie die ontstaat door class A : B C D; kan beschreven worden door (a) B is een A (b)

Nadere informatie

Aan het eind van deze lesbrief wordt uitgelegd wat het nut van OOP is en vind je een aantal oefenopdrachten.

Aan het eind van deze lesbrief wordt uitgelegd wat het nut van OOP is en vind je een aantal oefenopdrachten. Doel van deze lesbrief Deze lesbrief is bedoeld om je op de hoogte te brengen van de basisbegrippen die gangbaar zijn bij object georiënteerd programmeren (OOP). In deze lesbrief kom je korte codefragmenten

Nadere informatie

Datastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59.

Datastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59. Datastructuren 2015 Programmeeropdracht 3: Expressies Deadline. Dinsdag 8 december 23:59. Inleiding. Deze opdracht is losjes gebaseerd op Opdracht 5.13.2 in het boek van Drozdek. U wordt gevraagd expressies

Nadere informatie

Programmeren. Cursus Python

Programmeren. Cursus Python Programmeren Cursus Python Cursus Python Omschrijving In deze cursus leren de deelnemers te programmeren in de objectgeoriënteerde programmeertaal Python. Python is een taal die vaak wordt gebruikt voor

Nadere informatie

Gebruikers handleiding. Lizard Configuration Manager ToolTip. Installatie. Instellen. Initieel instellen

Gebruikers handleiding. Lizard Configuration Manager ToolTip. Installatie. Instellen. Initieel instellen Gebruikers handleiding Lizard Configuration Manager ToolTip Installatie Installeer eerst het volgende: Installeer python 2.5.2; zie de map Breda\Tooltip\lcm\install\python-2.5.2.msi Ga naar dos (run/uitvoeren

Nadere informatie

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is PROEF-Tentamen Inleiding programmeren (IN1608WI), X januari 2010, 9.00-11.00, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Open boek tentamen: bij het tentamen mag alleen gebruik worden gemaakt

Nadere informatie

Java. Basissyllabus. Egon Pas

Java. Basissyllabus. Egon Pas Java Basissyllabus Egon Pas 2011 BeanPole bvba Gasmeterlaan 92-9000 Gent BTW BE 472.902.516 Tel: + 32 9 224 42 17 Fax: + 32 9 223 62 88 www.beanpole.be info@beanpole.be 1 Programmeren 1.1 Hoe werkt een

Nadere informatie

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING DIAGNOSTISCHE TOETS Softwaresystemen datum: Donderdag van Week 7 UITWERKING Deze diagnostische toets bevat vragen over excepties en concurrency. Beantwoord de vragen zo goed mogelijk in 30 minuten Bespreek

Nadere informatie

Access voor beginners - hoofdstuk 25

Access voor beginners - hoofdstuk 25 Access voor beginners - hoofdstuk 25 Handleiding van Auteur: OctaFish Oktober 2014 Werken met Klassemodules Tot nu toe heb ik in de cursus Access veel gewerkt met formulieren, en met procedures en functies.

Nadere informatie

Unit testen van EJB's. Koert Zeilstra - iprofs

Unit testen van EJB's. Koert Zeilstra - iprofs Unit testen van EJB's Koert Zeilstra - iprofs Inleiding We weten tegenwoordig allemaal dat we ons product moeten testen om de kwaliteit te verhogen en behouden Software-ontwikkelaars zijn over het algemeen

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 27 november 2015 Recursie Objecten Constructors Aanpassen variabelen this keyword Recursie Recursie Recursieve functie roept zichzelf (direct of indirect) aan

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 13 november 2015 Expressies Functies Ingebouwde functies Variabelenbereik Inleveropgave 1 Terugblik Programma is een lijst van opdrachten Terugblik Programma is

Nadere informatie

Opdracht 7a. Applicatiebouw 2014/2015

Opdracht 7a. Applicatiebouw 2014/2015 Applicatiebouw 2014/2015 Opdracht 7a Inhoud Applicatiebouw op dag 7 College In het college wordt oa. overerving behandeld, waarmee je uit een bestaande klasse een nieuwe andere klasse kan maken. Ook zijn

Nadere informatie

Inhoud leereenheid 7c. JavaScript: Objecten en functies. Introductie 59. Leerkern 60. Samenvatting 82. Opdrachten 83. Zelftoets 89.

Inhoud leereenheid 7c. JavaScript: Objecten en functies. Introductie 59. Leerkern 60. Samenvatting 82. Opdrachten 83. Zelftoets 89. Inhoud leereenheid 7c JavaScript: Objecten en functies Introductie 59 Leerkern 60 1 Functies 60 1.1 Syntax - samenvatting 60 1.2 Functies definiëren 61 1.3 Functie als parameter (facultatief) 64 1.4 Functie

Nadere informatie

Handleiding ISaGRAF. Wil men het programma bewaren, dan is het verstandig een back-up te maken: C9 Back-up / Restore

Handleiding ISaGRAF. Wil men het programma bewaren, dan is het verstandig een back-up te maken: C9 Back-up / Restore Handleiding ISaGRAF C Handleiding ISaGRAF Deze handleiding beoogt een korte samenvatting te geven van handelingen die verricht moeten worden om met behulp van ISaGRAF een PLC-programma te schrijven en

Nadere informatie

INFITT01 Internettechnologie WEEK 2

INFITT01 Internettechnologie WEEK 2 INFITT01 Internettechnologie WEEK 2 Programma Contexts Listeners Scope/Attributes Thread safety Taken container Een servlet draait in een container (servlet container). De container, die ten dienste van

Nadere informatie

Vereiste kennis. 1 Java-editor. 2 Het compileren van een programma

Vereiste kennis. 1 Java-editor. 2 Het compileren van een programma 3 Vereiste kennis Dit boek richt zich op het leren programmeren door het oefenen met programmeercodes. Veel theorie komt in het begin niet aan de orde. Dat is een grote uitdaging want het is niet makkelijk

Nadere informatie

Een gelinkte lijst in C#

Een gelinkte lijst in C# Een gelinkte lijst in C# In deze tutorial ga demonstreren hoe je een gelinkte lijst kan opstellen in C#. We gaan een klasse schrijven, die een gelijkaardige functionaliteit heeft als een ArrayList, namelijk

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: stapels, rijen en binaire bomen Programmeermethoden Datastructuren: stapels, rijen en binaire bomen week 12: 23 27 november 2015 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Inleiding In de informatica worden Abstracte DataTypen (ADT s)

Nadere informatie

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers 1 Inhoud Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers 2 Geluidsbronnen simulator, deel 2 Inleiding De weergave versnellen

Nadere informatie

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int

Nadere informatie

In een klassendiagram worden klassen beschreven in termen

In een klassendiagram worden klassen beschreven in termen Sander Hoogendoorn is Partner bij Ordina Patterns voor het gebruik van referenties in bedrijfsklassen G O E D G E B R U I K VA N R E F E R E N T I E S In de dagen dat applicaties voornamelijk bestonden

Nadere informatie

In gesprek met externe toepassingen

In gesprek met externe toepassingen In gesprek met externe toepassingen Oracle WebForms regelt interactie Steeds vaker wordt gekozen voor een Oracle WebForms applicatie (three tier architecture) als oplossing voor een aan vervanging toe

Nadere informatie

Programming Content Management Server 2002

Programming Content Management Server 2002 Met behulp van Content Management Server 2002 (CMS) kun je eenvoudig te onderhouden websites bouwen en beheren. De business driver van CMS is het gebruiksvriendelijk beheer van een website, in het bijzonder

Nadere informatie

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten

Nadere informatie

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Digitale

Nadere informatie

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Inleiding C++ Coding Conventions

Inleiding C++ Coding Conventions Inleiding C++ Coding Conventions Opleiding Bachelor of Science in Informatica, van de Faculteit Wetenschappen, Universiteit Antwerpen. Nota s bij de cursus voor academiejaar 2012-2013. Ruben Van den Bossche,

Nadere informatie

Programmeren in C# Klassen schrijven

Programmeren in C# Klassen schrijven Programmeren in C# Klassen schrijven In dit hoofdstuk Klassestructuur Private variabelen Publieke methoden (public) Properties Constructormethodes Private methodes (private) Static methodes en properties

Nadere informatie

VI. Klassen en objecten

VI. Klassen en objecten VI. Klassen en objecten Klassen en objecten vormen het fundament van OOP. We zullen dus uitgebreid aandacht besteden aan klassen en objecten. U kunt Java niet begrijpen zonder goed met klassen en objecten

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: stapels, rijen en binaire bomen Programmeermethoden : stapels, rijen en binaire bomen Walter Kosters week 12: 26 30 november 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 en Vierde programmeeropgave Othello programmeren we als volgt:

Nadere informatie

1 Inleiding probleembeschrijving

1 Inleiding probleembeschrijving Bas Weelinck (5985498), Merlijn Wajer (5948940), Koos van Strien (5783437) 18 mei 2010 1 Inleiding probleembeschrijving Volgens de specificaties gegeven in het opdrachtdocument moet een gedistribueerde

Nadere informatie

Correspondentie inzake overnemen of reproductie kunt u richten aan:

Correspondentie inzake overnemen of reproductie kunt u richten aan: Vrijwel alle namen van software- en hardwareproducten die in deze cursus worden genoemd, zijn tegelijkertijd ook handelsmerken en dienen dienovereenkomstig te worden behandeld. Alle rechten voorbehouden.

Nadere informatie

Versie 2: B C D D A C D A C C. Versie 3: C D A A B D A B D D. Versie 4: A D C C B D C B D D. Versie 5: B A D D C A D C A A

Versie 2: B C D D A C D A C C. Versie 3: C D A A B D A B D D. Versie 4: A D C C B D C B D D. Versie 5: B A D D C A D C A A Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 1 februari 2019, 11.00 13.00 uur Voor de meerkeuzevragen hebben we verschillende versies. Dit zijn de juiste antwoorden per versie.

Nadere informatie

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 21 december 2018, uur

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 21 december 2018, uur Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 21 december 2018, 8.30 10.30 uur 1. Gegeven zijn de integer variabele x en de string variabele s. Welke van de volgende uitspraken

Nadere informatie

Programmeren in Java 3

Programmeren in Java 3 2 september 2007 voor deeltijdstudenten Kop van Zuid Rotterdam, 3 juni 2007 Even voorstellen Naam: Wessel Oele(31) Docent bij opleiding technische informatica Kamer: I210 (tweede verdieping, links de gang

Nadere informatie

VB Magazine Online 2004 01/08 1 / 6

VB Magazine Online 2004 01/08 1 / 6 Een van de krachtigste elementen binnen Visual Basic 2003 vind ik wel de mogelijkheid om objecten te overerven; ook wel inheritance genoemd. U kunt niet alleen uw eigen classes en business objecten overerven,

Nadere informatie

Noties Informatica. In java fungeren objecten als een model voor de elementen waarin een probleem kan worden opgesplitst

Noties Informatica. In java fungeren objecten als een model voor de elementen waarin een probleem kan worden opgesplitst s Informatica Hoofdstuk 1 Object Klasse Methode Parameters Type Velden Toestand Compiler Resultaten (returnwaarde) In java fungeren objecten als een model voor de elementen waarin een probleem kan worden

Nadere informatie

Project Software Engineering XML parser: Parsen van een xml CD catalogus

Project Software Engineering XML parser: Parsen van een xml CD catalogus Project Software Engineering XML parser: Parsen van een xml CD catalogus Brent van Bladel brent.vanbladel@uantwerpen.be February 16, 2017 XML (Extensible Markup Language) is een taal waarmee we op een

Nadere informatie

Datastructuren en algoritmen

Datastructuren en algoritmen Datastructuren en algoritmen Doelstelling Datastructures + algorithms = programs Boek van Niklaus Wirth: bedenker Pascal en Modula Datastructuur: structuur om informatie op te slaan Algoritme: voorschrift

Nadere informatie

Object Oriented Programming

Object Oriented Programming Object Oriented Programming voor webapplicaties Door Edwin Vlieg Waarom OOP? Basis uitleg over OOP Design Patterns ActiveRecord Model View Controller Extra informatie Vragen OOP Object Oriented Programming

Nadere informatie

Inleiding programmeren

Inleiding programmeren Inleiding programmeren Docent: José Lagerberg Assistenten: Robin de Vries, Jordy Perlee, Dimitri Belfor, Stephen Swatman, Erik Kooistra, Daan Kruis, Daniel Louwrink Cursusinformatie: https://staff.fnwi.uva.nl/j.m.lagerberg

Nadere informatie

ASRemote WebService. Via deze webservice kunt u:

ASRemote WebService. Via deze webservice kunt u: ASRemote WebService De ASRemote WebService is een SOAP Webservice die softwarematige communicatie met Exact Globe mogelijk maakt vanaf een willekeurige locatie op het internet. Via deze webservice kunt

Nadere informatie

ALGORITME objectgeoriënteerd programmeren

ALGORITME objectgeoriënteerd programmeren ALGORITME objectgeoriënteerd programmeren Gunter Schillebeeckx 1 objectgeoriënteerd programmeren Object Klasse Instantie Eigenschap Methode Inkapseling Polymorfisme Overerving 2 Inleiding Kern Samenvatting

Nadere informatie

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser colleges recursieve datastructuren college 9 interpreteren: waarde van bomen bepalen transformeren: vorm van bomen veranderen parseren herkennen van expressie in de tekst herkennen van functies onderwerp

Nadere informatie

Abstracte klassen & Interfaces

Abstracte klassen & Interfaces Abstracte klassen & Interfaces Overerving public class Vierhoek {... Vierhoek public class Rechthoek extends Vierhoek {... public class Ruit extends Vierhoek {... Rechthoek Ruit Elke rechthoek is een vierhoek.

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 18 december 2015 Overerving (inheritance) Constructors Overriding Inheritance demo Exceptions Zelf exceptions veroorzaken Overerving (inheritance) 2-dimensionaal

Nadere informatie

Stacks and queues. Hoofdstuk 6

Stacks and queues. Hoofdstuk 6 Hoofdstuk 6 Stacks and queues I N T R O D U C T I E In dit hoofdstuk worden drie datastructuren stack, queue en deque behandeld. Om deze datastructuren te implementeren, worden onder andere arrays en linked

Nadere informatie

IDE gebruik en introductie Java. Programmeertechnieken, Tim Cocx

IDE gebruik en introductie Java. Programmeertechnieken, Tim Cocx IDE gebruik en introductie Java Programmeertechnieken, Tim Cocx Discover thediscover world atthe Leiden world University at Leiden University IDE Gebruik Discover thediscover world atthe Leiden world University

Nadere informatie

Tentamen Imperatief Programmeren

Tentamen Imperatief Programmeren Tentamen Imperatief Programmeren Maandag 22 oktober 2001 Toelichting Dit is een open boek tentamen, d.w.z. het cursusboek mag gebruikt worden. N.B.: Het tentamen is individueel: voor het maken van de opgaven

Nadere informatie

BRP-BZM Use Case Realisations Guidelines

BRP-BZM Use Case Realisations Guidelines BRP-BZM Use Case Realisations Guidelines Versie 2.0 02-09-2011 Definitief Versiehistorie Datum Versie Auteur 23-12-2010 0.1 Eerste versie R.F. Schaaf 04-01-2011 1.0 Feedback verwerkt R. Schaaf en D. Geluk

Nadere informatie

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn.

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn. Objectgeoriënteerd PHP (versie 5) Kennisvereisten: Ervaring met programmeren in PHP met MySQL Je weet wat een class of klasse is Je weet wat een instantie van een klasse (een object) is Je weet wat een

Nadere informatie

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Vrijdag 22 januari 2010 Toelichting Dit is een open boek tentamen. Communicatie en het gebruik van hulpmiddelen zijn niet toegestaan.

Nadere informatie

Modulewijzer Tirdat01

Modulewijzer Tirdat01 Modulewijzer Tirdat01 W. Oele 25 augustus 2008 1 Inhoudsopgave 1 Inleiding en leerdoelen 3 2 Voorkennis 3 2.1 tirprg01 en tirprg02........................ 3 2.2 tirprg03.............................. 4

Nadere informatie

Programmeren in Java 3

Programmeren in Java 3 7 maart 2010 Deze les Zelf componenten maken Concurrency (multithreading): werken met threads levenscyclus van een thread starten tijdelijk onderbreken wachten stoppen Zelf componenten maken Je eigen component:

Nadere informatie

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni 2011

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni 2011 Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2010-2011 21 juni 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief

Nadere informatie

Enterprise Connectivity. Marnix van Bo. TU Delft Elek Software Architect 20 jaar ervarin ontwikkeling

Enterprise Connectivity. Marnix van Bo. TU Delft Elek Software Architect 20 jaar ervarin ontwikkeling Fir rst Base Enterprise Connectivity Marnix van Bo chove First Base: opgericht in 2001 TU Delft Elek ktrotechniek - 1998 Software Architect 20 jaar ervarin g met software ontwikkeling Presentatie Ideeën

Nadere informatie

Technical Note. API Beschrijving Aangetekend Mailen

Technical Note. API Beschrijving Aangetekend Mailen AUTHOR APPROVED Technical Note API Beschrijving Referentie: API beschrijving AM Versie: 0.0.7 Datum: 2015-07-24 Aangetekend Bellen B.V. Computerweg 5 Postbus 8307 3503 RH Utrecht T: +31 346 581 731 support@aangetekendmailen.nl

Nadere informatie

Een stoomcursus door Edgar de Graaf, november 2006

Een stoomcursus door Edgar de Graaf, november 2006 Programmeren in Java Een stoomcursus door Edgar de Graaf, november 2006 Deze tekst geeft een zeer korte inleiding in de programmeertaal Java, uitgaande van kennis van de taal C++. Daarnaast bestudere men

Nadere informatie

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Introductie In dit document geven we een mogelijke oplossing voor het eerste practicum. Deze oplossing gebruikt verschillende klassen en overerving,

Nadere informatie

Correspondentie inzake overnemen of reproductie kunt u richten aan:

Correspondentie inzake overnemen of reproductie kunt u richten aan: 5 - Mockito Vrijwel alle namen van software- en hardwareproducten die in deze cursus worden genoemd, zijn tegelijkertijd ook handelsmerken en dienen dienovereenkomstig te worden behandeld. Alle rechten

Nadere informatie

Objective-C, wat is dat?

Objective-C, wat is dat? Objective-C, wat is dat? ALbert Mietus Vorig jaar vroeg een collega, die net een mooie Apple Notebook gekocht had of ik wist wat Objective-C was. Zijn systeem gebruikte dat veel. Toevalling heb ik, jaren

Nadere informatie

Genetische algoritmen in Java met JGAP

Genetische algoritmen in Java met JGAP Genetische algoritmen in Java met JGAP Inleiding JGAP, uitgesproken als "jee-gep", is een framework voor het implementeren van genetische algoritmen en het gebruik ervan in Java. Genetische algoritmen

Nadere informatie

Tutorial 1, Delphi: Geldspraak

Tutorial 1, Delphi: Geldspraak Tutorial 1, Delphi: Geldspraak Versie Datum Auteurs Opmerkingen 1 25-09-2001 Kees Hemerik (code) Gebaseerd op Delphi 5 Enterprise. Roel Vliegen (tekst) 2 17-03-2005 Kees Hemerik Aanpassingen: Delphi 7,

Nadere informatie

Formulieren en waarden posten naar een view

Formulieren en waarden posten naar een view Hoofdstuk 4 Formulieren en waarden posten naar een view Waarden posten naar een view in een Zend-project gaat heel anders dan dat je gewend bent. Om dit mechanisme te leren, kunnen we het beste een eenvoudige

Nadere informatie

Een fragment wordt afgeleid van de basis klasse "Fragment".

Een fragment wordt afgeleid van de basis klasse Fragment. Android fragmenten 1/5 Fragmenten Klasse Een fragment wordt afgeleid van de basis klasse "Fragment". package com.android.cursustekst; import java.text.simpledateformat; import java.util.arraylist; import

Nadere informatie