Hauptelemente der Objektorientierten Programmierung

 

Benennung eigener Datentypen
Gruppieren der Funktionen ,die mit diesen Datentypen arbeiten

z.B. struct date { int d,m,y; }; bool date_ok(const date *); void date_set_day(date * , int);
Die Datentypen heißen jetzt Klassen, die Instanzen davon Objekte.

Konstruktor - Destruktor

Alle Objekte einer Klasse werden automatisch in einem sinnvollen Zustand initialisiert.
Sobald sie nicht mehr gültig sind, wird automatisch eine spezielle Aufräumfunktion gerufen.

Das gilt für alle Objekte , egal ob statisch , automatisch oder dynamisch erzeugt , egal ob Variable, Teil eines Arrays oder Teil eines anderen Objekts.

Z.B. kann ein automatisches Array im Konstruktor Speicher anfordern und im Destruktor den Speicher freigeben. Dadurch sind die new/delete aufrufe immer konsistent , erfolgen automatisch und können also nicht vergessen werden.
Z.B kann ein Dateihandle im Konstruktor eine Datei öffnen und im Destruktor schließen.

Methoden und Zugriffschutz

Bestimmte Funktionen die mit den Objekten einer Klasse arbeiten, werden der Klasse fest zugeordnet und bekommen eine andere Aufrufsyntax. Diese Funktionen werden Methoden genannt.

Z.B. string s; a = s.length(); // statt length(s).

Mann kann spezifizieren, daß auf bestimmte Datenelemente und Methoden nur von den Methoden einer Klasse aus zugegriffen werden kann.
Dadurch können Klassen absolut sicher gegen unsachgemäße Benutzung gemacht werden. Etwa bei einem automatischen Array darf der 'Anwender' nicht auf das Datenelement zugreifen , welches auf den dynamischen Speicher zeigt.

Vererbung

Man kann Klassen von einer anderen Klasse , genannt Basisklasse, ableiten
Eine Abgeleitete Klasse 'erbt' alle Methoden und Daten von der Basisklasse;
Das kann genutzt werden, um Code wiederzuverwenden.
Ein Zeiger auf Typ T kann auch auf Objekte aller von Typ T abgeleiteten Klassen zeigen.
Dadurch können Objekte unterschiedlicher , aber auf Grund der Ableitungsrelation verwandter Typen gemeinsam verwaltet werden.
Window * arr[10]; // 10 Verweise auf Objekte vom Typ Window oder eines abgeleiteten Typs

Virtuelle Methoden

Methoden können als "virtuell" deklariert werden.
Ist f() eine virtuelle Methode einer Klasse, dann kann jede abgeleitete Klasse eine eigene Variante von f() definieren. Wird nun die Methode f() für ein Objekt aufgerufen, so wird zur Laufzeit in Betracht gezogen, von welchem Typ das aktuelle Objekt ist, und die passende Variante aufgerufen
Window * w = ...; w->paint(); // wenn *w etwa vom Typ Button ist (abgeleitet von Window) so wird paint() der klasse Button gerufen.
Basisklassen und deren virtuelle Methoden können benutzt werden um dem Anwender eine einheitliche Schnittstelle zur Verfügung zu stellen für die verschiedene , abgeleiteten Klassen , die der Anwender u.U. gar nicht kennt.
for(...) arr[i]->paint(); // zeichnet alle Windows in meinem Array, jedes auf seine spezielle Art, und ich muß gar nicht wissen , was es alles für Arten von Windows gibt.