Imperatief programmeren

Website:website met extra informatie
Vakcode:INFOIMP
Studiepunten:7.5 ECTS
Periode:periode 2 (week 46 t/m 5, dwz 15-11-2010 t/m 4-2-2011; herkansing week 11)
Timeslot:A
Deelnemers:tot nu toe 109 inschrijvingen
Rooster:Let op: m.i.v. het collegejaar 2008/2009 is het rooster te vinden in Osiris
Docenten:Dit is een oud rooster!
vormgroeptijdweekzaaldocent
college   ma 11.00-12.4546-48 AARD-KLEIN Jeroen Fokker
 
50-51 AARD-KLEIN
2-4 AARD-KLEIN
wo 9.00-10.4546-50 AARD-GROOT
2-4 AARD-GROOT
practicum          Gerard Tel
 
groep 1 ma 9.00-10.4547-48 BBL-103 CLZ Rene Kersten
 
50-51 BBL-103 CLZ
2-4 BBL-103 CLZ
wo 11.00-12.4546 BBL-103 CLZ
49 BBL-103 CLZ
2 BBL-103 CLZ
groep 2 ma 9.00-10.4547-48 BBL-106 CLZ Simon Pool
 
50-51 BBL-106 CLZ
2-4 BBL-106 CLZ
wo 11.00-12.4546 BBL-106 CLZ
49 BBL-106 CLZ
2 BBL-106 CLZ
groep 3 ma 9.00-10.4547-48 BBL-109 CLZ
50-51 BBL-109 CLZ
2-4 BBL-109 CLZ
wo 11.00-12.4546 BBL-109 CLZ
49 BBL-109 CLZ
2 BBL-109 CLZ
werkcollege          Gerard Tel
 
groep 1 wo 11.00-12.4547-48 BBL-079 Rene Kersten
 
50 BBL-079
3-4 BBL-079
groep 2 wo 11.00-12.4547-48 BBL-061 Simon Pool
 
50 BBL-061
3-4 BBL-061
Periode:periode 1 (week 36 t/m 45, dwz 9-9-2010 t/m 12-11-2010; herkansing week 1)
Timeslot:D
Deelnemers:tot nu toe 158 inschrijvingen
Rooster:Let op: m.i.v. het collegejaar 2008/2009 is het rooster te vinden in Osiris
Docenten:Dit is een oud rooster!
vormgroeptijdweekzaaldocent
college   wo 15.15-17.0037-38 AARD-GROOT Jeroen Fokker
 
40-44 AARD-GROOT
vr 11.00-12.4536-40 AARD-GROOT
42-44 AARD-GROOT
practicum groep 1 wo 13.15-15.0037-38 BBL-103 CLZ Jeroen Fokker
Ciaran Good
  
40-44 BBL-103 CLZ
vr 9.00-10.4537-40 BBL-103 CLZ
42-44 BBL-103 CLZ
groep 2 wo 13.15-15.0037-38 BBL-109 CLZ Jeroen Fokker
Jonas Koperdraat
  
40-44 BBL-109 CLZ
vr 9.00-10.4537-40 BBL-109 CLZ
42-44 BBL-109 CLZ
groep 3 wo 13.15-15.0037-38 BBL-112 CLZ Thijs van Lankveld
Arne De Both
  
40-44 BBL-112 CLZ
vr 9.00-10.4537-40 BBL-106 CLZ
42-44 BBL-106 CLZ
groep 4 wo 13.15-15.0037-38 BBL-175 CLZ Thijs van Lankveld
Sandra Bies
  
40-44 BBL-175 CLZ
vr 9.00-10.4537-40 BBL-175 CLZ
42-44 BBL-175 CLZ
werkcollege groep 1 vr 13.15-15.0038-40 BBL-061 Jeroen Fokker
Ciaran Good
Jonas Koperdraat
   
43 BBL-061
vr 15.15-17.0044 BBL-061
groep 2 vr 13.15-15.0037 BBL-069 Thijs van Lankveld
Arne De Both
Sandra Bies
   
38-39 BBL-065
43-44 BBL-065
vr 15.15-17.0040 BBL-065
Tentamen:
week: 39vr 27-9-20139.00-11.00 uurzaal: -
week: 42vr 18-10-20139.00-11.00 uurzaal: -
week: 45vr 8-11-20139.00-11.00 uurzaal: -
week: 1vr 3-1-20148.30-10.30 uurzaal: -aanvullende toets
Inhoud:Als je een computer instrueert met opdrachten, doe je aan imperatief programmeren ('t kan ook anders, maar dan programmeer je functioneel, en dat is een ander vak). In dit vak leer je de programmeertaal C#, waarin opdrachten gebundeld worden in zogeheten methoden, die een object bewerken. Het is daarmee tevens een inleiding in objectgeorienteerd programmeren.

We bekijken hoe je het geheugen verandert, en hoe je keuze en herhaling programmeert. Je beschrijft zelf nieuwe soorten objecten met daarbij behorende methoden, maar maakt ook kennis met de bij C# horende standaard-methoden. Aan de orde komen onder andere methoden om interactieve user-interfaces te maken, om animaties te maken met een Thread, om files te manipuleren, en om verzamelingen gegevens (collections) te beheren.

In het college worden enkele grotere programma's besproken als voorbeeld van toepassingen: een grafische bitmap-editor, een vector-tekenprogramma, een route-zoeker. en automatische taalherkenning door letterfrequentie-analyse, Daarbij zien we dan meteen waarom het handig is om object-klassen hierarchisch te ordenen, en hoe je rijen objecten in een array kunt zetten.
Speciale aandacht wordt besteed aan het gebruik van objectgeorienteerde technieken bij het ontwerp van wat grotere programma's, waarbij de standaardbibliotheken voor collections en file-I/O als voorbeeld dienen.

Literatuur:Jeroen Fokker, Imperatief programmeren, collegedictaat versie september 2010. Eerdere versies zijn beslist niet bruikbaar, omdat daarin een andere programmeertaal werd gebruikt.
Werkvorm:Per week 2 maal 2 uur hoorcollege, waarin nieuwe concepten en voorbeelden worden gepresenteerd. Daarnaast per week 2 maal 2 uur begeleid practicum, waar in groepjes van 2 studenten gewerkt wordt aan drie in te leveren computerprogramma's. Verder zes keer een werkcollege, waarbij aandacht wordt gegeven aan meer theoretische vaardigheden, als voorbereiding op het tentamen. Daarbuiten is er gelegenheid (en waarschijnlijk noodzaak) om onbegeleid practicumwerk te verrrichten om de practicumopdracht te voltooien.
Toetsvorm:Het vak wordt beoordeeld aan de hand van drie toetsen (T1,T2,T3) en drie practica (P1,P2,P3). Het totaalcijfer voor de toetsen (T) is 0.2*T1+0.3*T2+0.5*T3 en evenzo voor de practica (P). Het eindcijfer voor het vak is dan (T+P)/2 onder de voorwaarde dat P>=5 en T>=5. Als aan die voorwaarde niet is voldaan, is het eindcijfer het minimum van P en T. Afronding gebeurt op halven boven de zes en op helen onder de zes, dus 5.5 wordt 6 en 5.4 wordt 5.
Als een van de zes cijfers ontbreekt, blijft het vak 'onvoltooid'. Bij het tentamen mag geen literatuur worden gebruikt, met uitzondering van de appendix van het diktaat (die wordt verstrekt bij de tentamenopgaven).
Eventueel kan er een een aanvullende toets worden gedaan (in de herkansingsweek halverwege de periode volgend op het vak). Het cijfer hiervoor kun je inzetten voor een van T1, T2 of T2 (om een onvoldoende of een ontbrekend cijfer te vervangen).
Als aanvullende toets voor het practicum kan er een extra practicumopdracht worden gemaakt, die je kunt inzetten voor een van P1, P2 en P3 (om een onvoldoende of een ontbrekend cijfer te vervangen). Herkansings-practicum en -toets gaan over de hele stof, ongeacht voor welk van de drie hij als vervanging geldt.
Inspanningsverplichting voor aanvullende toets:Om aan de aanvullende toets te mogen meedoen moet je hebben meegedaan aan minimaal 2 van de 3 oorspronkelijke toetsen.
Beschrijving:Dit is het eerste programmeer-vak, voorkennis anders dan elementaire computergebruiksvaardigheid is niet vereist. Aan de hand van (steeds ingewikkeldere) voorbeeldprogramma's wordt de syntax en semantiek van de belangrijkste constructies van C# behandeld. Vanaf het begin wordt object-georienteerde modellering van de probleemstelling gebruikt. Een aantal standaard-libraries van C# wordt gebruikt, in het bijzonder Forms, waarmee interactieve muisgestuurde programma's gemaakt kunnen worden. Achtereenvolgens komen aan de orde:
  1. Programma's:
    • Imperatief programmeren t.o.v. andere paradigma's (programma bestaat uit opdrachten om variabelen in het geheugen te veranderen)
    • Compiler versus interpreter; edit-compile-run cyclus
    • Kort Hello-programma met verschillende aanpak (console, Forms, Game); opbouw van een programma: `opsomming van klassen, elke klasse een bundeling van methoden, elke methode een bundeling van opdrachten'.
    • Syntax en semantiek van methode-aanroep
    • Gebruik van een ontwikkelomgeving (momenteel Visual Studio)
  2. Variabelen:
    • Enkele methoden van klasse Graphics, als voorbeeld van het gebruik van een standaard-klasse
    • Gebruik van variabelen, om herhaling van numerieke constanten te vermijden
    • Toekenningsopdracht, declaratie, het type int
    • Layout- en naamgevingsconventies
    • Definitie van nieuwe methoden om te abstraheren van herhaalde blokken code
    • Definitie van parameters om methoden flexibeler te maken
  3. Interactie:
    • De klasse String, conversie van int naar String
    • Opbouw van user-iterface met Button, TrackBar, TextBox)
    • Event-properties
  4. Iteratie:
    • Het while- en for-statement
    • Het type bool, vergelijkingen, logische operatoren
    • Casus: renteberekening
  5. Keuze:
    • Het if-statement
    • Toepassingen van `if': onderscheiden van Buttons, controle van teksten, berekenen van minimum
    • Casus: tekenen en nulpuntsbepaling van parabool
  6. Objecten en klassen:
    • Klasse als beschrijving van een object, declaratie van objectvariabelen
    • Casus: deeltje met plaats en snelheid als object
    • Eenvoudige animatie met Thread en Sleep
  7. Inheritance:
    • Subklasse: toevoegen van nieuwe variabelen en methoden
    • Verschil tussen `is a' en `has a'
    • Interface-componenten als voorbeeld van klasse-hierarchie
    • User interface ontwerp met Layout-managers
    • Casus: 4-functie calculator
  8. Strings en arrays:
    • Het type char versus klasse String
    • Creatie en gebruik van strings
    • Casus: bepalen van letterfrequenties in een tekst (array als turf-tabel)
  9. Object-georienteerd ontwerp
    • Abstracte klassen en interfaces
    • Bibliotheekklassen voor Collections
    • Toepassing: een vector-tekenprogramma
    • Bibliotheekklassen voor file-I/O
    • Non-window (console-) programma's; casus: grep
  10. Het gebruik van algoritmen
    • Grote casus: een route-zoekalgoritme in het wegen-netwerk
    • Grote casus: herken de taal van een tekst op grond van een vergelijking van letterfrequenties (tevens een voorbeeld van een `lerend' programma)
wijzigen?