Relationer

Association

Används när två oberoende objekt har en "känner till" relation mellan varandra.

Implementeras vanligen genom att det objekt som skall känna till ett annat objekt har en pekarvariabel som innehåller adressen till det andra objektet som en datamedlem.

class Car
{
private:
 	Person * owner;
};
Om jag skrotar bilen (tar bort objektet) finns normalt ägaren kvar (om han inte satt i) och vice versa.

Komposition

Används när ett objekt är uppbyggt/består av delar som är andra objekt. Detta innebär att objektet även ska ta ansvar för sin delar.

Implementeras vanligen på något av följande sätt:

Arv

Bara för att man skriver objektorienterade program behöver man inte använda arv överallt.

Arv skall endast användas där det är befogat, det vill säga när det finns en "är en" relation som t.ex. en pudel är en speciell sorts Hund och en Hund är en speciell sorts Djur.

Arv används för att samla gemensamma data och gemensamt beteende på ett ställe istället för att dublicera detta i flera klasser samt för att möjliggöra polymorfism.

En (ofullständig) överklass vars syfte endast är att samla gemensamma data och gemensamt beteende eller för att möjliggöra polymorfism vill man i regel inte skapa objekt ur då det inte skulle ha någon motsvarighet i den verkliga världen. Detta kan göras genom att göra klassen till en abstrakt klass, vilket sker om den innehåller minst en rent virtuell medlemsfunktion.

Undvik att i onödan föra in alltför djupa arvshierarkier eftersom detta innebär att beskrivningen av ett objekts datastruktur och gränssnitt sprids över ett stort område och blir oöverskådligt.