PROS3E1C1/P1 Programmeren en Software Engineering 3
Object Georiënteerd Programmeren in C++ en
Object Georiënteerd Ontwerpen met UML.
© Harry Broeders.
PROS3 is sinds 2010/2011 vervangen door OGOPRG!
Deze pagina was bestemd voor studenten van de Haagse Hogeschool - Academie
voor Technology, Innovation & Society Delft groepen EQ1.2r, EQ1.2m en
EQ1.2v. Op deze pagina vind je het in de lessen PROS3E1C1/P1 gebruikte
studiemateriaal.
Beschikbaar materiaal:
- Studiewijzer (inclusief gedetailleerde planning).
- Het belangrijkste studiemateriaal is het dictaat: Object
Georiënteerd Programmeren in C++. Het dictaat heeft een bindmarge
en is dus gemaakt om dubbelzijdig af te drukken!
- Dictaat compleet (53 dubbelzijdig bedrukte A4-tjes): Dictaat_OGPiCpp.pdf. Let op! Dit
dictaat bevat ook een klein deel (6 dubbelzijdige bedrukte A4-tjes:
paragraaf 6.6 en 6.7) wat niet bij de
stof van PROS3 hoort maar dat alleen bedoeld is voor de "liefhebbers".
Omdat kwartaal 2 dit schooljaar (2009/2010)
slechts uit 6 lesweken zijn dit jaar paragraaf 5.5 t/m 5.10 en
hoofdstuk 6 niet verplicht!
- Dictaat PROS3 (47 dubbelzijdige bedrukte A4-tjes): Dictaat_OGPiCpp_PROS3.pdf.
Dit is bovenstaande
dictaat zonder paragraaf 6.6 en 6.7.
- Sheets per les. De sheets kunnen na afloop van een les nog worden
bijgewerkt.
Omdat kwartaal 2 dit schooljaar (2009/2010) slechts
uit 6 lesweken bestaat vervallen dit jaar les 19 t/m 21!
- Les 1+2: Waarom weet je zoveel van
Sonja? En andere prangende vragen over object oriëntatie
worden in de eerst twee lessen beantwoord.
- Les 3: Je eerste herbruikbare C++
component: de class
Breuk
.
- Les 4+5: Constructors, type
conversie, const memberfuncties en
operator+=
overloading.
Ontdek wat je gratis krijgt bij elke class! C++ heeft een nieuw "soort"
variabele: de reference.
- Les 6: Wat je allemaal moet doen om
operator+
goed te laten werken. In C++ bepaal je zelf wie
je vrienden zijn.
- Les 7+8: Breuken lezen en
schrijven. Inleiding generiek programmeren. Beter dan array:
std::vector<T>
.
- Les 9: Inleiding overerving en
polimorfisme: Elke
Hond
blaft zoals hij gebekt is.
- Les 10+11: Meer over overerving:
Leer o.a. hoe je kunt voorkomen dat je Hond in plakjes word gesneden
(slicing problem) en hoe er in C++ verstoppertje wordt gespeeld
om de onderhoudbaarheid te bevorderen (hiding rule). Na deze kun
je het volgende proeftentamen
over de stof van de eerste 11 lessen maken.
- Les12: 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.
- Les13+14: Inleiding software
engeneering en UML. Leer hoe Together je kan helpen bij het ontwikkelen
van OO programma's.
- Les15: Implementatie van een
aggregatie.
- Les 16+17: Leer het dynamisch
gedrag van een applicatie / programma te beschrijven met behulp van
diverse UML diagrammen.
- Les 18: Dynamisch geheugen en
destructor. Voorkom drankmisbruik! Ook als je SintBernard doodgaat...
- Les 19+20:
Leer wanneer je zelf een copy constructor en
operator=
moet definiëren en leer om honden te
tellen.
- Dictaat 5.5 t/m
5.10: De stof van deze paragraaf 5.5 t/m 5.10 is al besproken in
les 19+20 aan de hand van een
SintBernard
met een
WiskeyVat
. Deze sheets illustreren het in het dictaat
gebruikte voorbeeld Array
.
- Extra opgaven bij UML boek.
Op de site die bij het boek hoort http://www.pearsoneducation.nl/warmer/
kun je per hoofdstuk oefenopgaven vinden. Ook de antwoorden zijn op
dezelfde site te vinden. Ik beveel de volgende opgaven aan:
- Hoofdstuk 2: opgave 1, 3 a t/m c en 4.
- Hoofdstuk 4: opgave 1 t/m 8.
- Hoofdstuk 8: opgave 1 t/m 8.
- Hoofdstuk 10: opgave 2 t/m 4.
- Hoofdstuk 12: opgave 1 en 2.
- Hoofdstuk 15: opgave 1 t/m 3.
- Extra voorbeelden over inheritance en
polymorphisme.
- Voorbeeldprogramma's :
- C.c
Dit is het in C geschreven programma dat op pagina 3 en 4 van het
dictaat wordt besproken. Dit programma is bedoeld om je C kennis op te
frissen (indien nodig).
- Const.cpp
In paragraaf 1.3 van het dictaat wordt uitgelegd dat je beter
const
dan #define
kunt gebruiken.
- C.cpp
Dit is het in C++ programma dat in paragraaf 1.12 van het dictaat wordt
besproken. Dit C++ programma doet exact hetzelfde als het bovenstaande
C programma. Dit programma maakt gebruik van de in hoofdstuk 1
besproken (kleine) verbeteringen van C++ ten opzichte van C++.
- Breukc.c
Dit is een C programma dat werkt met breuken (om afrondingsfouten te
voorkomen). Dit programma wordt in paragraaf 2.2 van het dictaat
besproken. De nadelen van het gebruik van een struct
met
losse functies worden op pagina 18 van het dictaat besproken.
- Breuk0.cpp
Dit is de eerste verie van de ADT Breuk
die op pagina 18
van het dictaat wordt gedeclareerd. Het gebruik van een
class
met memberfuncties heeft veel voordelen ten opzichte
van het gebruik van een struct
met losse functies. Dit
wordt uitgelegd op pagina 19 en 20 van het dictaat.
- Breuk1.cpp
Dit is de tweede versie van de ADT Breuk
die in paragraaf
2.3 van het dictaat wordt gegeven. Deze versie heeft
constructors (waarmee een Breuk
aangemaakt en
meteen geïnitialiseerd kan worden), vraagfunctie (weermee
je iets aan een Breuk
kunt vragen, bijvoorbeeld: "Wat is
de waarde van je teller?") en doefuncties (waarmee je iets met
een Breuk
kunt doen waardoor zijn waarde kan veranderen,
bijvoorbeeld: "Tel deze Breuk
bij jezelf op.").
- Breuk2.cpp
Dit is de derde versie van de ADT Breuk
die in paragraaf
2.11 van het dictaat wordt gegeven. Deze versie maakt gebruik van
operator overloading. De hier gedefinieerde
operator+=
voor het zelfgedefinieerde type
Breuk
gedraagt zich echter niet exact hetzelfde als de
operator+=
van het ingebouwde type int
.
- Param.cpp
Dit programma laat het verschil zien tussen de verschillende manieren
van parameteroverdracht die in paragraaf 2.15 van het dictaat worden
besproken:
- call by value
- call by reference (met behulp van een pointer).
- call by reference (met behulp van een reference).
- ConstRef.cpp
Dit programma uit paragraaf 2.16 laat zien hoe je een onnodig kopietje
kunt voorkomen door een const ... &
parameter te
gebruiken.
- Refret.cpp
Dit programma laat zien hoe je een reference als return van een functie
kunt gebuiken zoals in paragraaf 2.18 van het ditaat wordt besproken.
- Plus.cpp en operator+Member.cpp
Deze programma's laten zien dat je bij een int
geen
Breuk
kunt optellen als je de operator+
als
een member van Breuk
definieert zoals uitgelegd wordt in
paragraaf 2.21 van het dictaat. Hoe je er voor kan zorgen dat je bij
een int
wel een Breuk
kunt optellen wordt
uitgelegd in paragraaf 2.22 van het dictaat.
- operator+Global.cpp
Dit programma laat zien hoe je het bovenstaande probleem kunt oplossen
door een extra globale operator+
te
definiëren. Je kunt ook slechts één globale operator+
definiëren zie onderstaande programma (Breuk3.cpp).
- Breuk3.cpp
Dit is de uiteindelijke versie van de ADT Breuk
uit
paragraaf 2.25 van het dictaat.
- Memcell.h, Memcell.cpp en Memappl.cpp
Demonstratie van afzonderlijk gecompileerde programmadelen. In
paragraaf 2.28 van het dictaat wordt besproken hoe je de component
MemoryCell
kunt verpreiden zonder dat de programmeur die
deze component gaat gebruiken (in Memappl.cpp) de beschiking heeft over
de source code (Memcell.cpp) van deze component.
- SwapTemplate.cpp
De generieke swap
functie die in paragraaf 3.1 van het
dictaat wordt besproken. De functie wordt generiek gemaakt door het
gebruik van een template functie.
- Dozijn.cpp
De class Dozijn
waarin 12 integers opgeslagen kunnen
worden. Zie paragraaf 3.2 van het dictaat.
- DozijnTemplate.cpp
De generieke class Dozijn
waarin 12 elementen van een
bepaald type kunnen worden opgeslagen. De class is generiek gemaakt
door het gebruik van een template class. Zie paragraaf 3.3 van
het dictaat.
- StdVector1.cpp en StdVector2.cpp
Twee programma's die laten zien hoe je de std::vector
template class kunt gebruiken. Deze class wordt in C++ vaak gebruikt op
plaatsen waar in C een array wordt gebruikt. Zie paragraaf 3.6 van het
dictaat.
- In paragraaf 4.7 wordt een zeer uitgebreid voorbeeld gegeven van een
applicatie waarin verschillende soorten ADC kaarten gebruikt moeten
kunnen worden.
- Kaart0.cpp Dit programma geeft een
gestructureerde oplossing. Zo deden we het vroeger... toen we nog
niet beter wisten.
- Kaart1.cpp Dit programma gebruikt
een OO oplossing met behulp van een ADT. Deze oplossing is wel
herbruikbaar en aanpasbaar maar niet uitbreidbaar!
- Kaart2.cpp Dit programma gebruikt
een OO oplossing met behulp van overerving. Deze oplossing is
herbruikbaar, aanpasbaar en uitbreidbaar!
- Kaart3.cpp Dit is hetzelfde
programma als Kaart2.cpp maar de verschillende componenten zijn nu
verdeeld over verschillende files: Adccard.h, Adccard.cpp, Ad178.h, Ad178.cpp, Ni323.h, Ni323.cpp, Doit.h en Doit.cpp.
- Kaart4.cpp Dit programma laat zien
hoe eenvoudig Kaart3.cpp uitgebreid kan worden met een nieuw
type ADC kaart. Deze nieuwe kaart is gedeclareerd in Bb647.h en de memberfuncties zijn
gedefinieerd in Bb647.cpp. De andere
componenten (de classes voor de andere typen kaarten en de
polymorfe functie
doIt
) hoeven niet gewijzigd te
worden. Ze hoeven zelfs niet opnieuw gecompileerd te worden!
- Overload.cpp
Dit programma uit paragraaf 4.8 van het dictaat laat zien dat je
memberfuncties ook kunt overloaden.
- Hide.cpp
Dit programma uit paragraaf 4.8 van het dictaat laat zien hoe de
hiding rule werkt en maakt duidelijk dat je overerving en
overloading niet moet combineren.
- HideReden.cpp
Dit programma uit paragraaf 4.8 van het dictaat laat zien wat het
nut is van de hiding rule.
- Override.cpp
Het verschil tussen overloading en overriding wordt
hopelijk duidelijk door dit programma uit paragraaf 4.8 van het
dictaat.
- Slice.cpp
In paragraaf 4.9 van het dictaat wordt het slicing probleem
besproken. Dit programma demonstreert dit probleem.
- Fruitmand.cpp
Dit programma uit paragraaf 4.10 van het dictaat laat zien hoe je
polymorfe objecten in een std::vector
kunt opslaan
(door polymorfe pointers te gebruiken).
- In paragraaf 4.11 wordt een zeer uitgebreid voorbeeld gegeven van een
applicatie waarmee de impedantie van pasieve elektronische schakelingen
kan worden berekend.
- Netwerk0.cpp Dit is de eerste
versie van dit programma waarmee de impedantie van een weerstand,
condensator en spoel kan worden berekend.
- Netwerk1.cpp In deze versie van
het programma kan de impedantie van serieschakelelingen en
parallelschakelingen van weerstanden, condensatoren en spoelen
worden berekend.
- Impedance calculator
voorbeeld. Dit is een uitgebreide versie waarmee een
impedantiekarakteristiek voor een willekeurig netwerk met R's, C's,
en L's worden getekend. Dit leer je niet in deze onderwijseenheid,
maar als je het leuk vind kun je dit leren in de (niet verplichte) practicumopdracht 5.
- DynamischeArray.cpp
Dit programma laat zien hoe je met behulp van het in paragraaf 5.1
besproken dynamische geheugen een array met objecten kunt
aanmaken waarbij het aantal elementen in de array pas tijdens
run-time bekend is.
- Breuk1_destructor.cpp
Dit programma uit paragraaf 5.2 laat zien wat er gebeurd als je een
destructor aan het programma Breuk1.cpp
toevoegd.
- Fruitmand_destructor.cpp
Dit programma uit paragraaf 5.4 laat zien wat er mis gaat als de
destructor van een base class niet virtual is.
- Array.cpp
Dit programma uit paragraaf 5.5 laat zien hoe je zelf een betere
int
array kunt maken (beter dan het ingebouwde array
type).
- Array_operator[].cpp
Dit programma (alleen bedoeld voor de liefhebber) laat zien waarom het
nodig is om twee versies van operator[]
te
definiëren.
- Array_template.cpp
Dit programma uit paragraaf 5.10 laat zien hoe je met behulp van een
template een betere array voor elk type kunt maken (beter
dan het ingebouwde array type).
- HondenTeller.cpp
Dit programma uit paragraaf 6.1 laat zien hoe je een
static
datamember kunt gebruiken om Hond
objecten te tellen.
- ConstPointer.cpp
Dit programma uit paragraaf 6.2 laat zien op welke manieren je een
pointer const
kunt maken.
- ImpedanceC1.cpp, ImpedanceC2.cpp, ImpedanceC3.cpp, ImpedanceC4.cpp, ImpedanceC5.cpp, ImpedanceC6.cpp, ImpedanceC7.cpp
Deze programma's worden gebruikt in paragraaf 6.6. Let op! Deze
programma's horen niet bij de stof voor
PROS3 maar is alleen bedoeld voor de "liefhebbers".
- Casting1.cpp, Casting2.cpp, Casting3.cpp, Casting4.cpp, Casting5.cpp, Casting6.cpp, Rtti.cpp
Deze programma's worden gebruikt in paragraaf 6.7. Let op! Deze
programma's horen niet bij de stof voor
PROS3 maar is alleen bedoeld voor de "liefhebbers".
- Introductie in het gebruik van Borland C++
Builder 6.
- Introductie in het gebruik van Visual C++ 2008 Express
Edition.
- Gratis alternatieven voor Borland Together 6.2:
- BOUML. Met C++ code generatie!
- ArgoUML. Met C++ code
generatie!
- Regels die gelden op het practicum. Deze regels
staan ook op de practicumkaart die in de eerste practicumles wordt uitgedeeld.
- Practicumopdrachten, zie ook de
practicumplanning:
- Als je cross-platform applicaties wilt ontwikkelen met C++ dan is Qt van Nokia een aanrader!
- Hoe nu verder? Meer leren over C++.
- Andere interessante sites betreffende Object
Georiënteerd Programmeren in C++.
- Voorbeeld tentamen. 17
januari 2010 (
geefBeroep
memberfuncties protected
gemaakt).
- Geen uitwerkingen.
- Informatie voor studenten die PROS3 volgen als
vervanger voor SOPX2.