PROS3E1C1/P1 Programmeren en Software Engineering 3
Object Georiënteerd Programmeren in C++ en
Object Georiënteerd Ontwerpen met UML.
© Harry Broeders.
Deze pagina is 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.
Practicumresultaten 15/01/2010:
pdf/res_pract_PROS3_20100115.pdf
Toetsresultaten 18/01/2010:
res_PROS3_20100118.pdf en van de
verlengde tijd:
res_PROS3_20100118_vt.pdf
Beschikbaar materiaal:
-
Studiewijzer (inclusief gedetailleerde
planning).
-
Het belangrijkste studiematriaal 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.