Refactoring 1: het aanpassen van het generieke model.
|
|
- Quinten Maas
- 7 jaren geleden
- Aantal bezoeken:
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 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 informatieAnalyse 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 informatieDatatypes 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 informatieKleine 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 informatieZelftest 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 informatieNHibernate 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 informatieModelleren 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 informatieDynamiek 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 informatieVakgroep 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 informatieOvererving & 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 informatieOBJECT 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 informatieDatastructuren 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 informatieHoofdstuk 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 informatieInformatica. 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 informatieModeleren. 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 informatieProgrammeren 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 informatieProgrammeren 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 informatieJaco 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 informatieModelleren 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 informatieObjectgeorï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 informatieDynamische 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 informatieDesign 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 informatieWCF 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 informatieModelleren 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 informatieJava 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 informatieVoor 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 informatieRELEASE 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 informatiePracticumopgave 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 informatieProgrammeren 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 informatieIntroductie 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 informatieIMP 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 informatieUitwerking 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 informatieVariabelen 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 informatieDe 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 informatieUitwerking 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 informatieAan 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 informatieDatastructuren 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 informatieProgrammeren. 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 informatieGebruikers 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 informatievoegtoe: 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 informatieJava. 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 informatieDIAGNOSTISCHE 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 informatieAccess 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 informatieUnit 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 informatieModelleren 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 informatieModelleren 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 informatieOpdracht 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 informatieInhoud 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 informatieHandleiding 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 informatieINFITT01 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 informatieVereiste 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 informatieEen 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 informatieDatastructuren: 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 informatieKlassen & 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 informatieUniversiteit 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 informatieIn 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 informatieIn 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 informatieProgramming 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 informatieVoorbeeldtentamen 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 informatieTentamen 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 informatieDerde 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 informatieInleiding 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 informatieProgrammeren 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 informatieVI. 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 informatieDatastructuren: 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 informatie1 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 informatieCorrespondentie 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 informatieVersie 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 informatieUitwerking 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 informatieProgrammeren 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 informatieVB 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 informatieNoties 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 informatieProject 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 informatieDatastructuren 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 informatieObject 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 informatieInleiding 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 informatieASRemote 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 informatieALGORITME 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 informatiecolleges 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 informatieAbstracte 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 informatieModelleren 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 informatieStacks 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 informatieIDE 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 informatieTentamen 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 informatieBRP-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 informatieVerder 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 informatieTentamen 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 informatieModulewijzer 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 informatieProgrammeren 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 informatieExamen 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 informatieEnterprise 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 informatieTechnical 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 informatieEen 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 informatieBeginselen 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 informatieCorrespondentie 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 informatieObjective-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 informatieGenetische 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 informatieTutorial 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 informatieFormulieren 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 informatieEen 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