Studiewijzer OGOPRG-co1/pr1.

© Harry Broeders.

titel: Objectgeoriënteerd Programmeren in C++ en Objectgeoriënteerd Ontwerpen met UML.
code onderwijsdeel: OGOPRG-co1 en OGOPRG-pr1
studiebelasting: 112 SBU
semester / kwartaal: EQ2.1
contacturen: 3 uur/week college en 2 uur/week practicum
toetsing: tentamen (cijfer) en practicumbeoordeling (O/V)
benodigde voorkennis: Programmeren uit de P fase
verantwoordelijke docenten: Ben Kuiper

Inleiding

In steeds meer producten en systemen wordt programmatuur gebruikt. Het is zeker dat een aanstaande bachalor of engineering elektrotechniek hiermee te maken krijgt. In de propedeuse heb je leren programmeren in de programmeertaal C met behulp van de functionele decompositie ontwerpmethode (structured programming and structured design). Deze methode van werken is prima geschikt voor kleine programmeerprojecten maar levert bij grote projecten problemen op, vooral op het gebied van onderhoudbaarheid, uitbreidbaarheid en hergebruik. Op dit moment is de zogenaamde objectgeoriënteerde ontwerpmethode (OOD = Object Oriënted Design) erg populair.

Tijdens deze onderwijseenheid zal je de basisaspecten van objectgeoriënteerd programmeren (OOP) leren aan de hand van de, op C gebaseerde, programmeertaal C++. Je zult leren hoe het met behulp van templates mogelijk is om algoritmen en datastructuren generiek te definiëren. Een generiek algoritme is een algoritme dat onafhankelijk is van de gebruikte datatypen. De programmeertaal C++ ondersteunt dus 3 verschillende programmeer paradigma's: structured programming, object oriënted programming en generic programming.

Tevens wordt in deze onderwijseenheid een inleiding gegeven in het modelleren van objectgeoriënteerde systemen met behulp van de UML (Unified Modelling Language) standaard.

In deze onderwijseenheid maak je kennis met object oriënted programming en generic programming en met object oriënted design. In de minor Embedded systems wordt hier mogelijk verder op ingegaan. In de C++ ISO/ANSI standaard is een verzameling generieke algoritmen en datastructuren opgenomen die in deze minor mogelijk behandeld zal worden. Er zal hier ook verder op OOD met UML in worden gegaan.

In het eindproject basis en in het ECV keuzeproject kun je de bij deze module geleerde ontwerptechnieken en programmeertechnieken op een projectmatige manier toepassen. De aangeleerde ontwerpmethode en ontwerptechnieken kunnen ook (gedeeltelijk) voor projecten gebruikt worden die niets met software te maken hebben (b.v. use-case-diagrammen, interactiediagrammen en toestandsdiagrammen).

Je zult na afloop van OGOPRG in staat zijn om herbruikbare software componenten te gebruiken, ontwerpen, implementeren en testen. Tevens zul je in staat moeten zijn om samen met collega's (in een projectgroep) de software voor een elekrotechnische systeem te ontwerpen en realiseren. Je bent in staat om de eisen van de gebruikers in zogenaamde use-cases te beschrijven. Je maakt bij het ontwerpen gebruik van een moderne ontwerptool (Visual Paradigm for UML) die de UML diagrammen automatisch omzet naar C++ code.

Globale leerdoelen

Na afloop van OGOPRG:

Als je deze onderwijseenheid met een voldoende hebt afgesloten ben je in staat om de basisaspecten van OOD en OOP toe te passen. Deze aspecten omvatten:

Literatuur

Thinking in C++Tijdens het eerste deel van dit onderwijsdeel (Objectgeoriënteerd Programmeren met C++) heb je geen boek nodig. Alle leerstof kun je in het dictaat vinden. Als je de leerstof onduidelijk vindt of als je meer voorbeelden zoekt zul je zelf op zoek moeten gaan naar een goed C++ boek. Een bruikbaar Nederlands boek is: Leen Ammeraal, C++ / druk 6, ISBN 9039519358. Als je meer achtergrondinformatie of diepgang zoekt kun je het volgende boek gebruiken: Bruce Eckel, Thinking in C++ 2nd Edition, Volume 1, ISBN 0-13-979809-9. Dit boek is ook gratis te downloaden van: http://mindview.net/Books/TICPP/ThinkingInCPP2e.html.

Tijdens het tweede deel van dit onderwijsdeel (Objectgeoriënteerd Ontwerpen met UML) heb je wel een boek nodig.
Warmer & Kleppe, Praktisch UML, 5de editie ISBN 9789043020558

Broeders, Dictaat Objectgeoriënteerd Programmeren in C++. De voorgaande link verwijst naar een pdf bestand.

Toetsing en beoordeling.

Er worden voor deze onderwijsdelen twee deelresultaten vastgesteld waarbij het eerste resultaat (tentamen OGOPRG-co1) een cijfer (1..10) is en het tweede resultaat (practicum OGOPRG-pr1) een O(nvoldoende) of V(oldoende) is. Als het tweede resultaat een O is dan kan de onderwijseenheid waar deze onderwijsdelen deel van uitmaken niet worden behaald. Bij het tentamen mag je een boek, het dictaat en eigen aantekeningen gebruiken. Het tentamen bestaat uit open vragen. Het practicum wordt beoordeeld met Onvoldoende of Voldoende. Het practicum bestaat uit 4 opdrachten. De opdrachtbeschrijving kun je hier vinden. Alle opdrachten worden afzonderlijk beoordeeld met een voldoende of onvoldoende aan de hand van:

Om het practicum met een voldoende af te sluiten moeten alle opdrachten voldoende zijn. De deadline is week 7 van het kwartaal, je krijgt dan je eindbeoordeling voor dit practicum: voldoende of onvoldoende. Een onvoldoende als eindresultaat voor dit practicum kan (in overleg met de docent) worden herkanst in week 10.

Weekplanning theorie.

De planning voor de theorie kan gedurende het kwartaal nog worden aangepast!

Les Inhoud Huiswerk (na de les zelf doen) Dictaat/ Boek
1 Introductie, terugblik C, Voorbeeld in C++. string, cin, cout. Bestudeer hoofdstuk 1 van het dictaat en de inleiding bij practicum opdracht 1. Bestudeer indien nodig bepaalde onderweropen uit C. Dictaat: hoofdstuk 1
2 Inleiding OOD en OOP (Bosje bloemen naar oma). Waarom weet je zoveel van Sonja? Deze en andere prangende vragen over objectoriëntatie worden in deze les beantwoord. Bestudeer hoofdstuk 2 t/m 2.1 van het dictaat. Dictaat: hoofdstuk 2 t/m 2.1.
3 Objects en Classes: datamembers, memberfuncties, public en private. Vergelijking struct versus class. In deze les leer je jouw eerste herbruikbare C++ component kennen: de class Breuk. Bestudeer paragraaf 2.2 van het dictaat. Dictaat: paragraaf 2.2.
4 Objects en Classes: constructor, type conversie, explicit, default copy constructor en operator=,  const memberfunctie. Ontdek wat je gratis krijgt bij elke class! Bestudeer paragraaf 2.3 t/m 2.10 van het dictaat. Opgave met Rechthoek (zie sheets). Dictaat: paragraaf 2.3 t/m 2.10.
5 Objects en Classes: operator+=, this. C++ heeft een nieuw "soort" variabele: de reference. Bestudeer paragraaf 2.11 t/m 2.20 van het dictaat. Beantwoord vragen over functie max. Implementeer operator+ voor class Breuk (zie sheets). Dictaat: paragraaf 2.11 t/m 2.20.
6 Objects en Classes: operator+, type conversie, friend, operator==, operator!=. In C++ bepaal je zelf wie je vrienden zijn. Bestudeer paragraaf 2.21 t/m 2.27 van het dictaat. Paragraaf 2.24 en 2.25 mag je overslaan. Implementeer operator*=, operator*, operator!=, operator<, operator<=, operator> en operator>=. Denk aan: afschuiven! Dictaat: paragraaf 2.21 t/m 2.27.
7 operator<<, operator>>. Breuken lezen en schrijven.
Bespreken opgaven: operator!=, operator*=, operator*, operator> enz.
Bestudeer paragraaf 2.28 van het dictaat. Dictaat: paragraaf 2.28
8 Seperate compilation, template en std::vector. Inleiding generiek programmeren. Bestudeer paragraaf 2.29 van het dictaat.
Bestudeer hoofdstuk 3 van het dictaat.
Dictaat: paragraaf 2.29 en hoofdstuk 3
9 Inheritance en polymorfisme (Honden). Elke Hond blaft zoals hij gebekt is. Bestudeer hoofdstuk 4 van het dictaat t/m 4.2.
Voeg zelf zelf de classes DuitseHerder en MechelseHerder toe en beantwoord de vragen op de laatste sheets uit de presentatie.
Dictaat: hoofdstuk 4 t/m 4.2.
10 Slicing problem, ABC. In deze les leer hoe je kunt voorkomen dat je Hond in plakjes word gesneden (slicing problem). Bestudeer paragraaf 4.3 t/m 4.5 en 4.12 van het dictaat. Dictaat: paragraaf 4.3 t/m 4.5 en 4.12.
11 Hidding rule, overriding versus overloading, explicit en final overriding, protected. In deze les leer je hoe er in C++ verstoppertje wordt gespeeld om de onderhoudbaarheid te bevorderen (hiding rule). Bestudeer paragraaf 4.6 t/m 4.11 en 4.13 t/m 4.15 van het dictaat.
Maak proeftentamen.
Dictaat: paragraaf 4.6 t/m 4.11 en 4.13 t/m 4.15.
12 Bespreken Proeftentamen. Je vragen over het proeftentamen worden in deze les behandeld. Als er nog iets anders is uit de eerste 11 lessen wat je niet begrijpt dan kun je dat in deze les ook vragen. Bestudeer H1, H2 en H4 t/m 4.3 van het boek. Maak de opgaven bij hoofdstuk 2 en 4 van het boek (zie hier). Boek hoofdstukken 1, 2 en 4 t/m 4.3.
13 Intro software engineering en UML. In deze les leer hoe UML je kan helpen bij het ontwikkelen van OO programma's. Bestudeer H1, H2 van het boek. Boek hoofdstukken 1 en 2.
14 UML klassediagram. Bestudeer H4 t/m 4.3, 4.4.2 en 4.4.8 van het boek.
Bedenk hoe je een aggregatie(geen compositie) kunt implementeren. Zie dictaat: paragraaf 4.12.
Boek hoofdstuk 4 t/m 4.3, 4.4.2 en 4.4.8.
15 Implementatie van een aggregatie: ... heeft een ... Bestudeer paragraaf 4.4.8 en 4.4.9 van het boek en paragraaf 4.13 van het dictaat. Boek paragraaf 4.4.8 en 4.4.9. Dictaat: paragraaf 4.13.
16 UML use-case-diagram, sequentiediagram en communicatiediagram. In deze (en de volgende) les leer je het dynamisch gedrag van een applicatie / programma te beschrijven met behulp van diverse UML diagrammen. Bestudeer hoofdstuk 8 (behalve 8.5.3 en 8.7.6) en 10 (behalve 10.7). Maak de opgaven bij hoofstuk 8 en 10 van het boek (zie hier). Boek hoofdstuk 8 (behalve 8.5.3 en 8.7.6) en 10.
17 UML toestandsdiagram en activiteitendiagram. Bestudeer hoofdstuk 12 en 15 van het boek. Maak de opgaven bij hoofstuk 12 en 15 van het boek (zie hier). Boek hoofdstuk 10 (behalve 10.7), 12 en 15.
18 Dynamisch geheugen en destructor. Voorkom drankmisbruik! Ook als je SintBernard dood gaat... Bestudeer hoofdstuk 5 t/m 5.4 van het dictaat. Voeg in practicum opgave 2b een destructor toe die meldt dat een Breuk is overleden. Verklaar de uitvoer. Vervang nu elke const Tijdsduur& door een Tijdsduur en verklaar opnieuw de uitvoer. Dictaat: hoofdstuk 5 t/m 5.4.
19 copy constructor en operator=. Niet alles wat je gratis krijgt is goed. In deze les leer je wanneer je zelf een copy constructor en operator= moet definiëren
Bestudeer paragraaf 5.5 t/m 5.10 van het dictaat. Dictaat: paragraaf 5.5 t/m 5.10.
20 static datamembers en memberfuncties. Leer hoe je Honden kunt tellen. Bestudeer paragraaf 6.1 van het dictaat. Bestudeer extra voorbeelden over inheritance en polymorphisme. Dictaat: paragraaf 6.1.
21 Uitloop - -

Weekplanning practicum.

week studiemateriaal tijdens practicum op school doen zelf doen thuis of op school, voor het begin volgende practicumles klaar
1 Opdracht 1: Dictaat hoofdstuk 1. Doorlezen Gebruik van string en iostream en maken opdracht 1a. Maak een begin met opdracht 1b. Opdracht 1b afmaken.
2 Opdracht 2a: Dictaat paragraaf 2.2 t/m 2.10.
Opdracht 2b: Dictaat paragraaf 2.11 t/m 2.28.
Opdracht 2a maken. Opdracht 2b maken.
3 Opdracht 2c: Geen nieuwe stof.
Opdracht 2d: Dictaat paragraaf 2.29.
Opdracht 2c maken. Opdracht 2d maken.
4 Opdracht 3a en 3b: Dictaat hoofdstuk 4. Begin maken met opdracht 3a. Afronden opdracht 3a en maken opdracht 3b.
5 Opdracht 3c: Dictaat paragraaf 3.8 en 4.12. Maken opdracht 3c. Opdracht 3c afronden.
6 Opdracht 4: Boek. Begin maken met opdracht 4. Verder werken aan opdracht 4.
7 - Afronden opdracht 4. -
10 - (Eventueel) herkansing (in overleg met de docent). -