1 Ontwerppatronen. 1.1 Het Command patroon

Maat: px
Weergave met pagina beginnen:

Download "1 Ontwerppatronen. 1.1 Het Command patroon"

Transcriptie

1 1 Ontwerppatronen Software-ontwikkelaars worden geconfronteerd met ontwerpproblemen: de manier waarop ze hun programma gestructureerd hebben geeft aanleiding tot slechte eigenschappen zoals rigiteit, fragiliteit,.... Om dit op te lossen, gaan de ontwikkelaar zijn ontwerp aanpassen eventueel volgens de richtlijnen gegeven door de ontwerpprincipes in het vorige hoofdstuk zodat het probleem verdwijnt. Dit is natuurlijk geen bandwerk, maar vereist creativiteit en inspiratie van de ontwerper. Ervaren software ingenieurs zullen echter merken dat bepaalde soorten van ontwerpproblemen steeds terugkomen. Eénmaal als je een probleem kan herkennen als een variant van een probleem dat je vroeger al een hebt opgelost, kan je natuurlijk nuttig gebruik maken van de inzichten die je toen verworven hebt. Een stap verder is nog dat je ook kan gaan overleggen met collega s en informeren of zij hetzelfde vaak terugkerende probleem ook al ervaren hebben. Indien ja, kan ook hun oplossing natuurlijk nuttige inspiratie bieden. Als je maar met genoeg collega s overlegt, zal er uiteindelijk wel een soort van standaardoplossing (of eventueel meerdere standaardoplossingen) voor dit probleem uit de bus komen. Dit is nu precies wat een ontwerppatroon is: een standaardoplossing voor een vaak voorkomend ontwerpprobleem. Deze patronen zijn belangrijk omdat ze je de moeite kunnen besparen om telkens opnieuw het warm water weer uit te vinden. Bovendien heeft elk patroon ook een eigen naam, wat ervoor zorgt dat het heel eenvoudige wordt om bepaalde complexe ideeën in een oogwenk te communiceren aan een andere programmeur. Bijvoorbeeld de volgende lijn Java code: SAXParserFactory. newinstance ( ). newsaxparser ( ) ; lijkt misschien ingewikkeld, maar elke ervaren software ingenieur zal onmiddellijk zien dat er hier twee design patronen gebruikt worden en daardoor ook meteen begrijpen hoe het achterliggende ontwerp in elkaar zit. Dit hoofdstuk zal een aantal van de belangrijkste ontwerppatronen op een rijtje proberen te zetten. 1.1 Het Command patroon In het ontwerp in Figuur 1 zie je motor die bestuurd wordt op basis van een sensor. Als de sensor bijvoorbeeld merkt dat de motor te snel aan het draaien is, kan hij hem het commando geven om te vetragen. De klasse Sensor zal in een oneindige lus zijn methode houinhetoog uitvoert, en telkens als deze methode een interessante gebeurtenis detecteert, zal ze handelgebeurtenisaf oproepen, die gaat beslissen of er iets aan de toestand van de motor moet veranderen en zo nodig de juiste methode zal oproepen. De klasse Sensor hangt in dit ontwerp dus af van Motor. Het principe van omgekeerde afhankelijkhei suggereert dat dit mogelijk problematisch zou kunnen zijn. Bovendien kunnen we onze sensor enkel maar gebruiken om motoren aan 1

2 Figuur 1: Een sensor die een motor aandrijft. Figuur 2: Het commando patroon. te drijven. Als dit door de ontwerpen ervaren wordt als een probleem, kan het Command patroon een oplossing bieden. Dit suggereert om de commando s die de sensor moet uitvoeren niet te implementeren als methodes in de klasse Motor, maar om een aparte klasse te voorzien die deze commando s voorstelt. Het resultaat wordt getoond in Figuur 2. We zien hier nu dat de tussenliggende interface Commando de afhankelijkheid van Sensor op Motor laat verdwijnen. Als gevolg hiervan kan de Sensor nu ook probleemloos andere zaken dan Motoren aandrijven. Een tweede voordeel is dat als de methode handelgebeurtenisaf complexe combinaties van operaties bevat (bv. om een motor op volle snelheid te laten stoppen, moet eerst met tussenpozen van 2 seconden vier keer de methode vertraag worden opgeroepen en dan de methode zetuit), dan kunnen deze combinaties óók commando s worden (bv. StopMotorOpSnelheid). Op deze manier kunnen andere apparaten die motoren willen aandrijven dan gebruik maken van dezelfde commando s zodat de herbruikbaarheid van de code erop vooruit gaat. Merk op dat de initializatie van ons programma nu wel wat ingewikkelder is geworden, aangezien we nu objecten moeten aanmaken van de verschillende subklassen van Commando, en ervoor zorgen dat de klasse Sensor een referentie 2

3 naar deze objecten te pakken krijgt. Dergelijke code kan er bijvoorbeeld als volgt uitzien: class C o n t r o l l e r { public void i n i t ( ) { Motor m = new Motor ( ) ; Command j u = new VersnelCommando (m) ; Command how = new VertraagCommando (m) ; Sensor s = new Sensor ( ) ; s. setvertraagcommando (how ) ; s. setversnelcommando ( ju ) ; Het is natuurlijk ook mogelijk om een klasse Gebeurtenis te voorzien en een Sensor dan Gebeurtenissen te laten koppelen aan Commando s, zodat de laatste twee regels vervangen kunnen worden door iets als: s. l i n k (new TeTraagEvent ( ), ju ) ; s. l i n k (new TeSnelEvent ( ), how ) ; Als we eenmaal onze commando s in objecten gegoten hebben, kunnen we nog meer interessante dingen doen. Zo wordt het bijvoorbeeld mogelijk om commando s bij te houden in een lijst. Dit kan van pas komen als we bijvoorbeeld een undo-mechanisme willen implementeren. We geven ieder commando s dan naast een do methode ook een undo methode, en houden een stack bij van de commando s die al zijn uitgevoerd. Als de gebruiker een commando wilt ongedaan maken, halen we het bovenste element van de stack en undoen dit. Een andere mogelijkheid is het toevoegen van een validate methode aan commando s, waarmee zo n commando kan nagaan of het wel mag worden uitgevoerd. Het leuke van een dergelijk ontwerp is dat alle informatie over een bepaald commando dwz. wanneer mag het worden uitgevoerd, hoe moet het worden uitgevoerd, en hoe kunnen we het weer ongedaan maken samen in één object verpakt wordt. Dit betekent dat het mogelijk wordt om eenvoudig nieuwe commando s toe te voegen, zonder aan bestaande code te morrelen, zoals het open-gesloten principe vereist. Figuur 3 toont een laatste voorbeeld. Hier hebben we commando s die kunnen worden uitgevoerd door een grafische user interface. Daarnaast is er echter ook een batch mode voorzien, zodat gebruikers in een tekstbestand een aantal commando s kunnen opsommen, die dan allemaal na elkaar door het systeem zullen worden uitgevoerd. 1.2 Het ActiveObject patroon Dit patroon bouwt voort op het Commando patroon om een soort van goedkoop parallellisme te simuleren. Een ActiveObjectEngine houdt een lijst met commando s bij. Op basis van één of andere scheduling algoritme kiest het één van de commando s uit deze wachtrij en voert dit uit. Als resultaat hiervan kunnen 3

4 Figuur 3: Batchverwerking met het commando patroon. mogelijk weer nieuwe commando s in de wachtrij komen. De engine herhaalt dit dan zolang er nog commando s zijn. Een zeer eenvoudige implementatie van een ActiveObjectEngine klasse kan er bijvoorbeeld zo uitzien: import java. u t i l. LinkedList ; import java. u t i l. I t e r a t o r ; public class ActiveObjectEngine { LinkedList commands = new LinkedList ( ) ; public void addcommand(command c ) { commands. add ( c ) ; public void run ( ) throws Exception { while (! commands. isempty ( ) ) { Command c = (Command) commands. g e t F i r s t ( ) ; commands. removefirst ( ) ; c. execute ( ) ; 4

5 Figuur 4: Een actief object. De volgende klasse SleepCommand bootst de functionaliteit van de Thread.sleep(int millis) methode na: telkens als de engine een SleepCommand uitvoert, controleert dit of het al lang genoeg in de wachtrij van de engine gezeten heeft, en zoniet gaat het weer achteraan aanschuiven. public c l a s s SleepCommand implements Command { private Command wakeupcommand = null ; private ActiveObjectEngine engine = null ; private long sleeptime = 0 ; private long starttime = 0 ; private boolean s t a r t e d = f a l s e ; public SleepCommand ( long m i l l i s e c o n d s, ActiveObjectEngine e, Command wakeupcommand) { sleeptime = m i l l i s e c o n d s ; engine = e ; t h i s. wakeupcommand = wakeupcommand ; public void execute ( ) throws Exception { long currenttime = System. c u r r e n t T i m e M i l l i s ( ) ; i f (! s t a r t e d ) { s t a r t e d = true ; starttime = currenttime ; 5

6 engine. addcommand( this ) ; else i f ( ( currenttime starttime ) < sleeptime ) { engine. addcommand( this ) ; else { engine. addcommand(wakeupcommand ) ; Deze klasse kunnen we nu bijvoorbeeld gebruiken om twee Strings in pseudoparallel te laten afprinten: public c l a s s DelayedTyper implements Command { private long delay ; private char char ; private static ActiveObjectEngine engine = new ActiveObjectEngine ( ) ; private static boolean stop = f a l s e ; public static void main ( S t r i n g args [ ] ) throws Exception { engine. addcommand(new DelayedTyper (100, 1 ) ) ; engine. addcommand(new DelayedTyper (300, 3 ) ) ; engine. addcommand(new DelayedTyper (500, 5 ) ) ; engine. addcommand(new DelayedTyper (700, 7 ) ) ; Command stopcommand = new Command( ) { public void execute ( ) { stop=true ; ; engine. addcommand(new SleepCommand (20000, engine, stopcommand ) ) ; engine. run ( ) ; public DelayedTyper ( long delay, char c ) { delay = delay ; char = c ; public void execute ( ) throws Exception { System. out. p r i n t ( char ) ; i f (! stop ) delayandrepeat ( ) ; private void delayandrepeat ( ) throws CloneNotSupportedException { engine. addcommand(new SleepCommand ( delay, engine, this ) ) ; 6

7 1.3 De Template en Strategy patronen Zoals reeds in het hoofdstuk over ontwerpprincipes besproken, is het geen goed idee om een algoritme dat personeelsleden sorteert volgens leeftijd op onderstaande manier te implementeren. import java. u t i l. ; public class P e r s o n e e l S o r t e e r d e r { public List <Werknemer> l i j s t ; public P e r s o n e e l S o r t e e r d e r ( List <Werknemer> l ) { l i j s t = l ; public void s o r t e e r ( ) { boolean g e s o r t e e r d = f a l s e ; while (! g e s o r t e e r d ) { g e s o r t e e r d = true ; for ( int i = 0 ; i < l i j s t. s i z e ( ) 1 ; i ++) { i f ( l i j s t. get ( i ). g e t L e e f t i j d ( ) > l i j s t. get ( i +1). g e t L e e f t i j d ( ) ) { v e r w i s s e l ( i, i +1); g e s o r t e e r d = f a l s e ; private void v e r w i s s e l ( int i, int j ) { Werknemer tmp = l i j s t. get ( i ) ; l i j s t. s e t ( i, l i j s t. get ( j ) ) ; l i j s t. s e t ( j, tmp ) ; Er is hier immers een te grote afhankelijkheid van het sorteeralgoritme op de specifieke details van wat er gesorteerd moet worden. Het Template patroon stelt voor om dit op te lossen door middel van een abstracte klasse en overerving, zoals getoond in Figuur 5, waarbij de methode vergelijk abstract is. Deze oplossing heeft natuurlijk als nadeel dat elke klasse ten hoogste één superklasse kan hebben, zodat bijvoorbeeld de methode die gebruikt wordt om personeelsleden te vergelijken niet herbruikt kan worden door andere sorteeralgoritmes. 7

8 Figuur 5: Het Template patroon. Figuur 6: Het Strategy patroon. Een andere oplossing voor hetzelfde probleem wordt geboden door het Strategy patroon, dat voorstelt om een interface te gebruiken ipv. een abstracte klasse. Dit leidt tot het ontwerp in Figuur 6. Een mogelijk nadeel hiervan ten opzichte van de Template oplossing is dat nu de klasse Werknemer moet weten dat zijn objecten gesorteerd gaan worden, aangezien ze de interface Sorteerbaar moet implementeren. In de Template oplossing zou de klasse WerknemerSorteerder een link naar de klasse Werknemer bevatten, zodat deze laatste niets hoeft te weten van het bestaan van sorteeralgoritmes. Als we hetzelfde effect willen bekomen met een interface, kunnen we kiezen voor het ontwerp dat getoond wordt in Figuure 7. Hier doen we met andere woorden iets als dit volgende: private void sorteerwerknemers ( Werknemer [ ] w l i j s t ) { S o r t e e r b a a r [ ] s l i j s t = new S o r t e e r b a a r [ w l i j s t. length ] ; for ( int i = 0 ; i < w l i j s t. length ; i ++) s l i j s t [ i ] = maaksorteerbaar ( w l i j s t [ i ] ) ; (new S o r t e e r d e r ( s l i j s t ) ). s o r t e e r ( ) ; private S o r t e e r b a a r maaksorteerbaar ( f i n a l Werknemer werk ) { return new S o r t e e r b a a r ( ) { public boolean v e r g e l i j k ( Object o ) { Werknemer w = ( Werknemer ) o ; 8

9 Figuur 7: Een complexere variant van het Strategy patroon. Figuur 8: Het Facade patroon. ; return (w. g e t L e e f t i j d ( ) < werk. g e t L e e f t i j d ( ) ) ; 1.4 Het Facade patroon Veronderstel dat je een programma schrijft dat gebruik maar van één of andere bibliotheek, bijvoorbeeld om de toegang tot een databank te verzorgen. Des te meer klassen van je eigen programma deze bibliotheek rechtstreeks aanspreken, des te moeilijker wordt het om deze later te vervangen door een andere. Dit patroon stelt daarom voor om alle toegang tot zo n externe bibliotheek te laten verlopen via één enkele klasse (de facade ). Figuur 8 toont hoe een dergelijk ontwerp. Indien de externe bibliotheek nu ooit moet worden ingeruild voor een andere, dient enkele de facade klasse herschreven te worden. 1.5 Mediator In het algemeen verzorgt een Facade de communicatie van een component van een systeem met een een andere. De Facade doet dit op een erg zichtbare manier: 9

10 telkens als de eerste component met de tweede wil spreken, roept hij niet die tweede component rechtstreeks op, maar wel de Facade. Het is dus belangrijk dat elke programmeur van elke klasse op de hoogte is van het bestaan van de Facade. Een Mediator zal ook zorgen voor communicatie tussen twee componenten, maar doet dit achter de schermen. Met andere woorden, niemand hoeft eigenlijk op de hoogte te zijn van het bestaan va de Mediator: noch de componenten tussen wie gecommuniceerd wordt, noch andere klassen die deze componenten gebruiken. We kunnen dit patroon het best illustreren met een voorbeeld. De onderstaande Mediator zorgt achter de schermen! voor communicatie tussen een tekstveldje en een mogelijke lijst van waarden die in dit tekstveldje getypt zouden kunnen worden. De Mediator zal ervoor zorgen dat in de geselecteerde waarde altijd overeenkomt met de hetgeen dat de gebruiker reeds heeft getypt in het tekstveldje. package u t i l i t y ; import javax. swing. ; import javax. swing. event. ; / QuickEntryMediator. This c l a s s t a k e s a JTextField and a J L i s t. I t assumes t h a t the user w i l l type c h a r a c t e r s i n t o the JTextField t h a t are p r e f i x e s o f e n t r i e s in the J L i s t. I t a u t o m a t i c a l l y s e l e c t s the f i r s t item in t he J L i s t t h a t matches the c urrent p r e f i x in the JTextField. I f the JTextField i s n u l l, or the p r e f i x does not match any element in the JList, then the J L i s t s e l e c t i o n i s c l e a r e d. There are no methods to c a l l f o r t h i s o b j e c t. You simply c r e a t e i t, and f o r g e t i t. ( But don t l e t i t be garbage c o l l e c t e d... ) Example : JTextField t = new JTextField ( ) ; J L i s t l = new J L i s t ( ) ; QuickEntryMediator qem = new QuickEntryMediator ( t, l ) ; // t h a t s a l l f o l k Robert C. Martin, Robert S. 30 Jun, (SLAC) / 10

11 public c l a s s QuickEntryMediator { public QuickEntryMediator ( JTextField t, J L i s t l ) { i t s T e x t F i e l d = t ; i t s L i s t = l ; i t s T e x t F i e l d. getdocument ( ). adddocumentlistener ( new DocumentListener ( ) { public void changedupdate ( DocumentEvent e ) { textfieldchanged ( ) ; public void insertupdate ( DocumentEvent e ) { textfieldchanged ( ) ; public void removeupdate ( DocumentEvent e ) { textfieldchanged ( ) ; // new DocumentListener ) ; // adddocumentlistener // QuickEntryMediator ( ) private void textfieldchanged ( ) { S t r i n g p r e f i x = i t s T e x t F i e l d. gettext ( ) ; i f ( p r e f i x. l e n g t h ( ) == 0) { i t s L i s t. c l e a r S e l e c t i o n ( ) ; return ; ListModel m = i t s L i s t. getmodel ( ) ; boolean found = f a l s e ; for ( int i = 0 ; found == f a l s e && i < m. g e t S i z e ( ) ; i++) { Object o = m. getelementat ( i ) ; S t r i n g s = o. t o S t r i n g ( ) ; i f ( s. startswith ( p r e f i x ) ) { i t s L i s t. s e t S e l e c t e d V a l u e ( o, true ) ; found = true ; i f (! found ) { i t s L i s t. c l e a r S e l e c t i o n ( ) ; // textfieldchanged 11

12 private JTextField i t s T e x t F i e l d ; private J L i s t i t s L i s t ; // c l a s s QuickEntryMediator 1.6 De Singleton en Monostate patronen Normaalgezien worden er van een Java klasse een aantal verschillende objecten aangemaakt. Het kan echter ook voorkomen dat een bepaalde klasse bedoeld is om maar één keer geïnstantieerd te worden. Bijvoorbeeld, een MVC applicatie heeft typisch maar één Controller object. Het kan bovendien zelfs zo zijn dat er ernstige bugs zouden optreden, moest iemand toch meerdere objecten van een dergelijke klasse aanmaken. In dergelijke omstandigheden kan het interessant zijn om de klasse zo te implementeren dat het gewoon niet mogelijk is om meerder objecten ervan aan te maken. Onderstaande code toont een eenvoudige implementatie van een dergelijke singleton klasse: public class S i n g l e t o n { private S i n g l e t o n ( ) { private static S i n g l e t o n i n s t a n c e ; public static S i n g l e t o n g e t I n s t a n c e ( ) { i f ( i n s t a n c e == null ) i n s t a n c e = new S i n g l e t o n ( ) ; return i n s t a n c e ; Gezien de private constructor, is de enige manier om aan een object van deze klasse te geraken de methode getinstance(), die ervoor zal zorgen dat er ten hoogste één object wordt aangemaakt. Deze aanpak heeft een aantal voordelen: Je kan op deze manier van elke klasse een singleton maken; Als je een bestaande klasse hebt, kan je hiervan een subklasse maken die een singleton is; Het unieke object wordt pas aangemaakt zodra dit de eerste keer opvraagt. Er zijn echter ook nadelen: Als je een subklasse maakt van een klasse die een singleton is, is deze niet automatisch zelf ook weer een singleton; Deze methode is niet transparant: iedereen die deze klasse gebruikt, moet weten dat ze een singleton is en dat dus getinstance() gebruikt moet worden ipv. een constructor; 12

13 Een detail: elke oproep van getinstance gaat sowieso een if-test doen, ook al heeft eigenlijk alleen de eerste oproep deze nodig. Een andere mogelijkheid om het gewenste effect te bekomen is om ipv. Singleton het Monostate patroon te gebruiken. Dit patroon bestaat erin om alle attributen van de klasse statisch (static) te maken, maar niet de methodes. De klasse is dan geen écht singleton, in de zin dat er meerdere objecten van de klasse kunnen zijn, maar al die objecten zijn volledig identiek aan elkaar en gedragen zich dus alsof hetzelfde zijn en er dus in feite maar één is. Eigenschappen van deze methode: + Andere klassen hoeven niet te weten dat deze klasse een Monostate klasse is; + Een subklasse van een Monostate klasse is zelf automatisch ook weer een Monostate; Als je al een klasse hebt, kan je hiervan geen subklasse maken die een Monostate is; Zelfs als er geen enkel object van een Monostate klasse wordt aangemaakt, zal er toch geheugenruimte voorzien worden voor de gedeelde statische variabelen. 1.7 Het Null object patroon Een veel voorkomende conventie is dat een methode die dient om gegevens op te zoeken, de waarde null zal teruggeven als de gezochte gegevens niet gevonden werden. In de methode die de gegevens opvraagt, zal dit dan aanleiding geven tot code als deze: Werknemer w = getwerknemer ( naam ) ; i f (w!= null && w. isbetaaldag ( vandaag ) ) w. b e t a a l ( ) ; of eventueel zoiets: Werknemer w = getwerknemer ( naam ) ; try { i f (w. isbetaaldag ( vandaag ) ) w. b e t a a l ( ) ; catch ( NullPointerException n ) { //... Vermoedelijk zal zo elke methode die getwerknemer() gebruikt een dergelijk stukje code bevatten. Dit betekent dat het feit dat deze ene methode soms null teruggeeft, ervoor zorgt dat tientalle methodes een extra if of try-catch 13

14 Figuur 9: Het Null object patroon. nodig hebben. Dit lijkt niet zo ideaal, maar de vraag is natuurlijk of wie hier iets aan kunnen doen. Het Null object patroon suggereert de oplossing die getoond word in Figuur 9. Als we deze oplossing volgen, moeten we er natuurlijk voor zorgen dat het null object de methodes van Werknemer zodanig implementeert dat er niets gebeurt. Bijvoorbeeld: c l a s s NullWerknemer extends Werknemer { public boolean isbetaaldag ( ) { return f a l s e ; public void b e t a a l ( ) { Statements als if (getwerknemer(n)!= null) zijn dan niet meer nodig. Let wel: de informatie over wat er moet gebeuren indien een Werknemer niet gevonden wordt, verdwijnt daarmee uit de oproepende functie en komt terecht in dit nieuwe NullWerknemer object. Dit is natuurlijk niet altijd mogelijk! Indien nodig, kan een functie natuurlijk wel nog altijd testen of de werknemer gevonden geweest is door deze test: i f (! ( getwerknemer ( n ) instanceof NullWerknemer ) ) {... Het heeft natuurlijk weinig zin om meer dan één NullWerknemer object te hebben, dus deze klasse is een voor de hand liggende kandidaat voor het Singleton patroon: c l a s s NullWerknemer extends Werknemer { private NullWerknemer ( ) { private static NullWerknemer i n s t a n c e ; public static NullWerknemer g e t I n s t a n c e ( ) { i f ( i n s t a n c e == nul ) i n s t a n c e = new S i n g l e t o n ( ) ; return i n s t a n c e ; public boolean isbetaaldag ( ) { 14

15 return f a l s e ; public void b e t a a l ( ) { Een bijkomend voordeel is dat bovenstaande instanceof nu vervangen kan worden door: i f ( getwerknemer ( n )!= NullWerknemer. g e t I n s t a n c e ( ) ) ) {... De canonieke vorm van it patroon gaat zelfs nog een stap verder en schermt de klasse NullWerknemer helemaal af van de buitenwereld er is inderdaad geen enkele reden waarom andere klassen zouden moeten weten wat, bijvoorbeeld, nu precies de naam is van de klassie die een niet-gevonden Werknemer voorstelt. public class Werknemer { public static f i n a l Werknemer NULL = new Werknemer ( ) { public boolean isbetaaldag ( ) { return f a l s e ; public void b e t a a l ( ) { ;... De test om te zien of een werknemer gevonden is, wordt dan: i f ( getwerknemer ( n )!= NullWerknemer.NULL) {... Ander nuttig gebruik van dit patroon vinden we bijvoorbeeld in implementaties van lijsten, waar de lege lijst een Null object kan zijn. 15

Design patterns.

Design patterns. Design patterns joost.vennekens@mechelen.lessius.eu Wat zijn dat? Programma zit niet goed in elkaar Zondigt tegen ontwerpprincipes En dat zorgt voor probleem Ontwerppatroon: standaard oplossing voor een

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

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

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

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

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

Design principes.

Design principes. Design principes joost.vennekens@kuleuven.be Motivatie Software projecten mislukken vaker Vaker dan bouwkunde Vaker dan EM Vaker dan Oorzaak? Omgaan met verandering Vereisten Technologie Externe systemen

Nadere informatie

Design principes.

Design principes. Design principes joost.vennekens@kuleuven.be Doelstelling Code die werkt doet wat klant wil betrouwbaar is gemakkelijk te veranderen is En dit ook blijft doen Software rot Rottende software geeft geurtjes

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

Objectgericht programmeren 1.

Objectgericht programmeren 1. Objectgericht programmeren 1 joost.vennekens@kuleuven.be http://www.cs.kuleuven.be/~joost/dn Objectgericht ontwerpen 35% Objectgericht ontwerpen 65% OP1 Informatiesystemen 50% Databanken 50% OP1 Evaluatie

Nadere informatie

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B; Beschouw bijvoorbeeld de twee onderstaande klassen, waarvan de attributen en eigenschappen geannoteerd zijn met bijkomende XML-annotaties: using System ; using System. Xml ; using System. Xml. S e r i

Nadere informatie

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49

Stacks and queues. Introductie 45. Leerkern 45. Terugkoppeling 49. Uitwerking van de opgaven 49 Stacks and queues Introductie 45 Leerkern 45 6.1 Stacks 45 6.2 Queues 47 6.3 Double-ended queues 48 Terugkoppeling 49 Uitwerking van de opgaven 49 Bijlage: Diagrammen belangrijkste interfaces en klassen

Nadere informatie

Dergelijke functionaliteit kunnen we zelf ook aan eigen code toevoegen.

Dergelijke functionaliteit kunnen we zelf ook aan eigen code toevoegen. Indexers in C#.Net In deze tutorial ga ik het hebben over indexers. Bij het gebruik van bijvoorbeeld een ArrayList object, kan je de gegevens uit deze collectie opvragen als ware het een array. // ArrayList

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 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

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

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

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

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

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

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

Programmeren 1 20 januari 2012 Prof. T. Schrijvers

Programmeren 1 20 januari 2012 Prof. T. Schrijvers Programmeren 1 20 januari 2012 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

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

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

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

Nadere informatie

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

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

public Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak);

public Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak); Vaknaam: Programmeren I (Java) - Tentamen Module: 2 Datum/Tijd: 17 mrt 2015 / 18.30 20:30 Richting: ICT Code: IC011 Docent: E. Lieuw Boeken en aantekeningen NIET toegestaan. Kladpapier is wel toegestaan.

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

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

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

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

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

Programmeren 1 23 januari 2013 Prof. T. Schrijvers Programmeren 1 23 januari 2013 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

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

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

Design patterns Startbijeenkomst

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

Nadere informatie

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

Vakgroep CW KAHO Sint-Lieven

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

Nadere informatie

Dynamisch Programmeren. Het Rugzakprobleem

Dynamisch Programmeren. Het Rugzakprobleem INLEIDING Dynamisch Programmeren 1 Dynamisch Programmeren Section Page Inleiding................................................. 1 1 Oplossing................................................ 2 2 Subprobleem.............................................

Nadere informatie

NAAM: Programmeren 1 Examen 31/08/2011

NAAM: Programmeren 1 Examen 31/08/2011 Programmeren augustus 0 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 zelf

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

Project network. Gebaseerd op paragrafen , uit het boek. We simuleren een sociaal netwerk

Project network. Gebaseerd op paragrafen , uit het boek. We simuleren een sociaal netwerk Project network Gebaseerd op paragrafen 10.1-10.7, 11.1-11.6 uit het boek. We simuleren een sociaal netwerk Er zijn twee soorten berichten: tekstberichten en fotoberichten,... voorgesteld door de klassen

Nadere informatie

Object Oriented Programming

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

Nadere informatie

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

return an ; } private I L i s t l i j s t ;

return an ; } private I L i s t l i j s t ; In bovenstaande code werd de binding t e k s t. DataBindings. Add(new Binding ( Text, l i j s t, ) ) ; gebruikt om de eigenschap Text van het object tekst (dwz. tekst.text) te binden aan het object lijst.

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

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

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

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

Programmeren I. 26 augustus Algemene Richtlijnen. Richtlijnen Programmeren 1

Programmeren I. 26 augustus Algemene Richtlijnen. Richtlijnen Programmeren 1 Algemene Richtlijnen Programmeren I 26 augustus 2015 Schrijf je naam bovenaan elk antwoordblad en kladblad. Schrijf niet met potlood of in het rood op je antwoordbladen. Gebruik voor elke vraag een afzonderlijk

Nadere informatie

Een inleiding in de Unified Modeling Language 67

Een inleiding in de Unified Modeling Language 67 Een inleiding in de Unified Modeling Language 67 1.4.5. Toepassing 5: Klasse Kaart. De opdracht bestaat erin algemene klassen te maken zodanig dat het mogelijk wordt om het even welk kaartspel te maken.

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

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

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

Nadere informatie

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

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

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

Nadere informatie

Dynamische webapplicaties in Java

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

Nadere informatie

BEGINNER JAVA Inhoudsopgave

BEGINNER JAVA Inhoudsopgave Inhoudsopgave 6 Configuratie Hallo wereld! Praten met de gebruiker Munt opgooien Voorwaarden Lussen......6 Configuratie Met deze Sushi kaarten ga je een simpel spel maken met één van de meest populaire

Nadere informatie

Objectgericht programmeren 1.

Objectgericht programmeren 1. Objectgericht programmeren 1 joost.vennekens@kuleuven.be http://www.cs.kuleuven.be/~joost/dn Objectgericht ontwerpen 35% Objectgericht ontwerpen 65% OP1 Informatiesystemen 50% Databanken 50% OP1 Evaluatie

Nadere informatie

4 ASP.NET MVC. 4.1 Controllers

4 ASP.NET MVC. 4.1 Controllers 4 ASP.NET MVC ASP.NET is het.net raamwerk voor het bouwen van webapplicaties. De MVC variant hiervan is speciaal ontworpen voor het bouwen van dergelijke applicaties volgens het Model-View-Controller paradigma.

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

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

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

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

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

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur

Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur Uitwerkingen Tweede deeltentamen Imperatief programmeren Vrijdag 15 oktober 2010, 11.00-13.00 uur 1. (2 punten per deelvraag) Deze opgave bestaat uit een aantal tekstvragen. Houd het antwoord kort: een

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

Unit testen van EJB's. Koert Zeilstra - iprofs

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

Nadere informatie

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 7 november 2014, uur

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 7 november 2014, uur Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 7 november 2014, 8.30-10.30 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Omschrijf bij ieder onderdeel van de methode de betekenis ervan. Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing.

Omschrijf bij ieder onderdeel van de methode de betekenis ervan. Java kent twee groepen van klassen die een GUI kunnen maken: awt en swing. irkel (met Jpanel) ij de onderstaande opdracht behoort het bestand Panels: JPanels_1.java (map Panel) in de map irkel. pplicaties in Java hebben altijd een publieke klasse waarin een methode main voorkomt.

Nadere informatie

Wat is een grafische gebruikersinterface (GUI)?

Wat is een grafische gebruikersinterface (GUI)? Wat is een grafische gebruikersinterface (GUI)? GUI is een Engelse afkorting voor Graphical User Interface, oftewel grafische gebruikersinterface. Het is de term voor het bedieningspaneel van een computerprogramma.

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

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

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

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

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

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

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

Nadere informatie

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

Lessen Java: Reeks pag. 1

Lessen Java: Reeks pag. 1 Lessen Java: Reeks 2 1-3-2016 pag. 1 Primitieve types type grootte waardes byte 8 bits 128, 127 short 16 bits 32768, 32767 int 32 bits 2 31, 2 31 1 long 64 bits 2 63, 2 63 1 type grootte waardes float

Nadere informatie

Overzicht Code Run time-structuur De Robot Bots Het ontwerp van een Bot. De Robot. Robotspeelmiddag. Sjoerd Dost, Rick Sen.

Overzicht Code Run time-structuur De Robot Bots Het ontwerp van een Bot. De Robot. Robotspeelmiddag. Sjoerd Dost, Rick Sen. Robotspeelmiddag Sjoerd Dost, Rick Sen 20 december 2011 Inhoud Overzicht Code 1 Overzicht Code Codestructuur 2 3 Geschiedenis 4 Bot-interface Echobot Snorbot 5 Minimaal Optimaal Aan de slag! Wat hebben

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

Inhoud. Eindtoets. Introductie 2. Opgaven 3. Terugkoppeling 12

Inhoud. Eindtoets. Introductie 2. Opgaven 3. Terugkoppeling 12 Inhoud Introductie 2 Opgaven 3 Terugkoppeling 12 1 Objectgeoriënteerd programmeren in Java 1 I N T R O D U C T I E Deze eindtoets is bedoeld als voorbereiding op het tentamen van de cursus Objectgeoriënteerd

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

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

is eigenlijk overbodig!

is eigenlijk overbodig! Array Declaratie Creatie Opvragen Wijzigen Lengte is eigenlijk overbodig! array: oject dat een rij waarden bevat, met speciale notaties Invoegen Achtervoegen String [ ] a; a = new String[10]; a[5] a[5]

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

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

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

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN Onderdeel van SmartProducts INHOUD COLLEGE 3 Scope van variabelen {3.9} Class ontwerpen en maken,

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

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

Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, uur

Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, uur Naam: Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, 11.00-13.00 uur Studentnummer: Het tentamen bestaat uit 3 opgaven. Opgaven 1 levert 20 punten op, opgave 2 levert 10 punten op, en opgave

Nadere informatie

[13] Rondjes draaien (loops)

[13] Rondjes draaien (loops) [13] Rondjes draaien (loops) Met de if else uit de leerfiche [11] hebben we leren werken met één van de belangrijkste programmeerstructuren in Python. Bijna even belangrijk zijn de verschillende mogelijkheden

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

Deeltentamen Grammatica s en ontleden 22 december 2005

Deeltentamen Grammatica s en ontleden 22 december 2005 Tentamen Grammatica s en ontleden 22 december 2005 1 Deeltentamen Grammatica s en ontleden 22 december 2005 Let op: opgave 1 t/m 4 tellen voor (slechts) 5 punten mee, opgave 5 voor maar liefst 50 punten,

Nadere informatie

Session Beans.

Session Beans. Session Beans joost.vennekens@kuleuven.be Prequel: annotaties Nieuw Java feature Gestructureerde manier om extra info toe te voegen aan code (ipv. commentaar) @Author( name = "Joost Vennekens", date =

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

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

Nadere informatie

INFITT01 - Internettechnologie WEEK 8

INFITT01 - Internettechnologie WEEK 8 INFITT01 - Internettechnologie WEEK 8 Programma Databases (JDBC, JNDI, ORM, JPA) MVC & Spring/Struts EJB Databases Veel web applicaties moeten informatie over langere tijd op kunnen slaan. Een voor de

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

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