.class bytecode. Compiler voor processor 1. Compiler voor taal 1. intermediate language.il assembly. Compiler voor taal 2. Compiler voor processor 2

Maat: px
Weergave met pagina beginnen:

Download ".class bytecode. Compiler voor processor 1. Compiler voor taal 1. intermediate language.il assembly. Compiler voor taal 2. Compiler voor processor 2"

Transcriptie

1 1 Bijlage A C# voor Java-kenners A.1 Taal- en compiler-versies C# is een iets jongere taal dan Java: de eerste versie is van 2000 waar Java ontstond in Sinds april 2010 is er versie 4.0 die ondersteund wordt door de Visual Studio 2010 compiler. Dit sluit ook aan bij versie 4 van het.net framework. Als Game-library gebruiken we XNA. Daarvan is de versie 4 nog in het beta-stadium; de recentste stabiele versie is 3.1 die ondersteund wordt door de Visual Studio 2008 compiler. Net als Java wordt C# vertaald naar code voor een virtuele machine. Bij Java wordt die code byte code genoemd bij C# is dit code in de zogeheten common intermediate language. Een verschil met Java is dat Java byte code wordt geïnterpreteerd terwijl de intermediate language wordt gecompileerd naar machinecode. Dit gebeurt just in time (JIT) dat wil zeggen vlak voordat de code voor het eerst wordt uitgevoerd. De Visual Studio compiler genereert code voor het Windows operating system. Anders dan wel wordt gedacht zijn er ook andere compilers. De belangrijkste is Mono. Deze ligt iets achter bij in ondersteunde versies van taal en libraries. Vergeleken met Java laat de cross-platform mogelijkheid te wensen over. Daar staat tegenover dat de intermediate language het backend is van meerdere talen; C# programma s kunnen dus samenwerken met modules die in andere talen zoals Visual Basic of F# zijn geschreven. Zie figuur 1 voor een vergelijking van de compilatie-pipeline in Java en C#. Java:.java sourcecode Compiler.class bytecode Interpreter voor processor 1 Interpreter voor processor 2 C#:.cs sourcecode.vb sourcecode Compiler voor taal 1 Compiler voor taal 2 intermediate language.il assembly Compiler voor processor 1 Compiler voor processor 2.exe machinecode voor processor 1.a machinecode voor processor 2 Figuur 1: Compilatie-pipeline voor Java en C#

2 2 C# voor Java-kenners blz. 3 A.2 Hallo C# (console-versie) In Java hadden we de keuze om een applet of een application te maken. In C# zijn er geen applets en zal een programma dus altijd een application met een methode Main zijn. Het simpelste voorbeeld is een console-applicatie die van de standaardinvoer leest en naar de standaarduitvoer schrijft. In listing 1 staat een voorbeeld. De overeenkomst met een soortgelijk Java-programma is evident maar er zijn ook kleine verschillen die in dit programma opvallen. Gebruik hoofdletters voor public members Net als in Java zijn namen in C# hoofdlettergevoelig en is er een conventie (niet verplicht voor de compiler maar zo gehanteerd in de library en door goed-opgevoede programmeurs) welke namen met een hoofdletter worden geschreven. Die conventie verschilt: werden in Java klassen met een hoofdletter geschreven en methoden met een kleine letter in C# worden public methoden (en andere class-members) ook met een hoofdletter geschreven. Private class-members lokale variabelen en parameters worden met een kleine letter geschreven. Net als in Java worden in C# primitieve typen (int char enz.) met een kleine letter geschreven en klassen met een hoofdletter. In het programma wordt het type string met een kleine letter geschreven en inderdaad is string in C# een primitief type. Maar een string-variabele is wel degelijk net als in Java een object-verwijzing. De reden dat string toch een primitief type is is dat de compiler speciale dingen doet met dit type (constanten maken als de programmeur quotes gebruikt automatisch ToString aanroepen waar nodig enz.). Voor het type object geldt iets dergelijks. Overigens zijn er in C# toch ook klassen String en Object en zijn die types helemaal uitwisselbaar met string en object. Verstokte Java-programmeurs kunnen deze types dus gewoon met een hoofdletter blijven schrijven maar in het wild zie je meestal de kleine-letterversies. Schrijven naar standaarduitvoer De methode WriteLine is een statische methode in de klasse Console. Op het eerste gezicht lijkt dat een verschil met de Java-aanpak waar println een niet-statische methode is die wordt aangeroepen met het statische object System.out onder handen. In C# is dat ook mogelijk want er bestaat een statisch object Console.Out die een niet-statische methode WriteLine kent. De statische Console.WriteLine is alleen maar een convenience functie die alsnog Console.Out.WriteLine aanroept. Keus uit 4 versies van Main Het schrijven van een methode Main is net als main in een Java-application verplicht. Maar er is keuze uit 4 varianten: met of zonder een string-array parameter en met void of int als resultaat. Als je de command-line arguments niet nodig hebt is het gemakkelijker om Main zonder parameters te declareren en als je een exit-code naar het operating system wil teruggeven kun je Main een int laten opleveren. Importeren van libraries De klasse Console die in het voorbeeldprogramma wordt gebruikt is afkomstig uit een library. De bewuste library (System) moet met een using-directive worden aangevraagd. Dit is vergelijkbaar met het import-directive in Java. In Java importeer je echter losse klassen (al kun je met * alle klassen van een library tegelijk importeren) in C# krijg je altijd alle klassen van de library (al kun je met wat extra moeite ook losse klassen importeren). De library System moet anders dan in Java expliciet worden aangevraagd. Impliciete aanroep van ToString Net als in Java is de operator + overloaded om strings te concateneren. Indien één van de parameters een ander type heeft wordt daarvan net als in Java de methode ToString aangeroepen. Dat geldt zelfs als zo n parameter een standaardtype zoals int heeft want in C# kunnen ook standaardtypen methodes hebben. Properties De lengte van de string wordt berekend door.length. Anders dan in Java is dit geen methode-aanroep en staan er dus geen haakjes achter Length. Maar wat is het dan wel? Op het eerste gezicht zou het om een public membervariabele van de klasse string kunnen gaan maar dat is niet het geval: dan zou je immers zomaar de lengte van een string kunnen aanpassen en

3 A.2 Hallo C# (console-versie) 3 using System; class Hallo2 5 static void Main() string ; Console.WriteLine("Wat is je?"); = Console.ReadLine(); 10 Console.WriteLine("Hallo " + + "!"); Console.WriteLine("Je heeft " +.Length + " letters." ); Console.ReadLine(); Listing 1: Hallo2/Hallo2.cs dat is natuurlijk niet mogelijk. De member Length van een string is een nieuw soort member: een property. De programmeur van een klasse bepaalt of een property read-only is dus alleen maar opgevraagd mag worden of dat hij ook (met een toekenningsopdracht) gewijzigd mag worden. Ook bepaalt de programmeur van de klasse wat er gebeurt als een property wordt opgevraagd en/of veranderd: correspondeert de property simpelweg met een private member-variabele? Of wordt de property uitgerekend aan de hand van andere member-variabelen? Als gebruiker van een property kun je niet zien hoe die is geïmplementeerd. In het geval van de Length van een string zou het kunnen zijn dat de lengte expliciet is opgeslagen maar net zo goed zouden de characters van de string alsnog geteld kunnen worden op het moment dat de Length wordt opgevraagd.

4 4 C# voor Java-kenners blz. 5 blz. 7 blz. 5 A.3 Hallo C# (window-versies) We gaan twee window-gebaseerde versies van een Hallo-programma bekijken: eentje waarin de tekst op een Label-component wordt getoond (listing 2) en eentje waarin de tekst zelf met behulp van een Graphics-object wordt getekend (listing 3). Form: superklasse voor window-klassen In Java maak je een window-gebaseerde applicatie door een subklasse van Frame te schrijven en daar in main een object van aan te maken. In C# gaat dat precies zo alleen heet de superklasse hier Form uit de library System.Windows.Forms. De klasse-header van HalloForm in listing 2 laat zien hoe je in C# een subklasse maakt: niet met extends zoals in Java maar met een dubbelepunt zoals in C++. In de methode Main wordt een object van deze zelfgemaakte subklasse aangemaakt net zoals je in Java zou doen. Waar je in Java vervolgens de methode show van het nieuwe object zou aanroepen wordt in C# het nieuwe object echter meegegeven aan de statische methode Run van de klasse Application. Een programma met meerdere klassen In het voorbeeldprogramma is de methode Main ondergebracht in een eigen klasse. Dat is net zoals in Java niet strikt noodzakelijk: je zou hem er ook bij kunnen smokkelen in de andere klasse. Maar zeker als die andere klasse wat groter wordt is het gebruikelijker om Main in een aparte klasse te zetten. Meerdere klassen kunnen samen in één source-file staan. anders dan in Java zijn er geen voorwaarden aan het publiek-zijn van die klasse of aan de geving van de file. Properties Properties worden volop gebruikt in de Forms-library. In de constructor van HalloForm worden de properties Text BackColor en Size aangepast om het hoofdwindow naar smaak aan te passen. Het vergeten aan te passen van de Size is overigens minder fataal dan in Java: in Java is de default size (00) in C# is dat (400400) zodat er in ieder geval iets te zien is. In de constructormethode wordt verder een Label-object aangemaakt waarvan ook de nodige properties worden aangepast. Omdat een C#-form standaard geen layoutmanager heeft moet van elke control expliciet de Location worden vastgelegd. Controls in een GUI Alle controls waaruit de grafische userinterface is opgebouwd moeten worden meegegeven aan Add. In Java AWT schrijf je this.add(c) in Java Swing is dat this.getcontentpane().add(c). In C# lijkt het op dat laatste: this.controls.add(c). De constructormethode van controls zoals Label heeft in C# geen parameters. Alles wat er aan controls valt te parameteriseren gebeurt via properties. Andere controls die er bestaan zijn onder andere Button TextBox (met een boolean property Multiline) en TrackBar (schuifregelaar met een schaalverdeling).

5 A.3 Hallo C# (window-versies) 5 using System.Windows.Forms; using System.Drawing; class HalloForm : Form 5 public HalloForm() this.text = "Hallo"; this.backcolor = Color.Yellow; 10 this.size = new Size( ); Label groet; groet = new Label(); groet.text = "Hallo allemaal"; 15 groet.location = new Point(30 20); 20 this.controls.add(groet); class HalloWin2 static void Main() 25 HalloForm scherm; scherm = new HalloForm(); Application.Run(scherm); Listing 2: HalloWin2/HalloWin2.cs

6 6 C# voor Java-kenners blz. 7 Zelf tekenen in een Form In listing 3 staat een andere aanpak van Hallo-in-een-window. In plaats van een Label-control wordt hier de tekst direct op het scherm getekend. In Java zou je voor dit doel de paint-functie van het window herdefiniëren. In C# gebeurt iets dergelijks maar mag je de van de functie zelf bedenken (in het voorbeeld: tekenscherm). Zo n zelfbedachte functie wordt natuurlijk niet automatisch aangeroepen maar dat gebeurt wel als je deze functie aanmeldt met: this.paint += this.tekenscherm; Hierin is Paint een bijzonder soort property namelijk een event. In een event kan een functie worden opgeslagen. Dus niet het resultaat van de functie maar de functie zelf! Deze functie wordt pas aangeroepen op het moment dat het systeem het nodig vindt dat het scherm getekend moet worden. Eigenlijk is het nog iets subtieler: niet alleen de functie wordt opgeslagen (in het voorbeeld: tekenscherm maar ook het object waarmee die functie later aangeroepen zal worden (in het voorbeeld: this). En bovendien is er ruimte voor meer dan één functie-met-context; daarom staat er in bovengenoemde opdracht niet = maar +=. Onze functie tekenscherm met zijn context this wordt daarmee één van de mogelijk vele abonnees op het Paint-event. Het is verboden om aan een event-property met = direct een waarde toe te kennen: daarmee zou je immers de hele collectie van alle abonnees kunnen wegvagen. Je mag daarom alleen met += een extra abonnee toevoegen en eventueel (maar dat gebeurt niet zo vaak) met -= een bepaalde abonnee verwijderen. Event-properties Het event-mechanisme wordt in de library ook gebruikt op plekken waar in Java event-listeners nodig zijn. Bijvoorbeeld een Button heeft een event-property Click. Met button.click += object.functie; kun je er voor zorgen dat op het moment dat de button wordt geklikt de functie zal worden aangeroepen met object onder handen. In Java zou je dat bereiken met button.addactionlistener(object); maar dan zou je bovendien in de klasse van object de interface ActionListener moeten implementeren door de functie actionperformed te definiëren. In C# is het vooral als je meer dan één button hebt eenvoudiger dan in Java: je kunt voor elke button (desgewenst) een eigen afhandel-functie maken. In Java kan dat alleen maar als je voor elke button een eigen klasse maakt die de methode actionperformed heeft. (Dat wordt weliswaar in Java weer gemakkelijk gemaakt door de mogelijkheid om een loze klasse in zijn geheel op te schrijven in de aanroep van addactionlistener maar dat is syntactisch ook weer ingewikkeld). Het type van abonnee-functies op events Alleen functies die het juiste type parameters en resultaat hebben mogen zich abonneren op een bepaald event. Welke types dat zijn wordt vastgelegd door de programmeur van het event. In het geval van het Paint event moet de abonnee een functie zijn met void-resultaat en met twee parameters: een van het type object en een van het type PaintEventArgs. Voor bijvoorbeeld het Click event zijn dat weer andere types. Graphics In Java heeft de methode paint een Graphics als parameter. In C# heeft de eventhandler van het Paint-event (tekenscherm in het voorbeeld) als tweede parameter een PaintEventArgs-object. Dat is een datastructuur die zoals de al aangeeft alle belangrijke argumenten van een paintevent bevat. Je kunt daar een aantal eigenschappen van opvragen onder andere Graphics. Dat levert een object op waarvan het type ook Graphics heet en dat ongeveer dezelfde rol speelt als de Graphics-parameter van paint in Java: het kent methoden zoals DrawString DrawLine FillRectangle (let op: niet fillrect zoals in Java) en DrawEllipse (let op: niet drawoval zoals in Java). Afgezien van kleine variaties in de van de methodes en de volgorde van parameters is er een belangrijker verschil tussen de klasse Graphics in Java en in C#. In Java heeft het Graphics-object toestandsvariabelen voor de kleur en het font waarmee latere tekenopdrachten worden uitgevoerd. In C# zou je misschien properties voor dat soort dingen verwachten maar die zijn er niet. In

7 A.3 Hallo C# (window-versies) 7 using System.Windows.Forms; using System.Drawing; class HalloForm : Form 5 public HalloForm() this.text = "Hallo"; this.backcolor = Color.Yellow; 10 this.size = new Size( ); this.paint += this.tekenscherm; void tekenscherm(object obj PaintEventArgs pea) 15 pea.graphics.drawstring( "Hallo!" new Font("Tahoma" 30) Brushes.Blue ); class HalloWin3 25 static void Main() HalloForm scherm; scherm = new HalloForm(); 30 Application.Run(scherm); Listing 3: HalloWin3/HalloWin3.cs plaats daarvan wordt de te gebruiken kleur en dergelijke bij elke aanroep van tekenopdrachten apart meegegeven. Dit gebeurt in de vorm van een Pen-object bij de Draw-methoden en in de vorm van een Brush-opdracht bij de Fill-methoden. De methode DrawString krijgt ook een Brush mee (omdat letters een oppervlakte hebben) en daarnaast ook een Font-object. Voor veelgebruikte kleuren zijn er statische objecten kant-en-klaar beschikbaar in de klassen Pens respectievelijk Brushes. Maar je kunt natuurlijk ook pennen van afwijkende dikte brushes met een bijzondere arcering en pennen of brushes met een zelfgemaakte mengkleur aanmaken.

8 8 C# voor Java-kenners blz. 9 A.4 Hallo C# (Game-versie) De XNA-library We kunnen met C# games ontwikkelen met behulp van een toolkit ged XNA. De actuele versie daarvan is XNA 3.1 die alleen samenwerkt met Visual Studio 2008; er is een beta-versie van XNA 4.0 die bedoeld is voor Visual Studio De opzet van zo n game biedt weinig verrassingen voor wie de opzet van een applet in Java en/of een Forms-applicatie in C# kent. Het bijzondere van XNA is echter dat het programma zonder noemenswaardige aanpassingen van de sourcetekst ook gecompileerd kan worden voor andere hardware zoals de Xbox. De algemene opzet van een XNA-game mag dan lijken op een Forms-applicatie in de details zijn er wel (veel) verschillen. In listing 4 staat een programma met precies dezelfde functionaliteit als dat in de vorige sectie maar dan met gebruikmaking van de XNA-library in plaats van de Forms-library. Opzet van een XNA-programma Net als in het vorige programma maken we een subklasse van een klasse uit de library: ditmaal niet van Form maar van Game. In de using-directive bovenaan het programma wordt natuurlijk ook de betreffende library vermeld. In de functie Main wordt ook weinig verrassend één object van onze subklasse van Game aangemaakt. Verschillend is echter de daaropvolgende aanroep van Run: in Forms was dat een statische methode in de klasse Application waaraan het nieuwe object als parameter wordt meegegeven; in XNA is het een niet-statische methode in de klasse Game zelf waaraan het nieuwe object onderhanden wordt gegeven. Tekenen in een XNA-programma De XNA-aanpak om in een window te kunnen tekenen lijkt eigenlijk meer op de Java-aanpak dan de Forms-aanpak. Ditmaal geen event-properties waarop je functies kunt abonneren maar de uit Java bekende herdefinitie van een bepaalde methode met een in de library vastgelegde. In een Java-applet was dat paint in een XNA-programma is dat Draw. In C# moet je als je een functie wilt herdefiniëren in de header het keyword override erbij schrijven. (Het alternatief dat je kunt gebruiken als je juist niet het eventhandler-achtige gedrag van herdefinitie wilt hebben is om new in de header te schrijven. Maar dat doen we hier natuurlijk niet). XNA Draw methode kent standaard animatie Een verschil met Java-applets en ook met de Paint-eventhandler in een Forms-applicatie is dat de methode Draw steeds opnieuw wordt aangeroepen. Je krijgt animatie dus kado: het is niet nodig om een Thread aan te maken zoals in Java en in Forms-applicaties. Er zijn twee herdefinieerbare methoden die door een Game-object afwisselend steeds opnieuw worden aangeroepen (in de zogeheten game-loop): Update en Draw. De bedoeling is dat in Update de toestand van het spel wordt aangepast en dat die in Draw wordt gevisualiseerd. In ons eenvoudige voorbeeldprogramma gebruiken we alleen Draw omdat er geen toestandsvariabelen zijn. SpriteBatch in plaats van Graphics In XNA is er geen klasse Graphics. Als je wilt tekenen heb je in plaats daarvan een SpriteBatch object nodig. Het woord sprite is standaard game-jargon voor bewegende figuurtjes en dergelijke. De klasse SpriteBatch is een misleidende want een SpriteBatch is niet een collectie sprites maar een apparaat waarmee je sprites (maar ook andere dingen) kunt tekenen. Zo is er een methode Draw waaraan je een sprite kunt meegeven die dan getekend wordt maar ook een methode DrawString waarmee je een string kunt tekenen. Een SpriteBatch vervult dus dezelfde rol die een Graphics in Java en in een Forms-applicatie heeft. Hoe kom je aan zo n SpriteBatch object? Het is niet een parameter van de methode zoals de Graphics-parameter van paint in Java. Ook niet indirect zoals de PaintEventArgs-parameter in een Forms-applicatie. In plaats daarvan moet je een SpriteBatch zelf new aanmaken. De constructormethode van SpriteBatch heeft een GraphicsDevice-object nodig als parameter maar zo n ding is gelukkig op te vragen als property van een Game-object. Die property is van het type GraphicsDevice en heet zelf ook GraphicsDevice. Behalve bij de constructie van de SpriteBatch

9 A.4 Hallo C# (Game-versie) 9 using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; public class HalloGame : Game 5 public HalloGame() this.window.title = "HalloGame"; this.content.rootdirectory = "Content"; 10 GraphicsDeviceManager manager; manager = new GraphicsDeviceManager(this); protected override void Draw(GameTime gametime) 15 this.graphicsdevice.clear(color.yellow); SpriteBatch spritebatch; spritebatch = new SpriteBatch(this.GraphicsDevice); 20 spritebatch.begin(); spritebatch.drawstring( this.content.load<spritefont>("spelfont") "Hallo!" new Vector2(gameTime.TotalRealTime.Milliseconds 20) Color.Blue 25 ); spritebatch.end(); 30 class Program static void Main() HalloGame spel; 35 spel = new HalloGame(); spel.run(); Listing 4: HalloGame/HalloGame.cs

10 10 C# voor Java-kenners is de GraphicsDevice ook nodig om de achtergrond te wissen: dat gebeurt namelijk niet automatisch. Let op dat de volgorde èn de types van de parameters van DrawString hier net een beetje anders zijn dan bij de genoot in Graphics. Alle aanroepen van teken-methodes die je met een SpriteBatch doet moeten overigens nog worden ingeklemd tussen aanroepen van Begin en End. Initialisatie van een Game In de constructor van je Game-subklasse kun je de nodige initialisaties neerzetten. Vervelend is dat het daar altijd noodzakelijk is om de volgende regels op te nemen: GraphicsDeviceManager gdm; gdm = new GraphicsDeviceManager(this); Zelfs als je zoals in het voorbeeldprogramma die variabele nergens meer gebruikt is de aanmaak van een GraphicsDeviceManager-object verplicht. De reden hiervoor is dat deze aanroep als neveneffect een initialisatie doet op de meegegeven this: pas vanaf dit moment kent this een GraphicsDevice en die hebben we later nodig. Zonder manager geen device zonder device geen spritebatch en zonder spritebatch kunnen we niet tekenen... Game-content Een beetje game heeft content nodig: (achtergrond-)plaatjes geluidseffecten en andere hulpbestanden. Ook fonts vallen in XNA in deze categorie. Het gebruik hiervan wordt door de library ondersteund in de vorm van de Content-property van het Game-object. In het voorbeeldprogramma kun je zien dat het nodig is om van dat Content-object de property RootDirectory te zetten (dat is de directory waarin de hulpbestanden zich bevinden). Daarna kan de polymorfe methode Load worden aangeroepen om het gewenste hulpbestand te laden. In het voorbeeld wordt dit gebruikt om een SpriteFont te laden; een andere mogelijkheid is bijvoorbeeld een Sprite. Laden van Game-content In het voorbeeldprogramma staat de aanroep van Load in de methode Draw. Dat is niet verboden maar een beetje ongebruikelijk: nu wordt het font elke keer (typisch 20 keer per seconde) opnieuw ingeladen. Efficiënter is het om dit eenmalig in de constructormethode te doen het op te slaan in een member-variabele en die vervolgens te gebruiken in Draw. Omwille van de eenvoud is dat in het voorbeeldprogramma niet gedaan. Iets wat je ook vaak ziet in XNA-programma s is dat het SpriteBatch-object eenmalig wordt aangemaakt in de constructor in plaats van in de Draw-methode. Het is echter de vraag of de winst in performance die dat mogelijk oplevert opweegt tegen weer meer rommel bij de membervariabelen.

11 A.5 Programmastructuur 11 compilatie eenheid extern alias ; using = library klasse ; toplevel declaratie toplevel declaratie type declaratie namespace toplevel declaratie Figuur 2: Syntax van een source-file A.5 Programmastructuur Namespaces In figuur 2 staat de opbouw van een compilatie-eenheid oftewel een file met sourcecode. Het grootste deel van een compilatie-eenheid bestaat uit toplevel declaraties. Uit het syntaxdiagram van toplevel declaratie blijkt dat je daarbij moet denken aan type-declaraties (klassen interfaces en dergelijke) maar dat het ook mogelijk is om toplevel declaraties te groeperen onder een namespace header. Een namespace komt overeen met een Java package met het verschil dat in C# de hele inhoud van de namespace tussen accolades moet staan terwijl in Java de package-header een losse regel is. In C# kun je dus ook meerdere namespaces in één file declareren. Namespaces kunnen ook worden genest; op deze manier onstaan namespaces zoals System.Windows.Forms. Using In een namespace kun je type-declaraties uit andere namespaces gebruiken door bovenin de sourcetext een using-directive te schrijven. Dit is te vergelijken met een import-directive in Java met het verschil dat je in C# altijd een hele namespace importeert. In Java zou je daartoe nog.* achter de package- moeten schrijven. Je kunt dus niet zoals in Java een losse klasse importeren. Dat kan echter weer wel (zie in het syntax-diagram het tweede alternatief achter using) als je de klasse daarbij herbenoemt met een andere. Dit kan handig zijn als je twee klassen uit twee verschillende namespaces wilt importeren die ongelukkigerwijs dezelfde hebben. Extern alias Het herbenoemen helpt niet meer als er een conflict is tussen de volledige qualified name van twee namespaces. Kan dat dan? Ja dat kan bijvoorbeeld als je twee verschillende versies van dezelfde library zou willen importeren. Voor deze situatie is de extern alias directive voorzien. Op de commandoregel moet dan worden gespecificeerd welke alias aan welke fysieke file met intermediate code ( assembly ) wordt gekoppeld.

12 12 C# voor Java-kenners A.6 Type-declaraties Met de toplevel declaraties al dan niet gebundeld in een namespace declareer je nieuwe types. Net als Java kent C# klassen en interfaces maar er zijn ook nog drie andere soorten typen mogelijk: struct enum en delegate. In figuur 3 is de syntax van de diverse type-declaraties aangegeven. Klassen en interfaces Net als in Java kennen klassen (en interfaces) een overervings-hiërarchie. Net als in Java kan een klasse maar van één klasse de subklasse zijn maar kun je zo veel interfaces implementeren als je wilt. De syntax is een beetje anders. Waar je in Java schrijft: class MijnKlasse extends SuperKlasse implements Interface1 Interface2 schrijf je in C#: class MijnKlasse : SuperKlasse Interface1 Interface2 Achter de dubbele punt staan dus zowel de superklasse (als die er is anders is dat impliciet Object) en de interfaces opgesomd. Aan de syntax van een header als class A : B kun je dus niet zien of B een superklasse of een geïmplementeerde interface is. In libraries wordt daarom vaak de conventie aangehouden dat de van interfaces met een I begint zoals ICollection en ISet. Direct achter de van de klasse kunnen tussen punthaken type-parameters worden geschreven om de klasse generiek te maken. Denk aan klassen zoals List<A> die je later kunt instantiëren met bijvoorbeeld List<String>. Deze syntax is hetzelfde als in Java. Als er echter voorwaarden aan de type-parameters zijn verbonden (namelijk dat ze een sub- of juist een superklasse van een andere klasse moeten zijn) dan wordt dat gespecificeerd in een apart blokje met constraints. De syntax daarvan is in het diagram in figuur 3 niet verder uitgewerkt. Structs Nieuw ten opzichte van Java zijn struct-types. Net als een klasse beschrijft een struct de opbouw en mogelijkheden van een object. Het verschil is echter dat een variabele van een struct-type het hele object bevat terwijl een variabele van een class-type een verwijzing naar het object bevat. Dat betekent dat bij toekenningen aan variabelen met een struct-type het hele object gekopieerd wordt en ook als je struct-waarden meegeeft als parameter. In de library worden struct-types vooral gebruikt voor kleine objectjes. Belangrijkste voorbeelden zijn Color en Point. Een Color bestaat immers uit slechts vier bytes (rood- groen- blauw- en alpha-kanaal) en is daarmee net zo klein als een enkele int. De notatie voor het gebruik van struct-objecten is precies hetzelfde als die van klasse-objecten. Vergelijk bijvoorbeeld dit fragmentje waar de struct Point en de klasse Bitmap worden gebruikt: Point p1 p2; Bitmap b1 b2; p1 = new Point(12); p2 = p1; b1 = new Bitmap(); b2 = b1; Dat in dit voorbeeld het point p1 wordt gekopieerd naar p2 terwijl bij de bitmap b2 slechts een extra verwijzing naar het bestaande object b1 wordt kun je aan het fragment niet zien! Het verschil in semantiek kun je alleen inzien als je weet hoe de types Point en Bitmap zijn gedeclareerd (respectievelijk als struct en als class). Enums Met een enum-type kun je gemakkelijk types maken die uit een opsomming van een eindig aantal elementen bestaan. Bijvoorbeeld: enum Beest = Koe Paard Schaap ; In Java zou je de codering expliciet moeten uitschrijven: final int Koe=1 Paard=2 Schaap=3; en dit is bovendien minder type-veilig: een programmeur zou per ongeluk beesten kunnen vermenigvuldigen en delen. Delegates Met delegate-types betreedt C# het pad van functioneel programmeren. Een delegate is ruwweg gesproken het type van een functie. In een variabele van een delegate-type kun je dus een functie opslaan en die later aanroepen. In een parameter van een delegate-type kun je een functie meegeven aan een andere functie en die vanuit de aangeroepen functie dan aanroepen. Op deze manier

13 A.6 Type-declaraties 13 type declaratie public protected private internal abstract sealed static partial partial class struct interface < : type > constraints member ; enum : type ; delegate type < > ( parameters ) ; Figuur 3: Syntax van type-declaraties kun je dus hogere-ordefuncties maken bijvoorbeeld een sorteerfunctie die het sorteercriterium als parameter meekrijgt. De declaratie van een delegate-type ziet er eigenlijk gewoon hetzelfde uit als een methode-header met de van het nieuwe type op de plaats van de methode-. Bijvoorbeeld: delegate int NumeriekeFunctie(int x); Na deze typedeclaratie kun je een variabele van dit type declareren: NumeriekeFunctie f; en daar als waarde een functie met de juiste signatuur aan toekennen: f = kwadraat; Het idee dat een delegate-variabele simpelweg een functiewaarde bevat is echter iets te naïef. Het ligt op twee punten subtieler: De functie kan ook een methode zijn dat is een functie die met een bepaald object onderhanden wordt aangeroepen. Dat object wordt ook in een delegate-variabele opgeslagen. Delegates zijn wat genoemd wordt multicast: er kan meer dan één functie in worden opgeslagen (steeds met bijbehorende object-context). Wordt een delegate aangeroepen dan worden alle functies die zijn opgeslagen aangeroepen. Het multicast-principe is vooral handig voor eventhandlers. Bijvoorbeeld de Paint-property van een Form heeft een delegate als type. Bij functies met een resultaat is de multicast-mogelijkheid niet erg zinvol; weliswaar worden alle functies aangeroepen maar alleen het resultaat van de laatste aanroep wordt opgeleverd.

14 14 C# voor Java-kenners A.7 Members van een klasse Net als in Java bestaat een klasse uit members. Net als in Java kunnen dat variabele-declaraties zijn (die de opbouw van het object beschrijven) methode-definities (die beschrijven wat je met het object kunt doen) en constructor-methodes (die beschrijven hoe een object geïnitialiseerd wordt). Een nieuw soort member in C# is de property. Verder zijn in C# officieel ook events indexers en operator-definities aparte soorten members maar dat zijn in feite variaties op andere soorten. In figuur 4 is de syntax van de diverse soorten members aangegeven. Voor het gemak geven we geen apart diagram voor de members van een interface. In een interface zijn geen velden en constructors toegestaan en hebben de methoden geen body. Deze restrictie is in het diagram niet aangegeven. Velden en methodes De syntax van velden (member-variabelen) en methodes is bijna hetzelfde als in Java. Het enige verschil is dat in de header van een methode niet expliciet wordt aangegeven of de methode exceptions opwerpt. Bij de constructor-methode is het enige verschil de manier waarop de constructormethode van de superklasse moet worden aangeroepen (dat is nodig als die parameters heeft). In Java moest dat door de aanroep van super als eerste opdracht in de body; in C# is er speciale syntax voor de aanroep van base voorafgaand aan de body. Ook kan een constructor desgewenst een collegaconstructor aanroepen. Properties Vergeleken met Java is het belangrijkste nieuwe soort member de property. Voor de gebruiker lijkt een property op een publieke member-variabele maar de implementatie is anders. Bij de declaratie van een property schrijf je een body erbij die op zijn beurt bestaat uit twee parameterloze minimethodes met de namen get en set. De mini-methode get beschrijft wat er moet gebeuren als de waarde van de property wordt opgevraagd; de mini-methode set beschrijft wat er moet gebeuren als de waarde van de property wordt aangepast met een toekenning. Bij de set mini-methode mag in de body het keyword value worden gebruikt dat staat voor de nieuw verkregen waarde. (Alleen in de context van een property-body is value een keyword; in andere situaties kan het gewoon als worden gebruikt). Als de set mini-methode ontbreekt onstaat er een read-only property. Een voorbeeld daarvan is de property Length van een string. Events Het keyword event mag op twee plaatsen staan: voor een property en voor een veld. Bij een event-property moet je twee andere mini-methodes definiëren: add en remove. Het type moet een delegate-type zijn. Deze twee mini-methodes worden aangeroepen via de operatoren += en -=. Als alternatief kun je een event-veld maken. Er wordt dan achter de schermen een private veld met het delegate-type gemaakt en de mini-methodes add en remove worden automatisch gegenereerd. Operator-definitie Een variant op de methode-definitie is de operator-definitie. Daarmee kun je operatoren zoals + en * definiëren voor nieuwe types. Bijvoorbeeld als je een type Point hebt kun je daar ee optelling op definiëren: static Point operator + (Point a Point b) return new Point(a.x+b.x a.y+b.y); In Java is dat niet mogelijk. In C++ is het ook mogelijk om operatoren te overloaden. Daar gaan ze zelfs nog een stapje verder en staan overloading toe van functe-aanroep () toekenning en new. In C# mag dat niet. Ook mag je in C# de logische operatoren && en niet overloaden. De samengestelde toekennings-operatoren zoals += en *= mag je niet overloaden maar deze operatoren zullen wel een eventuele overloaded versie van + of * aanroepen. Indexer Er is een aparte syntax om de notatie voor array-indicering to overloaden voor nieuwe types. De body is hetzelfde als die van een property: er zijn mini-methodes get en/of set om een waarde op te vragen of te veranderen. Dit mechanisme wordt in de library onder andere gebruikt om de array-indicering mogelijk te maken op strings althans voor de get-situatie.

15 A.7 Members van een klasse 15 member public protected private internal type-declaratie new sealed override static abstract virtual extern property veld indexer event const event type this type = initialisatie type remove blok [ parameters ] get set add ; ; methode partial void type < operator op > ( parameters ) constructor : ( parameters ) base this ( expressie ) ; blok Figuur 4: Syntax van members van een klasse

16 16 C# voor Java-kenners A.8 Types en declaraties Waarde-types en verwijzings-types In figuur 5 is de syntax van types in C# aangegeven. Net als in Java zijn er standaardtypes voor allerlei vormen van numerieke types. Variabelen van deze types worden net als bool en char als waarde opgeslagen. Dat geldt ook voor variabelen die een struct-object opslaan (in Java bestaan er geen struct-objecten). Variabelen die een klasse-object opslaan doen dat net als in Java in de vorm van een verwijzing. De twee toch wel speciale klassen String en Object zijn in C# ook beschikbaar via de keywords string en object (met een kleine letter). Het blijven niettemin verwijzings-typen! Arrays Er zijn in C# twee manieren om meer-dimensionale arrays te maken. Je kunt net als in Java meerdere paren vierkante haken achter het type schrijven bijvoorbeeld int[][]. Maar je kunt ook komma s tussen de haken schrijven: int[]. Er is verschil tussen deze twee notaties: bij de Java-notatie kunnen de rijen van de array verschillende lengte hebben bij de komma-notatie zijn de rijen van de array altijd allemaal even lang. Numerieke types Voor gehele getallen zijn er vier formaten types (1 byte 2 byte 4 bytes of 8 bytes) elk in een signed en een unsigned variant. Voor niet-gehele getallen is er naast de welbekende float (4 bytes) en double (8 bytes) ook nog decimal. Dat type is bedoeld voor financiële berekeningen: de waarde wordt decimaal opgeslagen en er ontstaan dus geen afrondfouten bij de conversie van en naar binaire codering. Ook wordt er voor grote getallen nooit overgeschakeld op de E-notatie en raakt er dus nooit een cent kwijt. Dat kost wel 16 bytes en extra rekentijd. De semantiek van numerieke constanten is een beetje anders dan in Java. In Java is een constante zoals 17 altijd een int. Daarom is er in Java een cast nodig bij een toekenning als byte b=(byte)17;. In C# is een constante altijd van het kleinste type waar het nog in past dus 17 is een byte en er is geen cast nodig in byte b=17;. Declaraties Types worden uiteraard gebruikt in variabele-declaraties zoals int x;. Net als in Java mag er bij de declaratie meteen al een initialisatie worden gedaan zoals int x=5;. Net als in Java kun je aangeven dat een variabele niet meer mag veranderen maar in C# wordt hiervoor het keyword const gebruikt in plaats van final. Uiteraard is in dit geval initialisatie verplicht (dit is niet in het syntax-diagram aangegeven). Anders dan in Java kun je in C# het type vervangen door het woord var. Ook in dit geval is initialisatie verplicht omdat het type dan automatisch wordt afgeleid uit het type van de expressie. Variabelen blijven dus wel degelijk getypeerd alleen hoef je het type niet meer zelf te bedenken. Je zou dus kunnen schrijven var x=5; en dan krijgt x automatisch het type byte. Het is niet zo n goede gewoonte om het type niet expliciet op te schrijven. De reden dat deze mogelijkheid bestaat is dat C# een speciale expressie-notatie heeft waarmee getypeerde databasequeries geconstrueerd kunnen worden (bekend onder de LINQ). De types die daarmee gemoeid gaan zijn zo ingewikkeld dat het in dat geval wel gepermitteerd is om var te schrijven in plaats van het volledige type. A.9 Opdrachten De syntax van opdrachten lijkt zo sterk op die van Java dat we het syntax-diagram hier niet helemaal weergeven. Net als in Java zijn er toekennings-opdrachten if- for- while- do-while- switch-case- try-catch-finally- throw- break- continue- en return-opdrachten. Een verschil is er in de syntax van de for-opdracht die gebruik maakt van een iterator. In Java gebruik je hiervoor een variant van de for-opdracht bijvoorbeeld: for (String s : woorden) this.print(s); In C# is er een aparte foreach-in constructie voor deze situatie: foreach (String s in woorden) this.print(s); Een nieuw soort opdracht in C# is de using-opdracht. Let op dit is iets heel anders dan de usingdirective bovenaan een programma: er is hier sprake van creatief hergebruik van keywords. De

17 A.10 Expressies 17 type struct < type > waarde sbyte short int long byte ushort uint ulong float double decimal bool char signed unsigned integer numeriek real verwijzing string object class/itf typevar < type > [ ] array declaratie const type = initialisatie ; var Figuur 5: Syntax van types en variabele-declaraties syntax is using(declaratie)opdracht de semantiek is dat de declaratie in de opdracht gebruikt mag worden maar dat het object daarna direct wordt vrijgegeven waarbij de interface IDisposable is betrokken. Dat kan van belang zijn om memory-leaks en locks op files te voorkomen. Synchronisatie van parallelle algoritmen gebeurt in C# anders dan in Java. In plaats van de synchronized opdracht in Java is er een lock opdracht met een andere semantiek. Verder is er in C# een yield-opdracht om lazy iteraties te implementeren en een checked/unchecked modifier om de semantiek van exceptions in een blok te beïnvloeden. A.10 Expressies Ook de syntax van expressies lijkt zo sterk op die van Java dat we het syntax-diagram hier niet helemaal weergeven. Net als in Java zijn er (numerieke en string-) constanten variabelen operatorexpressies met prefix infix of postfix-operatoren de conditionele?: constructie groepering met haakjes type-casts constructie van objecten met new aanroep van methoden indicering van arrays en selectie van velden uit objecten. Nieuw is het opvragen van een property van een object maar dat ziet er syntactisch hetzelfde uit als het opvragen van een public veld.

18 18 C# voor Java-kenners lambda ( parameters ) => expressie blok Figuur 6: Syntax van lambda-expressies Lambda-expressies Echt nieuw is de zogeheten lambda-notatie. Dit is een notatie die afkomstig is uit het functioneleprogrammeerparadigma die wordt gebruikt om waarden van een delegate-type op te schrijven. Er zijn een paar variaties van de lambda-notatie maar in alle gevallen staat er een => in het midden die de parameters van het resultaat scheidt. Aan de linkerkant van het pijltje staan parameters aan de rechterkant een expressie. Bijvoorbeeld: (int x) => x*x is een manier om de kwadraat-functie op te schrijven. Als er maar één parameter is waarvan het type uit de context kan worden afgeleid hoef je de haakjes en het type niet op te schrijven. Voor Haskell-programmeurs wordt het nu bekend terrein met dien verstande dat de lambda niet eens meer wordt opgeschreven: x => x*x Als er voorafgaand aan het uitrekenen van de expressie nog opdrachten nodig zijn mag je aan de rechterkant van het pijltje ook een blok schrijven: (int x) => int a=x+1; return a*a;

Windows-applicatie. using System.Windows.Forms; using System.Drawing; class HalloWin1 { static void Main ( )

Windows-applicatie. using System.Windows.Forms; using System.Drawing; class HalloWin1 { static void Main ( ) Windows-applicatie using System.Windows.Forms; using System.Drawing; class HalloWin1 { static void Main ( ) { Form scherm; declaratie en toekenning van een variabele met type Form scherm = new Form( );

Nadere informatie

Modelleren & Programmeren. Jeroen Fokker

Modelleren & Programmeren. Jeroen Fokker Modelleren & Programmeren Jeroen Fokker Wat heb je nodig? Collegediktaat kopen bij A-Eskwadraat (BBG-238) of zelf downloaden en uitprinten www.cs.uu.nl / docs / vakken / KI1V13009 Solis-id met password

Nadere informatie

Syntax van opdracht. opdracht. expressie. variabele. = expressie ; klasse naam. methode naam. property naam += object

Syntax van opdracht. opdracht. expressie. variabele. = expressie ; klasse naam. methode naam. property naam += object Syntax van opdracht opdracht klasse naam methode naam ( expressie ) ; object expressie. property naam +=, variabele = expressie ; Static gewone methoden Bewerken een object Aanroep: object. methode ( )

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

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf

Nadere informatie

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, uur Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

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

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 11 november 2016, uur

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

Nadere informatie

Tweede deeltentamen Imperatief programmeren versie 1 Vrijdag 20 oktober 2017, uur

Tweede deeltentamen Imperatief programmeren versie 1 Vrijdag 20 oktober 2017, uur Tweede deeltentamen Imperatief programmeren versie 1 Vrijdag 20 oktober 2017, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

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

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

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

Aanvullende toets Gameprogrammeren Woensdag 5 januari 2011, uur

Aanvullende toets Gameprogrammeren Woensdag 5 januari 2011, uur 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. Aanvullende

Nadere informatie

Klassen. Hoofdstuk Klassen

Klassen. Hoofdstuk Klassen 212 Hoofdstuk 12 Klassen blz. 213 blz. 214 12.1 Klassen Een klasse is een groepje methoden. Dat hebben we in de programma s tot nu toe wel gezien: we definieerden steeds een of meerdere klassen (in ieder

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

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

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

Nadere informatie

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn. Eerste deeltentamen Gameprogrammeren Vrijdag 27 september 2013, 8.30-10.30 uur Naam: Studentnummer: Het tentamen bestaat uit 4 opgaven. Elke opgave levert 10 punten op. Je cijfer is het totaal aantal punten

Nadere informatie

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn. Eerste deeltentamen Gameprogrammeren Vrijdag 26 september 2014, 8.30-10.30 uur Naam: Studentnummer: Het tentamen bestaat uit 4 opgaven. Elke opgave levert 10 punten op. Je cijfer is het totaal aantal punten

Nadere informatie

Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, uur

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

Nadere informatie

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

Versie 2: B C D D A C D A C C. Versie 3: C D A A B D A B D D. Versie 4: A D C C B D C B D D. Versie 5: B A D D C A D C A A

Versie 2: B C D D A C D A C C. Versie 3: C D A A B D A B D D. Versie 4: A D C C B D C B D D. Versie 5: B A D D C A D C A A Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 1 februari 2019, 11.00 13.00 uur Voor de meerkeuzevragen hebben we verschillende versies. Dit zijn de juiste antwoorden per versie.

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

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, 11.00-13.00 uur

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, 11.00-13.00 uur Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 6 november 2015, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het

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

Activity. Bij het starten van een app: Operating system maakt een Activity -object aan. en neemt dat onderhanden met de methode OnCreate( )

Activity. Bij het starten van een app: Operating system maakt een Activity -object aan. en neemt dat onderhanden met de methode OnCreate( ) Activity Bij het starten van een app: Operating system maakt een Activity -object aan en neemt dat onderhanden met de methode OnCreate( ) Klasse uit library Android.App Methode uit klasse Activity Maak

Nadere informatie

b.text = "Rol!"; b.location = new Point(100, 0); b.click += this.rol; this.paint += this.teken;

b.text = Rol!; b.location = new Point(100, 0); b.click += this.rol; this.paint += this.teken; Tweede deeltentamen Imperatief programmeren Vrijdag 18 oktober 2013, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde bladen.

Nadere informatie

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn. Tweede deeltentamen Gameprogrammeren Vrijdag 18 oktober 2013, 11.00-13.00 uur Naam: Studentnummer: Het tentamen bestaat uit 3 opgaven. Opgaven 1 levert 10 punten op, opgave 2 levert 6 punten op, en opgave

Nadere informatie

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, 17 20 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, 17 20 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

vandaag èn vrijdag deadline maandag 12 dec.

vandaag èn vrijdag deadline maandag 12 dec. vandaag èn vrijdag deadline maandag 12 dec. Herhaling met een teller int t ; t = 0; for while ( ( t=0 t

Nadere informatie

Om de libraries te kunnen gebruiken, moet de programmeur (een deel van) zijn programma in C/C++ schrijven.

Om de libraries te kunnen gebruiken, moet de programmeur (een deel van) zijn programma in C/C++ schrijven. 1 Inleiding tot.net Software werd en wordt meestal geschreven in C of C++. De broncode van een C/C++ programma wordt dan gecompileerd naar machine code, die eventueel nog gelinkt wordt met machine code

Nadere informatie

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 11 november 2016, uur

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 11 november 2016, uur Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 11 november 2016, 8.30 10.30 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het

Nadere informatie

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 23 december 2016, uur

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 23 december 2016, uur Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 23 december 2016, 11.00-13.00 uur 1. Een klasse is niet: (a) het type van een object (b) een groepje methoden (c) een groepje variabelen

Nadere informatie

Programmeren in C# Interfaces. Hoofdstuk 23

Programmeren in C# Interfaces. Hoofdstuk 23 Programmeren in C# Interfaces Hoofdstuk 23 Programmeren in C# 2 Gradaties overerving Klassieke overerving Iets functioneels uitbreiden Code duplicatie Niet teveel aanpassingen aan bestaande code Objecten

Nadere informatie

Uitwerking Tweede deeltentamen Imperatief programmeren versie 1 Vrijdag 20 oktober 2017, uur

Uitwerking Tweede deeltentamen Imperatief programmeren versie 1 Vrijdag 20 oktober 2017, uur Uitwerking Tweede deeltentamen Imperatief programmeren versie 1 Vrijdag 20 oktober 2017, 11.00-13.00 uur 1. In een constructormethode (a) moet je een nieuw object van de klasse aanmaken (b) kun je membervariabelen

Nadere informatie

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, uur

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, uur Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, 8.30-10.30 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

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

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

Nadere informatie

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

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, uur

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, uur Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 3 februari 2017, 8.30-10.30 uur 1. Wat kan gezegd worden van het stukje programma b=!b (a) De expressie b=!b heeft altijd de waarde

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

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, 8.30-10.30 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Labo 2 Programmeren II

Labo 2 Programmeren II Labo 2 Programmeren II L. Schoofs K. van Assche Gebruik Visual Studio 2005 om een programma te ontwikkelen dat eenvoudige grafieken tekent. Deze opgave heb je vorig academiejaar reeds in Java geïmplementeerd.

Nadere informatie

Derde deeltentamen Gameprogrammeren Vrijdag 8 november 2013, uur

Derde deeltentamen Gameprogrammeren Vrijdag 8 november 2013, uur Naam: Derde deeltentamen Gameprogrammeren Vrijdag 8 november 2013, 8.30-10.30 uur Studentnummer: Het tentamen bestaat uit 3 opgaven. Opgaven 1 levert 10 punten op, opgave 2 levert 10 punten op, en opgave

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 Tweede deeltentamen Imperatief programmeren Vrijdag 21 oktober 2011, uur

Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 21 oktober 2011, uur Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 21 oktober 2011, 11.00-13.00 uur 1. Deze opgave bestaat uit een aantal tekstvragen. Houd het antwoord kort: een of twee zinnen per onderdeel

Nadere informatie

Inleiding C++ Coding Conventions

Inleiding C++ Coding Conventions Inleiding C++ Coding Conventions Opleiding Bachelor of Science in Informatica, van de Faculteit Wetenschappen, Universiteit Antwerpen. Nota s bij de cursus voor academiejaar 2012-2013. Ruben Van den Bossche,

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

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

Activity. Bij het starten van een app: Operating system maakt een Activity -object aan. en neemt dat onderhanden met de methode OnCreate( )

Activity. Bij het starten van een app: Operating system maakt een Activity -object aan. en neemt dat onderhanden met de methode OnCreate( ) Activity Bij het starten van een app: Operating system maakt een Activity -object aan en neemt dat onderhanden met de methode OnCreate( ) Klasse uit library Android.App Methode uit klasse Activity eigen

Nadere informatie

Methoden om te tekenen

Methoden om te tekenen 37 Hoofdstuk 4 Methoden om te tekenen 4.1 Een eigen subklasse van View Grafische uitvoer Door het combineren van View-objecten, zoals TextView en Button, in een LinearLayout kun je een complexe scherm-layout

Nadere informatie

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 10 november 2017, uur

Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 10 november 2017, uur Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 10 november 2017, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Labo 1 Programmeren II

Labo 1 Programmeren II Labo 1 Programmeren II L. Schoofs K. van Assche Voor de OA Labo Programmeren II programmeren we in C# en met Microsoft Visual Studio 2005 als ontwikkelomgeving (voorlopig beta2). Deze IDE maakt gebruik

Nadere informatie

eerste voorbeelden in Java

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

Nadere informatie

Hallo, App! Hoofdstuk 2. 2.1 Soorten programma s

Hallo, App! Hoofdstuk 2. 2.1 Soorten programma s 13 Hoofdstuk 2 Hallo, App! 2.1 Soorten programma s C# is opgezet als universele programmeertaal. De taalconstructies zijn hetzelfde, of het nu om een fotobewerkingsprogramma, een agenda-app, of een game

Nadere informatie

Objectgeoriënteerd Programmeren: WPO 2a

Objectgeoriënteerd Programmeren: WPO 2a Objectgeoriënteerd Programmeren: WPO 2a 1. Inhoud Eenvoudige (enkelvoudige) overerving, override, ToString(), base, private, public, protected, virtual 2. Inleiding 2.1 Overerving In het voorgaande WPO

Nadere informatie

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn. Derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, 11.00-13.00 uur Naam: Studentnummer: Het tentamen bestaat uit 3 opgaven. Opgaven 1 levert 14 punten op, opgave 2 levert 12 punten op, en opgave

Nadere informatie

Uitwerking Derde deeltentamen Imperatief programmeren Vrijdag 8 november 2013, uur

Uitwerking Derde deeltentamen Imperatief programmeren Vrijdag 8 november 2013, uur 1 Uitwerking Derde deeltentamen Imperatief programmeren Vrijdag 8 november 2013, 8.30 10.30 uur 1. Voor elk punt (x, y) van het platte vlak, waarbij x en y reële getallen zijn, kan een bijbehorend getal

Nadere informatie

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

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

Nadere informatie

programmeren Mobiel Mobilofoon 1960 Apple iphone 2007 met ios Nokia Samsung S met Android Motorola Dyna-Tac 1973

programmeren Mobiel Mobilofoon 1960 Apple iphone 2007 met ios Nokia Samsung S met Android Motorola Dyna-Tac 1973 Mobiel programmeren Mobilofoon 1960 Nokia 3310 2000 Apple iphone 2007 met ios Motorola Dyna-Tac 1973 Samsung S7 2016 met Android Programmeertalen Fortran Basic C++ C# Android Algol C Java... 1950 1960

Nadere informatie

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, 8.30-10.30 uur 1. Een Intent-object wordt gebruikt voor communicatie (a) van een Activity naar een bijbehorende View

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

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

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, 13.30-15.30 uur Naam: Studentnummer: Het tentamen bestaat uit 4 opgaven. Opgaven 1 levert 8 punten op, opgave 2 levert 12 punten

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

Tweede deeltentamen Gameprogrammeren Vrijdag 17 oktober 2014, uur

Tweede deeltentamen Gameprogrammeren Vrijdag 17 oktober 2014, uur Naam: Tweede deeltentamen Gameprogrammeren Vrijdag 17 oktober 2014, 8.30-10.30 uur Studentnummer: Het tentamen bestaat uit 3 opgaven. Opgaven 1 levert 10 punten op, opgave 2 levert 10 punten op, en opgave

Nadere informatie

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 10 november 2017, uur

Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 10 november 2017, uur Uitwerking Derde deeltentamen Imperatief programmeren - versie 1 Vrijdag 10 november 2017, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het

Nadere informatie

Derde deeltentamen Gameprogrammeren Vrijdag 9 november 2012, uur

Derde deeltentamen Gameprogrammeren Vrijdag 9 november 2012, uur Naam: Derde deeltentamen Gameprogrammeren Vrijdag 9 november 2012, 8.30-10.30 uur Studentnummer: Het tentamen bestaat uit 2 opgaven. Opgaven 1 levert 15 punten op. Opgave 2 levert 25 punten op. Je cijfer

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

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 21 december 2018, uur

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 21 december 2018, uur Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 21 december 2018, 8.30 10.30 uur 1. Gegeven zijn de integer variabele x en de string variabele s. Welke van de volgende uitspraken

Nadere informatie

Programmeren in C# Overerving

Programmeren in C# Overerving Programmeren in C# Overerving Programmeren in C# 2 public class Balloon private int x = 50; private int y = 50; private int diameter = 20; public int Diameter getreturn diameter; setif (value

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

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int

Nadere informatie

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft

Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Tentamen Object Georiënteerd Programmeren TI1206 29 oktober 2014, 9.00-11.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Digitale

Nadere informatie

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

Aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 3 januari 2014, uur

Aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 3 januari 2014, uur Aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 3 januari 2014, 8.30-10.30 uur Naam: Studentnummer: Het tentamen bestaat uit 2 opgaven. De eerste opgave levert 15 punten op, de tweede opgave 25 punten.

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

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

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

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

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur

Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, uur Uitwerkingen derde deeltentamen Gameprogrammeren Vrijdag 6 november 2015, 11.00-13.00 uur 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan

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

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

6,1. Samenvatting door een scholier 1809 woorden 28 oktober keer beoordeeld. Informatica

6,1. Samenvatting door een scholier 1809 woorden 28 oktober keer beoordeeld. Informatica Samenvatting door een scholier 1809 woorden 28 oktober 2005 6,1 16 keer beoordeeld Vak Methode Informatica Turing informatica samenvatting. hst3: algoritme:een beschrijving van stappen die gedaan moeten

Nadere informatie

VB Magazine Online 2004 01/08 1 / 6

VB Magazine Online 2004 01/08 1 / 6 Een van de krachtigste elementen binnen Visual Basic 2003 vind ik wel de mogelijkheid om objecten te overerven; ook wel inheritance genoemd. U kunt niet alleen uw eigen classes en business objecten overerven,

Nadere informatie

Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 18 oktober 2013, uur

Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 18 oktober 2013, uur Uitwerking Tweede deeltentamen Imperatief programmeren Vrijdag 18 oktober 2013, 11.00-13.00 uur 1. (a) Wat is een null pointer? In welke situatie onstaat er een null pointer exception? Een null pointer

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

Uitwerkingen aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 4 januari 2013, uur

Uitwerkingen aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 4 januari 2013, uur Uitwerkingen aanvullende toets Gameprogrammeren (INFOB1GP) Vrijdag 4 januari 2013, 11.00-13.00 uur 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel

Nadere informatie

Wat is een grafische gebruikersinterface (GUI)?

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

Nadere informatie

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

Uitwerking Aanvullende toets Mobiel programmeren - versie 1 Woensdag 23 maart 2016, uur

Uitwerking Aanvullende toets Mobiel programmeren - versie 1 Woensdag 23 maart 2016, uur Uitwerking Aanvullende toets Mobiel programmeren - versie 1 Woensdag 23 maart 2016, 13.30-15.30 uur 1. Een static methode (a) Heeft geen parameters (b) Heeft geen resultaatwaarde (c) Heeft geen object

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

1 Een beetje theorie vooraf 1. Wat is een programma? 2 Hoe maakt u een programma? 3 IL-code en JIT-compiler 5

1 Een beetje theorie vooraf 1. Wat is een programma? 2 Hoe maakt u een programma? 3 IL-code en JIT-compiler 5 1 Een beetje theorie vooraf 1 Wat is een programma? 2 Hoe maakt u een programma? 3 IL-code en JIT-compiler 5 Voordelen combinatie compiler en interpreter 6 Het.NET Framework 9.NET en Java 9.NET, COM en

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

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

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

Uitwerkingen Derde deeltentamen Imperatief programmeren Vrijdag 12 november 2010, uur

Uitwerkingen Derde deeltentamen Imperatief programmeren Vrijdag 12 november 2010, uur 1. (telt voor 20%) Uitwerkingen Derde deeltentamen Imperatief programmeren Vrijdag 12 november 2010, 8.30-10.30 uur Bij het spel Reversi leggen twee spelers om de beurt een gekleurde steen op een veld

Nadere informatie

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 22 december 2017, uur

Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 22 december 2017, uur Uitwerking Eerste deeltentamen Mobiel programmeren - versie 1 Vrijdag 22 december 2017, 8.30 10.30 uur 1. De symbolencombinatie /= betekent (a) hier begint een meer-regelig commentaar (b)... wordt één-...

Nadere informatie

Uitwerkingen Derde deeltentamen Imperatief programmeren Vrijdag 12 november 2010, uur

Uitwerkingen Derde deeltentamen Imperatief programmeren Vrijdag 12 november 2010, uur 1. (telt voor 20%) Uitwerkingen Derde deeltentamen Imperatief programmeren Vrijdag 12 november 2010, 8.30-10.30 uur Bij het spel Reversi leggen twee spelers om de beurt een gekleurde steen op een veld

Nadere informatie

Dit document bevat informatie over make bij het eerstejaars college Programmeermethoden, Universiteit Leiden, najaar 2010, zie

Dit document bevat informatie over make bij het eerstejaars college Programmeermethoden, Universiteit Leiden, najaar 2010, zie Dit document bevat informatie over make bij het eerstejaars college Programmeermethoden, Universiteit Leiden, najaar 2010, zie www.liacs.nl/home/kosters/pm/ Met dank aan allen die aan deze tekst hebben

Nadere informatie

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 29 januari 2016, uur

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 29 januari 2016, uur Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 29 januari 2016, 11.00-13.00 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie