Objectgeorienteerd Programmeren A

Voorbehoud: deze pagina is regelmatig in bewerking.

Schrijf je zo spoedig mogelijk via ProgressWWW in voor deze cursus, zodat je aan de Nestor cursus wordt toegevoegd.

Versie: 23 maart 2004.
Docent: Wim H. Hesselink, IWI 111 (wim@cs.rug.nl).
Werkcollegedocenten: Sybren Deelstra.
Studentassistent: Jaap Duursma (csg1103@wing.rug.nl).
Nieuw: Uitwerking tentamen 6 april. Het tentamen is nagekeken. De cijfers staan op nestor.

Links:
Het rooster voor deze periode
Mijn onderwijspagina
Wat wordt er van verslagen verwacht?

Programma's:
De zip-file gamebase als basis voor LIFE, een zip-file met een package lees dat de drie Lees klassen bevat. Deze klassen staan klaar in het package ~csg102/java/local. Neem ~csg102/java dus op in je CLASSPATH.
Een bruikbare maar verouderde zip-file primexp met de programma's Scanner, Numexp en Prefexp uit de hoofdstukken 5 en 6. Een nieuwe versie hiervan is primexp04. Een experimentele C-versie is primexp.tgz. Het programma Partities.java bij Hoofdstuk 9.

Rooster

Colleges: maandag 11.15-13.00 (ZG 119) en donderdag 9.15-10.00 (ZG 119).
Werkcolleges: dinsdag 11.15-13.00 en donderdag 10.15-11.00 (RC 59).
Terminals zijn gereserveerd op maandag 13-14, dinsdag 13-14 en donderdag 11-13-15. De studentassistent is beschikbaar op donderdag tijdens de genoemde uren, en verder via de email (zie boven).

Opbouw van de cursus

We gebruiken het boek:
E.B. Koffman, U. Wolz: Problem Solving with Java (2nd ed.). Addison Wesley 2002, ISBN 0-201-72214-3
en een aanvullend dictaat "Objectgeorienteerd Programmeren A" (jan. 2004), verkrijgbaar bij het Onderwijsbureau van Wiskunde en Informatica.

De cursus bestaat uit vier onderdelen: college, werkcollege, practicum en tentamen. Het college en het werkcollege bereiden voor op het practicum en het tentamen. Programmeren kun je alleen leren door het zelf te doen.

Het practicum

Het practicum gebeurt in tweetallen. Zoals dat ook bij "extreme programming" gebeurt, zijn beide partners verantwoordelijk voor de kwaliteit van het programma en het verslag. Het practicum bereidt tevens voor op het tentamen. Zorg dus dat je er veel van leert!
Het is misschien nodig je java class path in je ".bashrc" te zetten met:
export CLASSPATH=.:~csg102/java
Je kunt nagaan of dit effect heeft met de opdracht "echo $CLASSPATH". Als je dit gedaan hebt, moet Java de klassen uit gamebase en de leesklassen zelf kunnen vinden als je "import local.*;" in de file hebt staan.
Je kunt submitten met het commando 'submissionclient'. De resultaten staan daarna op http://wing6.wing.rug.nl:8080/login.xml
Zie voor het gebruik van Javadoc de handleiding.
Het eerste practicum bestaat uit de opdracht Life waarvoor je een aanzet krijgt in de vorm van de opdracht LIFE. Haal dit op en plaats het in een directory voor deze opdracht. Pak het uit, onder Linux met unzip spel.zip, onder DOS met Wunzip. Bekijk de inhoud ervan. Zie het wekenprogramma hieronder voor de practicumdeadlines.

Beoordeling van de cursus

De cursus heeft een omvang van 6 EC. Het eindcijfer wordt bepaald op grond van het tentamencijfer (T) en het practicumcijfer (P). Het practicum telt voor een derde mee. Het tentamen telt voor twee derde. Het eindcijfer is dus een afronding van (P+2T)/3. Als 7 < P < T, wordt T als eindcijfer gegeven.

Stof voor het tentamen.

De stof voor het tentamen bestaat uit het hele dictaatje, het grootste deel van het boek en de teksten die direct aan deze pagina gelinkt zijn. Je moet de navolgende klassen kennen en kunnen gebruiken: LeesRegels, Lees, Scanner, Numexp, Prefexp, IntList, BinTree, en ExpTree met zijn subklassen, zoals je die bij het practicum gezien hebt. Tevens uit java.util de interfaces Comparable (compareTo), Comparator (compare), Collection (add, contains, isEmpty, iterator) en de klassen Iterator (hasNext, next), Vector, Stack (push, pop), HashMap (put, get, containsKey).
Van het boek van Koffman en Wolz worden de volgende secties gerekend tot Imperatief Programmeren: 2.1, 2.2, 2.3, 2.4, 2.7, 2.8, 3.1, 3.4, 3.5, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 5.1, 5.3, 5.4, 5.5, 5.6, 5.7, 5.8, 9.1, 9.2, 9.3, 9.4. Dit wordt dus bekend verondersteld. Nieuwe stof voor Objectgeorienteerd Programmeren staat in de secties: 6.1, 6.2, 6.3, 6.4, 6.5 (lees ook 6.6), 8.1, 8.2, 10.1 (lees ook 10.2, 10.3), 10.4, 10.5, 10.6.
Het tentamen toetst de individuele programmeervaardigheid in de taal Java voor tamelijk kleine programma's, voorzover dat goed te doen is met het behandelde repertoire.
Als voorbeeld van een tentamen, zie de
uitwerking van het tentamen van 9 mei 2003.

Het wekenprogramma

Week 7: 9 februari - 13 februari.
College maandag: subtypering met de klassen
Klas0 en Klas1, voorts H3 (hoofdstuk 3 van het aanvullend dictaat OOA) en de opdracht Life.
Werkcollege dinsdag: H3: 1, 2, 3, 4, 5.
College donderdag: H2 (lees uit het boek 8.1 en 8.2).
Werkcollege donderdag: H2: 1, 2, 3, 4, 5.

Week 8: 16 februari - 20 februari.
College maandag: H4 (1, 2, 3) en H5 (1, 2, 3, 4).
Werkcollege dinsdag: H4: 1, 2, H5: 1, 5, 6, (7).
College donderdag: H5.7 en de bepaling van de vrije variabelen in lambdaexpressies.
Werkcollege donderdag: H5: 2, 3.
Practicum donderdag: aftekenen werking Life.
Te laat aftekenen (of te laat inleveren verslag) leidt tot een lager cijfer!

Week 9: 23 februari - 27 februari.
Deadline maandag 23 februari, 17.00 uur. Inleveren eindverslag Life inclusief code van de eigen klassen op papier. Submissie in Athena met Life.java als naam voor de run-klasse.
College maandag: H6.
Werkcollege dinsdag: H6: 1, 2, 3, 4.
College donderdag: H6.
Werkcollege donderdag: H6: 5, 6, 9, (7, 8).

Week 10: 1 maart - 5 maart.
College maandag: H4 (5, 6) en H7.
Werkcollege dinsdag: H6: 12, 13, 14; H4: 3, 5.
Deadline woensdag 3 maart 16.00 uur. Submissie Expressies A, zonder verslag. De runklasse moet MainexpA.java heten, de parser ExpA.
College donderdag: Bespreking van de uitwerkingen van Life. Verder over hoofdstuk 7.
Werkcollege donderdag: H4: 7, 9.

Week 11: 8 maart - 12 maart.
College maandag: H7 (4, 5) en H8: graafalgoritmen.
Werkcollege dinsdag: H4: 6, 8, 9, 10.
College donderdag: Dijkstra's kortste pad algoritme.
Werkcollege donderdag: H7: 1 en:
Opgave: Gegeven drie stijgende arrays a, b, c van integers, die tenminste een getal gemeenschappelijk hebben. Bepaal op efficiente wijze een drietal indices i, j, k met a[i]=b[j]=c[k]. Geef zo mogelijk een invariant.

Week 12: 15 maart - 19 maart.
Deadline maandag 15 maart, 17.00 uur. Submissie Expressies B, zonder verslag. De runklasse moet MainexpB.java heten, de parser ExpB.
College maandag: H9 met ondermeer partities.
Werkcollege dinsdag: H8: 1, 2; H9: 1.
Woensdag: submissie Expressions wordt opengezet.
College donderdag: H9 vervolg, permutaties.
Werkcollege donderdag: H9: 2, 3.

Week 13: 22 maart - 26 maart. College maandag: Uitbreiding van H9.2: het probleem een verzameling personen in een zo klein mogelijk aantal conflictvrije teams te verdelen met een oplossing.
Werkcollege dinsdag: H9: 4, 5.
College donderdag: stof voor het tentamen, gelegenheid voor vragen.
Werkcollege donderdag: H9: 6.
Deadline vrijdag 26 maart, 17.00 uur. Submissie Expressies en inleveren eindverslag met volledig programma op papier. De runklasse moet Mainexp.java heten, de parser Expressions.

Week 14: 29 maart - 2 april. Eventuele uitloop.

Tentamen: dinsdag 6 april in de Examenhal.