Java Generics: een introductie

Maat: px
Weergave met pagina beginnen:

Download "Java Generics: een introductie"

Transcriptie

1 25/Langer :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 van de Java-taal, die bekend is onder de naam Java Generics, is een belangrijke aanvulling op de kern van de taal. In dit artikel (het eerste uit een tweedelige serie) geven Angelika Langer en Klaus Kreft een overzicht van deze nieuwe feature. Zij baseerden zich daarbij op de laatste draft van de specificatie, gepubliceerd in juli 2003, en de bèta release van J2SE 1.5, die in februari 2004 beschikbaar kwam. 1 thema Java Generics: een introductie Nieuwe features maken Java krachtiger Laten we beginnen met een voorbeeld om het doel en de voordelen van generics toe te lichten. Stel dat ons programma een aantal input files moet verwerken. Hiertoe zou een lijst met bestandsnamen van de input files aangemaakt moeten worden. In de huidige nietgenerieke Java-versie zou zo n lijst van het type List zijn. Uit het type object kun je niet afleiden wat de lijst precies bevat. Je kunt zelfs niet vaststellen welk type objecten er in de lijst te vinden zijn; het zou van alles kunnen zijn. Het type zelf verschaft weinig informatie. In generiek Java kun je de lijst met bestandsnamen met input files vastleggen met behulp van het type List<InputFile- Name>. Je zou de string die de bestandsnaam representeert kunnen inpakken in een class InputFileName, en vervolgens dat type gebruiken om het geparameteriseerde type List<InputFileName> te gebruiken. Je kunt dan door slechts te kijken naar het type object zien dat dit een lijst met input file bestandsnamen is. Een naam als List<InputFileName> biedt veel voordelen. Het is niet alleen voor programmeurs gemakkelijker om Java source code te begrijpen, het stelt ook de compiler in staat die informatie te gebruiken en nuttige checks op typen uit te voeren. De compiler kan uit de type-informatie List<InputFile- Name> afleiden dat het object een lijst van input file bestandsnamen is, en de compiler weet ook zeker dat alleen objecten van het type InputFileName toegevoegd worden aan de lijst. Iedere poging een vreemd element toe te voegen zou door de compiler worden geweigerd met een compile-time error message. Wanneer een object uit deze lijst gekozen wordt, weet je dus gegarandeerd dat het object een input file bestandsnaam is. Er kan namelijk niets anders worden toegevoegd aan een List<InputFileName>. Ontelbare lelijke type casts, die we in niet-generieke Java nu nog dagelijks moeten uitvoeren, zijn in Java Generics niet meer nodig. We hoeven de compiler niet meer door middel van een cast te vertellen dat met het object van de lijst een input file name wordt bedoeld. De compiler weet namelijk al wat het is. Ook dit draagt bij aan de duidelijkheid en leesbaarheid van generieke Java source code. Het grootste voordeel van Java Generics is zijn expressieve kracht. De bedoeling van Java Generics is om Java source code leesbaarder en begrijpelijker te maken en daardoor bij te dragen aan een hogere kwaliteit van de Java source code. Java Generics stelt bovendien de compiler in staat om vroege type checks uit te voeren (in tegenstelling tot runtime checks in een later stadium) die helpt om fouten in een zo vroeg mogelijk stadium op te sporen. GESCHIEDENIS Het idee om generics toe te voegen aan Java is bijna zo oud als de taal zelf. Het specificatie- 1 Noch de besproken specificatie, noch de compiler implementatie zijn definitieve versies. Het is dus mogelijk dat er kleine verschillen zijn tussen de drafts en de definitieve versies, hoewel het onwaarschijnlijk is dat de in dit artikel besproken features nog zullen veranderen.» Software Release Magazine 2» Java Magazine 1» april

2 25/Langer :13 Pagina 18 verzoek voor Java Generics is JSR 14 (zie /JSR14/) en het was één van de eerste, zoals blijkt uit het lage nummer. Al in 1999 werd het goedgekeurd. Direct na het ontstaan van de Java programmeertaal begonnen mensen te onderzoeken hoe de taal verbeterd kon worden door het toevoegen van geparameteriseerde types en methods ter versterking van het type system van de taal. Er vond research plaats (zie bijvoorbeeld /BRA/) en er werden verscheidene prototypen gebouwd (waaronder Pizza en NextGen). De resultaten en inzichten van deze vroege experimenten werden opgenomen in de specificatie van de huidige Java Generics. Waar komt het idee voor Generics oorspronkelijk vandaan? De taal Java is geïnspireerd door andere programmeertalen. Oorspronkelijk werd Java beïnvloed door Smalltalk en C/C++. Deze talen waren erg populair op het moment dat Java werd uitgevonden. Op dit moment wordt Java duidelijk beïnvloed door C#. Generieke types en methods bestaan in vele talen: Ada heeft Generics, C++ heeft templates, en C# heeft Generics. Het gemeenschappelijke doel van deze kenmerken is om de respectievelijke type systemen van de talen te versterken. Het grootste voordeel van Java Generics is zijn expressieve kracht: de source code wordt leesbaarder en begrijpelijker Java is een hybride programmeertaal die elementen van sterke en zwakke typering in zich draagt. Zwakke typering betekent dat typen weinig informatie dragen en niet buitengewoon belangrijk zijn. Een voorbeeld van een Java-voorganger met zwakke typering is Smalltalk. Sterke typering daarentegen betekent dat een type juist heel veel informatie over objecten bevat. Sterke typering stelt de compiler in staat om zo vroeg mogelijk verscheidene checks uit te voeren, bijvoorbeeld om te controleren of twee objecten onderling compatibel zijn. Kunnen ze aan elkaar toegewezen worden? In een sterk getypeerde taal zal de compiler zo n vraag onmiddellijk beantwoorden en direct een foutmelding afgeven. In een zwak getypeerde taal kan de compiler dat niet vaststellen. Het antwoord wordt pas duidelijk tijdens runtime wanneer de runtime systemen een runtime check uitvoeren en een exception melden. Java s sterk getypeerde voorganger is C++. Java bevat elementen van beide voorgangers en heeft dus ook kenmerken van zowel sterke als zwakke typering. Java Generics heeft als doel de sterke typering in de taal te verstevigen. Juist hier kunnen programmeurs voordeel halen uit de nieuwe feature. GEDETAILLEERD In alle talen vloeit de behoefte aan generieke types voort uit de implementatie en het gebruik van verzamelingen, zoals die in het Java collection framework. Doorgaans is de implementatie van een verzameling objecten onafhankelijk van het type objecten dat zich in de verzameling bevindt. Het heeft daarom geen zin om dezelfde datastructuur telkens opnieuw te her-implementeren, alleen maar omdat het mogelijk verschillende type elementen zou kunnen bevatten. In plaats daarvan is het de bedoeling om een enkele implementatie van de verzameling uit te voeren en die vervolgens te gebruiken om elementen van verschillende types vast te houden. Met andere woorden, in plaats van het implementeren van een class IntList en StringList voor het vasthouden van respectievelijk integraal waarden en strings, willen we één generieke implementatie List die in beide gevallen kan worden gebruikt. In niet-generieke Java wordt dit soort generiek programmeren totnogtoe gerealiseerd door middel van Object referenties: een generieke lijst wordt geïmplementeerd als een verzameling Object referenties. Aangezien Object de superclass van alle classes is, kan de lijst met Object-referenties ook referenties bevatten naar elk ander type object. Alle collection classes in de Java platform library s gebruiken deze programmeertechniek om genericiteit te bereiken. Een neveneffect van dit idioom is, dat we geen verzamelingen kunnen maken van waarden van een primitief type, zoals een lijst van integraalwaarden van het type int, omdat de primitieve types geen subclasses vormen van Object. Dat is nog geen grote restrictie omdat ieder primitief type een corresponderend referentie type heeft. In zo n geval converteren we ints naar Integers voordat ze in een verzameling worden opgeslagen - een conversie die bekend staat als boxing en die ondersteund zal worden als een geautomatiseerde conversie (autoboxing) in JDK 1.5 (zie /BOX/). Een Java-verzameling is erg flexibel; referenties naar elk type object kunnen erin worden opgeslagen. De verzameling hoeft zelfs niet eens homogeen te zijn (i.e. objecten van hetzelfde type te bevatten), maar het kan net zo goed heterogeen zijn, ofwel een mix van objecten van verschillende typen bevatten. Het gebruik van generieke Java verzamelingen is rechttoe rechtaan. Elementen worden toegevoegd door een referentie naar dat element toe te voegen aan de verzameling. Iedere 18» Java Magazine 1» april 2004» Software Release Magazine 2

3 25/Langer :13 Pagina 19 keer wanneer we een object uit een verzameling halen, ontvangen we een Object referentie. Voordat we de onttrokken elementen effectief kunnen gebruiken, moeten we de type-informatie over het element opnieuw opslaan. Hiertoe stoppen we de teruggegeven Object referentie in het zogenaamde type van het element, zoals in het volgende voorbeeld: LinkedList list = new LinkedList(); list.add(new Integer(0)); Integer i = (Integer) list.get(0); We moeten de Object referentie, teruggegeven van method get(), casten naar type Integer. Deze cast is veilig omdat hij is gechecked in runtime. Als we zouden proberen om het te casten naar een type dat anders is dan dat van het geëxtraheerde element, dan zou een ClassCastException ontstaan, zoals in het onderstaande voorbeeld: String s = (String) list.get(0); // is in orde tijdens compile-time, maar mislukt tijdens runtime met een ClassCastException. Het gebrek aan informatie over het element type in een verzameling en de resulterende behoefte aan ontelbare casts op alle plaatsen waar elementen worden geëxtraheerd uit een verzameling is de primaire drijfveer voor het toevoegen van geparameteriseerde typen aan de Java programmeertaal. Het idee is om de typen uit de verzameling te aan te vullen met informatie over het soort elementen dat zij bevatten. In plaats van iedere verzameling te behandelen als een verzameling Object referenties, zouden we een onderscheid moeten maken tussen verzamelingen met referenties naar integers en verzamelingen met referenties naar strings. Een collection type zou een geparameteriseerd (of generiek) type worden dat een type parameter heeft, dat het soort element zou specificeren. Met een generieke lijst zou het hiervoor genoemde voorbeeld er als volgt uitzien: LinkedList<Integer> list = new LinkedList <Integer>(); list.add(new Integer(0)); Integer i = list.get(0); Merk op, dat de get() method van een generieke lijst een referentie naar een object van een specifiek type retourneert, in ons voorbeeld van het type Integer, in welk geval de cast van Object naar Integer niet langer meer nodig is. Ook zou het gebruik van het geëxtraheerde element - als dit van een ander type zou zijn - al tijdens het compileren onderschept worden, in plaats van tijdens runtime. Zo zou in het volgende voorbeeld niet gecompileerd kunnen worden: String s = list.get(0); // compile-time error Op deze wijze verhoogt Java Generics de expressieve kracht en de type-veiligheid van de taal door middel van vroege statische checks, in plaats van late dynamische checks. Java Generics voorziet niet alleen in geparameteriseerde collection types zoals gebruikt in het voorbeeld, het stelt ons ook in staat zelf generieke types te implementeren. Om te zien hoe we deze nieuwe feature voor onze eigen Java-programma s kunnen gebruiken, zullen we Java Generics grondiger gaan verkennen. In het navolgende zullen we kort kijken naar de syntax van de definitie van generieke types en naar andere taalkenmerken die met Java Generics te maken hebben. GENERIEKE TYPES Codevoorbeeld 1 laat een voorbeeld zien van de definitie van verscheidene generieke types. De sample code toont ook schetsmatig een geparameteriseerde verzameling genaamd LinkedList<A>, diens superinterface Collection<A> en diens iterator type Iterator<A>. De typen in dit voorbeeld zijn geïnspireerd door de verzameling classes uit de library van het Java platform in package java.util. interface Collection<A> { public void add (A x); public Iterator<A> iterator (); interface Iterator<A> { public A next (); public boolean hasnext (); class NoSuchElementException extends RuntimeException f{ class LinkedList<A> implements Collection<A> { protected class Node { A elt; Node next = null; Node (A elt) { this.elt = elt; protected Node head = null, tail = null; public LinkedList () { public void add (A elt) { if (head == null) { head = new Node(elt); tail = head;» Software Release Magazine 2» Java Magazine 1» april

4 25/Langer :13 Pagina 20 else { tail.next = new Node(elt); tail = tail.next; public Iterator<A> iterator () { return new Iterator<A> () { protected Node ptr = head; public boolean hasnext () { return ptr!= null; public A next () { if (ptr!= null) { A elt = ptr.elt; ptr = ptr.next; return elt; else { throw new NoSuchElementException (); ; final class Test { public static void main (String[ ] args) { LinkedList<String> ys = new LinkedList<String>(); ys.add( zero ); ys.add( one ); String y = ys.iterator().next(); C ODEVOORBEELD 1. Voorbeelden van geparameteriseerde typen Geparameteriseerde typen hebben type parameters. In ons voorbeeld hebben zij precies één parameter, namelijk A. In het algemeen kan een geparameteriseerd type een onderhandelbaar aantal parameters bevatten. In ons voorbeeld staat parameter A voor het type van de elementen in de verzameling. Een parameter als A wordt ook wel een type variabele genoemd. Type variabelen kunnen worden beschouwd als plaatsvervangers, die later vervangen worden door een concreet type. Bijvoorbeeld, wanneer een instantiëring van het generieke type, zoals LinkedList<String>, wordt toegepast, zal A worden vervangen door String. Verderop in dit artikel zullen we constateren dat er restricties zijn in het gebruik van type variabelen. We zullen constateren dat een type variabele niet zomaar kan worden gebruikt als een type. De analogie met een plaatsvervanger voor een type is niet volledig correct, maar slechts een benadering van wat een type variabele is. Voorlopig beschouwen we de type variabele echter nog even als een plaatsvervanger voor een type - het type elementen uit de verzameling in ons voorbeeld. BOUNDS Voor de implementatie van een generieke lijst zoals in ons voorbeeld, is het nooit nodig een beroep te doen op enige method van het element type. Een lijst gebruikt slechts referenties naar de elementen, maar heeft nooit echt toegang tot die elementen. De lijst hoeft daarom niets te weten over het element type. Niet alle geparameteriseerde typen hebben zulke elementaire requirements voor hun element typen. Stel dat we een hash-gebaseerde verzameling zouden willen implementeren, zoals een hash tabel. Een hashgebaseerde verzameling moet de hash codes van de entry s calculeren. Echter, het element type is onbekend in de implementatie van een geparameteriseerde hash tabel. Slechts de type variabele die het element type vertegenwoordigt, is beschikbaar. Codevoorbeeld 2 laat een fragment zien van de implementatie van een geparameteriseerde hash tabel. Het is een geparameteriseerde class die twee type parameters heeft voor het key type en het associated value type. public class Hashtable<Key, Data> { private static class Entry<Key, Data> { Key key; Data value; int hash; Entry<Key, Data> next; private Entry<Key,Data>[] table; public Data get(key key) { int hash = key.hashcode(); for (Entry<Key,Data> e = table[hash & hashmask]; e!= null; e = e.next) { if ((e.hash == hash) && e.key.equals (key)) { return e.value; return null; C ODEVOORBEELD een hash tabel 2. Een geparameteriseerd type: Zoals we kunnen zien, verplaatst de implementatie van de hash tabel niet alleen referenties naar de entry s, maar moet ook methods van de key type aanroepen, namelijk hashcode() en equals(). Beide methoden worden gedefinieerd in de class Object. De implementatie van de hash tabel vereist dus, dat de type variabelen Key en Data vervangen worden door concrete types die subtypes zijn van Object. Verderop in dit artikel zullen we zien dat dit altijd gegarandeerd is, omdat primitieve types verboden zijn als type argumenten voor Generics. Een concreet type dat een type variabele vervangt moet een referentie type zijn. Om deze reden kunnen we rustig aannemen dat de key type de vereiste methods heeft. Wat nu als het nodig is om methods aan te roepen 20» Java Magazine 1» april 2004» Software Release Magazine 2

5 25/Langer :13 Pagina 21 die niet zijn gedefinieerd in de class Object? Overweeg dan de implementatie van een tree-based verzameling. Tree-based verzamelingen vereisen net als een TreeMap een sorteer-volgorde voor de elementen, die in die verzameling zitten. Element types kunnen in de sorteervolgorde voorzien door middel van de compareto() method, die gedefinieerd is in de Comparable interface. De implementatie van een tree-based verzameling zou daarom de compareto() method van het element type kunnen aanroepen. Codevoorbeeld 3 is een eerste poging tot een implementatie van een geparameteriseerde TreeMap verzameling. public interface Comparable<T> { public int compareto(t arg) ; public class TreeMap<Key,Data> { private static class Entry<K,V> { K key; V value; Entry<K,V> left = null; Entry<K,V> right = null; Entry<K,V> parent; private transient Entry<Key,Data> root = null; private Entry< Key,Data > getentry(key key) { Entry<Key,Data> p = root; Key k = key; while (p!= null) { int cmp = ((Comparable<Key>)k).compareTo (p.key); if (cmp == 0) return p; else if (cmp < 0) p = p.left; else p = p.right; return null; public boolean containskey(key key) { return getentry(key)!= null; C ODEVOORBEELD 3. Implementatie van een treebased verzameling - zonder bounds De geparameteriseerde class TreeMap heeft twee type parameters Key en Data. Er worden geen requirements opgelegd aan één van deze type variabelen. Met deze implementatie zouden we een TreeMap<X,Y> kunnen aanmaken, zelfs als de key type X de Comparable<X> interface niet geïmplementeerd zou hebben en geen compareto() method zou hebben. De aanroep van compareto(), of (om precies te zijn) de cast van het key object naar het type Comparable<Key> voor het onvergelijkbare key type X, zou dan tijdens runtime mislukken met de melding ClassCastException. public final class X { public final class Y { public final class Test { public static void main(string[] argv) { TreeMap<X,Y> tree = new TreeMap<X,Y>(); // compiles, although X is not Comparable add elements to the map X x = some key ; tree.containskey(x); // fails runtime with a ClassCastException C ODEVOORBEELD 4. Gebruik van de tree-based verzameling - zonder bounds Om een vroege compile-time check mogelijk te maken, heeft Java Generics de taalfeature bounds: type variabelen van een geparameteriseerd type kan één of meerdere bounds hebben. Bounds zijn interfaces of superclasses die een type variabele moet implementeren of toevoegen. Als een geparameteriseerd type geïnstantieerd is met een concreet type argument dat niet de vereiste interface(s) of de vereiste superclass implementeert, dan zal de compiler deze overtreding van de requirements opmerken en een foutmelding afgeven. In ons voorbeeld, zouden we de requirement zodanig kunnen formuleren dat de key type van onze TreeMap de interface Comparable<Key> moet implementeren door een bound voor de type variabele Key te specificeren. De aangepaste implementatie van TreeMap is te zien in Codevoorbeeld 5. public class TreeMap<Key extends Comparable<Key>,Data> { static class Entry<K,V> { K key; V value; Entry<K,V> left = null; Entry<K,V> right = null; Entry<K,V> parent; private transient Entry<Key,Data> root = null; private Entry< Key,Data > getentry(key key) { Entry<Key,Data> p = root; Key k = key;» Software Release Magazine 2» Java Magazine 1» april

6 25/Langer :13 Pagina 22 while (p!= null) { int cmp = k.compareto(p.key); if (cmp == 0) return p; else if (cmp < 0) p = p.left; else p = p.right; return null; public boolean containskey(key key) { return getentry(key)!= null; C ODEVOORBEELD 5. Implementatie van tree-based collection - met bounds Nu doen we een poging een key type te gebruiken dat niet de Comparable interface implementeert, die afgewezen zal worden door de compiler, zoals in Codevoorbeeld 6. bounds mogen geen instantiaties zijn van dezelfde geparameteriseerde interface. Het volgende is niet toegestaan: class SomeType<T implements Comparable<T> & Comparable<String> & Comparable<String Buffer>> { Deze restrictie vloeit voor uit de manier waarop Java Generics worden geïmplementeerd. Verderop in dit artikel zullen we hier nader op ingaan. Classes kunnen ook bounds zijn. Het concrete type argument moet dan een subclass zijn van de bounding class of het mag dezelfde class zijn als de bounding class. Zelfs final classes zijn toegestaan als bounds. Bounding classes verschaffen, net als interfaces, toegang tot niet-statische methods die het concrete type argument overerft van zijn superclass. Bounding classes geven geen toegang tot constructors en statische methods. De bounding superclass moet in een lijst met bounds verschijnen als de eerste bound. De syntax voor de specificatie van bounds is dus: TypeVariable implements Superclass & Interface 1 & Interface 2 & & Interface n Het primaire doel van bounds is om vroege compiletime checks mogelijk te maken. Methods van een type variabele zonder bounds kunnen alleen benaderd worden door de type variabele vorm te geven als een type dat de gewenste methods benoemt; zo n cast zou tijdens runtime mislukken als het concrete type niet de gewenste methods heeft. Methods van een type variabele met bounds zijn direct toegankelijk (zonder enige casts) en de compiler zou al tijdens compile-time detecteren wanneer het concrete type niet de gewenste methods heeft. Enkele aanvullende syntax details: een type variabele kan verschillende bounds bevatten. De syntax is: TypeVariable implements Bound 1 & Bound 2 & & Bound n Een voorbeeld: final class Pair<A extends Comparable<A> & Cloneable<A>, B extends Comparable<B> & Cloneable<B>> implements Comparable<Pair<A,B>>, Cloneable<Pair<A,B>> { Zoals dit voorbeeld duidelijk maakt, kunnen type variabelen verschijnen in hun bounds. Bijvoorbeeld: de type variabele A wordt gebruikt als type argument voor de geparameteriseerde interface Comparable, waarvan de instantiatie Comparable<A> een bound is van A. Er is een beperking gesteld aan bounds die instantiaties zijn van een geparameteriseerde interface: de verschillende public final class X { public final class Y { public final class Test { public static void main(string[] argv) { TreeMap<X,Y> tree = new TreeMap<X,Y>(); // compile-time error: type parameter X is not within its bound add elements to the map X x = some key ; tree.containskey(x); C ODEVOORBEELD 6. Gebruik van de tree-based verzameling - met bounds TAAL FEATURES In het tweede en laatste deel van deze serie, dat in de volgende editie van Java Magazine zal verschijnen, zullen we kort ingaan op een paar andere belangrijke taalfeatures van Java Generics: geparameteriseerde methods en wildcard instantiaties. Verder zullen we een aantal onderliggende principes van Java Generics onderzoeken, in het bijzonder de vertaling van geparameteriseerde types en methods naar Java bytecode. Angelika Langer is onafhankelijk trainer en consultant, gespecialiseerd in objectgeoriënteerde software ontwikkeling in C++ en Java ( [email protected]). Klaus Kreft is senior consultant en software architect voor Siemens Business Services ( [email protected]). 22» Java Magazine 1» april 2004» Software Release Magazine 2

Elementary Data Structures 3

Elementary Data Structures 3 Elementary Data Structures 3 Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 29 september 2014 ODE/FHTBM Elementary Data Structures 3 29 september 2014 1/14 Meer

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

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

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

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

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

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 9 december 2015 Foreach String arrays Boomstructuren Interfaces Ingebouwde datastructuren Quiz Foreach Foreach Speciale versie van for om iets voor alle elementen

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

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

Objectgericht programmeren 1.

Objectgericht programmeren 1. Objectgericht programmeren 1 [email protected] http://www.cs.kuleuven.be/~joost/dn Objectgericht ontwerpen 35% Objectgericht ontwerpen 65% OP1 Informatiesystemen 50% Databanken 50% OP1 Evaluatie

Nadere informatie

Java Programma structuur

Java Programma structuur Java Programma structuur public class Bla // div. statements public static void main(string argv[]) // meer spul Voortgezet Prog. voor KI, week 4:11 november 2002 1 Lijsten Voorbeelden 2, 3, 5, 7, 13 Jan,

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 [email protected] 1 Programmeren 1.1 Hoe werkt een

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

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

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

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

Programmeren (1) Examen NAAM:

Programmeren (1) Examen NAAM: Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien) en geef zowel klad als net af. Bij heel wat vragen moet je zelf Java-code schrijven. Hou dit kort en bondig. Je hoeft

Nadere informatie

Scala. Korte introductie. Sylvia Stuurman

Scala. Korte introductie. Sylvia Stuurman Korte introductie Sylvia Stuurman Wat is er zo bijzonder aan? Schaalbaar Objectgeoriënteerd (handiger dan Java!) Functioneel Scripts schrijven Gecompileerd: Java bytecode Pagina 2 voor scripts Pagina 3

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

Objectgeoriënteerd programmeren in Java 1

Objectgeoriënteerd programmeren in Java 1 Objectgeoriënteerd programmeren in Java 1 CPP Javaprogrammeur Bijeenkomst 3 Leereenheden 7, 8, 9 De Java API Java bevat een grote bibliotheek standaardklassen: de Java API Voorbeelden java.lang basisklassen

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

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

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

Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();

Kwis (3) class X { public void a() { System.out.println(x); public static void main(string[] args) { X x = new X(); Kwis (3) class X { public void a() { System.out.println("x"); class Y extends X { public void a() { System.out.println("y"); class Z extends Y { public void a() { System.out.println("z"); public static

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

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

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei 2014. Parallel Systems: Introduction

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei 2014. Parallel Systems: Introduction Informatica Deel II: les 1 Java versus Python Jan Lemeire Informatica deel II februari mei 2014 Parallel Systems: Introduction Arabidopsis (zandraket) Arabidopsis (zandraket) MMIQQA Multimodal Microscopic

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

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

NAAM: Programmeren 1 Examen 29/08/2012

NAAM: Programmeren 1 Examen 29/08/2012 Programmeren 29 augustus 202 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet je

Nadere informatie

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei 2015. Parallel Systems: Introduction

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei 2015. Parallel Systems: Introduction Informatica Deel II: les 1 Java versus Python Jan Lemeire Informatica deel II februari mei 2015 Parallel Systems: Introduction Arabidopsis (zandraket) Arabidopsis (zandraket) MMIQQA Multimodal Microscopic

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

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

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

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010 Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar 2009-2010 16 juni, 2010 **BELANGRIJK** 1. Schrijf je naam onderaan op elk blad. 2.

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

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 [email protected] en [email protected]

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

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

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10 CPP 1 van 10 ADSdt 1-2009 TENTAMENVOORBLAD Voor aanvang van het tentamen s.v.p. de tentamengegevens goed doorlezen om eventuele misverstanden te voorkomen!! Naam student : Studentnummer : Groep : Studieonderdeel

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

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

Ingebouwde klassen & methodes

Ingebouwde klassen & methodes Ingebouwde klassen & methodes Statische methodes Methodes die bij een klasse horen ipv. bij een object public class Docent { public static Docent departementshoofd() { return new Docent("Jan Ivens"); private

Nadere informatie

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag u gebruik maken van: Barnes, Object-Oriented Programming with Java en de Notitie Algoritmiek

Nadere informatie

Datastructures. Opdracht 3

Datastructures. Opdracht 3 Datastructures Opdracht 3 Naam Jeffrey van der Lingen Kevin Huijzendveld Joshua Turpijn Klas IS205 Vak Datastructures Datum 06/11/2016 Inhoudsopgave Inleiding... 3 1. Hashfunctie... 4 1.1 Inleiding...

Nadere informatie

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

TENTAMEN Programmeren 1 VOORBEELDUITWERKING TENTAMEN Programmeren 1 vakcode: 213500 datum: 10 juli 2004 tijd: 9:00-12:30 uur VOORBEELDUITWERKING Algemeen Bij dit tentamen mag gebruik worden gemaakt van het boek van Niño/Hosch, en van de handleiding

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

Organiseer uw verschillende SOAP services in één scenario

Organiseer uw verschillende SOAP services in één scenario 1 Organiseer uw verschillende SOAP services in één scenario Wouter Luijten [email protected] 2 Introductie Tijdens de implementatie van een proces heeft u vaak te maken met een veelvoud aan services.

Nadere informatie

Ontwerp van Informatiesystemen

Ontwerp van Informatiesystemen 1ste bach HIB Ontwerp van Informatiesystemen Prof. Verelst Q www.quickprinter.be uickprinter Koningstraat 13 2000 Antwerpen 112 2,50 Online samenvattingen kopen via www.quickprintershop.be Table of Contents

Nadere informatie

DOMjudge teamhandleiding

DOMjudge teamhandleiding judge DOMjudge teamhandleiding Samenvatting /\ DOM DOM judge Hieronder staat de belangrijkste informatie kort samengevat. Dit is bedoeld om snel aan de slag te kunnen. We raden echter ten zeerste aan dat

Nadere informatie

Het Hoe en Waarom van Generics in Java

Het Hoe en Waarom van Generics in Java Het Hoe en Waarom van Generics in Java Jurriaan Hage e-mail: [email protected] homepage: http://www.cs.uu.nl/people/jur/ Department of Information and Computing Sciences, Universiteit Utrecht April 7, 2009

Nadere informatie

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld Java spiekbrief Commentaar Dient enkel voor de menselijke lezer. // tot het einde van de lijn /* Dit type commentaar kan gerust meerdere lijnen beslaan. */ /** En deze speciale vorm wordt gebruikt voor

Nadere informatie

Tentamen in2705 Software Engineering

Tentamen in2705 Software Engineering Tentamen in2705 Software Engineering Voorbeeld (bijna tweemaal te groot) U mag meenemen naar dit tentamen: Lethbridge, afdrukken PPT slides, afdrukken handouts. 1. De TU wil een nieuw systeem ontwikkelen

Nadere informatie

Programmeren in C++ Efficiënte zoekfunctie in een boek

Programmeren in C++ Efficiënte zoekfunctie in een boek Examen Software Ontwikkeling I 2e Bachelor Informatica Faculteit Wetenschappen Academiejaar 2010-2011 21 januari, 2011 **BELANGRIJK** 1. Lees eerst de volledige opgave (inclusief de hints/opmerkingen)!

Nadere informatie

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft I ' Tentamen Objectgeorienteerd Programmeren TI 1200 1 februari 2012 9.00-12.00 Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit

Nadere informatie

Java Generics een nieuwe kijk op generiek programmeren in Java

Java Generics een nieuwe kijk op generiek programmeren in Java Faculteit Toegepaste Wetenschappen Vakgroep Informatietechnologie Voorzitter: Prof. Dr. Ir. P. Lagasse Onderzoeksgroep Software Engineering Java Generics een nieuwe kijk op generiek programmeren in Java

Nadere informatie

Design patterns Startbijeenkomst

Design patterns Startbijeenkomst Design patterns Startbijeenkomst Harrie Passier Docenten Sylvia Stuurman (1 e examinator) [email protected] Harrie Passier (2 e examinator) [email protected] Aarzel niet vragen te stellen! Rooster

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

eerste voorbeelden in Java

eerste voorbeelden in Java Beginselen van programmeren 2 eerste voorbeelden in Java vereisten: een editor: om programma in te tikken en te bewaren een Java compiler: zet ingetikte (bron-) programma om naar byte-code een Java Virtuele

Nadere informatie

SYNTRA-WEST. Cursus OOP. Deel

SYNTRA-WEST. Cursus OOP. Deel SYNTRA-WEST Cursus OOP Deel Syntra-West voorheen VORMINGSINSTITUUT VOOR KMO Syntra-West Doorniksesteenweg 220 8500 Kortrijk Tel. 056/26.02.00 Fax 056/22.81.07 i Inhoudsopgave SYNTRA-WEST... 0 CURSUS OOP...

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord December 17, 2018 Vandaag Naar aanleiding van de opdrachten Zelle hoofdstuk 11 Boolean variabelen: niet checken met == Fout: if clicked == True : gohome () Goed:

Nadere informatie

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld

Java spiekbrief. Commentaar. Definitie van een methode. Types. Variabelendeclaratie. Definitie van een klasse. Namen. Definitie van een veld Java spiekbrief Commentaar Dient enkel voor de menselijke lezer. // tot het einde van de lijn /* Dit type commentaar kan gerust meerdere lijnen beslaan. */ /** En deze speciale vorm wordt gebruikt voor

Nadere informatie

Game of Life in Java

Game of Life in Java Game of Life in Java Auteur: drs. M.S.L.F. Manssen http://www.manssen.eu Game of Life is een spel van een rooster van cellen, waarbij telkens een ronde gebeurt waarbij de nieuwe waardes van cellen gebeurt.

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

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

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

NAAM: Programmeren 1 Examen 21/01/2011

NAAM: Programmeren 1 Examen 21/01/2011 Programmeren 1 21 januari 2011 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet

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

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

Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft

Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit

Nadere informatie

Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/

Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/ Programmeermethoden Pointers Walter Kosters week 10: 13 17 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Introductie Een pointer is in feite gewoon een geheugenadres. Het geheugen kun

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

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 3 feb. 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd

Nadere informatie

Deel 1 : Gesloten Boek

Deel 1 : Gesloten Boek Naam : EXAMEN SOFTWAREONTWIKKELING 1STE PROEF BURG. IR. COMPUTERWETENSCHAPPEN EERSTE EXAMENPERIODE ACADEMIEJAAR 2004-2005 Deel 1 : Gesloten Boek 1. Testen Geef een overzicht van de verschillende testen

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

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

Modulewijzer tirprog02/infprg01, programmeren in Java 2

Modulewijzer tirprog02/infprg01, programmeren in Java 2 Modulewijzer tirprog02/infprg01, programmeren in Java 2 W. Oele 17 november 2009 1 Inhoudsopgave 1 Inleiding 3 2 Studiehouding 3 3 Voorkennis 4 4 Inhoud van deze module 5 5 Leermiddelen 5 6 Theorie en

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

DOMjudge teamhandleiding

DOMjudge teamhandleiding judge DOMjudge teamhandleiding Samenvatting /\ DOM DOM judge Hieronder staat de belangrijkste informatie kort samengevat. Dit is bedoeld om snel aan de slag te kunnen. We raden echter ten zeerste aan dat

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord en Leonie Bosveld December 19, 2016 Vandaag Naar aanleiding van de opdrachten Zelle hoofdstuk 11 Boolean variabelen: niet checken met == Fout: if clicked == True

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 5 april 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code

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

Inhoudsopgave. Hoofdstuk 1.RMI...2

Inhoudsopgave. Hoofdstuk 1.RMI...2 - CORBA Inhoudsopgave Hoofdstuk 1.RMI...2 1.1.Inleiding...2 1.2.De remote...4 1.3.Het remote...5 1.4.De server...6 1.5.De server opstarten...8 1.6.De client applicatie...8 1.7.De stub en skeleton en...10

Nadere informatie

Zelftest Inleiding Programmeren

Zelftest Inleiding Programmeren Zelftest Inleiding Programmeren Document: n0824test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST INLEIDING PROGRAMMEREN Deze

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

Lessen Java: Reeks 3. David Blinder Jan G. Cornelis

Lessen Java: Reeks 3. David Blinder Jan G. Cornelis Lessen Java: Reeks 3 David Blinder Jan G. Cornelis Vraag 0: Gebruik van de Debugger Syntax errors: fouten door verkeerd gebruik van Javacommandos code zal niet compileren. Locatie van de fout is bijna

Nadere informatie

Teamhandleiding DOMjudge (versie 2.2.0muKP) 31 mei 2008

Teamhandleiding DOMjudge (versie 2.2.0muKP) 31 mei 2008 judge Teamhandleiding DOMjudge (versie..0mukp) 31 mei 008 /\ DOM DOM judge Inhoudsopgave 1 Inleiding Samenvatting.1 Inlezen en wegschrijven............................... Insturen van oplossingen...............................3

Nadere informatie

http://www.liacs.nl/home/kosters/java/

http://www.liacs.nl/home/kosters/java/ sheets Programmeren 1 Java college 2, Walter Kosters De sheets zijn gebaseerd op de hoofdstukken 2 tot en met 6 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/

Nadere informatie