Labo Computersystemen : Dining Philosophers. P. Valckenaers

Maat: px
Weergave met pagina beginnen:

Download "Labo Computersystemen : Dining Philosophers. P. Valckenaers"

Transcriptie

1 Labo Computersystemen : Dining Philosophers P. Valckenaers Academiejaar

2 Alderweireldt Alexander 4II ELO ICT 1 Het wereldmodel 1.1 The Dining Philosophers The dining philosopher problem ofwel het dinerende filosofen probleem bestaat uit het synchronisatieprobleem van een aantal hongerige filosofen. Beschouw een aantal filosofen die hun leven doorbrengen met eten en nadenken. Ze zitten rond een tafel met elk een bord, en twee vorken (aan elke zijde één vork). Deze vorken moeten ze delen met hun buren.bij het nadenken is er geen interactie met de andere filosofen. Na enige tijd wordt een filosoof hongerig. Na het eten begint elke filosoof terug te denken. Om te kunnen eten moet een filosoof beide vorken vastnemen. Na de maaltijd moet de filosoof zijn twee vorken terug langs hem neerleggen. herhaal 1: doe private denkactiviteiten tot je honger krijgt; 2: wacht tot de linker vork vrij is en neem die; 3: wacht tot de rechter vork vrij is en neem die; 4: doe kritische eetactiviteiten; 5: leg beide vorken neer; Afbeelding 1 Welke vervelende situatie kan zich in deze situatie voordoen? Stel dat alle filosofen een tijdje denken en opeens tegelijkertijd willen eten. Ze nemen allemaal tegelijkertijd hun linkervork. Dit lukt omdat alle vorken vrij waren. Dan proberen ze allemaal de rechtervork te grijpen. Dit kan natuurlijk niet omdat alle vorken nu bezet zijn. De filosofen zullen omkomen van de honger. Dit fenomeen of probleem wordt gedefinieerd als deadlock. Een oplossing voor dit probleem die ik heb geimplementeerd is: een filosoof mag pas een vork trachten te nemen indien er minder dan 4 andere filosofen proberen twee vorken te nemen. Dit kan praktisch zo georganiseerd worden: bij het dekken van de tafel met vijf borden en vijf vorken worden er ook vier servetten in het midden van de tafel gelegd. Dan gaan de filosofen aan tafel. Voordat een filosoof een vork mag nemen, moet hij eerst een servet nemen en die rond zijn hals binden. Dan neemt hij een linkervork en daarna een rechtervork, eet dan een tijdje, legt beide vorken terug neer en legt ook de servet terug in het midden van de tafel. Indien er geen servet meer vrij is, moet hij wachten tot iemand anders een servet terug neerlegt. De filosofen kunnen we vergelijken met agenten of een stel onafhankelijke processen. De vorken kunnen we vergelijken met resources of een aantal beperkte gemeenschappelijke faciliteiten. Een agent moet dus twee resources kunnen locken voor hij zijn opdracht kan uitvoeren. 2/27

3 1.2 Software beschrijving De zonet uitgelegde situatie heb ik gesimuleerd in java. De software is opgedeeld in enkele classes. Dit is vooral om de ontwikkeling van de code makkelijker en overzichtelijker te maken. De volgende twee afbeeldingen geven een overzicht van de ontwikkelde java classes, samen met pijlen die het onderling gebruik weergeven. Afbeelding 3: Software-versie 1 Afbeelding 2: Software-versie 2 De eerste software versie simuleert de zetelende filosofen die na een zekere tijd in deadlock gaan (verhongeren). Versie twee van de code simuleert the dining philosophers tafel, waar de filosofen niet meer in deadlock gaan. De classe Chopstick.java. Deze classe representeert de chopsticks ofwel vorken op de tafel. Elke filosoof krijgt 2 chopsticks toegewezen, een linker en een rechter, die hij kan opnemen en terug kan neerleggen. In software komt dit overeen met de functie Take() en Drop() van chopstick. De functie Take() is allereerst synchronized zodat crutiale functie niet door twee (filosoof) threads tegelijk kan uitgevoerd worden. Deze functie heeft als return-type boolean, wat wil zeggen dat hij een false aan de oproeper teruggeeft als de chopstick reeds in bezit is door een andere thread. Hij returned true als de oproeper met succes de chopstick in bezit heeft kunnen nemen. Met de functie Drop() wordt de chopstick terug vrij gegeven en beschikbaar gesteld voor andere filosofen (threads). De classe Philosopher.java. Deze classe stelt de filosofen voor die aan de tafel zetelen. Deze classe is een uitbreiding op de classe Thread (net zoals Dinner.java) zodat deze classe als een thread kan uitegvoerd worden. Ofwel zodat deze classe parrallel en onafhankelijk van de andere processen kan lopen. Elke filosoof krijgt bij aanmaak twee chopsticks, een randomgenerator en een datacontroller ter beschikking. Ook krijgt een filosoof een zekere looptijd opgelegd. Als deze looptijd verstreken is, dient de filosoof te stoppen. Elke filosoof houd ook bij aanmaak een eigen ID-nummer bij. Een filosoof kan zich in een aantal toestanden bevinden. De handelingen van de filosoof hangen af van de toestand waarin hij zich bevindt. Een filosoof blijft een vast traject van

4 Alderweireldt Alexander 4II ELO ICT toestanden doorlopen, nl. denken(1), chopsticks nemen(2,3), eten(4). Bij de tweede software versie komt daar nog de toestand, servet nemen(2) bij. De classe Data_controller.java Afbeelding 5: Filosoof Software-versie 1 Afbeelding 4: Filosoof Software-versie 2 De wachttijden van de filosofen aan een bepaalde tafel, worden centraal bijgehouden in deze classe. Deze classe beheert de data van de filosofen van een bepaalde tafel en output deze data op aanvraag in de gewenste vorm in een logbestand. Deze classe is als het ware een observator van de tafel, die de tafel opvolgt en analyseert. De classe Napkins.java. Deze classe wordt in de tweede software versie bijgevoegd om te vermijden dat de filosofen uithongeren (in deadlock gaan). Aan een tafel worden er een bak met een aantal servetten ter beschikking gesteld. Een filosoof mag pas naar zijn chopsticks grijpen als hij in het bezit is van een servet. Deze classe bezit een interne teller. 4/27

5 Telkens een filosoof een seviet wil nemen met de functie get_napkin() wordt nagegaan als er nog servetten beschikbaar zijn (teller>0). Zoniet, wacht de filosoof en wordt hij terug wakker gemaakt als er terug een servet beschikbaar is. Is eer servet beschikbaar, krijgt een filosoof een servet en wordt de interne teller van deze classe met één verlaagd. Als een filosoof een servet neerlegt met de drop_napkin() wordt de interne teller met één verhoogd. Deze classe is een implementatie van het principe 'semaforen'. Beide functies zijn ook hier synchronized om de zelfde reden als bij chopsticks.java. De classe Dinner.java. Deze classe representeerd een tafel waarrond een opgelegd aantal filosofen zetelen, elke voorzien van een linker en een rechter chopstick. We onderscheiden twee delen, de classe aanmaak en de functie met de thread-uitvoer. Bij het aanmaken van een dinnerobject wordt een data_controller, een gevraagd aantal chopsticks, een outputfile en het gevraagde aantal filosofen aangemaakt. In het functie voor de threaduitvoer worden als eerste alle filosofen thread gestart. Na 15 secondje wordt er nagekeken of alle filosofen minstens één maal gegeten hebben. Zoniet, zijn de filosofen al reeds in deadlock (één maaltijd duurt in het ergste geval hoogstens 5 sec) en heeft het geen nut om verder te wachten tot het einde van de looptijd om de resultaten te printen. In dit geval worden meteen de resultaten verwerkt en in een bestand weggeschreven. Als blijkt dat de filosofen reeds gegeten hebben na de eerste 15 seconden wacht de dinner-thread nog eens extra de gegeven loopduur. De eerste 15 seconden dienen ook als een veiligheidsmarge zeker te zijn dat alle filosofen al hun huidige handelingen kunnen afwerken en de tafel te verlaten. Vervolgens worden alle filosofen geforceerd gestopt indien nodig. Indien ze nog niet gestopt waren, bevonden de filosofen zich in een deadlocksituatie. In dat geval wordt de bestandnaam van de logfile ook aangepast door achteraan [deadlock] toe te voegen. Dit is een visueel hulpmiddel om te zien of er al dan niet een tafel(s) in deadlock is gegaan. De classe Main.java. Deze bevat de main functie die het programma beschrijft. Er wordt een randomgenerator aangemaakt en vervolgens wordt er een verkozen aantal tafels aangemaakt met de verkozen parameters en hun thread. Deze parameters zijn, het aantal filosofen er aan een tafel moeten zetelen, de totale looptijd van een tafel (de duur dat de filosofen moeten zetelen aan de tafel). Ook wordt aan elke tafel dezelfde random-generator meegegeven die initieel werd aangemaakt, om zo de pseudo-random gegenereerde code op elke tafel onafhankelijk van elkaar te maken.

6 Alderweireldt Alexander 4II ELO ICT 2 Test-Campagne Bij de eerste software versie, ofwel de deadlock versie heb ik verscheidene parameters ingesteld en laten varieren om zo te zien wat dat met de verhongering van de filosofen deed. Het tweede deel van de test campagne bestaat eruit dat ik de parameters van een eerste software versie die redelijk fel met het dining philosophers probleem te kampen had overneem in de tweede software versie ofwel de deadlockvrije versie. Hier werd er vooral getest op de tijden dat een filosoof moet wachten eer hij kan eten. Ook hier is achteraf nog wat met wat parameters gevarieerd. 2.1 Deadlock versie Een filosoof kan zich in een aantal toestanden bevinden. De handelingen van de filosoof hangen af van de toestand waarin hij zich bevindt. Een filosoof blijft een vast traject van toestanden doorlopen, nl. denken(1), chopsticks nemen(2,3), eten(4). Tussen toestand 2 en 3 kan hij even naar de toestand wachten(0) gaan als hij op een chopstick wacht (zie figuur 4). De tijd dat een filosoof denkt (1) en eet (4) is een random getal tussen 200 en 1200 ms. De wachttijd in de toestand wacht(0) varieerd tussen 100 en 150 ms. Tussen toestand 3 en 4 is er geen wachttijd, de filosoof begint meteen te eten. De tijd dat een filosoof wacht om zijn tweede chopstick op te nemen, zullen we met de tests laten varieren. Het aantal filosofen en de tijdsduur kan ingesteld worden in de file Main.java. In de file Philosopher.java is het mogelijk om de tijden die aangeven hoe lang een filosoof in een bepaalde toestand verblijft, aan te passen Test 1 : Tijd tussen toestand 2 en 3 laten varieren Er werden 15 tafels gestart. Een run van 6 minuten. Aan elke tafel zetelen 5 filosofen. Tijd # deadlocks 100 ms 0* 250 ms ms ms 13 random** 13 * Ik heb ook bij deze parameters een run van 5uur gedaan, uiteindelijk gaat elke tafel in deadlock (tussen de 486 en 494 maaltijden). ** random = getal tussen 200 en 1200 ms Besluit : Hoe groter de tijd tussen 2 en 3, hoe sneller deadlock optreed. 6/27

7 2.1.2 Test 2 : Aantal filosofen laten varieren Er werden 15 tafels gestart. Een run van 6 minuten. Tijd tussen toestand 2 en 3 is 500 ms. # filosofen # deadlocks * 4 * Ik heb niet meer als 7 filosofen genomen omdat anders de pc te zwaar werd belast en dat misschien de test kon beinvloeden. Bij 15 tafels met elk 7 filosofen had de cpu van de pc een gemiddelde belasting van 60%. (bluej gaf 225 lopende threads aan). Tijd tussen toestand 2 en 3 is 750 ms. # filosofen # deadlocks Tijd tussen toestand 2 en 3 is random getal tussen 200 en 1200 ms. # filosofen # deadlocks Besluit : Hoe minder filosofen aanwezig aan een tafel, hoe sneller deadlock optreed. De kans dat alle filosofen tegelijk de linker chopstick vasthebben en bijgevolg een deadlock veroorzaken, wordt kleiner, vermits het aantal filosofen groter is Boxplots Ik heb ook nog twee boxplotten gemaakt bij deze deadlockversie zodat we die later ook nog met de boxplotten van de niet-deadlockversie kunnen vergelijken. De volgende parameters werden gebruikt hiervoor : 15 tafels, 5 filosofen, 500ms tussen toestand 2 en 3, run van 10min. Boxplot 1 = Wachttijden van elke filosoof van alle tafels. (950 maaltijden/filosoof) Boxplot 2 = Wachttijden van alle filosofen over alle tafels.(4750 maaltijden)

8 Alderweireldt Alexander 4II ELO ICT Afbeelding 6: Boxplot 1 Afbeelding 7: Boxplot 2 De absolute minimum waarde dat een filosoof moet wachten is 500 ms. Dit is namelijk de minimum vaste tijd tussen het nemen van de rechterchopstick en na de linkerchopstick De meeste waarden liggen tussen de 2000 en de 2800 ms. De gemiddelde wachttijd ligt net onder de 2500 ms. Het minimum van 500 ms is eerder een uitzondering. Het maximum dat een filosoof moet wachten om te kunnen eten ligt ongeveer op 4500 ms. Dit is eerder zelden. 2.2 Deadlockvrije versie In deze tweede software versie zijn alle toestanden hetzelfde gebleven als in de eerste om zo geen appelen met peren te gaan vergelijken. Er is tussen de toestand denken en de toestand om de linker chopstick te grijpen enkel een toestand bijgekomen om de deadlock te voorkomen, namelijk bemachtig een servet. Dit weerspiegeld het oplossen van het filosofen probleem door middel van semaforen. Uit uitgebreide testen (6uur run) blijkt dat de filosofen blijven eten en niet meer in deadlock gaan. 8/27

9 2.2.1 Test 1 : Uitgebreide analyse van de situatie met deadlockpreventie De volgende parameters werden overgenomen uit versie één : Er worden telkens 15 tafels gestart, aan een tafel zetelen 5 filosofen, de tijd dat een filosoof wacht bij het grijpen van zijn linker chopstick om zijn rechterchopstick te nemen is 500 ms. We doen nu test-runs van 30 minuten om de filosofen zeker genoeg te laten eten om zo een correcte statistische weergave te verkrijgen van de situatie. Hieronder volgen een enkele boxplotten die wat meer inzicht moeten geven in de tijden dat de filosofen moeten wachten om te eten. Ik heb hier twee van de 15 tafels weergegeven, een boxplot van alle tafels samen en een boxplot van alle wachttijden samen. (achteraan bevinden zich de andere 13 tafels) Afbeelding 8: Tafel 1 Afbeelding 10: Alle tafels Afbeelding 9: Tafel 2 Afbeelding 11: Alle wachttijden Zoals in deze boxplotten te zien is, is er een sterke overeenkomst met de karakteristieken van de wachttijden van software versie één en twee. Het toevoegen van de deadlockpreventie heeft niet veel invloed gehad op de wachttijden van de filosofen. Het gemiddelde ligt nogsteeds net onder 2500 ms.

10 Alderweireldt Alexander 4II ELO ICT Test 2 : Variaties op het aantal servetten Zoals in de vorige boxplotten te zien was, was er nauwelijks een verandering van de wachttijden door het toevoegen van het anti-deadlock systeem met de servetten. In deze test heb ik het aantal beschikbare servetten laten varieren en gekeken wat dat met de wachttijden van de filosofen heeft gedaan. Bij figuur 12 werd het aantal beschikbare servetten ingesteld op 2 servetten minder dan het aantal aanwezige filosofen. Bij figuur 13 werd dit aangepast tot het aantal filosofen min 3. Het gaat hier telkens om 15 tafels die elke 15 minuten lopen met elk filosofen. Afbeelding 12: # Servetten = #Filosofen - 2 Afbeelding 13: #Servetten = #filosofen - 3 Waarnemingen : Hier zien we duidelijk een sterke invloed van het aantal servetten dat ter beschikking wordt gesteld aan de tafel. Als we figuur 12 vergelijken met figuur 10 zien we dat het terugbrengen van 1 servet te weinig naar 2 servetten te weinig de wachttijd voor de filosofen drastisch vermindert. De gemiddelde wachttijd wordt met 1000 ms vermindert naar 1500 ms wat neerkomt om een reductie van 40%. Alhoewel de de meeste wachttijden verminderen (zie eerste en derde kwartiel) blijven de maximum wachttijden tot 4500 ms pieken. Als we figuur 13 met figuur 10 vergelijk is er nogaltijd een verbetering van 20% te merken, maar in vergelijking met figuur 12 zien we dat het verder verminder van het aantal servetten aan de tafel een negatief effect heeft op de gemiddelde wachttijd. We zien het gemiddelde terug met 33% stijgen. Ook hebben de maximum wachtentijden hogere uitschieters dan in de vorige 2 gevallen. De meest voorkomende wachttijden zijn wel minder gespreid dan voordien. Verklaring : Bij het ontbreken van 1 servet, is de kans nogaltijd groot dat een filosoof die een servet bemachtigd omringt wordt door filosofen die ook een servet in bezit hebben en dus zo de filosoof blokeren. Bij het ontbreken van 2 servetten verlaagd die kans en is de kans dat de filosoof direct kan starten met eten dus groter (500 ms). De filosofen kunnen vlotter eten en de gemiddelde wachttijden zakken dus. Bij het 10/27

11 weglaten van 3 servetten wordt de tijd weer verhoogd omdat het bemachtigen van een servet meer tijd in beslag neemt Test 3 : Variaties op het aantal zetelende filosofen Bij deze test gaan we onderzoeken welke invloed het aantal zetelende filosofen aan een tafel heeft op de wachttijden van de filosofen. De volgende resultaten zijn steeds gebaseerd testen op 15 tafels met elk een looptijd van 15 minuten. Achtereenvolgens werden 3, 5 en 7 filosofen per tafel getest. Afbeelding 14: 3 filosofen Afbeelding 16: 7 filsofen Afbeelding 15: 5 filosofen

12 Alderweireldt Alexander 4II ELO ICT Waarnemingen : We zien een sterk verband tussen het aantal aanwezige filosofen en de gemiddelde wachttijd die ze ondervinden om te kunnen eten. Hoe minder het aantal zetelende filosofen aan de tafel, hoe lager de wachttijden. We zien niet enkel een stijging in de gemiddelde wachttijden, maar ook een sterke stijging in de maximale wachttijden naar gelang het aantal filosofen stijgt aan tafel. Verklaring : Hoe kleiner het aantal filosofen aan de tafel, hoe hoger de kans dat als een je moet wachten en er een filosoof zijn bestek neerlegd, dat het bestek waar jij op wacte vrijkomt. Hoe hoger het aantal filosofen, hoe kleiner deze kans en hoe langer je dus blijft wachten Test 3 : Variaties in filosofen We gaan nu wat testen doen waarbij we het gedrag van enkele of alle filosofen veranderen. We gaan kijken welke invloed dat heeft op de filosoof/filosofen zelf en op de rest van de tafel. Specifiek is dit gerealiseerd door het verandere van de denktijd van een filosoof. De eettijden zijn hetzelfde gebleven. Ik heb telkens 1, 2 en dan alle filosofen aan een tafel een zwaardere 'weging-factor' meegegeven welke hun denktijd vergrootte. Hierop zijn 2 methodes. Methode 1 : wachttijd = ((weging-1)*1000)+ randomwachttijd Dit geeft bij 1, de normale randomtijd, en bij hogere waardes een vaste extra tijd bij de random. Methode 2 : wachttijd = weging*randomwachttijd Deze methode vergroot het bereik waarover de randomtijd kan strijken. Randomwachttijd, is de randomdenktijd van elke filosoof, namelijk gelegen tussen 200 en 1200 ms Denktijd variatie 1 : Allereerst wordt 1 filosoof met een weging-factor 2 op zijn denktijd beinvloed. Vervolgens is dit toegepast op 2 filosofen. Afbeelding 18: 1 filosoof denk langer dan de rest Afbeelding 17: 2 filosofen denken langer 12/27

13 Vanwege de goede resultaten op de wachttijden van de filosofen, is dit ook eens op alle filosofen toegepast met een wegings-factor 2 en 3. Afbeelding 19: Alle filosofen factor 2 Afbeelding 20: Alle filosofen factor 3 Waarnemingen : Allereerst zien we bij figuur 17 en 18, dat het langer denken van een filosoof een positieve invloed heeft op de wachttijden van die filosoof. Naar de andere filosofen toe ook heel gering. We zien dat de gemiddelde wachttijd bij figuur 17 bijna 2000 ms bedraagt en in figuur 18 gemiddeld 2000 ms gehaalt wordt. Bij het toepassen van deze wegings-factor 2 op alle filosofen zien we dat de karakteristieken van de wachttijden voor alle filosofen verbeteren. De gemiddelde wachttijd wordt nu terug gebracht tot 1500 ms in vergelijking met de 2500 ms van de default settings. Wanneer we de wegings-factor nu verder opschroeven naar 3, zien we dat de gemiddelde wachttijd voor elke filosoof verder zakt tot 750 ms wat zeer laag is. Maar, de uitschieters zijn bij deze configuratie wel extreem groot. Met als meest extreme waarde ms. Dit wel een uitzondering maar zeker niet gewenst. Verklaring : Als een filosoof langer wacht, blijven zijn chopsticks (resources) ook lang beschikbaar voor de andere filosofen aan de tafel. Dit leidt tot een vlottere werking van het eten en wachten op de gewenste chopsticks. Bij het toepassen van wegings-factor>1 op alle filosofen, geeft dit een positieve invloed op de wachttijden om dat de kans dat een buur aan het denken is en dus zijn chopsticks vrij zijn, groter is Denktijd variatie 2 : Bij de tweede variatie van denktijd manipulatie wordt allereerst 1 filosoof met een wegingsfactor 2 beinvloed. Vervolgens worden op alle filosofen een wegingsfactor 2 en 3 toegepast.

14 Alderweireldt Alexander 4II ELO ICT Afbeelding 21: 1 filosoof denkt langer als de rest Afbeelding 22: alle filosofen factor 2 Afbeelding 23: alle filosofen factor 3 Waarnemingen : We zien dat het toevoegen van een wegings-factor 2 een verlaging geeft van de gemiddelde denktijd. Bij een factor 3 daarintegen zien we weer de wachttijden en het gemiddelde toenemen in vergelijking met factor 2. De gemiddelde wachttijd van ongeveer 2000 ms is nog steeds beter dan de default settings. Verklaring : We zien hier hetzelfde fenomeen voorkomen dan bij de vorige denktijd variatie. De effecten van de weging-factor zijn minder heftig als bij de vorige variatie. Dit komt omdat de denktijd nu enkel in spreiding vergroot wordt en niet door een vaste factor toe te voegen. Klein denktijden zijn dus nog steeds morgelijk waardoor sommige filosofen al weer sneller hun linkervork gaan vastnemen en er blokeringen optreden. Met langere wachttijden als gevolg. 14/27

15 3 Deadlock 3.1 Welke methode heb ik gebruik om het geheel deadlock vrij te maken. Om een deadlock situatie te voorkomen heb ik gekozen om maar een beperkt aantal filosofen gelijktijdig te laten een poging te eten uit te voeren. Hierdoor kan nooit de situatie voorkomen dat elke filosoof 1 chopstick vastheeft en zo zijn buur blokeerd. Dus kan ook nooit een deadlock optreden. Er zal altijd 1 filosoof zijn die welk kan eten omdat zijn buur uitgesloten is. Na de maaltijd komen er terug chopsticks vrij en kan weer een volgende filosoof verder met eten. Pracktisch heb ik dit gedaan door het principe van semaforen toe te passen. Iemand moet eerst een semafoor kunnen verlagen voor hij zijn kritische functie mag uitvoeren. In mijn code en gedachtengang aan de tafel zijn dat servetten (napkins). Er zijn maar een aantal servetten aanwezig aan tafel. Weiniger dan het aantal filosofen. Een filosoof mag pas beginnen met bestek vast te nemen als hij een servet heeft kunnen bemachtigen. Na zijn maaltijd legt een filosoof samen met zijn bestek ook de servet terug neer in het midden van de tafel, zodat die weer beschikbaar wordt voor de andere filosofen. 3.2 Welke methodes die het geheel deadlockfree maken, kan je gebruiken. In het kort nog even enkele andere mogelijkheden die toegepast kunnen worden om een deadlock-probleem op te lossen. - Als een filosoof zijn linker chopstick opneemt en hij kan daarna zijn rechter chopstick niet vastnemen, moet hij zijn linker chopstick ook terug neer leggen. Hierna moet hij even een random tijd wachten vooreer hij opnieuw een poging mag probere om zijn bestek vast te krijgen. - Aan elke tafel een opzichter plaatsen. Deze bezit al het bestek en weet ook welke bestek bij welke filosoof hoort. Als een filosoof wil eten, moet hij dat aan de opzichter melden. De opzichter zal dan beslissen om wanneer en aan wie hij het bestek verdeelt. Na het eten keert het bestek ook terug naar de opzichter. - Een systeem maken om deadlock te detecteren. Als je opmerkt dat de tafel in deadlock zit, 1 of meerdere filosofen een wachttijd opleggen. Zo krijgen andere filosofen weer de mogelijkheid om verder te eten. - Bankers algoritme : een filosoof kijkt of zijn 2 noodzakelijker resources vrij zijn. Zoja, zal het bestek vastnemen. Anders wacht hij gewoon en kijkt even later nogeens opnieuw als deze gelegenheid zich ondertussen wel al voordoet.

16 Alderweireldt Alexander 4II ELO ICT 4 Aanvulling Boxplotten 16/27

17

18 Alderweireldt Alexander 4II ELO ICT 18/27

19

20 Alderweireldt Alexander 4II ELO ICT 20/27

21 5 Source code 5.1 Main.java import java.util.*; import java.io.*; public class Main extends Thread public static void main(string args[]) Dinner table; Random random; random = new Random(); System.out.println("Starting Application : \n "); for(int i=0;i<15;i++) // 5 phils, 1800sec = 30min table = new Dinner(5,1800,random); table.start(); trysleep(1000);catch (Exception e) System.out.println(e); e.printstacktrace(); 5.2 Dinner.java import java.awt.*; import java.util.*; import java.io.*; public class Dinner extends Thread static int dinnercount = 0; Chopstick chop[]; Philosopher phil[]; Data_controller dc; // houd alle data bij van elke phil van deze tafel Napkins napkins; FileOutputStream out; // declare a file output object PrintStream ps; // declare a print stream object String filename; int philcount; int runtime; // runtime for the phils in seconds Dinner(int faantal, int rtime, Random random_gen) dinnercount++; philcount = faantal; runtime = rtime; phil = new Philosopher[philcount]; chop = new Chopstick[philcount]; napkins = new Napkins(philcount); if(dinnercount<10) this.filename = "output/run0"+dinnercount+".txt"; else this.filename = "output/run"+dinnercount+".txt"; try // try catch -> file // Create a new file output stream for this specific dinner out = new FileOutputStream(filename);

22 Alderweireldt Alexander 4II ELO ICT // Connect print stream to the output stream ps = new PrintStream(out); dc = new Data_controller(philcount,500,ps); ps.println ("Init table "+dinnercount+" :"); for(int i = 0; i<philcount; i++) chop[i] = new Chopstick(i+1); phil[0]= new Philosopher(chop[philcount-1],chop[0],random_gen,ps,runtime,dc,napkins); for(int i = 1; i<philcount; i++) phil[i] = new Philosopher(chop[i-1],chop[i],random_gen,ps,runtime,dc,napkins); catch (Exception e) System.err.println ("Error writing to file"); // the dinner thread public void run() boolean locked = false; try // try-catch -> sleep for(int i = 0; i<philcount; i++) phil[i].start(); // wacht nog 15 sec extra als zekerheid voor de deadlock sleep(15000); // als er na 15sec al niet 1x gegeten is is hij al direct in deadlock // geen nut om heel de run te wachten op deze tafel. if(phil[0].get_eetcount()!=0) // wacht tot de vooringestelde tijd is afgelopen sleep(runtime*1000); // stop all phils if not stopped yet (deadlock check) for(int i = 0; i<philcount; i++) phil[i].terminate(); // wacht een 3 second om zeker te zijn dat ze gestopt zijn sleep(3000); this.dc.print_matlab_matrix(); this.ps.close(); // check if table went into deadlock for(int i = 0; i<philcount; i++) if(phil[i].deadlock()) // if so, add [deadlock] to filename File oldfile = new File(this.filename); oldfile.renameto(new File(this.filename.substring(0,(this.filename.length()-4)) +"[deadlock].txt")); // end if // end for loop catch (Exception e) System.out.println(e); e.printstacktrace(); // end thread run // end class 22/27

23 5.3 Philosopher.java import java.util.*; import java.io.*; import java.lang.*; public class Philosopher extends Thread static int counter = 1; boolean terminated = false; // to terminate the thread boolean deadlock = false; // set true if thread went into deadlock private int id; // phil id Chopstick left_chopstick; // 2 chopstick elements Chopstick right_chopstick; Napkins napkins; // the napkins at the table Random rand; // shared random generator PrintStream p; // shared printstream to file Data_controller dc; // controller unit that keeps track of the data at the table int toestandswaarde; // case counter int eetcount = 0; // keeps track on amount of meals String waiteside; // helps the waite get back to the previous state long runtime; long begin_time; long time; long time2; // time that the philosopher should eat // remembers the time the thread started // container to get currentms in // create philos (runtime in seconds) Philosopher(Chopstick left, Chopstick right, Random random_gen, PrintStream print, int rtime, Data_controller datac, Napkins npk) this.id = counter++; // his id this.left_chopstick = left; // his 2 chopsticks this.right_chopstick = right; this.rand = random_gen; // shared randomgenerator this.p = print; // printstream to file this.runtime = (rtime*1000); // calc and the runtime in millisec this.begin_time = System.currentTimeMillis(); this.toestandswaarde = 1; this.dc = datac; this.napkins = npk; public int get_id() return this.id; public int get_eetcount() return this.eetcount; public boolean deadlock()return this.deadlock; public void stopthread () // roept phil zelf aan als hij gedaan heeft terminated = true; time = System.currentTimeMillis() - begin_time; System.out.println("Philosopher "+this.id+" stops... ["+time+" ms]"); public void terminate() // roept dinner aan om zeker te zijn dat de philosopher stopt // indien Deadlock : current status uit printen if(terminated) // no need to print current status return; else terminated = true; deadlock = true; System.out.println("Philosopher "+this.id+" terminated from deadlock..");

24 Alderweireldt Alexander 4II ELO ICT this.p.println("philosopher "+this.id+" : \r\n> Deadlock <\r\n"); if(waiteside.equals("l")) this.p.println("wacht op linker Chopstick("+this.left_chopstick.getId()+")..\r\n"); else if (waiteside.equals("r")) this.p.println("heeft linker Chopstick("+this.left_chopstick.getId()+") vast.."); this.p.println("wacht op rechter Chopstick("+this.right_chopstick.getId()+")..\r\n"); // the philos thread public void run() int k; // container for random number try // try -catch voor de sleep while(!terminated) // run till thread is stopped k = rand.nextint(1000)+200; // tijd = min 100ms => tussen 200ms <-> 1200ms switch(this.toestandswaarde) case 0: // de wacht toestand k = rand.nextint(50)+100; // tijd = min 100ms => tussen 100 en 150ms this.sleep(k); if(waiteside.equals("l")) this.toestandswaarde = 3; else if (waiteside.equals("r")) this.toestandswaarde = 4; else // is enkel voor vorige 2 waardes geschreven System.out.println(" >> ERROR at toestand 0 <<"); break; case 1 : // de denk toestand System.out.println("Philosopher "+this.id+" starts thinking...(sleep "+k+"ms)"); this.sleep(k); this.toestandswaarde = 2; // gedaan met denken, nu wachten tot we kunnen eten time = System.currentTimeMillis(); // meet tijd tot eten = wachttijd break; case 2 : // grab napkin napkins.get_napkin(); this.toestandswaarde = 3; break; case 3 : // grab links if(left_chopstick.take(this,"linker")==true) System.out.println("Philosopher "+this.id+" got his left chopstick..."); this.toestandswaarde = 4; this.sleep(500); else this.waiteside = "l"; this.toestandswaarde = 0; 24/27

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

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

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

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

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

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

NSPYRE LEGO MINDSTORMS UITDAGING (JAVA) INLEIDING. DOEL: SIMULATOR:

NSPYRE LEGO MINDSTORMS UITDAGING (JAVA) INLEIDING. DOEL: SIMULATOR: NSPYRE LEGO MINDSTORMS UITDAGING (JAVA) INLEIDING. Door mee te doen aan deze uitdaging kan je Nspyre laten zien wat je kan. Schrijf jij de beste oplossing dan is deze lego mindstorms nxt 2.0 set voor jou.

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

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

Programmeren in Java les 3 4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een

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

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

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

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014!

Inleiding Software Engineering! Unit Testing, Contracten, Debugger! 13 Februari 2014! Inleiding Software Engineering Unit Testing, Contracten, Debugger 13 Februari 2014 Beknopte info over Unit Testing en Contracten kan je vinden op het einde van dit document. Eclipse beschikt over een handige

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

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

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

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

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

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

Gelijktijdigheid: Wederzijdse Uitsluiting & Synchronisatie Concurrency: Mutual Exclusion & Synchonization (5e ed: 5.1-5.2, Appendix A.

Gelijktijdigheid: Wederzijdse Uitsluiting & Synchronisatie Concurrency: Mutual Exclusion & Synchonization (5e ed: 5.1-5.2, Appendix A. Gelijktijdigheid: Wederzijdse Uitsluiting & Synchronisatie Concurrency: Mutual Exclusion & Synchonization (5e ed: 51-52, Appendix A1) Processes zijn meestal niet onafhankelijk Bijvoorbeeld: 2 processen

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

Javascript oefenblad 1

Javascript oefenblad 1 Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de

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

Maak een pivot uit een Generic.List

Maak een pivot uit een Generic.List Maak een pivot uit een Generic.List Introductie in extensions, reflection en code generation Nivo: 400 Introductie In bepaalde gevallen komt het voor dat je een Generic.List van een specifieke class hebt,

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

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

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

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma 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

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

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN voorbeeldexamen NAAM :... OPMERKINGEN VOORAF Je krijgt 3 uur de tijd om de opdrachten voor dit examen uit te voeren. Verder werken aan je oplossing

Nadere informatie

Tentamen Objectgeorienteerd Programmeren

Tentamen Objectgeorienteerd Programmeren Tentamen Objectgeorienteerd Programmeren 5082IMOP6Y maandag 16 november 2015 13:00 15:00 Schrijf je naam en studentnummer op de regel hieronder. Sla deze pagina niet om tot de surveillant vertelt dat het

Nadere informatie

Scripting 2 TUTORIAL EEN APP ONTWIKKELEN VOOR ANDROID MET PROCESSING. ellipse(screenwidth/2, screenheight/2, 140,140); DOOR THIERRY BRANDERHORST

Scripting 2 TUTORIAL EEN APP ONTWIKKELEN VOOR ANDROID MET PROCESSING. ellipse(screenwidth/2, screenheight/2, 140,140); DOOR THIERRY BRANDERHORST Scripting 2 ellipse(screenwidth/2, screenheight/2, 140,140); TUTORIAL EEN APP ONTWIKKELEN VOOR ANDROID MET PROCESSING. DOOR THIERRY BRANDERHORST ANDROID APPLICATIES Tegenwoordig zijn er duizenden applicaties

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

Hoofdstuk 0. Van Python tot Java.

Hoofdstuk 0. Van Python tot Java. Hoofdstuk 0. Van Python tot Java. In dit eerste hoofdstuk maken we de overstap van Python naar Java. We bespreken de verschillen en geven wat achtergrondinformatie. In het volgende hoofdstuk gaan we dieper

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

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

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk. HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een

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

Tree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011

Tree traversal. Bomen zijn overal. Ferd van Odenhoven. 15 november 2011 15 november 2011 Tree traversal Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 15 november 2011 ODE/FHTBM Tree traversal 15 november 2011 1/22 1 ODE/FHTBM Tree

Nadere informatie

Verslag Opdracht 4: Magische Vierkanten

Verslag Opdracht 4: Magische Vierkanten Verslag Opdracht 4: Magische Vierkanten Stefan Schrama, Evert Mouw, Universiteit Leiden 2007-08-14 Inhoudsopgave 1 Inleiding 2 2 Uitleg probleem 2 3 Theorie 2 4 Aanpak 2 5 Implementatie 4 6 Experimenten

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

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk

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

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 unit test is geen integratie test. Niet het hele systeem, maar onderdelen van een systeem worden getest.

Een unit test is geen integratie test. Niet het hele systeem, maar onderdelen van een systeem worden getest. WAT IS EEN UNIT TEST? Een unit test is een test om de functionaliteit van stukken code te controleren. Een goede unit test waarborgt een consistente werking van een klein onderdeel (een unit ) van de broncode.

Nadere informatie

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Syntax- (compile), runtime- en logische fouten Binaire operatoren Inhoud Syntax- (compile), runtime- en logische fouten Binaire operatoren Operaties op numerieke datatypen Evaluatie van expressies, bindingssterkte Assignment operaties en short-cut operatoren Controle

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

Variabelen en statements in ActionScript

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

Nadere informatie

Robocode. Inleiding tot programmeren

Robocode. Inleiding tot programmeren Robocode Inleiding tot programmeren Inhoud Doel cursus Java-controlestructuren Robotje programmeren Doel cursus Inleiding Java Robocode Java Object-gerichte programmeertaal Sun 1991 http://java.sun.com

Nadere informatie

X. Grafische elementen

X. Grafische elementen X. Grafische elementen Om u te helpen bij grafische voorstellingen heeft java een aantal grafische afbeeldingen die u kunt gebruiken. Meestal worden zij in de methode paint(graphics g) geplaatst. Zij moeten

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

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

Handleiding voor installatie en gebruik van

Handleiding voor installatie en gebruik van Handleiding voor installatie en gebruik van Opticon OPN-2001 Data Collector Inhoud pakket: - OPN-2001 - USB Communicatie kabel - Neckstrap Voordat u kunt communiceren met de OPN-2001 dient u de volgende

Nadere informatie

Eindtoets XML: Theorie en toepassingen

Eindtoets XML: Theorie en toepassingen Eindtoets XML: Theorie en toepassingen Deze eindtoets geeft een indruk, niet meer en niet minder, van mogelijke tentamenvragen. De spreiding over verschillende onderwerpen zal nooit bij elk tentamen hetzelfde

Nadere informatie

Verslag. Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers

Verslag. Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers Verslag SE Projectteam: 107 Datum: 16 oktober 2008 Project leden: Lennard Fonteijn Harish Marhe Nicoletta Saba Turgay Saruhan Robin Tummers In dit verslag zullen wij een beschrijving geven, over welke

Nadere informatie

Siemens workpoints en DHCP options

Siemens workpoints en DHCP options Siemens workpoints en DHCP options Dit document beschrijft de configuratie en werking van een Windows 2003 DHCP server in combinatie met Siemens optipoint en Siemens OpenStage toestellen (aangemeld op

Nadere informatie

ASP.NET Test 2009-2010. Jan Van Ryckeghem

ASP.NET Test 2009-2010. Jan Van Ryckeghem ASP.NET Test 2009-2010 Jan Van Ryckeghem Inhoud Exceptionhandling H4... 3 Try Catch slide 25... 3 Error pagina slide 29... 3 Error.aspx... 3 Error.aspx.cs... 4 Web.config... 4 Logbestand aanmaken... 4

Nadere informatie

Download Location: Dit is de lokatie waar de PDF bestanden tijdelijk geplaatst zullen worden. Dit is een plaats op uw eigen harde schijf.

Download Location: Dit is de lokatie waar de PDF bestanden tijdelijk geplaatst zullen worden. Dit is een plaats op uw eigen harde schijf. CONFIGURATIE CONNECTIE Laten we beginnen bij het begin: Dit is het IMAP configuratie venster. Wanneer het programmaa actief is, zal niets n instelbaar zijn. Onder het kopje Connection dient u uw IMAP login

Nadere informatie

Dit kan gebruikt worden in zowel een ASP.NET web applicatie als een desktop applicatie.

Dit kan gebruikt worden in zowel een ASP.NET web applicatie als een desktop applicatie. Introductie Dit artikel laat zien hoe je een Image in een C# applicatie kan opslaan in een database en het kan ophalen uit de database om het te laten zien. Voor de database gebruiken we MS SQL maar voor

Nadere informatie

Katholieke Hogeschool Kempen ASP

Katholieke Hogeschool Kempen ASP Katholieke Hogeschool Kempen Campus Geel Departement Handelswetenschappen en Bedrijfskunde 3de jaar Toegepaste Informatica ASP www.projectchatroom.be Yorkim Parmentier 3TI4 Andy Geluykens 3TI4 Academiejaar

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

Specialisatie RTES - Project FunnyScreens. Installatie en gebruik van JUnit

Specialisatie RTES - Project FunnyScreens. Installatie en gebruik van JUnit Installatie en gebruik van JUnit Auteurs: Niels Hendriks - 89713 Matthijs Langenberg - 89870 Wiebe van Schie - 84313 Siet Toorman - 91623 Job Vermeulen 90589 Semester: 6 DSO: QSO: Dhr. R.J.W.T. Tangelder

Nadere informatie

Dynamiek met VO-Script

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

Nadere informatie

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie Leren Programmeren met Visual Basic 6.0 Les 3+4 Hoofdstuk 4 : De Selectie Visual Basic 6.0 1 Basisstructuren (herhaling) Sequentie (HK2) : Alle opdrachten gewoon na mekaar uitvoeren. Hier worden geen keuzes

Nadere informatie

Coachview.net Eenmalige Imports

Coachview.net Eenmalige Imports Coachview.net Eenmalige Imports Versie: Juli 2011, Revisie 2 Coachview.net: 2.1 Auteur(s): Remy Remery Dé nieuwe manier van samenwerken Inhoudsopgave 1. INLEIDING...3 BELANGRIJKSTE TERMEN... 3 2. IMPORT

Nadere informatie

Dynamische Websites. Week 10

Dynamische Websites. Week 10 Dynamische Websites Week 10 INFO Feedback vraag het in de labo s als je feedback wilt op je code Lessen op 5/12 en 12/12 om 17.15 op 19/12 om 11.00 KLEURENCODE GROEN = zelf kunnen schrijven PAARS = code

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

Stappenplannen MailPlus SOAP API

Stappenplannen MailPlus SOAP API Stappenplannen MailPlus SOAP API Stappenplannen MailPlus SOAP API oktober 2009 Introductie Dit document bevat stappenplannen welke u als technische gebruiker van MailPlus op weg kunnen helpen met de koppeling

Nadere informatie

Real-Time Systems (RTSYST)

Real-Time Systems (RTSYST) Real-Time Systems (RTSYST) Week 2 Process/Thread states ready running Wait for I/O or I/O or completion blocked / sleeping Scheduler = deel van OS dat de toestanden van processen/threads bepaald. OS gebruikt

Nadere informatie

Het relaas van de beginnende programmeur. Het hoe en waarom van de assistent

Het relaas van de beginnende programmeur. Het hoe en waarom van de assistent Het relaas van de beginnende programmeur Het hoe en waarom van de assistent 1. Help, mijn code doet niks... Mogelijke oplossingen: Heb je op run geduwd (groene pijltje)? Zolang je niet op 'run' duwt, kent

Nadere informatie

Concurrency in Java met threads. Java Threads. Voorbeelden concurrency in applicaties. Waarom concurrency in Java?

Concurrency in Java met threads. Java Threads. Voorbeelden concurrency in applicaties. Waarom concurrency in Java? Java Threads Concurrency in Java met threads Wat zijn threads? Hoe werken threads? Hoe werk je met threads in Java? Scheduling Synchronisatie In Java programma s is concurrency (aka parallellisme) mogelijk.

Nadere informatie

File Uploads met standaard ASP.NET

File Uploads met standaard ASP.NET File Uploads met standaard ASP.NET In deze tutorial gaan we een aspx pagina maken (met codebehind), waarmee je een bestand kan uploaden naar de webserver. Noot: de hier beschreven code gaat niet in op

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

Sparse columns in SQL server 2008

Sparse columns in SQL server 2008 Sparse columns in SQL server 2008 Object persistentie eenvoudig gemaakt Bert Dingemans, e-mail : info@dla-os.nl www : http:// 1 Content SPARSE COLUMNS IN SQL SERVER 2008... 1 OBJECT PERSISTENTIE EENVOUDIG

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

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

Handleiding configuratie en gebruik tekenmodule

Handleiding configuratie en gebruik tekenmodule Handleiding configuratie en gebruik tekenmodule B3Partners Inhoudsopgave 1 Inleiding...2 2 Configuratie tekenmodule...3 2.1 Database tabel...4 2.2 WMS Service...5 2.3 Gegevensbron en kaartlaag...6 2.4

Nadere informatie

Chris de Kok 223548 TDI 3. Vak: Software Architectuur Datum: 21-01-2008 Docent: Fons van Kesteren

Chris de Kok 223548 TDI 3. Vak: Software Architectuur Datum: 21-01-2008 Docent: Fons van Kesteren Chris de Kok 223548 TDI 3 Vak: Software Architectuur Datum: 21-01-2008 Docent: Fons van Kesteren Inhoud Inleiding... 3 Black box / White box... 3 XP... 3 SimpleTest... 3 Eclipse plugin... 4 GroupTest...

Nadere informatie

ASRemote WebService. Via deze webservice kunt u:

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

Nadere informatie

ELEKTRONISCHE INVOER VAN GEGEVENS IN DE

ELEKTRONISCHE INVOER VAN GEGEVENS IN DE UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA DECEMBER 2002 ELEKTRONISCHE INVOER VAN GEGEVENS IN DE SCOB-DATABANK EEN ONTWERP NELE DEXTERS EN FREDERIC HANCKE Contents

Nadere informatie

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise

TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise TaskCentre Web Service Connector: Creëren van requests in Synergy Enterprise Inhoudsopgave 1. Voorbereiding... 4 2. Web Service Connector tool configuratie... 5 3. TaskCentre taak voor het aanmaken van

Nadere informatie

Tentamen Inleiding Programmeren in Java

Tentamen Inleiding Programmeren in Java Tentamen Inleiding Programmeren in Java Vakcode: 2lI0L7 Datum: 4 februari 2005 Tijd: 13.30-17.00 uur Algemeen: Dit tentamen bestaat uit 4 opgaven, waarvoor in totaal 100 punten verdiend kunnen worden.

Nadere informatie

[BP-ebMS-H-000] Welke versie van Hermes moet er gebruikt worden?

[BP-ebMS-H-000] Welke versie van Hermes moet er gebruikt worden? [BP-ebMS-H-000] Welke versie van Hermes moet er gebruikt worden? Gebruik altijd de laatste versie omdat er serieuse bug-fixes in kunnen zitten. Check altijd de release notes en openstaande bugs. Er is

Nadere informatie

IDAgeChecker BDX118T11xx Manual V02.00

IDAgeChecker BDX118T11xx Manual V02.00 XLN-t bvba Hoogstraat 52 B 2580 Putte-Beerzel Belgie - Belgium tel +32 (0) 15 24 92 43 fax +32 (0) 15 25 10 58 RPR Mechelen BTW BE 423 212 087 Bank 733-2011497-38 IDAgeChecker BDX118T11xx Manual V02.00

Nadere informatie

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 )

Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub. Belgische Olympiades in de Informatica (duur : maximum 1u15 ) OI 2010 Finale 12 Mei 2010 Gegevens invullen in HOOFDLETTERS en LEESBAAR, aub VOORNAAM :....................................................... NAAM :..............................................................

Nadere informatie

Aquo Domeintabellen Services (Aquo DS) Handleiding Webservice

Aquo Domeintabellen Services (Aquo DS) Handleiding Webservice Aquo Domeintabellen Services (Aquo DS) Handleiding Webservice handleiding voor de programmeur Auteur: Informatiehuis Water Documentbeheer Wijzigingshistorie Datum Versie Auteur Wijziging Aat van den Heuvel

Nadere informatie

3.1! Complexe Interacties!

3.1! Complexe Interacties! 3.1! Complexe Interacties! 3.2! Een optimale werkverdeling! play play play play 3.3! 3. Aanpasbaarheid: TicTacToe! versie 1.1b (displaygame)! koppeling / cohesie! versie 1.2 (Player)! domeinmodel! versie

Nadere informatie

Visual Basic 2005 nieuwe taalelementen André Obelink, MCSD, MVP

Visual Basic 2005 nieuwe taalelementen André Obelink, MCSD, MVP Visual Basic 2005 nieuwe taalelementen André Obelink, MCSD, MVP Auteur, VBcentral.nl Microsoft MVP Visual Basic VP Speakers Bureau INETA Europe - www.europe.ineta.org www.vbcentral.nl - www.obelink.com

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

Kennismaken Greenfoot

Kennismaken Greenfoot HOOFDSTUK 1 Kennismaken met Greenfoot onderwerpen: de interface van Greenfoot, omgaan met objecten, methodes aanroepen, een scenario uitvoeren concepten: object, klasse, methode-aanroep, parameter, retourwaarde

Nadere informatie

Object Oriented Programming

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

Nadere informatie

Inleiding programmeren

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

Nadere informatie

MultiSafepay handleiding

MultiSafepay handleiding MultiSafepay handleiding Compatibiliteit: Pakket Versie Shopmodule Versie Geschikt CS-Cart plugin 1.6.0 CS-Cart 3.0.4 v CS-Cart plugin 1.6.0 CS-Cart 3.0.6 v MultiSafepay Payment plug-in voor CS-Cart http://www.multisafepay.com

Nadere informatie

Testomgevingen beheer

Testomgevingen beheer Testomgevingen beheer Testen brengt het verwachte resultaat en de huidige toestand bij elkaar. Het geeft aanknopingspunten om de planning te maken, het product te verbeteren en om zorgen bij belanghebbenden

Nadere informatie

Innovative Growing Solutions. Datalogger DL-1. software-versie: 1.xx. Uitgifte datum: 01-09-2015 HANDLEIDING WWW.TECHGROW.NL

Innovative Growing Solutions. Datalogger DL-1. software-versie: 1.xx. Uitgifte datum: 01-09-2015 HANDLEIDING WWW.TECHGROW.NL Innovative Growing Solutions Datalogger DL-1 software-versie: 1.xx Uitgifte datum: 01-09-2015 HANDLEIDING WWW.TECHGROW.NL DL-1 Datalogger gebruikershandleiding Bedankt voor het aanschaffen van de TechGrow

Nadere informatie

Correspondentie inzake overnemen of reproductie kunt u richten aan:

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

Nadere informatie

Formulieren en waarden posten naar een view

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

Nadere informatie

ES1 Project 1: Microcontrollers

ES1 Project 1: Microcontrollers ES1 Project 1: Microcontrollers Les 5: Timers/counters & Interrupts Timers/counters Hardware timers/counters worden in microcontrollers gebruikt om onafhankelijk van de CPU te tellen. Hierdoor kunnen andere

Nadere informatie