0.1 Eenvoudige klassen

Maat: px
Weergave met pagina beginnen:

Download "0.1 Eenvoudige klassen"

Transcriptie

1 0.1 Eenvoudige klassen Het opdelen van software is in de geschiedenis vaak de motivatie geweest voor de evolutie van programmeertalen. Een eerste stap werd gezet met talen zoals Algol en Fortran, die toelaten om monolithische code gestructureerd op te delen in verschillende routines. In de programmeertaal Ada werden packages ingevoerd als structureringstechniek. Het wordt nu mogelijk om gerelateerde routines en datastructuren samen te nemen in één verpakking. Modula en CLU zijn talen die hierop verder bouwen. Deze talen worden objectgebaseerd genoemd. In objectgerichte talen zoals Java, Smalltalk, C++ en Eiffel, wordt code opgedeeld in klassen. Een klasse beschrijft de methodes, die op ieder van haar objecten kan toegepast worden. In dit hoofdstuk worden een aantal elementaire aspecten in de definitie van een klasse overlopen. Als voorbeeld wordt een specificatie en een implementatie van een klasse van bankrekeningen uitgewerkt in Java. In het voorbeeld beperken we ons initieel tot één enkele karakteristiek: de balans van een bankrekening. In de volgende delen krijgen bankrekeningen bijkomende karakteristieken, waarmee andere aspecten in de ontwikkeling van klassen kunnen geïllustreerd worden. Zo zal in het tweede deel van deze tekst de klasse van bankrekeningen uitgebreid worden met een titularis, met een bankkaart, met volmachthouders en met spaarrekeningen. De klassen die in dit hoofdstuk aan bod komen, zijn eenvoudig in twee opzichten: 1. In geen enkele methode komt een complex algoritme aan bod om het gewenste effect te realiseren. Het ontwikkelen van complexe algoritmes is een onderwerp dat buiten dit boek valt. Bepaalde aspecten ervan worden besproken bij het ontwikkelen van iteratieve algoritmes in het tweede deel. 2. In de interne voorstelling van de objecten komen geen complexe gegevensstructuren aan bod. Een partiële studie van meer complexe gegevensstructuren zoals rijen en vectoren, volgt eveneens later in het boek. De opbouw van de klasse van bankrekeningen verloopt in een aantal stappen, die typisch zijn in de ontwikkeling van eender welke klasse. 1. We introduceren een aantal methodes om de balans van een bankrekening te initialiseren, te manipuleren en te inspecteren. In dit hoofdstuk zullen deze bewerkingen

2 enkel informeel gespecificeerd worden. Deze stap wordt uitvoerig besproken in hoofdstuk 0.1.1, Specificatie. 2. We kiezen een geschikte representatie voor de gegevens die in een object moeten bijgehouden worden, in casu de balans van een bankrekening. Verder voorzien we elke methode die in de eerste stap geïntroduceerd werd van een implementatie. Deze stap wordt behandeld in hoofdstukken 0.1.3, Representatie en 0.1.4, Implementatie van methodes. 3. In een laatste stap zal ingegaan worden op een systematische aanpak voor het uittesten van een klasse. Diverse strategieën zullen daarbij in de loop van het boek van nabij bekeken worden. Het systematisch testen van code is nhet onderwerp van hoofdstuk 0.1.5, Verificatie. Zodra de specificatie van een klasse voltooid is, kan ze gebruikt worden in de definitie van andere klassen. Daarom zullen we meteen na de specificatie van de klasse van bankrekeningen tonen hoe methodes kunnen toegepast worden op objecten van een klasse. Het gebruik van een klasse op basis van haar specificatie wordt besproken in hoofdstuk 0.1.2, Het toepassen van methodes Specificatie De specificatie van een klasse richt zich tot potentiële gebruikers ervan, terwijl de eigenlijke code zich eerder richt op de machine zelf. Mensen kunnen slecht omgaan met grote hoeveelheden gedetailleerde informatie, en het is net dat wat een computer nodig heeft om te weten wat hij moet doen. Specificaties van klassen zullen niet alle details laten zien, maar enkel datgene wat een gebruiker van de klasse moet weten om ermee te kunnen werken. Een goede specificatie zal zo beperkt mogelijk in omvang zijn, terwijl ze toch volledig moet zijn. Dit spanningsveld is één van de grootste uitdagingen bij het ontwerpen van software. De specificatie van een klasse omvat typisch de beschrijving van een aantal methodes die kunnen toegepast worden op objecten van de klasse. Vaak maakt men een onderscheid tussen diverse soorten methodes. In de context van objectgerichte programmeertalen is het zinvol een onderscheid te maken tussen constructoren, mutatoren, inspectoren en terminatoren, hoewel een dergelijke verdeling niet expliciet ondersteund wordt in de meeste objectgerichte programmeertalen. Terminatoren worden pas besproken in hoofdstuk XXXX op pagina X en XXXX op pagina X. Naast methodes die toegepast kunnen worden op objecten van de klasse, kunnen ook klassenmethodes ingevoerd worden.

3 Klassenmethodes worden eerder toegepast op de klasse zelf, dan op individuele objecten ervan. Java biedt slechts een beperkte ondersteuning op het vlak van de specificatie van klassen. Zo beperkt de hoofding van een klasse zich grotendeels tot het invoeren van een geschikte naam. In de hoofding van iedere methode wordt eveneens een geschikte naam ingevoerd. Daarenboven worden in de hoofding van iedere methode de types van de argumenten en van het resultaat omschreven. De hoofding van een methode wordt ook vaak haar signatuur genoemd. Java biedt geen instrumenten om de semantiek van een methode te omschrijven. De taal biedt met andere woorden geen concepten om het nominale effect van een methode te omschrijven, noch om aan te geven onder welke omstandigheden dit nominaal effect gegarandeerd wordt. Bij gebrek aan beter worden deze aspecten genoteerd in commentaar, die de vertaler negeert. Eiffel is een objectgerichte programmeertaal die meer ondersteuning biedt op het vlak van de specificatie van klassen. Zo biedt de taal expliciete concepten om precondities, postcondities en klasseninvarianten neer te schrijven. De omschrijving van de semantiek van een methode zal in dit hoofdstuk beperkt blijven tot informele beschrijvingen. In hoofdstuk Error! Reference source not found. zal een meer systematische aanpak worden voorgesteld, waarin het informele karakter hoe dan ook behouden blijft. Oplossingen voor de verificatie van de specificatieaspecten die niet door de taal ondersteund worden, worden besproken in Error! Reference source not found. en Error! Reference source not found Syntaxis van specificatie, commentaar en javadoc Op de hoofdingen van klassen en methodes na, biedt Java zelf geen ondersteuning voor specificatie. De taal Java richt zich in hoofdzaak naar de computer, en niet naar de menselijke gebruiker. Vermits Java weinig of geen concepten biedt op het vlak van de specificatie, zullen specificaties in commentaar geschreven worden. In Java-code wordt alles dat omsloten is door /* genegeerd door de computer. Wat je daar tussen schrijft heeft dus een menselijk publiek. Een tweede syntaxis voor commentaar is // : alles wat // volgt tot het einde van de lijn, is commentaar. Elke programmeertaal gaat anders om met specificatie. Sommige programmeertalen leiden tot een volledige scheiding tussen implementatie en specificatie. Andere talen splitsen het geheel op via andere criteria, die min of meer gelijklopen met de scheiding tussen implementatie en specificatie, en nog andere talen ondersteunen specificatie rechtstreeks met taalconcepten.

4 In Java worden aspecten van specificatie en implementatie geïntegreerd in één bestand. Dit vereenvoudigt de taak van de ontwikkelaar. Het is immers veel makkelijker dingen te veranderen als ze bij elkaar staan. Wanneer ze los van elkaar staan, groeien specificatie en implementatie vaak uit elkaar. Dit mondt onherroepelijk uit in een situatie waarin ze niet meer gesynchroniseerd zijn, en dus onbruikbaar. Dat specificatie en implementatie bij elkaar staan is een voordeel voor de ontwikkelaar, maar een nadeel voor de gebruiker van de code. Die moet nu immers de tekst die voor hem bedoeld is, zeven uit het volledige bestand. Een goede programmeeromgeving zal een werktuig ter beschikking stellen om uit de volledige beschrijving van een klasse het specificatiegedeelte af te zonderen. Als je met Java werkt, kan je javadoc hiervoor gebruiken. Dit is een programma dat commentaar die tussen staat, uit Javacode isoleert en omzet in een HTML-bestand. Met behulp van deze technieken kunnen we in een Java-omgeving verschil maken tussen implementatiecommentaar (omsloten door /* of beginnend met //) en documentatiecommentaar (omsloten door ). De specificatie van een klasse zal geschreven worden in documentatiecommentaar. javadoc javadoc is zo geconcipieerd dat je documentatiecommentaar schrijft bij elementen van de taal. De documentatiecommentaar wordt geschreven vlak voor het element dat hij documenteert. Je kan documentatiecommentaar schrijven voor een klasse, een methode en een variabele (zie paragraaf , , , en ). In het gegenereerde HTML-bestand zie je dan de signatuur van het besproken element, en daaronder de commentaar die je voor dat element geschreven hebt. Ook worden nog een boel indexen en hyperlinks gegenereerd. De documentatiecommentaar wordt geplaatst tussen. Verder laat men elke lijn binnen het commentaarblok beginnen met *. De gestandaardiseerde structuur voor documentatiecommentaar wordt gepresenteerd in Voorbeeld 1. * Dit is een blok commentaar die zal geïnterpreteerd worden door * javadoc. Zoals je ziet begint elke lijn met een *. Dat teken * heeft enkel een betere leesbaarheid in het broncodebestand tot * doel, en wordt door javadoc genegeerd. * Je kan structuur aanbrengen in je documentatiecommentaar door * labels te gebruiken: * het param label wordt gebruikt om een parameter van * een methode te documenteren * Voorbeeld 1: structuur van documentatiecommentaar

5 De sterretjes aan het begin van een lijn worden door javadoc genegeerd, en zijn ook niet strikt noodzakelijk. De bedoeling van het formaat is om de commentaar ook in het codebestand zo leesbaar en herkenbaar mogelijk te maken. De documentatiecommentaar die je schrijft kan nog verder gestructureerd worden. Daartoe kan je lijnen in je commentaar beginnen met een label, dat begint met het (zie Voorbeeld wordt bijvoorbeeld gebruikt om een parameter van een methode te documenteren. javadoc herkent deze labels, en geeft ze een speciale formattering in het gegenereerde HTML-bestand. In hoofdstuk Error! Reference source not found. zal blijken dat we in dit boek een strikte structuur aanbrengen voor specificaties, en spijtig genoeg wordt die niet voldoende ondersteund door javadoc. Er bestaan alternatieven voor javadoc, maar geen enkel hulpmiddel dat wij kennen voldoet. In afwachting gebruiken we in dit boek extra labels die niet door javadoc ondersteund worden De definitie van een klasse De definitie van een klasse omvat een hoofding gevolgd door een lichaam. De hoofding van een klasse in Java begint met het sleutelwoord class, gevolgd door de naam van de klasse. Het lichaam van een klasse wordt omsloten door {. Het lichaam van een klasse bevat onder andere alle methodes die kunnen toegepast worden op objecten van de klasse, inclusief de constructoren. Vóór de hoofding van de klasse zal typisch documentatiecommentaar geplaatst worden die algemene informatie geeft omtrent de klasse in zijn geheel. Dit wordt geïllustreerd in Voorbeeld 2 hieronder voor de klasse van bankrekeningen. * A class for dealing with bank accounts, involving the available * amount of money as their only characteristic. * This characteristic is called the balance of an account. public class Account { º Voorbeeld 2: de hoofding van een klasse van bankrekeningen In Java zijn namen in het algemeen, en dus ook klassennamen, case sensitive. Dit betekent dat het onderscheid tussen kleine en grote letters betekenisvol is. Iedere identificator in Java is een sequentie van hoofdletters, kleine letters, cijfers, onderlijningstekens en dollartekens, die niet begint met een cijfer 1. 1 In principe kan je in Java broncode de volledige Unicode ( karakterset

6 Om de leesbaarheid van een programma te verhogen is het gebruikelijk een consistente stijl te hanteren voor het benoemen van klassen. In de meeste Java-documenten wordt de zogenaamde titelstijl gebruikt voor klassennamen: ieder woord in de naam van een klasse begint met een hoofdletter; opeenvolgende woorden worden aan mekaar geschreven. Zo zal een klasse voor tennisspelers bijvoorbeeld de naam TennisPlayer krijgen in Java. Andere stijlen zullen dan gebruikt worden om andere elementen uit Java-programma's, zoals variabelen en methodes, te benoemen. Zo kunnen bij het lezen van een programma de ingrediënten ervan onmiddellijk herkend worden aan de manier waarop ze benoemd worden. Naast symbolische constanten, die volledig in hoofdletters worden geschreven, zullen klassennamen de enige identificatoren zijn die met een hoofdletter beginnen. Het sleutelwoord public voor de klasse wordt behandeld in hoofdstuk Error! Reference source not found.. Voorlopig kan je het beschouwen als verplicht Instantiatiemethodes: mutatoren en inspectoren Instantiatiemethodes zijn methodes die toepasbaar zijn op bestaande objecten van de klasse, ook instantiaties genoemd. Hun specificatie en implementatie gebeurt op het niveau van de klasse waartoe de betrokken objecten behoren. Binnen instantiatiemethodes onderscheiden we twee hoofdsoorten: mutatoren en inspectoren. Een mutator zal in principe de toestand van het betrokken object veranderen. Indien nodig, kan een mutator ook de toestand van andere objecten veranderen waarmee het betrokken object op één of andere manier gerelateerd is, of die als bijkomende argumenten worden meegegeven. Zo zal een mutator om geld over te schrijven van een rekening naar een geassocieerde spaarrekening, niet alleen de balans van de rekening veranderen, maar ook die van de geassocieerde spaarrekening. Deze laatste zal op één of andere manier gerelateerd zijn tot de betrokken rekening. Relaties tussen objecten worden behandeld in het tweede deel van deze tekst. Een mutator om geld over te schrijven van een rekening naar een andere rekening zal op analoge wijze de balans van beide rekeningen veranderen. In dit geval, zal één van beide rekeningen als bijkomend argument worden meegegeven in de toepassing van de mutator. In uitzonderlijke gevallen zal een mutator de toestand van het betrokken object onveranderd laten. In dergelijke gevallen stuurt het betrokken object de toestandsverandering van andere objecten. Voorbeelden van dergelijke mutatoren volgen in het derde deel van de tekst omtrent overerving. gebruiken, en dus karakters als ç, é en ñ in identificatoren gebruiken. In praktijk beperk je je echter best tot ASCII symbolen, omdat de meeste ontwikkelingsomgevingen (nog) geen Unicode aankunnen.

7 Een mutator zal typisch geen resultaat teruggeven, en vertoont daarom sterke gelijkenissen met een procedure uit imperatieve talen zoals Pascal. Een inspector zal informatie geven omtrent de toestand van het betrokken object. Daarenboven kan het teruggegeven resultaat verder bepaald worden door andere objecten, die gerelateerd zijn met het betrokken object, of die als bijkomende argumenten worden meegegeven. Zo zal een inspector die de afstand berekent tussen twee punten in een vlak de toestand van beide punten inspecteren. De inspector wordt toegepast op één van beide punten, en het andere punt wordt meegegeven als bijkomend argument. Een inspector zal de toestand van alle objecten ongewijzigd laten, en heeft om die reden erg veel gemeen met een functie uit programmeertalen zoals Pascal. Java biedt geen expliciete ondersteuning voor het onderscheiden van mutatoren en inspectoren. De classificatie mutator inspector is dan ook niet hard. De taal laat bijvoorbeeld toe om methodes te schrijven die zowel de toestand van betrokken objecten verandert als een resultaat teruggeeft. Op zeer speciale uitzonderingen na, raden we het combineren van mutatie en inspectie echter ten stelligste af. Het blijkt dat klassen met zulke methodes veel moeilijker te begrijpen zijn. Anderzijds bestaat er nog veel meer nomenclatuur die methodes opdeelt in soorten en ondersoorten. Hierop gaan we in dit boek echter niet verder in, op een occasionele vermelding na waar zulk een methode toevallig aan bod komt. De definitie van een methode in Java omvat enerzijds een hoofding, en anderzijds een lichaam. De hoofding wordt vaak de signatuur van de methode genoemd. De hoofding van iedere mutator of inspector omvat, naast de naam, een specificatie van een lijst van bijkomende argumenten en een specificatie van het resultaat. De signatuur zal verder aangevuld worden met een documentatiecommentaar, waarin de betekenis van de methode wordt toegelicht. Zoals voor klassen, wordt het lichaam van een methode wordt omsloten door {. Het lichaam van een methode bevat de instructies die moeten uitgevoerd worden telkens de methode wordt toegepast op een object. Voorbeeld 3 illustreert de definitie van mutatoren en inspectoren voor de klasse van bankrekeningen. Dit voorbeeld wordt hieronder verder toegelicht, samen met een aantal bijkomende aspecten omtrent de definitie van mutatoren en inspectoren. De betekenis van het sleutelwoord public vóór elke methodedefinitie wordt besproken in paragraaf Error! Reference source not found., Error! Reference source not found., Error! Reference source not found.. public class Account { * Deposit <amount> to this account.

8 public void deposit(long amount) * Withdraw <amount> from this account. public void withdraw(long amount) * Transfer <amount> from this account to <destination>. public void transferto(long amount, Account destination) * Return the balance of this account. public long getbalance() Voorbeeld 3: definitie van mutatoren en inspectoren voor de klasse van bankrekeningen De naam van een instantiatiemethode De naam van een mutator of een inspector is een identificator, zoals een klassennaam (zie pagina 5). Zoals voor klassen, zal ook voor het benoemen van methodes een consistente stijl gebruikt worden. Meer in het bijzonder zullen de woorden in de identificator voor een mutator of voor een inspector aan mekaar geschreven worden, waarbij het eerste woord begint met een kleine letter, en volgende woorden beginnen met een hoofdletter. Zo wordt in transferto het eerste woord transfer volledig in kleine letters geschreven, terwijl het tweede woord To begint met een hoofdletter. Het is niet de gewoonte om woorden in een identificator te scheiden met een onderlijningsteken (_), zoals vroeger gebeurde in talen die geen onderscheid maken tussen grote en kleine letters. In ieder geval moet de naam van een mutator of van een inspector verschillen van de naam van de klasse waartoe de instantiatiemethode behoort. Namen van mutatoren en inspectoren binnen dezelfde klasse moeten niet noodzakelijk onderling verschillen. Java ondersteunt het overladen (overloading) van identificatoren. Binnen een bepaalde context kan een zelfde identificator gebruikt worden als naam voor verschillende methodes, op voorwaarde dat hun signaturen onderling verschillen. Zo is het perfect mogelijk een tweede mutator transferto in te voeren in de klasse van bankrekeningen, op voorwaarde dat de signatuur verschilt van de mutator uit Voorbeeld 3. Dit kan bijvoorbeeld als de bestemming van het over te hevelen bedrag niet een andere bankrekening is, maar een bankkluis of een spaarrekening. Concreet worden de signaturen van twee methodes als verschillend beschouwd indien ze verschillen in het aantal formele

9 argumenten, of indien er minstens één overeenkomstig argument bestaat, waarvoor het type verschillend is. Er bestaat een afspraak over de naamgeving van eenvoudige mutatoren en inspectoren die we aanraden, maar die niet door de taal wordt verplicht. Eenvoudige inspectoren, die zich beperken tot het opvragen van een eigenschap, hebben als naam geteigenschap, bijvoorbeeld getbalance. Een uitzondering zijn inspectoren die een booleaans resultaat geven: die krijgen de naam iseigenschap of haseigenschap, bijvoorbeeld isadult of haschildren voor een persoon. Voor eenvoudige mutatoren die simpelweg een waarde toekennen aan een eigenschap wordt seteigenschap gebruikt, bijvoorbeeld setwidth voor een rechthoek in een tekenprogramma. Deze naamafspraak wordt ook toegepast voor booleaanse eigenschappen (bijvoorbeeld setpermitted(true)). Mutatoren die meer doen dan een waarde aan een eigenschap toekennen krijgen een niet-gestandaardiseerde, toepasselijke naam (bijvoorbeeld transferto). Deze naamgevingregels zijn afkomstig van JavaBeans, de componenttechnologie die Java complementeert. Ze worden echter ook buiten die context meer en meer toegepast Specificatie van het resultaat van een instantiatiemethode Het type van het resultaat van een mutator of van een inspector wordt geplaatst vóór de naam van de betrokken methode. Hier zal het onderscheid tussen beide soorten methodes duidelijk worden. Een mutator veroorzaakt enkel een toestandsverandering in de betrokken objecten, zonder een expliciet resultaat terug te geven. Voor een methode in Java die geen resultaat teruggeeft wordt void gebruikt als type voor het resultaat. De methodes withdraw, deposit en transferto in Voorbeeld 3 zijn mutatoren. Een inspector geeft informatie terug omtrent de toestand van de betrokken objecten. Deze informatie kan een waarde zijn van één van de ingebouwde types in Java of een object van een klasse. De methode getbalance uit Voorbeeld 3 is een inspector, die als resultaat de balans van de betrokken rekening zal teruggeven als een waarde van het primitieve type long. Een primitief type definieert een verzameling primitieve waarden, samen met een aantal bewerkingen om die waarden te manipuleren. Primitieve types worden in hoofdstuk meer in detail bestudeerd. Voor het ogenblik volstaat het te weten dat het type long gehele getallen definieert met bewerkingen zoals optelling, aftrekking en vermenigvuldiging.

10 Het is sterk aan te raden de scheiding tussen mutatoren en inspectoren strikt aan te houden. Een klasse bevat met andere woorden best geen methode die tegelijkertijd de toestand van het betrokken object of van andere objecten verandert, en informatie omtrent die nieuwe toestand teruggeeft Het impliciete argument voor een instantiatiemethode Iedere instantiatiemethode zal een impliciet argument hebben van de klasse waartoe de methode behoort. Zo hebben in Voorbeeld 3 de mutatoren withdraw, deposit en transferto en de inspector getbalance allen een impliciet argument dat overeenstemt met de bankrekening waarop de methode wordt toegepast. Het is het spilobject in de toepassing van de methode. In de documentatiecommentaar van een methode zal het impliciete argument omschreven worden als this ClassName. Zo wordt in de documentatie van de mutator withdraw uit Voorbeeld 3 aangegeven dat het gegeven bedrag zal afgehaald worden van deze bankrekening. Hiermee wordt de bankrekening bedoeld waarop de mutator wordt toegepast. Het bestaan van een impliciet argument is uniek voor objectgerichte talen 2. Dit concept heeft als gevolg dat de plaats van methodes binnen een geheel van klassen niet volledig vrij is. Een mutator dient gedefinieerd te worden in de klasse van het object dat hij verandert. Indien een mutator consequent de toestand van het impliciete argument ongewijzigd zou laten, is er wellicht een ander object waarop de mutator op een meer zinvolle manier kan toegepast worden. Om analoge redenen zal een inspector minstens de toestand van het impliciete argument gebruiken in het bepalen van de informatie die zal teruggeven worden. Voor primitieve methodes zoals withdraw, deposit en getbalance is deze regel voldoende om te bepalen in welke klasse ze moeten gedefinieerd worden, omdat er geen andere objecten in betrokken zijn. Voor meer complexe methodes, waarin verscheidene objecten betrokken zijn, blijft er een subjectieve marge voor de keuze van de klasse waar de methode zal worden geïntroduceerd. Beschouw als voorbeeld een methode die weergeeft dat een bepaalde wagen wordt aangekocht door een bepaalde persoon. Deze methode kan worden ondergebracht in de klasse van personen, met een persoon als spilobject en met een wagen als bijkomend argument, maar ze kan ook worden gedefinieerd in de klasse van de wagens, met een wagen als spilobject en met een persoon als bijkomend argument. Het introduceren van beide mutatoren is eveneens een oplossing. Of dit aangewezen is of niet is een bron van discussie. Enerzijds zal een gebruiker makkelijker een methode vinden die hij nodig heeft. Anderzijds moeten de ontwikkelaars ervoor zorgen dat, wanneer de software 2 Het concept van impliciet argument komt enkel voor in objectgerichte talen, maar er bestaan ook objectgerichte talen die het concept niet ondersteunen.

11 evolueert, de twee methodes consistent blijven, en wordt de gebruiker geconfronteerd met een keuze, wat per definitie tijd en moeite kost. Merk op dat de mutator transferto uit Voorbeeld 3 een speciaal geval is waarin twee objecten van dezelfde klasse betrokken zijn. Er is dan ook geen twijfel dat deze methode geïntroduceerd moet worden in de klasse van de bankrekeningen. De keuze welke van de twee objecten de rol van het direct betrokken object inneemt, is arbitrair. Naast een methode om geld over te schrijven naar een andere rekening, had ook een methode transferfrom kunnen gedefinieerd worden, waarmee geld getransfereerd wordt naar de rekening die als impliciet argument fungeert Specificatie van expliciete argumenten voor een instantiatiemethode Naast het direct betrokken object, zullen in het algemene geval andere objecten betrokken worden in de toepassing van een methode, en zal daarenboven bijkomende informatie worden meegegeven in de vorm van primitieve waarden. In de context van bijkomende argumenten spreken we van formele argumenten en actuele argumenten. Een formeel argument is de abstracte voorstelling van het argument in de signatuur van de methode en in de code die de methode implementeert. Het is een speciaal soort variabele. Een actueel argument is een uitdrukking, die geschreven wordt bij toepassing van een methode. Een actueel argument beschrijft de waarde die, tijdens de uitvoering, bij de gegeven toepassing van de methode aan het formele argument zal toegekend worden. Zoals zal blijken in hoofdstuk zijn er twee manieren om actuele waarden door te geven: volgens het ene mechanisme zal een kopie van de actuele waarde worden doorgegeven (waardesemantiek of kopiesemantiek), volgens het andere mechanisme zal een referentie naar de actuele waarde worden doorgegeven (referentiesemantiek). In Java wordt voor waarden van primitieve types steeds een kopie doorgegeven. Voor objecten van klassen daarentegen wordt steeds een referentie doorgegeven. In Java worden bijkomende argumenten gespecificeerd in een argumentenlijst die volgt op de naam van de methode. Binnen de argumentenlijst, die omsloten wordt door ronde haakjes, worden opeenvolgende specificaties van formele argumenten gescheiden door komma's. De specificatie van ieder formeel argument omvat een naam voor het argument waaronder het binnen de methode gekend zal zijn, en het type ervan. De naam van een formeel argument is een identificator. Binnen deze tekst zal dezelfde conventie gehanteerd worden voor het benoemen van formele argumenten en lokale variabelen als die voor het benoemen van mutatoren en inspectoren. Opeenvolgende

12 woorden in de naam van een formeel argument of van een lokale variabele zullen aan mekaar geschreven worden; alle woorden, behalve het eerste woord, zullen beginnen met een hoofdletter. In de documentatiecommentaar van een methode zullen namen van expliciete argumenten omgeven worden door < >. Voor de specificatie van het type van een formeel argument gelden dezelfde regels als voor de specificatie van het type van het resultaat van een inspector. Een formeel argument kan gebonden worden met een actuele waarde van primitieve types die Java aanbiedt, of het kan gebonden worden met een actueel object van een klasse. In het laatste geval zal de naam van de klasse vermeld worden als type. Voor de mutatoren withdraw en deposit uit Voorbeeld 3 is enkel het bedrag nodig als bijkomend argument. Conform met het type van het resultaat voor het opvragen van de balans, worden hiervoor grote gehele getallen (long) gebruikt. Merk op dat het expliciet argument in de documentatiecommentaar bij deze methodes genoteerd wordt als <amount>. Het feit dat bedragen doorgegeven worden in de vorm van grote gehele getallen hoeft geenszins te betekenen dat intern in de objecten van de klasse, de balans ook in die vorm wordt bijgehouden. Het is perfect mogelijk om bijvoorbeeld intern te werken met getallen in vlottende kommavoorstelling. Voor de mutator transferto zijn twee bijkomende argumenten nodig: het over te hevelen bedrag als een groot geheel getal, en de doelrekening als een (ander) object van de klasse van bankrekeningen. Merk op dat bij de specificatie van het type van het tweede argument, de naam van de klasse gebruikt wordt waartoe het object moet behoren. Voor de inspector getbalance, tenslotte, is geen bijkomende informatie nodig. De argumentenlijst zal daarom leeg zijn. Merk op dat de lege argumentenlijst () wel nodig is. Zonder de lege argumentenlijst wordt de beschrijving niet als een geldige hoofding voor een methode geïnterpreteerd Constructoren Naast methodes om bestaande objecten van een klasse te muteren en te inspecteren, is er uiteraard ook de nood om nieuwe objecten aan te maken. Hiervoor biedt een klasse een reeks methodes aan, die constructoren genoemd worden. De naam constructor is misleidend, omdat deze methodes zich niet echt bezig houden met het aanmaken van nieuwe objecten. De rol van een constructor beperkt zich tot de initialisatie van een nieuw object. De eigenlijke constructie van een nieuw object gebeurt met een speciale operator (new), die in hoofdstuk uitvoerig aan bod komt.

13 Constructoren onderscheiden zich van gewone methodes (mutatoren en inspectoren) door het feit dat ze allen benoemd worden met de naam van de klasse waartoe ze behoren. Verder geeft een constructor, zoals een mutator, geen resultaat terug. In tegenstelling tot mutatoren waar void gebruikt wordt om het ontbreken van een resultaat kenbaar te maken, wordt voor constructoren per definitie aangenomen dat de methode geen resultaat zal teruggeven. De hoofding van een constructor zal bijgevolg enkel bestaan uit de naam van de klasse en uit een lijst van bijkomende argumenten. Zoals bij inspectoren en mutatoren kan deze lijst eventueel leeg zijn. Zoals mutatoren en inspectoren hebben constructoren ook een impliciet argument dat overeenkomt met een object van de klasse. Voor constructoren is dit direct betrokken object, het object dat door de constructor moet geïnitialiseerd worden. public class Account { * Initialize this new account with <initial> as balance. public Account(long initial) * Initialize this new account with a zero balance. public Account() º Voorbeeld 4: definitie van constructoren voor de klasse van bankrekeningen In Voorbeeld 4 worden twee constructoren gedefinieerd voor de klasse van bankrekeningen. Een eerste constructor zal de balans van een nieuw aangemaakte bankrekening initialiseren met het meegegeven bedrag. Zoals voor mutatoren en inspectoren is het principe van het overladen ook toepasbaar op constructoren. Elke klasse kan bijgevolg een willekeurig aantal constructoren introduceren, op voorwaarde dat hun signatuur onderling verschilt zoals beschreven in hoofdstuk De definitie van de tweede constructor illustreert het overladen van constructoren. De argumentenlijst voor deze constructor is leeg, en de balans van de betrokken bankrekening zal geïnitialiseerd worden op Klassenmethodes De instantiatiemethodes beschreven in Voorbeeld 3 zijn methodes die toegepast worden op een object, het impliciete argument. Daarnaast ondersteunt Java ook klassenmethodes. Klassenmethodes hebben de klasse zelf als impliciet argument. We spreken ook van de betrokken klasse. Het niet-gekwalificeerde woord methode wordt gebruikt om over

14 instantiatie- en klassenmethodes samen te spreken, maar wordt ook gebruikt, indien het verschil door de context duidelijk is, als synoniem voor instantiatiemethode. Ook bij klassenmethodes maken we onderscheid tussen mutatoren en inspectoren. De informatie waarop ze werken is dan echter niet de toestand van een bepaald object, maar van de klasse zelf. Er kan in de meeste objectgerichte talen namelijk ook informatie bijgehouden worden op het niveau van de klasse. Over de informatie die op klassenniveau kan bijgehouden worden in Java wordt in meer detail gepraat in hoofdstuk , Klassenvariabelen. In bepaalde talen, zoals Smalltalk, zijn klassen zelf ook objecten als alle andere 3. Andere talen, zoals C++, gaan zo ver niet. Klassen ondersteunen bepaalde begrippen, maar lang niet zoveel als objecten. Java is een speciaal geval. De taal volgt principieel de manier van werken van C++. Door reflectiefunctionaliteit, die beschikbaar is via de standaard klassenbibliotheek, kunnen in Java toch een aantal dingen gedaan worden met klassen als objecten. Dit valt echter volledig buiten het bestek van dit boek. Vaak echter worden klassenmethodes gebruikt om een resultaat te berekenen enkel en alleen op basis van expliciete argumenten. Zulke methodes kunnen niet echt inspectoren genoemd worden, omdat het impliciete argument van de klassenmethode, de klasse, niet gebruikt wordt. Voorbeelden van zulke methodes zijn de meer complexe wiskundige operaties die worden aangeboden in de klasse java.lang.math van de standaard Javaklassenbibliotheek. Vooral omdat elementen van primitieve types in Java geen objecten zijn, worden deze methodes in Java aangeboden als klassenmethodes Objecten die als expliciete argumenten bij een toepassing aan de klassenmethode worden doorgegeven, kunnen ook veranderd worden. In het algemeen wordt dit echter als een weinig doorzichtige stijl van werken beschouwd. Meestal is het veel beter om de methode dan als instantiatiemethode in te voeren van de klasse van één van de objecten waarvan de toestand veranderd wordt. De naamgeving, het specificeren van het resultaat en de specificatie van de expliciete argumenten volgen dezelfde regels als bij instantiatiemethodes (zie ). Klassenmethodes worden in Java onderscheiden van instantiatiemethodes door het sleutelwoord static vooraan in de signatuur. De bank die onze voorbeeldcode gebruikt, wenst de balans van de bankrekeningen te beperken met een minimum. Volgens de bank zijn die limieten algemeen, onafhankelijk van een specifieke rekening, en liggen ze voor eens en voor altijd vast. Daarom is het 3 In Smalltalk zijn klassen instantiaties van een klasse MetaClass, een metaklasse. De metaklasse-klasse MetaClass is een instantiatie van zichzelf.

15 mogelijk een klassenmethode in te voeren om de ondergrens voor rekeningen terug te geven 4. Naast een ondergrens, wordt ook een bovengrens ingevoerd. Het bereik van gehele types in Java is immers niet onbeperkt. Opnieuw gaan we er van uit dat de bovengrens voor alle bankrekeningen gelijk is, zodat ook hier een klassenmethode kan ingevoerd worden. Deze uitbreidingen worden uitgewerkt in Voorbeeld 5. De methode getlowerlimit heeft het static-sleutelwoord, en geeft de laagst mogelijke waarde terug voor de balans van eender welke rekening. De statische methode getupperlimit geeft de hoogst mogelijke waarde terug voor de balans van eender welke rekening. De beschrijving van de klasse zelf is uitgebreid om met de beperking op de balans rekening te houden. In de hoofding van de klasse wordt daartoe algemene informatie gegeven omtrent de balans van een bankrekening en de limieten die er op van toepassing zijn. In hoofdstuk Error! Reference source not found. zullen dergelijke algemene beperkingen geformaliseerd worden als klasseninvarianten. Naast bijkomende informatie in de hoofding van de klasse van bankrekeningen, worden ook de beschrijvingen van de mutatoren en de constructoren uitgebreid. De aanpak, die gevolgd wordt in de definitie van de mutatoren en van de constructoren, wordt verder uitgediept in hoofdstuk , Totale methodes. * A class for dealing with bank accounts, involving the available * amount of money as their only characteristic. * This characteristic is called the balance of an account. * * The lower limit and the upper limit for the balance of accounts * are characteristics of the class itself. The lower limit is * always negative; the upper limit is always positive. * * The balance of a bank account is always greater than or equal * to the lower limit and less than or equal to the upper limit. * Notice that zero is always an acceptable value for the balance * of an account. public class Account { * Return the lower limit of the balance of accounts. static public long getlowerlimit() * Return the upper limit of the balance of accounts. static public long getupperlimit() 4 In het volledig systeem zullen bankrekeningen gerelateerd (zie Error! Reference source not found. XXXREF ) zijn met een object dat de bank voorstelt. In dat geval is het te overwegen om de grenzen als instantiatiekarakteristiek van de bank te specificeren, in plaats van als klassenkarakteristiek.

16 * Initialize this new account with a zero balance. public Account() * Initialize this new account with <initial> as balance, * if it is not smaller than the lower limit and not larger * than the upper limit. public Account(long initial) * Deposit <amount> to this account, if the given amount is * positive, and if the resulting balance would not be larger * than the upper limit. public void deposit(long amount) * Withdraw <amount> from this account, if the given amount is * positive and if the resulting balance would not be smaller * than the lower limit. public void withdraw(long amount) * Transfer <amount> from this account to <destination>, if the * given amount is positive, if <destination> is effective, if * the resulting balance of this account would not be smaller than * the lower limit, and if the resulting balance of <destination> * would not be larger than the upper limit. public void transferto(long amount, Account destination) * Return the balance of this account. public long getbalance() Voorbeeld 5: definitie van klassenmethodes voor de klasse van bankrekening Instantiatiemethodes versus klassenmethodes In het algemeen is een zekere reservatie ten opzichte van het invoeren van klassenmethodes aangewezen. Het is een bekend fenomeen dat mensen die nog niet goed vertrouwd zijn met de principes van het objectgericht programmeren te veel terugvallen op deze manier van werken, die dicht staat bij het klassieke procedureel programmeren. Dat is spijtig, want de belangrijkste objectgerichte technieken, zoals dynamische binding (zie hoofdstuk Error! Reference source not found., Error! Reference source not found.,

17 op pagina Error! Bookmark not defined.) werken enkel met instantiatiemethodes, en zijn niet van toepassing op klassenmethodes. We zullen dan ook de klassenmethodes die in het voorbeeld hierboven ingevoerd werd ter illustratie, onmiddellijk vervangen door instantiatiemethodes. Het is mogelijk, er zijn verschillende voordelen aan verbonden, en de nadelen verbleken tegenover die voordelen. Het is mogelijk omdat de informatie die beschikbaar is op klassenniveau ook beschikbaar is op objectniveau. Het feit dat de informatie hetzelfde is voor alle objecten van een klasse, verhindert ons niet die informatie te bekomen via een object van die klasse. Er zijn twee grote voordelen. Ten eerste verkrijgen we op deze manier alle faciliteiten die instantiatiemethodes bieden, die we missen bij klassenmethodes. Ten tweede wordt de software stabieler voor toekomstige aanpassingen: indien de bank plots wel de limieten wenst te kunnen variëren per rekening, is dit eenvoudig mogelijk door de definitie van de instantiatiemethodes te veranderen. Het zal duidelijk zijn dat de veranderingen veel ingrijpender zullen zijn indien de informatie initieel enkel op klassenniveau beschikbaar was. Het blijkt trouwens dat variaties in informatie, die initieel algemeen lijkt te zijn, erg vaak voorkomen. Het enige nadeel is dat uitvoering met gebruik van instantiatiemethodes iets trager zal zijn, net vanwege de extra faciliteiten die zulke methodes bieden. In de overgrote meerderheid van de projecten is dit verschil echter irrelevant. De vervanging van de klassenmethodes getlowerlimit en getupperlimit door instantiatiemethodes met dezelfde naam, wordt doorgevoerd in Voorbeeld 6. De klassendocumentatie wordt aangepast, zodat ze in het midden laat of de limiet een eigenschap is van de objecten of van de klasse. Deze kennis is niet relevant voor de gebruiker van de klasse, en de ambiguïteit laat de implementator een grotere vrijheid. * A class for dealing with bank accounts, involving the available * amount of money (the balance of the account), and a lower limit * and an upper limit for the balance. * * The lower limit for the balance of an account is always negative; * the upper limit for its balance is always positive. * * The balance of a bank account is always greater than or equal * to the lower limit for its balance and less than or equal to * the upper limit for its balance. Notice that zero is always an * acceptable value for the balance of an account. public class Account { * Initialize this new account with a zero balance. The lower * limit and the upper limit for the balance of this new account * are initialized according to the policy of the bank.

18 public Account() * Initialize this new account with <initial> as balance. The * lower limit and the upper limit for the balance of this new * account are initialized according to the policy of the bank. * If <initial> is not within this range, the balance of this * new account is initialized to zero. public Account(long initial) * Deposit <amount> to this account, if the given amount is * positive, and if the resulting balance would not be larger * than the upper limit for the balance of this account. public void deposit(long amount) * Withdraw <amount> from this account, if the given amount is * positive and if the resulting balance would not be smaller * than the lower limit for the balance of this account. public void withdraw(long amount) * Transfer <amount> from this account to <destination>, if the * given amount is positive, if <destination> is effective, if * the resulting balance of this account would not be smaller than * the lower limit for its balance, and if the resulting balance * of <destination> would not be larger than the upper limit for * its balance. public void transferto(long amount, Account destination) * Return the balance of this account. public long getbalance() * Return the lower limit for the balance of this account. public long getlowerlimit() * Return the upper limit for the balance of this account. public long getupperlimit() Voorbeeld 6: finale versie van de specificatie van de klasse van bankrekeningen

19 Totale methodes De specificatie van de klasse van bankrekeningen, zoals ze in Voorbeeld 6 werd uitgewerkt, introduceert een stel totale methodes. We bedoelen hiermee dat het resultaat of het effect van elke methode gedefinieerd is voor ieder mogelijk stel actuele argumenten. Naar analogie met totale functies uit de wiskunde, worden dergelijke methodes totale methodes genoemd. In de ontwikkeling van de specificatie van een methode is het niet alleen belangrijk het effect van de methode te omschrijven onder normale omstandigheden. De specificatie van een methode is slechts volledig als ze het gedrag ervan onder abnormale omstandigheden ook beschrijft. Dergelijke abnormale omstandigheden worden vaak ook randgevallen genoemd. Randgevallen zijn typisch omstandigheden waaronder het normale effect van een methode niet kan gerealiseerd worden. De specificatie van de methode zal dan aangeven hoe de methode zich in dergelijke gevallen gedraagt. Naast het schrijven van goede specificaties, is het detecteren van alle mogelijke randgevallen in de specificatie van iedere methode, een andere grote uitdaging bij het ontwikkelen van software. In hoofdstukken XXX en YYY zullen alternatieve manieren besproken worden om op een adequate manier om te gaan met mogelijke randgevallen. In het ene geval zullen methodes partieel blijven en worden uitzonderlijke gevallen behandeld met precondities, terwijl in het andere geval signalen zullen geproduceerd worden in de vorm van uitzonderingen. In de specificatie van de mutator withdraw uit de klasse van bankrekeningen worden twee randgevallen onderscheiden. Op de eerste plaats wordt rekening gehouden met het geval waarin het af te halen bedrag negatief is. Volgens de specificatie zal de toestand van de bankrekening bij een afhaling van een negatief bedrag onveranderd blijven. Omdat dit de balans zou verhogen, wordt de gebruiker in dat geval verplicht gebruik te maken van de mutator deposit. Op de tweede plaats houdt de specificatie van de mutator withdraw rekening met het geval waarin de resulterende balans onder de laagst mogelijk limiet voor de balans zou komen te liggen. Ook in dat geval zal de toestand van de betrokken bankrekening onveranderd blijven. De specificatie van de mutator transferto is op het vlak van randgevallen een stuk complexer. In het normale geval zal het gegeven bedrag afgehaald worden van de bankrekening waarop de methode wordt toegepast, en gestort worden op de bankrekening die als expliciet argument wordt meegegeven. De methode zal op de eerste plaats geen effect hebben als het over te schrijven bedrag niet positief is. Verder moet de bankrekening waarnaar het geld wordt overgeschreven een effectieve rekening zijn. In hoofdstuk , Semantiek van variabelen, zal aangegeven worden dat variabelen van een klassentype een referentie bevatten naar een object van de betrokken klassen. De geregistreerde

20 referentie kan niet effectief (null) zijn. Een overschrijving heeft tenslotte ook geen effect als de balans van de bankrekening waarop de methode wordt toegepast te laag is, of als de balans van de doelrekening te hoog is. De notie van totale methodes heeft uiteraard niet alleen betrekking op mutatoren en constructoren. Ook voor inspectoren kan gestreefd worden naar een definitie, waarin het resultaat onder alle omstandigheden gedefinieerd is. De inspectoren getbalance, getlowerlimit en getupperlimit voldoen om triviale redenen aan deze vereiste. Voor inspectoren is een totale versie niet altijd aangewezen. Beschouw als voorbeeld de definitie van een inspector die het verschil teruggeeft tussen de bankrekening waarop de inspector wordt toegepast en een andere bankrekening, die als expliciet argument wordt meegegeven. Een totale versie zal ook een resultaat moeten bepalen indien de andere bankrekening niet effectief is. Een zinvolle waarde voor het verschil is in dat geval ver te zoeken. Zo zou de waarde 0 verkeerdelijk suggereren dat de rekening waarop de methode wordt toegepast, dezelfde balans heeft als de null-referentie. De technieken, die in hoofdstukken XXX (Contractueel) en YYY (Defensief) besproken worden, zijn voor de specificatie van deze inspector wellicht meer aangewezen Het toepassen van methodes Zodra de specificatie van een klasse is afgerond, is alle informatie beschikbaar om er gebruik van te maken. De specificatie richt zich immers op de modale gebruikers van de klasse, en introduceert die informatie, en alleen die informatie die nodig is om objecten van de klasse aan te maken, en vervolgens te manipuleren door het toepassen van de gespecificeerde methodes. Uiteraard zal een methode pas effectief bruikbaar zijn zodra de implementatie van de klasse voltooid is. In hoofdstuk wordt de notatie toegelicht, die in Java voorhanden is om objecten aan te maken. Vervolgens wordt in hoofdstuk aangegeven hoe mutatoren en inspectoren kunnen toegepast worden op bestaande objecten en klassen. De notatie voor het toepassen van instantiatiemethodes in Java verschilt van de notatie voor het toepassen van klassenmethodes. In hoofdstuk wordt aangegeven hoe klassenmethodes in Java kunnen toegepast worden. Een programma kan uiteraard geen zinvol werk verrichten zonder communicatie met de eindgebruikers. In hoofdstuk wordt in detail ingegaan op de zogenaamde Application Program Interface. Tenslotte wordt in hoofdstuk uitgelegd hoe de notie van een hoofdprogramma wordt ondersteund in Java.

21 Het aanmaken van nieuwe objecten Nieuwe objecten van een klasse worden aangemaakt met behulp van de operator new. De evaluatie van de uitdrukking new ClassName(a1, a2,, an) verloopt in de volgende stappen: 1. Er wordt geheugen gereserveerd voor het bewaren van de interne toestand van een nieuw object van de betrokken klasse. Hoe de interne toestand kan worden gedefinieerd wordt besproken in hoofdstuk 0.1.3, Representatie. Voor het aanmaken van een nieuw object van de klasse van bankrekeningen zal geheugen gereserveerd worden voor het bewaren van de balans van de betrokken rekening. De evaluatie van de uitdrukking zal falen indien geen geheugen meer beschikbaar is. 2. Een constructor, waarvan de formele argumentenlijst overeenstemt met de actuele argumentenlijst uit de constructie-uitdrukking, wordt uitgevoerd. Meer in detail wordt gezocht naar een constructor waarvan ieder van de formele argumenten fi in type overeenstemt met het actuele argument ai. De Java-vertaler zal de uitdrukking niet aanvaarden, indien een dergelijke constructor niet voorhanden is. Bij het aanmaken van een nieuwe bankrekening zal bijgevolg, volgens de definitie van de constructoren in Voorbeeld 6, ofwel een geheel getal, ofwel geen enkel actueel argument worden meegegeven. Voor alle andere uitdrukkingen om bankrekeningen aan te maken zal geen constructor gevonden worden in de definitie van de klasse. Dergelijke constructies zullen bijgevolg tijdens de vertaling van het programma verworpen worden. Merk op dat actuele argumenten omgeven worden door haakjes en gescheiden worden door komma's. 3. Een referentie (verwijzing) naar het nieuwe object wordt teruggeven als resultaat van de uitdrukking. Het manipuleren van referenties naar objecten wordt uitvoerig behandeld in het deel omtrent relaties tussen objecten. Voor het ogenblik volstaat het te weten dat een referentie naar een object kan toegekend worden aan een variabele. Deze procedure zal verfijnd worden in het licht van de declaratie van variabelen in hoofdstuk , Initialisatie van variabelen en, in het licht van overerving in hoofdstuk Error! Reference source not found., Error! Reference source not found., op pagina Error! Bookmark not defined.. De constructie van nieuwe objecten van een klasse wordt in Voorbeeld 7 geïllustreerd voor bankrekeningen. Het codefragment begint met het declareren van variabelen die kunnen refereren naar objecten van de klasse van bankrekeningen. Vervolgens worden twee bankrekeningen aangemaakt, waarvoor expliciet een initieel bedrag wordt meegegeven. Deze bankrekeningen zullen bijgevolg worden geïnitialiseerd met behulp van de eerste constructor uit Voorbeeld 6. De variabelen myaccount en youraccount zullen

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

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

Abstraheren van modellen

Abstraheren van modellen Abstraheren van modellen Geert Delanote 7 maart 2005 Geert.Delanote@cs.kuleuven.ac.be Software Development Methodology 1 Inhoudstafel Motivatie Denkpistes Software Development Methodology 2 Motivatie Verslag

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

Java. Basissyllabus. Egon Pas

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

Nadere informatie

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

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

Hoofdstuk 9. Hashing

Hoofdstuk 9. Hashing Hoofdstuk 9 Hashing Het zoeken in een verzameling van één object is in deze cursus al verschillende malen aan bod gekomen. In hoofdstuk 2 werd uitgelegd hoe men een object kan zoeken in een array die veel

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

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

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

Datastructuren Werkcollege Intro

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

Nadere informatie

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

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

Nadere informatie

Algoritmiek. 8 uur college, zelfwerkzaamheid. Doel. Hoe te realiseren

Algoritmiek. 8 uur college, zelfwerkzaamheid. Doel. Hoe te realiseren Algoritmiek Doel Gevoel en inzicht ontwikkelen voor het stapsgewijs, receptmatig oplossen van daartoe geëigende [biologische] probleemstellingen, en dat inzicht gebruiken in het vormgeven van een programmeerbare

Nadere informatie

VAN HET PROGRAMMEREN. Inleiding

VAN HET PROGRAMMEREN. Inleiding OVERZICHT VAN HET PROGRAMMEREN Inleiding Als je leert programmeren lijkt het nogal overweldigend om die eerste stappen te doorworstelen. Er zijn dan ook heel wat programmeertalen (Java, Ruby, Python, Perl,

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

Uitleg van de Hough transformatie

Uitleg van de Hough transformatie Uitleg van de Hough transformatie Maarten M. Fokkinga, Joeri van Ruth Database groep, Fac. EWI, Universiteit Twente Versie van 17 mei 2005, 10:59 De Hough transformatie is een wiskundige techniek om een

Nadere informatie

Objectgeoriënteerd programmeren in Java 1

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

Nadere informatie

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

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

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

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

Een typisch programma in C en C++ bestaat uit een aantal onderdelen: Eerste stappen in C. Een typisch programma in C en C++ bestaat uit een aantal onderdelen: /* Alles wat op meerdere lijnen staat zoals hier is commentaar. */ // Dit is commentaar op 1 lijn. Geldig tot einde

Nadere informatie

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40 Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N

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 korte samenvatting van enkele FORTRAN opdrachten

Een korte samenvatting van enkele FORTRAN opdrachten Een korte samenvatting van enkele FORTRAN opdrachten Inhoud 1 Introductie 3 2 De structuur van een FORTRAN programma 3 3 Datatypen, variabelen en declaraties 3 4 Expressies-volgorde van uitwerking 4 5

Nadere informatie

PHP. Les 4 : Variabelen

PHP. Les 4 : Variabelen PHP Les 4 : Variabelen Interessante links: o http://www.dbzweb.be/moermant/ o http://php.net/manual/en/function.echo.php o http://www.w3schools.com/php/default.asp Wat zijn variabelen? Variabelen zijn

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

Project Objectgericht Programmeren : Deel 3

Project Objectgericht Programmeren : Deel 3 Project Objectgericht Programmeren : Deel 3 Prof. Eric Steegmans Raoul Strackx Academiejaar 2010-2011 Deze tekst beschrijft het derde deel van de opgave voor het project van de cursus Objectgericht Programmeren.

Nadere informatie

Tentamen Formele Methoden voor Software Engineering (213520)

Tentamen Formele Methoden voor Software Engineering (213520) Tentamen Formele Methoden voor Software Engineering (213520) 15 april 2010, 8:45 12:15 uur. BELANGRIJK: geef op je tentamen duidelijk aan: je studierichting of je beide huiswerkopgaven gemaakt hebt, en

Nadere informatie

Software Processen. Ian Sommerville 2004 Software Engineering, 7th edition. Chapter 4 Slide 1. Het software proces

Software Processen. Ian Sommerville 2004 Software Engineering, 7th edition. Chapter 4 Slide 1. Het software proces Software Processen Ian Sommerville 2004 Software Engineering, 7th edition. Chapter 4 Slide 1 Het software proces Een gestructureerd set van activiteiten nodig om een software systeem te ontwikkelen Specificatie;

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

Software Quality Assurance Plan

Software Quality Assurance Plan Software Quality Assurance Plan GameTrac Versie Datum Auteur(s) Opmerking 1.0 10-12-2010 Bram Bruyninckx Eerste iteratie 1 Door hieronder te tekenen verklaart u akkoord te zijn met dit document en zijn

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 :................................................ SCHOOL :............................................................

Nadere informatie

case: toestandsdiagrammen

case: toestandsdiagrammen Hoofdstuk 13 case: toestandsdiagrammen In dit hoofdstuk wordt het maken van de eerste versie van de toestandsdiagrammen voor het boodschappensysteem van Hans en Jacqueline uitgewerkt. 13.1 Vind klassen

Nadere informatie

VAN HET PROGRAMMEREN. Inleiding. Het spiraalmodel. De programmeertaal. vervolgens de berekening van het totale bedrag, incl. BTW:

VAN HET PROGRAMMEREN. Inleiding. Het spiraalmodel. De programmeertaal. vervolgens de berekening van het totale bedrag, incl. BTW: OVERZICHT VAN HET PROGRAMMEREN Inleiding Als je leert programmeren lijkt het nogal overweldigend om die eerste stappen te doorworstelen. Er zijn dan ook heel wat programmeertalen (Java, Ruby, Python, Perl,

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

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

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Functies Vorige week bekeken we functies: def

Nadere informatie

9 Meer over datatypen

9 Meer over datatypen 9 Meer over datatypen We hebben al gezien dat het gebruik van symbolische constanten de leesbaarheid van een programma kan verbeteren. Door een geschikte naam (identifier) voor een constante te definiëren,

Nadere informatie

VBA voor Doe het Zelvers deel 20

VBA voor Doe het Zelvers deel 20 VBA voor Doe het Zelvers deel 20 Handleiding van Auteur: leofact Augustus 2015 handleiding: VBA voor Doe het Zelvers deel 20 Vorige aflevering In het vorige deel werd besproken hoe je de structuur en vensteropbouw

Nadere informatie

SYNTRA-WEST. Cursus OOP. Deel

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

Nadere informatie

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

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

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

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

2. Syntaxis en semantiek

2. Syntaxis en semantiek 2. Syntaxis en semantiek In dit hoofdstuk worden de begrippen syntaxis en semantiek behandeld. Verder gaan we in op de fouten die hierin gemaakt kunnen worden en waarom dit in de algoritmiek zo desastreus

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

{ specificatie (contract) en toelichting }

{ specificatie (contract) en toelichting } Programmeren Blok B Drie aspecten van routines http://www.win.tue.nl/ wstomv/edu/2ip05/ College 7 Tom Verhoeff Technische Universiteit Eindhoven Faculteit Wiskunde en Informatica Software Engineering &

Nadere informatie

Die inputs worden op een gecontroleerde manier aangeboden door (test) stubs. De test driver zorgt voor de uiteindelijke uitvoering ervan.

Die inputs worden op een gecontroleerde manier aangeboden door (test) stubs. De test driver zorgt voor de uiteindelijke uitvoering ervan. Nota: Schrijf je antwoorden kort en bondig in de daartoe voorziene velden. De puntenverdeling is 2 punten per theorie-vraag en 8 punten per oefening. Het totaal is 40. Vraag 1. Er bestaan verschillende

Nadere informatie

{ specificatie (contract) en toelichting }

{ specificatie (contract) en toelichting } Programmeren Blok A Drie aspecten van routines http://www.win.tue.nl/ wstomv/edu/2ip05/ College 5 Kees Hemerik Tom Verhoeff Technische Universiteit Eindhoven Faculteit Wiskunde en Informatica Software

Nadere informatie

Introductie tot de cursus

Introductie tot de cursus Inhoud introductietalen en ontleders Introductie tot de cursus 1 Plaats en functie van de cursus 7 2 Inhoud van de cursus 7 2.1 Voorkennis 7 2.2 Leerdoelen 8 2.3 Opbouw van de cursus 8 3 Leermiddelen en

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

1.7 Ontleding van het eerste programma... 14

1.7 Ontleding van het eerste programma... 14 Inhoudsopgave 1 Inleiding 1 1.1 Wat kan je met Java doen?..................... 1 1.2 Over Java............................... 3 1.3 Gebruik van dit boek......................... 5 1.4 Installatie...............................

Nadere informatie

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms Giso Dal (0752975) Pagina s 5 7 1 Deelverzameling Representatie

Nadere informatie

Eerste deeltentamen Gameprogrammeren Vrijdag 25 september 2015, uur

Eerste deeltentamen Gameprogrammeren Vrijdag 25 september 2015, uur Naam: Eerste deeltentamen Gameprogrammeren Vrijdag 25 september 2015, 11.00-13.00 uur Studentnummer: Het tentamen bestaat uit 4 opgaven. Elke opgave levert 10 punten op. Je cijfer is het totaal aantal

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Functies Vorige week bekeken we functies: def bereken(a, x): return a * (x

Nadere informatie

Een computerprogramma is opgebouwd uit een aantal instructies die op elkaar volgen en die normaal na elkaar uitgevoerd worden.

Een computerprogramma is opgebouwd uit een aantal instructies die op elkaar volgen en die normaal na elkaar uitgevoerd worden. 2 Programmeren 2.1 Computerprogramma s Een computerprogramma is opgebouwd uit een aantal instructies die op elkaar volgen en die normaal na elkaar uitgevoerd worden. (=sequentie) Niet alle instructies

Nadere informatie

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object. een symbolische naam voor een object. Variabelen Constanten Variabelen Expressies naam : geeft de plaats in het geheugen aan waarde : de inhoud van het object identifier : een rij van letters en/of cijfers

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

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

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

Nadere informatie

Modelleren en Programmeren

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

Nadere informatie

Module Limieten van de berekenbaarheid : antwoorden

Module Limieten van de berekenbaarheid : antwoorden Module Limieten van de berekenbaarheid : antwoorden Gilles Coremans 2018 This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license. Dit werk is gebaseerd

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

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax, Deel 1: Arduino kennismaking Wat is een microcontroller, structuur van een programma, syntax, Wat is een microcontroller Wat is een microcontroller? Microcontroller = kleine dedicated computer. - Beperkt

Nadere informatie

1 Inleiding in Functioneel Programmeren

1 Inleiding in Functioneel Programmeren 1 Inleiding in Functioneel Programmeren door Elroy Jumpertz 1.1 Inleiding Aangezien Informatica een populaire minor is voor wiskundestudenten, leek het mij nuttig om een stukje te schrijven over een onderwerp

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

Hoofdstuk 21: Gegevens samenvatten

Hoofdstuk 21: Gegevens samenvatten Hoofdstuk 21: Gegevens samenvatten 21.0 Inleiding In Excel kunnen grote (en zelfs ook niet zo grote) tabellen met getallen en tekst er nogal intimiderend uitzien. Echter, Excel komt helemaal tot haar recht

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

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

3. Structuren in de taal

3. Structuren in de taal 3. Structuren in de taal In dit hoofdstuk behandelen we de belangrijkst econtrolestructuren die in de algoritmiek gebruikt worden. Dit zijn o.a. de opeenvolging, selectie en lussen (herhaling). Vóór we

Nadere informatie

Let op dat de scoping regels gerespecteerd blijven; het volgende voorbeeld mag geen fout melden.

Let op dat de scoping regels gerespecteerd blijven; het volgende voorbeeld mag geen fout melden. Vrije Universiteit Brussel Faculteit Wetenschappen Vakgroep Computerwetenschappen Academiejaar 2009 2010: tweede examenzittijd Interpretatie van Computerprogrammaʼs I schriftelijke test Voorafgaandelijk:

Nadere informatie

Zoemzinnen. Algemene info. Functies met een variabel aantal argumenten

Zoemzinnen. Algemene info. Functies met een variabel aantal argumenten Zoemzinnen Functies met een variabel aantal argumenten Bij het definiëren van een functie leg je in principe vast hoeveel argumenten er aan de functie moeten doorgegeven worden. Dit aantal correspondeert

Nadere informatie

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14 Python Vraag 1: Expressies en types Integrated Development Environment (IDE): Ø Wing 101 (gratis te downloaden op www.wingware.com) Oefeningen in de shell >> noemen we de prompt Python commando s = expressies

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

HOE TEKEN IK EEN OMGEVINGSMODEL

HOE TEKEN IK EEN OMGEVINGSMODEL HOE TEKEN IK EEN OMGEVINGSMODEL MATTIAS DE WAEL 1. Inleiding Om de allereenvoudigste Scheme expressies te begrijpen volstaat het substitutiemodel. Het substitutiemodel verondersteld het bestaan van een

Nadere informatie

De plug-in is heel eenvoudig te installeren met een setup-programma. Waarna je een aantal menu opties in het tools menu er bij krijgt.

De plug-in is heel eenvoudig te installeren met een setup-programma. Waarna je een aantal menu opties in het tools menu er bij krijgt. Plsqldoc Genereer je documentatie Beeklaan 444 2562 BK Den Haag www.darwin-it.nl info@darwin-it.nl KvK 27283780 ING 65.35.40.663 Technical Architect Net als (vrijwel) elke ontwikkelaar vind ik het documenteren

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

Een eenvoudig algoritme om permutaties te genereren

Een eenvoudig algoritme om permutaties te genereren Een eenvoudig algoritme om permutaties te genereren Daniel von Asmuth Inleiding Er zijn in de vakliteratuur verschillende manieren beschreven om alle permutaties van een verzameling te generen. De methoden

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

2. Syntaxis en semantiek

2. Syntaxis en semantiek 2. Syntaxis en semantiek In dit hoofdstuk worden de begrippen syntaxis en semantiek behandeld. Verder gaan we in op de fouten die hierin gemaakt kunnen worden en waarom dit in de algoritmiek zo desastreus

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

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

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

II. ZELFGEDEFINIEERDE FUNCTIES

II. ZELFGEDEFINIEERDE FUNCTIES II. ZELFGEDEFINIEERDE FUNCTIES In Excel bestaat reeds een uitgebreide reeks van functies zoals SOM, GEMIDDELDE, AFRONDEN, NU enz. Het is de bedoeling om functies aan deze lijst toe te voegen door in Visual

Nadere informatie

Over Plantinga s argument voor de existentie van een noodzakelijk bestaand individueel ding. G.J.E. Rutten

Over Plantinga s argument voor de existentie van een noodzakelijk bestaand individueel ding. G.J.E. Rutten 1 Over Plantinga s argument voor de existentie van een noodzakelijk bestaand individueel ding G.J.E. Rutten Introductie In dit artikel wil ik het argument van de Amerikaanse filosoof Alvin Plantinga voor

Nadere informatie

Lab Webdesign: Javascript 11 februari 2008

Lab Webdesign: Javascript 11 februari 2008 H2: BASISBEGRIPPEN In dit hoofdstuk zullen er enkele basisbegrippen worden behandelt PLAATSING VAN JAVASCRIPT-CODE DE SCRIPT-TAG De script-tag geeft aan dat er gebruik zal worden gemaakt van een scripttaal.

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

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c Een Minimaal Formalisme om te Programmeren We hebben gezien dat Turing machines beschouwd kunnen worden als universele computers. D.w.z. dat iedere berekening met natuurlijke getallen die met een computer

Nadere informatie

BELTRACE VOOR DE GEMEENTEN

BELTRACE VOOR DE GEMEENTEN S A N I T R A C E BELTRACE VOOR DE GEMEENTEN Versie 7 21/09/2012 Pagina 1 van 18 BELTRACE VOOR DE GEMEENTEN Herinnering van de algemene gebruiksrichtlijnen De informaticatoepassing Beltrace moet door de

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

Programmeren in C# Klassen schrijven

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

Nadere informatie

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET Visual Basic.NET M. den Besten 0.3 VB. NET Inhoud Voorwoord Deel 1 Visual Basic.NET 1.1 Inleiding...13 1.2 De programmeertaal Visual Basic.NET...14 1.3 Microsoft Visual Basic 2010 Express Edition...15

Nadere informatie

Lab Webdesign: Javascript 3 maart 2008

Lab Webdesign: Javascript 3 maart 2008 H5: OPERATORS In dit hoofdstuk zullen we het hebben over de operators (of ook wel: operatoren) in JavaScript waarmee allerlei rekenkundige en logische bewerkingen kunnen worden uitgevoerd. Daarbij zullen

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

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

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

Nadere informatie

College Introductie

College Introductie College 2016-2017 Introductie Doaitse Swierstra (Jeroen Bransen) Utrecht University September 13, 2016 Waarom is FP anders? in plaats van opdrachten die na elkaar moeten worden uitgevoerd, definiëren we

Nadere informatie

Programmeren met Arduino-software

Programmeren met Arduino-software Programmeren met Arduino-software De software waarin we programmeren is Arduino IDE. Deze software is te downloaden via www.arduino.cc. De programmeertaal die hier gebruikt wordt, is gebaseerd op C en

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

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