T3 in het wild While Juni Tom de Valk Tom Evers Sjors Meekels

Maat: px
Weergave met pagina beginnen:

Download "T3 in het wild While Juni 2004. Tom de Valk 0115665 Tom Evers 0115525 Sjors Meekels 0138630"

Transcriptie

1 T3 in het wild While Juni 2004 Tom de Valk Tom Evers Sjors Meekels

2 INHOUDSOPGAVE Inleiding WHILE OO Afbakening Uitbreidingen Syntax Semantiek States en environment State Env p Env do Heap Env this Uitbreiding van de Semantiek van A & B State transitie Update object declaratie State transitie bij object initialisatie NS Semantiek Voorbeeld Inheritance Syntax Semantiek Env do uitbreiden Update functie Object Initialisatie Semantiekregels Voorbeeld Keywords Public & Private Syntax uitbreiding Semantiek Semantiekregels Geneste objecten Syntax States en environment Semantiek Conclusie T3 in het Wild While 1

3 Inleiding De bedoeling van dit werkstuk is dat we semantische technieken kunnen ontwikkelen en toepassen in het wild. Het onderwerp dat we gekozen hebben, is het uitbreiden van de taal While met een aantal typische Object Oriented (OO) onderwerpen. Deze nieuwe taal hebben we de naam While OO gegeven. While OO is geen OO-taal in zuivere zin, maar meer de taal While met OO aspecten. We leggen de syntax en ns-semantiek van objecten en klassen vast. In de syntax wordt het declareren van objecten al sterk aan banden gelegd, dit is namelijk alleen mogelijk aan het begin van het programma. Bovendien is het niet toegestaan klassen in klassen te declareren, om het niet meteen te moeilijk te maken. Vervolgens gaan we de ns-semantiek vastleggen. Dit houdt onder andere in dat de state wordt uitgebreid, er update functies worden toegevoegd en de ns-semantiek regels worden aangepast. Nadat we deze implementatie van While OO hebben gerealiseerd, wordt er ingegaan op een ander typisch OO onderwerp, namelijk inheritance. Deze uitbreiding van While OO wordt in een apart hoofdstuk gedaan, omdat het anders te onoverzichtelijk wordt. Andere typische OO onderwerpen zoals klassen declareren in klassen (nesting van klassen) en de keywords public en private zullen we minder uitgebreid behandelen. Dit houdt in dat we de syntax en ns-semantiek niet exact zullen vastleggen, maar wel globaal bespreken hoe deze onderwerpen in While OO verwerkt kunnen worden. Concreet gezegd gaan we dus onderzoek doen naar de uitbreiding van de syntax en semantiek van de taal While met OO aspecten, te weten object declaraties en object instantiaties en we beschrijve n de benodigdheden voor inheritance en geneste klassen. T3 in het Wild While 2

4 1. WHILE OO 1.1 Afbakening Het uitbreiden van While kan op meerdere wijzen geïmplementeerd worden. Om het overzichtelijk te houden tijdens de beginfase, hebben wij ervoor gekozen om het declareren van objecten alleen toe te staan in het begin van het programma. Een ander belangrijk gevolg van deze keuze is de onmogelijkheid om objecten in objecten te declareren. Beide gevolgen zijn een inbreuk op de zuivere OO gedachte, echter er blijft voldoende expressieve kracht over om van een OO taal te spreken. Andere mogelijke uitgangspunten voor implementaties zouden kunnen zijn: Alles in objecten te zetten, dit impliceert dat alle variabelen en procedures dus ook in een object zitten. Verder houdt dit in dat elke programma dus een object is en er ergens een start (soort main () functie ) aanwezig dient te zijn. We hebben ervoor gekozen om hier niet voor te kiezen maar de taal While OO (backwards)compatible te maken met While. 1.2 Uitbreidingen Op de eerste plaats hebben wij de aritmetische expressie uitgebreid met de velden van een object. Zodoende kan een veld gebruikt worden als zijnde een normale aritmetische expressie. Dit is nodig om bijvoorbeeld de waarde van een veld aan een variabele toe te kennen of om de waarde van een veld aan te passen. Omdat wij een onderscheid maken tussen gedeclareerde en geïnstantieerde objecten is het ook nodig om dit verschil te kunnen maken bij het gebruik van velden. Hiervoor hebben wij de object.veldnaam en this.veldnaam geïntroduceerd. Deze gebruiken we respectievelijk bij een geïnstantieerd en een gedeclareerd object. In de syntax worden ze beschreven met o.v en this.v. De this.veldnaam constructie is een speciaal geval van object.veldnaam en heeft alleen betekenis binnen de declaratie van een object. (in D o ). Hierdoor is het mogelijk om naar procedures en velden te verwijzen in het huidige object voordat deze daadwerkelijk geïnstantieerd is. Het afdwingen van de declaratie van objecten aan het begin van een programma hebben wij geïmplementeerd met een apart statement R die vooraf gaat aan de originele S. In deze R kunnen vervolgens objecten worden gedeclareerd, dit is echter niet noodzakelijk, het laatste onderdeel van R is de normale S. Hierdoor zijn alle mogelijkheden van traditioneel While direct overgenomen. Objecten worden op een gelijke wijze gedeclareerd als bijvoorbeeld procedures. Het is een eindige rij met object declaraties, zie de definitie van D o. T3 in het Wild While 3

5 2. Syntax De syntax met de besproken uitbreidingen komt er nu zo uit te zien: a::= R::= n x a 1 + a 2 a 1 * a 2 a 1 a 2 o.v this.v begin Dv Dp Do Dd S end S::= x:= a skip S1 ; S2 if b then S1 else S2 while b do S begin D v D p D d S end call p call o.p call this.p o.v := a this.v := a Dv ::= var x := a ; Dv e D p ::= proc p is S ; D p e D o ::= class O is D v D p ; D o e D d ::= object o : = new O ; D d e De O is een metavariabele die de type van objecten beschrijft. (O type ) o is een metavariabele die de namen van objecten beschrijft. (O name ) D o is een metavariabele die de declaratie van objecten beschrijft. De v in o.v en this.v is een metavariabele die de namen van velden van objecten beschrijft. D d is eveneens een metavariabele die de instantiatie van objecten beschrijft binnen een Begin End block. De aparte metavariabele voor instanties is noodzakelijk om de instanties te kunnen opruimen bij het verlaten van de scope. (zie definities van Block) T3 in het Wild While 4

6 3. Semantiek Het is nuttig eerst een functie te definiëren die uit een tupel (of een rij) een zeker element haalt. In de volgende paragrafen zal blijken dat deze functie bestaansrecht heeft. Projectiefunctie: p i (x 0,x 1..x n ) = x i 3.1 States en environment Zoals gezegd en gezien is de syntax aangepast, dit heeft natuurlijk ook invloed op de benadering van state en environment. Wij maken onderscheid tussen een vijftal onderdelen. De normale State, met hierin de globale variabelen De normale Env p, met hierin de globale procedures Een speciaal environment env do, hierin worden alle gedeclareerde objecten opgeslagen, inclusief de procedures en velden. Een heap waarin de geïnstantieerde objecten worden opgeslagen. Van deze objecten hebben wij alleen de naam nodig en de velden. Een speciaal environment (veld) envthis, waarin we de objectnaam opslaan waar we op dat moment in bezig zijn. We zullen de bovenstaande aanpassingen stuk voor stuk bespreken en nader toelichten met voorbeelden State De standaard State zullen we gewoon blijven gebruiken. Deze kan zowel in R als in S uitgebreid worden met nieuwe variabelen. Semantisch is er geen verschil tussen gebruik in R en S, echter bij gebruik in R kunnen de variabelen ook al gebruikt worden in de object declaraties in R. Zo kunnen objecten ook gebruik maken van globale variabelen. Formeel gezien geldt nog steeds de volgende formule met een schets van het geheugen gebruik: State : V name Z X 3 Y De totale functie State levert dus altijd een waarde uit het bereik van Z op. T3 in het Wild While 5

7 3.1.2 Env p Ook de Envp zal niet worden gewijzigd, ook hier geldt dat hij in zowel R als in S kan worden uitgebreid. Hierin worden alle procedures opgeslagen die niet voorkomen in een object (dit wordt later behandeld). Formeel levert dit wederom de volgende functie en schets op: Env p : P name Stm P P body Q Q body.... De partiële functie env p levert niet altijd een resultaat op, omdat deze een Statement op moet leveren. Indien de P name niet voorkomt in env p is de kans groot bij een concrete implementatie dat er naar een waarde wordt gewezen die niet is te interpreteren als zijnde een geldig Statement Env do We houden een extra (static) environment bij waarin we alle gedeclareerde objecten opslaan, Env do (Declared Objectes). Deze kunnen alleen in R worden gedeclareerd. Na de declaratie van de objecten zal dit environment niet meer veranderen. Hierin worden de initialisatie waarden voor de velden en body s van de procedures opgeslagen. Formeel gezien: Env do : O type (State x Env p ) O1 X 3 P body Y 5 q body O2 X 1 P body Voorbeeld 3.1: class O n is var x:= 3; var y:= this.x + 1; proc p is q:= 3; Door de bovenstaande klasse declaratie wordt de env do uitgebreid met het volgende tupel: De y wordt eerst geëvalueerd en vervolgens in het environment opgeslagen, dit wordt nader besproken in 3.4. O n x 3 p q:= 3; y 4 T3 in het Wild While 6

8 3.1.4 Heap Alle instantiaties van gedeclareerde objecten slaan we op in een heap h. Het instantiëren van objecten gebeurt alleen in S. Het verschil met de Env do is dat de velden van de objecten kunnen veranderen naar aanleiding van Statements die worden uitgevoerd op deze velden. In tegenstelling tot de Env do waar de waardes van de velden niet meer veranderen na declaratie. Verder onderscheid is het ontbreken van de body s van de procedures in de heap. Deze kunnen worden opgezocht in de Envdo, wanneer er een call wordt aangeroepen. Door middel van de O name kan worden beoordeeld van welk type het object is en welke procedures dit type heeft. Dit levert een besparing op van het geheugengebruik omdat alle procedures maar op één plek worden opgeslagen. Formeel gezien: h : Oname (Otype x State) o1 O2 X 1 o2 O1 Y 6 X 3 Omdat de heap kan worden gezien als een resultaat van het programma hebben we besloten de heap te beschouwen als een state in plaats van een environment. Voorbeeld 3.2:.. class O n is var x:= 3; var y:= this.x + 1; proc p is q:= 3; object o:= new O n ;.. Bovenstaande toevoeging levert de volgende heap op: o O n x 3 y 4 T3 in het Wild While 7

9 3.1.5 Env this Tot slot slaan we het huidige object waarin gewerkt wordt op in Env this. Zodoende kunnen we na elke call op een object procedure precies terugvinden in welke object we werken. Bij het uitvoeren van een Statement van een object procedure kunnen we nu de this.veldnaam en of this.procedurenaam evalueren. Na het uitvoeren van een call staat de env this weer op de waarde voorafgaand aan de call. (zie ook upd this ) Env this : O name Voorbeeld 3.3:.. class O n is var x:= 3; var y:= 4; proc p is this.y := 1; object o:= new On; call o.p;.. Bij de aanroep van o.p is bekend dat o het huidige object is en zodoende kan dus de procedure p worden uitgevoerd en de y-waarde van de instantie o in de heap op 1 worden gezet. 3.2 Uitbreiding van de Semantiek van A & B Het is noodzakelijk dat we de semantiek van aritmetische expressies (A) aanpassen aan de uitbreiding van de syntax van a. De heap en env this zijn namelijk nodig voor het evalueren van de expressies o.v en this.v. Signatuur: A: Aexp ( State x heap x env this Z ) We schrijven één regel van de bestaande regels uit, de overige laten we aan de verbeelding van de lezer over. A [n] s h env this = N [n] De volgende regels hebben we toegevoegd: A [o.v] s h env this = p 1 (h o ) v A [this.v] s h env this = p 1 (h env this ) v T3 in het Wild While 8

10 Nu rest ons nog de aanpassing van de booleaanse expressies (B), die natuurlijk verandert aangezien de signatuur van A is veranderd en deze afhankelijk is van A. Signatuur: B: Bexp ( State x heap x env this T ) We schrijven wederom één bestaande regel uit. B [ a1 = a2 ] s h env this { tt if A [ a1 ] s h env this = A [ a2 ] s h env this { ff if A [ a1 ] s h env this? A [ a2 ] s h env this 3.3 State transitie Aangezien de toegevoegde environments en de heap ook dienen te worden verwerkt in de state overgangen hebben wij de oude state transitie gemodificeerd. De aangepaste state transitie ziet er als volgt uit: env this, env do, env p + < S, s, h > ( s, h ) 3.4 Update object declaratie In deze paragraaf zullen we de update functies behandelen die ervoor zorgen dat de environments ook daadwerkelijk worden aangepast bij object declaraties. Update van de env do, bij het declareren van objecten (in D o in R): upd do ( class O is D v D p ; D o, env do, state g 1 ) = upd do (D o, env do [ O ( upd v ( D v, lege state,state g, O), upd p ( D p, lege env p ) ) ], state g ) upd do (e, env do,state g ) = env do In bovenstaand gedeelte maken we gebruik van de functie upd v die de velden van het gedeclareerde object instelt op de begin waarde en de functie upd p die de procedures in de environment opslaat. Upd p heeft de vertrouwde vorm zoals bekend is van While. Update van de initiële waarden van de velden in env do : updv (var x:= a; Dv, state,stateg, Ocur) = updv (Dv, state [x env this leeg],state g, O cur ) where t = a [ this.v p 0 (env do O cur ) v ] A[t ]stateg hleeg 1 state g = de globaal bekende state (s) T3 in het Wild While 9

11 upd v (e, state,state g, O cur ) = state Opmerking: t is de Aexp a met daarin alle voorkomens van this.v s vervangen door de numerieke waarde van v in het huidige object (Ocur) dat nu in de declaratie fase is. Update van de procedures in env do : upd p (proc p is S; D p, env p ) upd p (D p, env p ) upd p (e, env p ) = env p Tenslotte moeten we de env this kunnen aanpassen. Hiervoor introduceren we de triviale functie upd this. Update van env this : upd this ( O name, env this ) = env this O name 3.5 State transitie bij object initialisatie Doordat de objectinstantiaties bijdragen tot een verandering van de heap en niet tot een verandering in een environment moeten deze beschreven worden door middel van state transities. D d ::= object o : = new O ; D d e [object ns ] env do + < D d, s, h [ o ( O, t) ] > d (s, h ) where t = p 0 (env do O) env do + < object o := new O ; D d, s, h > d (s, h ) [noneobjc ns ] < e, s, h > d ( s,h) env do dwingt af dat er geen objecten geïnstantieerd kunne n worden die niet gedeclareerd zijn. Dit komt doordat het een partiële functie is. Alle objecten die geïnstantieerd worden moeten dus voorkomen in env do. Nu moet er nog een nieuwe functie worden geïntroduceerd die de geïnstantieerde objecten opruimt. De functie DD(D d ): T3 in het Wild While 10

12 DD( object o := new O; D d ) = { o } U DD(D d ) DD( e ) = ø Deze functie draagt zorg voor het terugzetten van object instantiaties naar oude waarde bij het verlaten van de huidige scope (block). Zie ook de definitie van block ns en R blockns. We hebben in paragraaf 3.2 de semantiek van A aangepast. Dit leidt ertoe dat we de transitie van D v ook iets dienen aan te passen. Transitie van D v in state g : [var ns ] < D v, s [x A [a] s h ], h > v (s, h) < var x := a ; D v, s, h > v (s, h) [nonevarns] < e, s, h > v ( s,h) Aangezien de state s wordt aangepast bij het verwerken van D v hebben we besloten om hier ook een state transitie te gebruiken in plaats van een update functie, zoals upd v waarbij de env do wordt aangepast. De functie DV(D v ) zullen we niet uitschrijven, aangezien er niks veranderd is. T3 in het Wild While 11

13 3.6 NS Semantiek Hieronder volgen de toegevoegde semantiekregels, de regel [skip ns ] hebben we uitgeschreven om aan te geven hoe de overige regels eruit komen te zien. Behalve de signatuur verandert daar verder niks wezenlijks aan. [R block ns ] < D v, s, h> v (s,h), upd p (D p, env p ), upd do (D o, env do, s) + < D d, s, h > d ( s, h ), env this, env p, env do + < S, s, h > ( s, h ) env this, env p, env do + < Begin D v D p D o D d S End, s, h > (s [DV(D v ) s], h [DD(D d ) h] ) [S block ns ] < D v, s, h> v (s,h), upd p (D p, env p ),env do + < D d, s, h > d ( s, h ), env this, env p, env do + < S, s, h > ( s, h ) env this, env p, env do + < Begin D v D p D d S End, s, h > (s [DV(D v ) s], h [DD(D d ) h] ) [call o.p ns ] env do,upd this (o, env this ), env p + < S, s, h> ( s, h ) where S = p 1 (env do p 0 (h o ) ) p env do, env this, env p + < call o.p, s, h > ( s, h ) [call this.p ns ] env do, env this, env p + < S, s, h> ( s, h ) where S = p 1 (env do p 0 (h env this ) ) p env do, env this, env p + < call this.p, s, env do, env this, env p h > ( s, h ) [ass this.v ns ] env do, env this, env p + < this.v := a, s, h > ( s, h[p 1 (h env this ) v A[a] s h env this ] ) [ass o.v ns ] env do, env this, env p + < o.v := a, s, h > ( s, h[p 1 (h o) v A[a] s h env this ] ) [skip ns ] env do, env this, env p + < skip, s, h > ( s, h ) T3 in het Wild While 12

14 3.7 Voorbeeld begin 1 class O is var y:=1 ; proc p is this.y:= this.y + 2; 2 object o1 = new O; 3 call o1.p ; 4 x := o1.y; 5 end Het resultaat hiervan is dat x de waarde 3 krijgt/ heeft. Ad regel 1: Class O wordt gedeclareerd en toegevoegd aan de env do. env do [ O ( y 1, p this.y:= this.y + 2; ) ] Ad regel 2: Object o1 wordt geïnstantieerd met de velden van O en wordt toegevoegd aan de heap. h [ o1 ( O, y 1) ] Ad regel 3: De body wordt uitgevoerd met this vervangen door de update waarde van env this : o1.y := o1.y +2 ; Resultaat van dit statement is dat het veld o1.y ingesteld wordt op 3, in de heap. env this o1 h [ o1 (O, y 3) ] Ad regel 4: De waarde van het veld o1.y wordt toegekend aan x. s [x 3] Ad regel 5: Alle geïnstantieerde objecten (o1) worden teruggezet op hun oorspronkelijke waarde. T3 in het Wild While 13

15 4. Inheritance Er zijn ve rschillende manieren om inheritance (overerving) van klassen te implementeren. Een manier is om in een subklassen alle velden en procedures (methoden) van de superklasse(n) te kopiëren, zodat er precies kan worden gezien welke velden en procedures er gebruikt kunnen worden. Gedeclareerde velden en procedures in de subklassen worden hier dan ook toegevoegd en als er dan velden en/of procedures opnieuw worden gedeclareerd (door middel van dezelfde naam als in de superklasse), wordt het veld of procedure van de superklasse overschreven. Het nadeel van deze implementatie is dat het nogal veel geheugengebruik heeft. Een andere manier van implementatie is dat er geen informatie van superklasse(n) in een subklasse wordt gekopieerd. Wanneer er dan een veld op procedure wordt aangeroepen, wordt eerst gekeken of dit voorkomt in de subklasse. Als dit niet het geval is, wordt er teruggezocht in de superklasse en dit patroon kan zich dus herhalen als er meer superklassen zijn. Hier is er geen sprake van overhead in het geheugengebruik. Hierbij is het eleganter dat de velden van de superklasse(n) in de subklasse gekopieerd worden (al dan niet overschreven), omdat dan de object initialisatie hetzelfde blijft. Deze tweede implementatie is mooier dan de eerste en we proberen dus ook deze implementatie te realiseren in het vervolg van dit hoofdstuk. 4.1 Syntax Als eerste zal de syntax van While OO moeten worden uitgebreid. Dit kan eenvoudig door alleen D o aan te passen: D o ::= class O is D v D p ; D o class O is subclass O super D v D p ; D o e Waar O super de superklasse is, waarvan overgeërfd wordt. T3 in het Wild While 14

16 4.2 Semantiek In de semantiek zal meer aangepast moeten worden, de Envdo wordt namelijk uitgebreid. Dit heeft het gevolg dat de grootste veranderingen in de update functie van Env do zullen zitten Env do uitbreiden Bij elk gedeclareerde object moet nu ook een eventueel O type van de superklasse bijgehouden worden, zodat bij een procedure aanroep er omhoog gezocht kan worden in de klassenstructuur naar deze procedure. Formeel gezien: Env do : O type (O type x State x Env p ) O type O type State Env p O1 e X 3 P body Y 5 q body Voorbeeld 4.1:.. class O 1 is var x = 3; var y = 5; proc p is this.x = 5; proc q is this.y = 3; O2 O1 X 1 P body Y 5 class O2 is subclass O1 var x = 1; proc p is this.x = 3; object o2 := new O2; call o2.q;.. Deze aanroep is dus correct en zal de procedure q uit klasse O1 uitvoeren en zal dus de waarde van y in klasse O2 op 3 zetten Update functie Als eerste zal een klasse, die geen subklasse is, worden herschreven: upd do ( class O is D v D p ; D o, env do, state g ) = upd do ( class O is subclass e D v D p ; D o, env do, state g ) T3 in het Wild While 15

17 Hierdoor kan de echte update in de onderstaande regel worden gedaan. Hier worden ook twee hulpfuncties geïntroduceerd, namelijk upd p en upd v. De functie upd p verandert niet, maar het opzoeken van procedures zal later nog behandeld worden. upd do ( class O is subclass O super D v D p ; D o, env do, state g ) = upddo (Do, envdo [ O ( Osuper, upd v ( D v, lege state, state g, O, O super ), upd p ( D p, lege env p ) )], state g ) Als D o leeg is, wordt de geupdate env do opgeleverd: upd do (e, env do,state g ) = env do De functie upd v : Omdat de velden van alle superklassen overgeërfd moeten worden, gaan we alle velden van de superklassen kopiëren. Om ervoor te zorgen dat overschrijving van velden wel mogelijk is, zullen we recursief naar de top/root/pater familias-klasse zoeken en vervolgens op de terugweg alle velden kopiëren naar de nieuw te declareren klasse. Op deze wijze worden velden die door een superklasse zijn aangemaakt, indien nodig overschreven door de declaratie waarden van subklassen. Schematisch: T3 in het Wild While 16

18 Het algoritme voor de upd v functie in pseudo-code: functie update (O cur, O super ) { if (O super = = leeg) //root is leeg voegtoe_d v (O cur ) else //root is niet leeg update (O super, O super ) //recursie voegtoe_d v (O cur) //backtracking } functie voegtoe_dv (O cur ) { if (D v van O cur = = leeg) return //D v leeg, dan stoppen } else voeg eerste element van D v van O cur toe aan de nieuwe state voegtoe_dv (D v van O cur zonder eerste element) Ten slotte de aangepaste upd v functie: upd v (var x:=a; D v, state, state g, O cur, e) = //root is leeg upd v (D v, state [x A[t]state g h leeg env this leeg], state g, O cur, e ) //voegtoe_d v where t = a [ this.v p 1 (env do O cur ) v ] upd v (var x:=a; D v, state, state g, O cur, O super ) = merge (upd v (var x:=a; D v, state, state g, O super, p 0 (env do O cur )), upd v (var x:=a; D v, state, state g, O cur, e ) ) upd v (e, state, state g, O cur, e) = state //root is niet leeg //recursie //backtracking //D v leeg, dan stoppen NB: De functie merge doet het volgende: State1 x State2 State[voeg alle variabelen uit State1 samen met alle variabelen uit State2, waarbij indien de variabelenaam in State1 al bestaat deze overschreven wordt door de waarde in State2] 4.3 Object Initialisatie De object initialisatie verandert niet, omdat we alle velden weer overnemen vanuit de gedeclareerde klasse en we de procedures gaan opzoeken indien er een aanroep (call) wordt uitgevoerd. T3 in het Wild While 17

19 4.4 Semantiekregels Alle semantiekregels blijven hetzelfde, behalve de [call o.p ns ] en [call this.p ns ]. Merk op dat de upd do functie bij de regel [R block ns ] de aangepaste functie uit hoofdstuk is. [call o.p ns ] env do,upd this (o, env this ), env p + < S, s, h> ( s, h ) where S = lookup(p 0 (h o), p) env do, env this, env p + < call o.p, s, h > ( s, h ) [call this.p ns ] env do, env this, env p + < S, s, h> ( s, h ) where S = lookup(p 0 (h env this ), p) env do, env this, env p + < call this.p, s, env do, env this, env p h > ( s, h ) De functie lookup: lookup: (O type x P name ) Statement lookup ( o, p) = If (! Exists (p 2 (env do o), p) ) Then lookup ( p 0 (env do o ), p) Else p 2 (env do o ) p De functie Exists: Exists: (Env p x P name ) Boolean Exists geeft true terug als de P name in Env p voorkomt en false als P name niet in Env p voorkomt. NB: Merk op dat p 2 (env do o )p een p kan proberen op te zoeken die niet bestaat. Het is dan niet duidelijk wat de partiële functie Env p gaat opleveren en daarom hebben we de functie Exists geïntroduceerd. Deze functie werken we niet verder uit. T3 in het Wild While 18

20 4.5 Voorbeeld begin 1 class O1 is var y:=1 ; proc p is this.y:= this.y + 2; 2 class O2 is subclass O1 var x:=2; 3 object o2 = new O2; 4 call o2.p ; 5 y := o2.x; 6 z := o2.y; 7 end Ad regel 2: class O2 wordt gedeclareerd en toegevoegd aan de env do. env do [O2 (O1, (y 1, x 2), e )] Ad regel 3: Object o2 wordt geinstantieerd met de velden van O1 en O2 en wordt toegevoegd aan de heap: h[ o2 (O1, (y 1, x 2))] Ad regel 4: De body van p wordt opgezocht met de lookup functie. Deze wordt uit de superklasse O1 gehaald. Resultaat van het statement is dat het veld o2.y ingesteld wordt op 3 in de heap. Ad regel 5: De waarde van o2.x wordt aan y toegekend. Ad regel 6: De waarde van o2.y wordt aan z toegekend. T3 in het Wild While 19

21 5. Keywords Public & Private In het kader van dit werkstuk definiëren we de verschillende types velden en procedures als volgt: (conform de definities zoals gebruikt in Java). Public methoden & velden: - mogen buiten het object aangeroepen worden - mogen worden aangeroepen in subclasses van het object Private methoden & velden - mogen alleen worden aangeroepen binnen het huidige object - mogen niet worden aangeroepen binnen subclasses van het object De overige keywords aangaande methoden en velden zullen we buiten beschouwing laten (final, static, friend en dergelijke). 5.1 Syntax uitbreiding Om de syntax zo overzichtelijk mogelijk te houden en niet te veel af te wijken van het While OO hebben we de syntactische uitbreidingen tot een minimum beperkt. Bij het declareren van velden en methoden in klassen geven we enkel een extra indicator mee u (public) of i (private). Deze indicator kan alleen meegegeven worden bij velden en procedures in klassen. Voor reguliere velden en procedures heeft het geen zin deze indicator mee te geven, syntactisch wordt dit afgedwongen door een aangepaste D v1 en D p1 voor D o. ind::= u i D o ::= class O is D v1 D p1 ; D o e D v1 ::= var ind x := a ; D v1 e D p1 ::= proc ind p is S ; D p1 e T3 in het Wild While 20

22 5.2 Semantiek De State in env do zal aangepast moeten worden zodat deze een tupel oplevert met de Z waarde en een indicator. Ook de envp zal van een dergelijke constructie worden voorzien: Formeel gezien: State : V name ( Ind x Z ) Env p : P name ( Ind x Stm ) Env do : O type (State x Env p ) Schematisch: O x u 3 P i body y i 4 Q u body Voorbeeld 5.1:.. class O n is var i x:= 3; var u y:= this.x + 1; proc u p is q:= 3; In het bovenstaande voorbeeld maken we een class O aan in env do met private veld x, public veld y en public methode p. Bij een call o.p zal er alleen nog maar worden gezocht naar de public procedures ( welke dus een u indicator hebben). Zodoende kunnen er dus geen private procedures worden aangeroepen buiten de class. Voor de o.v geldt hetzelfde natuurlijk hetzelfde. Bij een this.v of een this.p is dit niet nodig omdat hier sprake is van een aanroep vanuit de class en dan mogen zowel private als public methoden / velden gebruikt worden. Overerving & public, private Indien er sprake is van overerving van classes zullen we een extra probleem moeten tackelen: subclasses erven geen private velden en methoden over. De oplossing voor de velden is eenvoudig, de nieuw geïntroduceerde upd v zal alleen nog maar de public velden van alle superclasses moeten kopiëren naar de State van een nieuwe subclass in env do, bij een object declaratie. Bij de initialisatie kunnen vervolgens weer alle velden in de heap worden gezet, dit zijn immers toch alle public velden. T3 in het Wild While 21

23 Bij de aanroep van procedures wordt het complexer, de lookup functie zal bij een call o.p de gevraagde procedure opzoeken. Er mag alleen gekeken worden naar public procedures, private procedures mogen alleen in de class worden aangeroepen. De functie lookup 2 : lookup2: (Otype x Pname) Statement lookup 2 ( o, p) = If (! Exists (p 2 (env do o), p)) Then lookup 2 ( p 0 (env do o ), p) Else If ( ispublic (p 2 ( env do o), p )) p 1 (p 2 (env do o ) p) De functie ispublic: ispublic: (Env p x P name ) Boolean ispublic geeft true terug als de Procedure p in Env p public is (de u indicator heeft) en false indien deze private is (i indicator). Indien call this.p wordt gebruikt zal eveneens de functie moeten worden opgezocht. Hier moet echter onderscheid gemaakt worden tussen een aanroep in een subclass of de originele class. Bij een subclass mogen geen private functies van de superclass worden aangeroepen. Om dit op te lossen kan een aparte lookup 3 gedefinieerd worden. Deze maakt geen onderscheid maakt tussen private en public procedures indien er niet gezocht hoeft te worden. Dit houdt in dat de functie in de eigen class is gedeclareerd en deze dus altijd aangeroepen mag worden. Indien de functie opgezocht moet worden in superclasses moet wel weer gecontroleerd worden, hiervoor kan de oude lookup 2 voor gebruikt worden. De functie lookup 3 : lookup 3 : (O type x P name ) Statement lookup 3 ( o, p) = If (! Exists (p 2 (env do o), p)) Then lookup 2 ( p 0 (env do o ), p) Else p 1 ( p 2 (env do o ) p) T3 in het Wild While 22

24 5.3 Semantiekregels Het enige dat verandert aan de semantiekregels is de wijze waarop de procedurebody wordt opgezocht. [call o.p ns ] env do,upd this (o, env this ), env p + < S, s, h> ( s, h ) where S = lookup 2 ( p 0 (h o ) p) env do, env this, env p + < call o.p, s, h > ( s, h ) [call this.p ns ] env do, env this, env p + < S, s, h> ( s, h ) where S= lookup 3 ( p 0 (h env this ) p) env do, env this, env p + < call this.p, s, env do, env this, env p h > ( s, h ) T3 in het Wild While 23

25 6. Geneste objecten In onze eerste implementatie hebben we ervoor gekozen om alleen aan het begin van het programma object declaraties toe te staan. Dit leidde ertoe dat er geen objecten gedeclareerd konden worden in een object. Dit is iets wat in een gangbare OO taal wel kan. Vandaar dat we in dit hoofdstuk de extra moeilijkheden zullen beschrijven die deze uitbreiding met zich mee brengt. We zullen tevens een aanzet geven tot een concrete uitwerking ervan. Hetzelfde zullen we doen voor het instantiëren van objecten in objecten. Denk hierbij aan een Java klasse waarin als veld een andere klasse zit. 6.1 Syntax De R regel in de syntax die we in hoofdstuk 2 hebben toegevoegd kan uit de syntax verdwijnen. De S verandert iets: S::= begin D v D p D o D d S end We hebben ervoor gezorgd dat er in een Statement nu dus ook objecten kunnen worden gedeclareerd. Dit heeft echter enkele verdere gevolgen voor de syntax. Je wilt deze geneste objecten ook kunnen benaderen. Er moet dus bijvoorbeeld een call o.o.o.p mogelijk worden gemaakt. Maar ook een call this.o.o.p Hiervoor introduceren we een semantische regel O*. Deze regel produceert een reeks van nul of meer o. s: O* ::= o.o* e De regel kunnen we als het volgt in de andere syntax regels verwerken: a::=.. o.o*v this.o*v S::=. call o. O*p call this. O*p o. O*v := a this. O*v := a Voor het instatiëren van objecten in objecten moeten we ervoor zorge n dat de regel D o worden aangepast zodat hierin ook object instantiaties kunnen voorkomen: D o ::= class O is D v D d D p ; D o e 6.2 States en environment We hebben er nu voor gezorgd dat syntactisch objecten in objecten kunnen worden gedeclareerd en geinstantieerd. We zullen hiervoor extra informatie moeten bijhouden in de states en evironments. T3 in het Wild While 24

26 Allereerst zal voor het bijhouden van geneste object declaraties de env do worden veranderd. Elk gedeclareerd object heeft nu een eigen lokale env do van objecten die in hem zijn gedeclareerd. De signatuur verandert dus als volgt: Env do : O type (State x Env p x Env do ) Een soortgelijke aanpassing is nodig voor de heap. Er moet in de heap nu bij elk geïnstantieerd object ook een lokale heap worden toegevoegd. In de geneste heap worden de geïnstantieerde objecten in dit object opgeslagen. De signatuur van de heap verandert als volgt: h : O name (O type x State x h) De update functies zullen nu vanzelfsprekend ook veranderen en worden uitgebreid, maar daar zullen we geen aandacht aan schenken. Het updaten wordt ingewikkelder, maar er verandert niks wezenlijks aan de vorige hoofdstukken. Het zou meer van het zelfde worden. 6.3 Semantiek We zullen ons wat betreft het uitbreiden van de semantiek vooral richten op het correct afhandelen van de punt operator. Dit aangezien de andere veranderingen vooral gebaseerd zullen zijn op het juist aanroepen van de update functies. Het probleem zit hem in het elegant afhandelen van de O* regel. Deze moet er voor zorgen dat je door de geneste structuur in de heap en de env do kunt zoeken. Hiervoor zien wij twee mogelijkheden: 1. We kunnen een functie definiëren die onder andere de gehele O* regel als argument mee krijgt. De finesse van het opzoeken verschuiven we op deze manier naar deze functie. Dit werkt in principe natuurlijk prima, maar vinden we niet elegant. 2. Een ander alternatief is dat we een nieuwe environment introduceren die een O name oplevert. Vergelijkbaar met de env this. Het idee is dat we deze environment als een soort pointer door de geneste structuur laten lopen bij het van vooraf aan uitlezen van o s van de O* s. Uiteindelijk hoef je alleen maar een functie te maken die een naam en een pointer naar de geneste structuur meekrijgt en dat wat je zoekt oplevert. Dit laatste vinden we een beter alternatief, omdat je zo tijdens het lezen van de o s al actie onderneemt. Iets wat je in het echt ook zou doen. Een nadeel is de nieuwe environment, wat op zich geen probleem is, maar die maakt de semantische regels wel een stuk minder leesbaar. T3 in het Wild While 25

27 Conclusie We hebben onderzoek gedaan naar de uitbreiding van de syntax en semantiek van de taal While met OO aspecten, te weten object declaraties en object instantiaties en we hebben de benodigdheden beschreven voor inheritance en geneste klassen. Het blijkt dat het niet eenvoudig is om OO te beschrijven in NS. Dat komt doordat er bij OO een heel samenhangend geheel van concepten komt kijken, zoals inheritence, keywords en geneste klassen. We hebben er eerst voor gekozen om het voor een eenvoudig geval te beschrijven, dat is vrij elegant gelukt. De uitbreidingen zijn echter ingewikkelder. Het blijkt dat er al gauw kunstgrepen worden toegepast zoals het uitbreiden van de environment of extra velden in state. Dat is op zich geen probleem, maar wanneer je alle concepten tegelijk wilt vangen in de semantiek, dan wordt het een onoverzichtelijk geheel. Wanneer we het puur OO zouden hebben gemaakt, dan was het waarschijnlijk eleganter geworden. Echter de kans bestaat dat we dan tegen andere problemen zouden aanlopen, die we nu nog niet overzien. Denk hierbij bijvoorbeeld aan een beginpunt van het uitvoeren (main functie). T3 in het Wild While 26

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

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

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn.

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn. Objectgeoriënteerd PHP (versie 5) Kennisvereisten: Ervaring met programmeren in PHP met MySQL Je weet wat een class of klasse is Je weet wat een instantie van een klasse (een object) is Je weet wat een

Nadere 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

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

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

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

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

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

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten

Nadere informatie

Abstracte klassen & Interfaces

Abstracte klassen & Interfaces Abstracte klassen & Interfaces Overerving public class Vierhoek {... Vierhoek public class Rechthoek extends Vierhoek {... public class Ruit extends Vierhoek {... Rechthoek Ruit Elke rechthoek is een vierhoek.

Nadere informatie

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces. Hoofdstuk 1: Inleiding Objectoriëntatie: 1. Objecten & klassen: samenwerking van componenten om bepaald doel te bereiken; herbruikbaarheid. 2. Encapsulation: afschermen gedragingen en kenmerken van de

Nadere informatie

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

10 Meer over functies

10 Meer over functies 10 Meer over functies In hoofdstuk 5 hebben we functies uitgebreid bestudeerd. In dit hoofdstuk bekijken we drie andere aspecten van functies: recursieve functies dat wil zeggen, functies die zichzelf

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

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

maplev 2012/5/1 15:47 page 469 #471 Procedures (vervolg)

maplev 2012/5/1 15:47 page 469 #471 Procedures (vervolg) maplev 2012/5/1 15:47 page 469 #471 Module 30 Procedures (vervolg) Onderwerp Voorkennis Expressies Procedures: Bereik van lokale variabelen, call by evaluated name, level-1-evaluatie van lokale variabelen,

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

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

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser colleges recursieve datastructuren college 9 interpreteren: waarde van bomen bepalen transformeren: vorm van bomen veranderen parseren herkennen van expressie in de tekst herkennen van functies onderwerp

Nadere 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

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

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

Nadere informatie

Deeltentamen Grammatica s en ontleden 22 december 2005

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

Nadere informatie

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

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

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

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. week 11: november kosterswa/pm/ Programmeermethoden Recursie week 11: 21 25 november 2016 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Derde programmeeropgave 1 Het spel Gomoku programmeren we als volgt: week 1: pointerpracticum,

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

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

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

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 25 november 2015 Herhaling Meer herhaling Recursie Mutuele recursie Objecten Herhaling Fibonacci class Fibonacci { public static void fibonaccitot(int bovengrens)

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

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

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

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

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

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

Nadere informatie

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

Tentamen Imperatief Programmeren

Tentamen Imperatief Programmeren Tentamen Imperatief Programmeren Maandag 22 oktober 2001 Toelichting Dit is een open boek tentamen, d.w.z. het cursusboek mag gebruikt worden. N.B.: Het tentamen is individueel: voor het maken van de opgaven

Nadere informatie

{ auteur, toelichting }

{ auteur, toelichting } Programmeren Blok A Trilogie van (programmeer)talen http://www.win.tue.nl/ wstomv/edu/ip0/ College Syntaxis (vormleer): Hoe ziet t eruit, hoe schrijf je t? Tom Verhoeff Technische Universiteit Eindhoven

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

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

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

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

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

Opdrachten herhalen. public void tekenscherm (object o, PEA pea) { int x; x = 1; zolang de voorwaarde geldig is

Opdrachten herhalen. public void tekenscherm (object o, PEA pea) { int x; x = 1; zolang de voorwaarde geldig is Opdrachten herhalen public void tekenscherm (object o, PEA pea) { int x; x = 1; while ( x

Nadere informatie

Practicumopgave 3: SAT-solver

Practicumopgave 3: SAT-solver Practicumopgave 3: SAT-solver Modelleren en Programmeren 2015/2016 Deadline: donderdag 7 januari 2016, 23:59 Introductie In het vak Inleiding Logica is onder andere de propositielogica behandeld. Veel

Nadere 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

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

Objectgericht programmeren 1.

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

Nadere informatie

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

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

Een gelinkte lijst in C#

Een gelinkte lijst in C# Een gelinkte lijst in C# In deze tutorial ga demonstreren hoe je een gelinkte lijst kan opstellen in C#. We gaan een klasse schrijven, die een gelijkaardige functionaliteit heeft als een ArrayList, namelijk

Nadere informatie

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

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

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

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

Semantiek (2IT40) Bas Luttik. HG 7.14 tel.: Hoorcollege 8 (7 juni 2007)

Semantiek (2IT40) Bas Luttik.  HG 7.14 tel.: Hoorcollege 8 (7 juni 2007) Bas Luttik s.p.luttik@tue.nl http://www.win.tue.nl/~luttik HG 7.14 tel.: 040 247 5152 Hoorcollege 8 (7 juni 2007) Functionele talen Idee: een programma definieert reeks (wiskundige) functies. Programma

Nadere informatie

ALGORITME objectgeoriënteerd programmeren

ALGORITME objectgeoriënteerd programmeren ALGORITME objectgeoriënteerd programmeren Gunter Schillebeeckx 1 objectgeoriënteerd programmeren Object Klasse Instantie Eigenschap Methode Inkapseling Polymorfisme Overerving 2 Inleiding Kern Samenvatting

Nadere informatie

DIAGNOSTISCHE TOETS Softwaresystemen UITWERKING

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

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 18 december 2015 Overerving (inheritance) Constructors Overriding Inheritance demo Exceptions Zelf exceptions veroorzaken Overerving (inheritance) 2-dimensionaal

Nadere informatie

Modeleren. Modelleren. Together UML. Waarvan maken we een model? overzicht les 14 t/m 18. ControlCenter 6.2

Modeleren. Modelleren. Together UML. Waarvan maken we een model? overzicht les 14 t/m 18. ControlCenter 6.2 Modelleren Werkelijkheid Modelleren Modeleren Waarvan maken we een model?!analyse " Maak een model van de te automatiseren werkelijkheid of van het op te lossen probleem! Domeinkennis = structuur! Functionele

Nadere informatie

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

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

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

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

Een natuurlijke semantiek voor prototype overerving en lexicaal bereik

Een natuurlijke semantiek voor prototype overerving en lexicaal bereik Een natuurlijke semantiek voor prototype overerving en lexicaal bereik Tim Steenvoorden & Kelley van Evert juni Inhoudsopgave Inleiding Notatie en terminologie. Functies........................................

Nadere informatie

College Notatie, Recursie, Lijsten

College Notatie, Recursie, Lijsten College 2016-2017 2. Notatie, Recursie, Lijsten Doaitse Swierstra (Jeroen Bransen) Utrecht University September 13, 2016 Functieapplicatie functieapplicatie associeert naar links: als x in f x y moet kiezen

Nadere informatie

NAAM: Programmeren 1 Examen 21/01/2011

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

Nadere informatie

{ 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

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

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

Nadere informatie

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

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

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

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS Laatste aanpassing: 15 oktober 2003 Inhoudsopgave 1 Bestandsnamen 3 2 Organizatie Bestanden 3 3 Indentatie

Nadere informatie

Elfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort

Elfde college algoritmiek. 18 mei Algoritme van Dijkstra, Heap, Heapify & Heapsort Algoritmiek 018/Algoritme van Dijkstra Elfde college algoritmiek 18 mei 018 Algoritme van Dijkstra, Heap, Heapify & Heapsort 1 Algoritmiek 018/Algoritme van Dijkstra Uit college 10: Voorb. -1- A B C D

Nadere informatie

Veel succes! 1. Gegeven is de volgende klasse:

Veel succes! 1. Gegeven is de volgende klasse: Dit tentamen is in elektronische vorm beschikbaar gemaakt door de TBC van A Eskwadraat. A Eskwadraat kan niet aansprakelijk worden gesteld voor de gevolgen van eventuele fouten in dit tentamen. Derde deeltentamen

Nadere informatie

Datastructuren en algoritmen

Datastructuren en algoritmen Datastructuren en algoritmen Doelstelling Datastructures + algorithms = programs Boek van Niklaus Wirth: bedenker Pascal en Modula Datastructuur: structuur om informatie op te slaan Algoritme: voorschrift

Nadere informatie

Evolutie van Multiple Inheritance in Python

Evolutie van Multiple Inheritance in Python Evolutie van Multiple Inheritance in Python Voor Semantiek en Correctheid Pol Van Aubel polvanaubel@student.ru.nl s3056414 Wouter Geraedts w.geraedts@student.ru.nl s0814857 25 juni 2010 Samenvatting We

Nadere informatie

Voorbeeld: Simulatie van bewegende deeltjes

Voorbeeld: Simulatie van bewegende deeltjes Voorbeeld: Simulatie van bewegende deeltjes Simulatie - object Ruimte - objecten Deeltje - objecten Button - objecten Simulatie Samenhang van objecten sim geërfd van Form stap zelf gedeclareerd auto r1

Nadere informatie

Tweede college algoritmiek. 12 februari Grafen en bomen

Tweede college algoritmiek. 12 februari Grafen en bomen College 2 Tweede college algoritmiek 12 februari 2016 Grafen en bomen 1 Grafen (herhaling) Een graaf G wordt gedefinieerd als een paar (V,E), waarbij V een eindige verzameling is van knopen (vertices)

Nadere informatie

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/ Programmeermethoden Recursie Walter Kosters week 11: 20 24 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Vierde programmeeropgave 1 De Grote getallen programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

7 Omzetten van Recursieve naar Iteratieve Algoritmen

7 Omzetten van Recursieve naar Iteratieve Algoritmen 7 Omzetten van Recursieve naar Iteratieve Algoritmen Het lijkt mogelijk om elke oplossings-algoritme, die vaak in eerste instantie recursief geformuleerd werd, om te zetten in een iteratieve algoritme

Nadere informatie

Programmeren Blok B. Onderwerpen. wstomv/edu/2ip05/ College 8. Tom Verhoeff

Programmeren Blok B. Onderwerpen.   wstomv/edu/2ip05/ College 8. Tom Verhoeff Programmeren Blok B Onderwerpen http://www.win.tue.nl/ wstomv/edu/2ip05/ College 8 Tom Verhoeff Technische Universiteit Eindhoven Faculteit Wiskunde en Informatica Software Engineering & Technology Verdelen

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

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

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

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

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

Nadere informatie

Opdracht 4: Overzichtelijker en generieker

Opdracht 4: Overzichtelijker en generieker Opdracht 4: Overzichtelijker en generieker Algoritmisch Denken en Gestructureerd Programmeren in Greenfoot c 2015 Renske Smetsers-Weeda & Sjaak Smetsers Op dit werk is een creative commons licentie van

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

NHibernate als ORM oplossing

NHibernate als ORM oplossing NHibernate als ORM oplossing Weg met de SQL Queries Wat is ORM? ORM staat in dit geval voor Object Relational Mapping, niet te verwarren met Object Role Modeling. ORM vertaalt een objectmodel naar een

Nadere informatie

{ 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

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/ Programmeermethoden Functies vervolg Walter Kosters week 5: 1 5 oktober 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Files manipuleren 1 Deze void-functie telt niet-lege regels in een file invoer: void

Nadere informatie

TENTAMEN Programmeren 1 VOORBEELDUITWERKING

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

Nadere informatie

Semantiek (2IT40) Jos Baeten. HG 7.19 tel.: Hoorcollege 3 (12 april 2007)

Semantiek (2IT40) Jos Baeten.  HG 7.19 tel.: Hoorcollege 3 (12 april 2007) Jos Baeten josb@wintuenl http://wwwwintuenl/~josb/ HG 719 tel: 040 247 5155 Hoorcollege 3 (12 april 2007) Voorbeeld [Bewijstechniek 2 niet altijd succesvol] Executie van commands is deterministisch: c

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

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

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

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

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken - belangrijkste punten: - ontleden van de programmatekst - bijhouden van de datastructuren Data Structuren en Algoritmen

Nadere informatie