[Zurück] [Index] [Weiter]     Kuhlins: Objektorientiertes Design für C++


5.10   "Handle/Body"-Implementation

Die durch die Elementfunktionen gebildete Schnittstelle einer Klasse ist von den Implementationsdetails separierbar, indem die Datenelemente ausgelagert werden. Dazu wird nach folgendem Schema eine eingebettete Klasse deklariert, die die Datenelemente enthält.

class Kunde {
public:
   Kunde();
   ~Kunde();
   // ...
private:
   struct Daten;
   Daten* daten;
};

Die Implementationsdatei beherbergt neben den Definitionen der Elementfunktionen auch die Definition der eingebetteten Klasse.

struct Kunde::Daten {
   // Datenelemente der Klasse Kunde
};

Kunde::Kunde() { daten = new Daten; }
Kunde::~Kunde() { delete daten; }

Diese Technik wird als "Handle/Body"-Implementation bezeichnet. Durch sie können Abhängigkeiten von Header-Dateien beim Übersetzen reduziert und Implementationsdetails verborgen werden (Schader und Kuhlins 1995 sowie Taligent 1994).

Gegen dieses Vorgehen spricht (vgl. ARM §9.1c und Stroustrup1994a), daß die Laufzeiteffizienz beeinträchtigt wird, weil