© 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: |