Information Hiding

Auf Member von C-Strukturen darf jeder Zugreifen. Das ist aber oftmals gar nicht so gewünscht. Stellen wir uns vor, wir schreiben eine Klasse, die den Zugriff auf eine Datei verwaltet. Diese Klasse verwendet ein File-Handle.

struct File
{
  FILE       * Handle;
  char const * Filename;
  unsigned int Size;
};

Jeder kann nun jederzeit die Daten verändern. Dies ist in der Regel nicht erwünscht. In C wird Information-Hiding in der Regel über Handles geregelt. In C++ gibt es jedoch die Möglichkeit, Information zu verstecken, bzw. durch durch Zugriffsfunktionen zu kapseln.

Bisher haben alle bisher geschriebenen Klassen, das Schlüsselwort public vor den Membern stehen gehabt. Nun unterscheiden wir zwischen Membern, die wir verstecken wollen und Membern, die öffentlich sichtbar sein sollen:

class File
{
private:
  FILE       * Handle;
  char const * Filename;
  unsigned int Size;
 
public:
  File( char const * filename );
 
  bool Read( char * buffer, int size );
  bool Write( char * buffer, int size );
 
  unsigend int GetSize();
 
  bool Close();
};

Eine Instanz dieser Klasse stellt dem Benutzer den Konstruktor und die Funktionen Read, Write, Close und GetSize zur Verfügung. Wie diese implementiert sind, spielt für den Anwender dabei keine Rolle. Auf die Membervariablen Handle, Filename, Size haben ausschließlich Memberfunktionen.

Das hat den Vorteil, dass es nur ganz klar definierte Stellen im Quelltext gibt, die diese Variablen verändern. Entsprechend gibt es nur wenige Stellen im Quelltext, wo diese Variablen falsch verändert werden können. Die Wahrscheinlichkeit Fehler zu programmieren nimmt durch damit ab.

int main( void )
{
  File * myFile;
 
  myFile = new File( "example.txt" );
 
  /*
   * Der Zugriff auf myFile->Size ist nicht möglich
   */
 
  printf( "Datei ist %d Bytes groß\n", myFile->GetSize() );
 
  myFile->Close();
  delete myFile();
 
  return EXIT_SUCCESS;
}

Beispielprojekt: Download