© Harry Broeders.
Deze opdracht is bedoeld als een introductie in modelleren in UML met behulp van Together. Together is alleen beschikbaar in lokaal 417 en 413. Je kunt eventueel de demo versie van Borland Together Solo gebruiken: http://www.borland.com/downloads/download_together.html.
We beginnen met het maken van een eenvoudig class diagram. In dit class diagram
gaan we de classes Bedrijf
en Werknemer
modelleren
met hun onderlinge relatie.
![]() |
![]() |
-
![]() |
![]() |
-
![]() |
![]() |
-
![]() |
![]() |
![]() |
main.cpp
in:
#include "Werknemer.h"
#include "Bedrijf.h"
int main() {
Werknemer harry("Harry Broeders", 4023.23);
Werknemer john("John Visser", 4078.34);
Bedrijf thr;
thr.neemInDienst(harry);
thr.neemInDienst(john);
thr.printSalarisOverzicht();
cin.get();
return 0;
}
Bedrijf.cpp
aan:
#include "Bedrijf.h"
#include "Werknemer.h"
void Bedrijf::neemInDienst(Werknemer& w) {
werkers.push_back(&w);
}
void Bedrijf::printSalarisOverzicht() const {
for (vector<Werknemer*>::const_iterator i(werkers.begin()); i!=werkers.end(); ++i) {
cout<<(*i)->geefNaam()<<" : "<<(*i)->geefSalaris()<<endl;
}
}
Let op! De parameter van de memberfunctie
neemInDienst
is veranderd van const
Werknemer&
in Werknemer&
. Dit was nodig omdat
anders een compilatiefout ontstaat omdat de vector
werkers
objecten van het type Werknemer*
bevat.
Bij nader inzicht klopt dat ook want als een Bedrijf
een
Werknemer
in dienst neemt dan kan die Werknemer
daardoor natuurlijk best veranderen.
Werknemer.cpp
aan:
#include "Werknemer.h"
Werknemer::Werknemer(string n, double s): naam(n), salaris(s) {
}
string Werknemer::geefNaam() const {
return naam;
}
double Werknemer::geefSalaris() const {
return salaris;
}
Bedrijf.h
aan door de juiste include statements
toe te voegen.
#ifndef BEDRIJF_H
#define BEDRIJF_H
#include <iostream>
#include <string>
#include <vector>
using namespace std;
#include "Werknemer.h"
class Bedrijf {
public:
void neemInDienst(Werknemer& w);
void printSalarisOverzicht() const;
private:
/** @link aggregation
* @label heeft in dienst*/
vector <Werknemer*> werkers;
};
#endif //BEDRIJF_H
Let op! De parameter van de memberfunctie
neemInDienst
is hier ook veranderd van const
Werknemer&
in Werknemer&
.
Werknemer.h
aan door de juiste include statement
toe te voegen.
#ifndef WERKNEMER_H
#define WERKNEMER_H
#include <string>
using namespace std;
class Werknemer {
public:
Werknemer(string n, double s);
double geefSalaris() const;
string geefNaam() const;
private:
string naam;
double salaris;
};
#endif //WERKNEMER_H
We gaan het model en het programma nu verder uitbreiden. Let er als je "overschakeld" tussen Borland C++ Builder en Borland Together ControlCentre goed op dat je eerst alle bestanden opslaat. Bij beide paketten kan dit met de sneltoets Ctrl+Shift+s. Als je daarna overschakeld zal het andere paket automatisch synchroniseren.
We bedenken dat er verschillende soorten werknemers kunnen zijn:
FreeLancer
verdient een vast bedrag per gewerkt uur.
VasteKracht
verdient een vast maandsalaris.
Opdracht 5a.
Maak in Together de class
Breid het class diagram nu uit met 2 classes
Geef de class
Geef de class
Als je het goed doet ziet het class diagram er ongeveer als volgt uit:
Schakel over naar Borland C++ Builder (vergeet niet om eerst op Ctrl+Shift+s
te drukken) en voeg de bestanden
Vul de code van
Vul de volgende testcode in
De juiste uitvoer is: |
We gaan het model en het programma nu nog verder uitbreiden.
We voegen een nieuwe soort werknemer toe:
Manager
is een werknemer die aan minstens 1 andere werknemer
leiding geeft. De meeste managers hebben zelf ook weer een manager boven
zich. Het bedrijf dat we als voorbeeld nemen heeft een orginele manier bedacht
om het salaris van een manager te bepalen. Het salaris van de manager is
1.5 maal zo hoog als het gemiddelde salaris van de mensen waaraan deze manager
direct leiding geeft.
Opdracht 5b.
Breid het class diagram nu uit met de class
Geef de class
Als je het goed doet ziet het class diagram er ongeveer als volgt uit:
Schakel over naar Borland C++ Builder (vergeet niet om eerst op Ctrl+Shift+s
te drukken) en voeg het bestand
Vul de code van
Vul de volgende testcode in
De juiste uitvoer is: |
We gaan het model en het programma nu voor de laatste keer uitbreiden.
We voegen een nieuwe soort werknemer toe:
ManagerAssistent
als gegeven is
dat elke Manager
hoogstens één
ManagerAssistent
heeft. Elke ManagerAssistent
assisteert altijd slechts één Manager
. Bij het
berekenen van het salaris van de Manager
wordt het salaris van
de ManagerAssistent
niet meegenomen. Het salaris van de
ManagerAssistent
is 45% van het salaris van zijn/haar
Manager
.
Opdracht 5c.
Breid het class diagram nu uit met de class
Geef de class
Schakel over naar Borland C++ Builder (vergeet niet om eerst op Ctrl+Shift+s
te drukken) en voeg het bestand
Vul de code van
Vul de volgende testcode in
De juiste uitvoer is: |