TI-S2

Compositie - classes

Inhoud


v0.1.0 Start document voor OO programming concepten C++ door HU IICT.


Introductie

Voorkennis en leeswijzer

Onderstaande informatie gaat ervan uit dat je kennis hebt genomen van Compositie - structs.

Class vs. struct

Het combineren van data en functies in een struct is legaal C++, maar wordt zelden gebruikt, omdat er in C++ een alternatief is voor struct: class.

Private vs. public

Het enige verschil tussen struct en class is dat de default permissies (als je zelf niets aangeeft) bij een struct public is, en bij een class private.

OO programmeren

Het is een ingeburgerde (en daardoor aan te raden) gewoonte om class te gebruiken in plaats van struct als je onderdelen private maakt en/of functies binnen de class plaatst.

Deze vorm van programmeren wordt Object Oriented (OO) genoemd: er wordt niet gebruik gemaakt van losse gegevens en functies maar

Public en private (class)

Een klasse:

Voordelen afscherming (private)

Een belangrijk voordeel van afscherming is dat het privé deel gewijzigd kan worden zonder dat de rest van de applicatie hier iets van merkt. Voorbeeld: In ons geval zouden we bv. de coördinaten van een klein LCD scherm kunnen opslaan als unsigned char om ruimte te besparen, of in een ander geval als doubles als dat voor onze grafische processor beter uitkomt.

UML

In UML geven we een klasse aan als een rechthoek met drie delen:

Een - voor een onderdeel geeft aan dat het onderdeel private is (niet voor de buitenwereld zichtbaar), een + geeft aan dat het public is.

Het type van een attribuut en het return type van een functie staan achteraan. Een constructor herken je aan de naam (gelijk aan de naam van de klasse), en aan het ontbreken van een return type.

Voorbeeld: line class

In de line class zijn de attributen (variabelen) private, en de methoden (functies) public. Dit is de meest voorkomende situatie (zeker voor eenvoudige klassen), maar private functies en (in mindere mate) public variabelen komen ook voor.

UML diagram van de lijn klasse Image 1 - UML diagram van de lijn klasse

class line {
private:
  int start_x;
  int start_y;
  int end_x;
  int end_y;
public:
  line( int p_start_x, int p_start_y, int p_end_x, int p_end_y );
  void print();
};

Codevoorbeeld 04-06 - C++ declaratie van de lijn klasse