Springe zum Hauptinhalt
Grundlagen der Informatik I & II und Informatik I & II
Objektorientierte Programmierung
Objektorientierte Programmierung

Abstrakte Datentypen (ADT)


Abstrakte Datentypen sollen die Richtigkeit der Daten sicherstellen. Bisher wurden Daten in einzelnen Variablen gespeichert oder in eine Sturktur gepackt. Wer unsere Daten auf welche Weise verändert wurde bisher nicht kontrolliert. Das bedeutet, dass Opertionen auf Daten ausgeführt werden können, die dem Sinn der Daten nicht entsprechen oder Inkonsistenz erzeugen, wie beispielsweise Geld an eine Ampel zu überweisen oder ein Konto auf gelb zu schalten.

Klassen und Objekte


Ein ADT der in einer Programmiersprache formuliert ist, heißt Klasse. Sie ist eine Beschreibung von in der Realwelt existierenden Objekten mit einer Abbildung ihrer Eigenschaften. Die Werte der Eigenschaften sind unsere Daten, die es zu verwalten gilt. Um Änderungen an Eigenschaften nun nicht willkürlich zu zulassen, bieten Klassen Methoden die als öffentliche Schnittstelle zu den Daten dienen. Die Methoden werden in C++ mit dem Schlüsselwort public gekennzeichnet. Die Eigenschaften bzw. Daten des Objektes dagegen mit private.

Kaplesung der Daten im ADT

von Methoden, Konstruktoren und Instanzen

Im Quelltext sieht eine Klasse für Segelboote beispielsweise wie folgt aus:

Beispiel Klasse Segelboot

boot ist der Name der Klasse, private und public kennzeichenen den geschützten und öffentlichen Teil der Klasse.

Dies ist das Grundgerüst einer Klasse. Methoden, die nur eine kurze Definition enthalten, können inline geschrieben werden. Das heißt der Quellcode befindet sich wie bei der Methode int v_max () in der Klassendefinition. Andernfalls müssen Funktionen als Methode einer Klasse gekennzeichnet werden. Die Kennzeichnung erfolgt mittels des Klassennamen und dem Operator ::.

Methode Klasse Segelboot

boot (); ist eine besondere Methode: Sie heißt wie die Klasse selbst und ist ein Konstruktor. Ein Konstruktor bestitzt keinen Rückgabetyp und dient der Initialisierung einer Instanz. Eine Instanz ist also ein tatsächlich existierendes Exemplar des Objektes, welches duch die Klasse beschrieben wird. Je nach dem, ob bei der Initalisierung Parameter übergeben werden, setzt der Konstruktor diese als Startwerte der Daten ein oder Defaultwerte und stellt Speicherplatz bereit.

Konstruktoren Klasse Segelboot

Das Erzeugen einer Instanz funktioniert genauso wie die Deklaration unserer bisherigen Variablen: Datentyp Variablenname. Als Datentyp dient nun der Name der Klasse. Außerdem wird der Konstruktor I für das Objekte black_pearl aufgerufen. Die privaten Elemente der black_pearl bestitzen jetz die dort festgelegten Defaultwerte. Für das Objekt lagoon_560 wird der Konstruktor II aufgerufen und die in Klammern stehenden Werte den privaten Elementen zugewiesen.

Instanz erzeugen

Der Aufruf einer Methode erfolgt mit dem Punktoperator:


Instanz erzeugen

Überladen von Operatoren

In C++ ist es möglich den vordefinierten Operatorsymbolen für Klassen eine neue Bedeutung zuzuordnen.

Betrachten wir beispielsweise den Vergleichsoperator. Üblicherweise werden hier linker und rechter Oprand verglichen und es wird true oder false zurück gegeben (z.B. x==y). Für alle Grunddatentypen wie int oder float ist das unproblematisch. Wenn wir aber eine Klasse zum Speichern von Matrizen betrachten, muss der Algorithmus zum Vergleichen von 2 Matrizen beim Operator == hinterlegt werden.

⊗ steht für die möglichen C++-Operatoren.

Ueberladen der Operatoren