Imperatief programmeren

Website:website met extra informatie
Vakcode:INFOIMP
Studiepunten:7.5 ECTS
Periode:periode 1 (week 36 t/m 45, dwz 6-9-2006 t/m 10-11-2006; herkansing week 1)
Timeslot:D
Deelnemers:tot nu toe 227 inschrijvingen
Rooster:Dit is een oud rooster!
vormgroeptijdweekzaaldocent
college   wo 13-1537-39, 41 AARD-groot Jeroen Fokker
 
40 Rup-wit
42-44 Rup-blauw
45 BBL-106
vr 11-1336,38,42 AARD-groot
37,40,43 WENT-blauw
practicum groep 1 ma 13-1537 BBL-408 Stefan Holdermans
Simeon Visser
Sebastiaan den Heijer
   
BBL-412
wo 15-1737-45 BBL-408
BBL-412
do 9-1036 BBL-408
vr 13-1537,42,45 BBL-408
BBL-412
groep 2 ma 13-1537 BBL-456 Stefan Holdermans
Jeroen Leeuwestein
Eric van Dalen
   
BBL-458
wo 15-1737-45 BBL-456
BBL-458
do 9-1036 BBL-458
vr 13-1537,42,45 BBL-456
BBL-458
groep 3 ma 13-1537 BBL-515 Stefan Holdermans
Rene Kersten
  
BBL-516
wo 15-1737-45 BBL-515
BBL-516
do 9-1036 BBL-412
vr 13-1537,42,45 BBL-515
BBL-516
groep 4 wo 11-1337,38,40,42,43,45 BBL-408 Wishnu Prasetya
Sebastiaan den Heijer
Simeon Visser
   
BBL-412
do 10-1136 BBL-408
vr 09-1137-40,42,43,45 BBL-408
BBL-412
groep 5 wo 11-1337,38,40,42,43,45 BBL-456 Wishnu Prasetya
Eric van Dalen
Jeroen Leeuwestein
   
BBL-458
do 10-1136 BBL-458
vr 09-1137-40,42,43,45 BBL-456
BBL-458
groep 6 wo 11-1337,38,40,42,43,45 BBL-515 Wishnu Prasetya
Sjoerd van Hagen
  
BBL-516
do 10-1136 BBL-412
vr 09-1137-40,42,43,45 BBL-515
BBL-516
werkcollege groep 1 vr 13-1538,40,43 BBL-420 Stefan Holdermans
Sebastiaan den Heijer
  
groep 2 vr 13-1538,40,43 BBL-416 Stefan Holdermans
Eric van Dalen
  
groep 3 vr 13-1538,40,43 BBL-468 Stefan Holdermans
Rene Kersten
  
groep 4 wo 11-1339,41,44 BBL-105b Wishnu Prasetya
Sebastiaan den Heijer
  
groep 5 wo 11-1339,41,44 BBL-166a Wishnu Prasetya
Eric van Dalen
  
groep 6 wo 11-1339,41,44 BBL-108a Wishnu Prasetya
Sjoerd van Hagen
  
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 Java, waarin opdrachten gebundeld worden in zogeheten methoden, die een object bewerken. Het is daarmee tevens een inleiding in objectgeoriënteerd 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 Java horende standaard-methoden. Aan de orde komen onder andere packages om interactieve user-interfaces (waaronder web-applets) 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 hiërarchisch 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 2005 of later.
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 o.a. gewerkt wordt aan een drietal in te leveren computerprogramma's. Zes keer wordt heeft dit het karakter van 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:Aan de aanvullende toets mogen degenen meedoen die één deeltentamen hebben gemist; het cijfer komt dan in de plaats van het gemiste deelcijfer. Ook mogen degenen meedoen die alle deeltentamens hebben gemaakt en een eindcijfer 4 of meer hebben behaald; het cijfer komt dan in de plaats van het laagste deelcijfer. Op dezelfde voorwaarden is er één aanvullende practicumopdracht mogelijk.
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 Java behandeld. Vanaf het begin wordt object-georiënteerde modellering van de probleemstelling gebruikt. Een aantal standaard-libraries van Java wordt gebruikt, in het bijzonder AWT en Swing, 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 (als applet, m.b.v. paint); 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 JCreator)
  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:
    • Parametriseren van een applet
    • De klasse String, conversie van int naar String
    • Opbouw van user-iterface met Button en Scrollbar
    • Event-listeners
  4. Iteratie:
    • Het while- en for-statement
    • Het type boolean, vergelijkingen, logische operatoren
    • Casus: renteberekening (met I/O via TextFields)
  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. Ontwerp van programma's
    • Opbouw met klassen voor model en controller
    • Ontwerp van de Grafische userinterface (GUI)
    • Stand-alone programma's (applications)
    • Toepassing: een bitmap-editor
  10. Object-georienteerd ontwerp
    • Abstracte klassen en interfaces
    • Bibliotheekklassen voor Collections
    • Bibliotheekklassen voor GUI's met Swing
    • Toepassing: een vector-tekenprogramma
    • Bibliotheekklassen voor file-I/O
    • Non-window (console-) programma's; casus: grep
  11. 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)
  12. Optionele extra: C++ voor Java-kenners
Enkele didactische keuzen die gemaakt zijn in bovenstaande opzet:
  • Java als eerste taal
    • Meteen objectgeoriënteerd (daarom geen Pascal)
    • Sterk getypeerd dus beginners-vriendelijk (daarom geen C++)
    • Platform-onafhankelijk (daarom geen Delfi-Pascal of MFC-C++)
    • Uitbreidbaar, ook qua klassen (daarom geen Visual Basic of Javascript)
    • Mainstream (daarom geen Smalltalk of IYFTL)
  • Voorbereidend op vervolgvakken
    • Kiem wordt gelegd voor `nette' OO-aanpak, algoritmen en datastructuren, concurrency
    • Alle taalconstructies worden zelf geschreven en begrepen, geen gebruik van visuele wizards
    • Liever meer verschillende concepten en ideeën dan uitputtend alle standaard-methoden, -operatoren en taalconstructies
  • Voorbeeld-gebaseerd
    • Elk nieuwe concept wordt geillustreerd met een typisch voorbeeld
    • Voorbeeldprogramma's zijn gekozen als illustratie, en zijn daarom niet te veel opgetuigd met leuke extra'tjes die de aandacht te veel opeisen
    • De vier grotere casussen (editor/grep, taalherkenning, bitmapeditor, route-zoeker) demonstreren verschillende toepassingsgebieden en probleem-aanpakken (je kunt er zelfs de studierichtingen Alg, TKI, MTI en IenM in herkennen!)
  • Objectgeorienteerde aanpak
    • OO vanaf het begin; dit is niet iets wat je later kunt toevoegen; dit aan de hand van wat er in Java zoal nodig is om een programma te kunnen schrijven, dus zonder nadrukkelijke theorievorming (dus geen hoofdstuk 0 over het dierenrijk)
    • Leer hergebruiken: aanroep van methoden voor definitie ervan, maar definiëren en parametriseren van nieuwe methodes toch nog eerder dan while- en if-statement, arrays enz.
    • Klassen en methoden vroeg, maar inheritance pas wat later
  • Grafisch georiënteerd
    • Directere feedback van wat er gebeurt
    • Event-drive I/O-model belangrijker dan Stream-I/O
    • Gebruik van Thread wel voor eenvoudige animatie, maar geen aandacht voor synchronisatie-perikelen
wijzigen?