Prinzipien der objektorientierten
Programmierung (OOP)
Die Ziele der OOP sind:
bessere Warbarkeit
Wiederverwendbarkeit
1.) Datenkapselung
Komplexe Datenstrukturen (wie zB ein Stack) werden vom Anwendungsprogramm nicht direkt verwendet. Zum Zugriff auf solche Strukturen bedient man sich sogenannter "Zugriffs-Funktionen" (zB: push(x), pop( )). Dieses Prinzip, welches auch in der OOP zur Anwendung kommt, nennt man Datenkapselung. In der OOP sind diese Zugriffs-Funktionen in Form von Methoden realisiert.
Die Implementierung der Datenstruktur, die eigentlichen Strukturen/Variablen zum speichern der Daten (zB Stack: Array oder Liste ?), bleiben dem Anwendungsprogramm/Programmierer verborgen. Es sind lediglich die Schnittstellen bekannt. Dies wird als "Information-Hiding" bezeichnet.
Vorteil: Anderung bei der Datebstruktur-Implementierung -> keine Auswirkung auf Anw. Programm!
2.) Klassen
Klassen kann man als "Baupläne" oder "Vorlagen" für gleichartige Objekte verstehen.
In einer Klasse werden alle Eigenschaften und Methoden der Objekte festgelegt.
Eine Klasse lässt sich mit einem Datentyp der nicht-OO Programmierung vergleichen.
Bsp: Klasse: Person
Objekte sind folglich "Instanzen" einer Klasse.
Beispiel einer Klassen-Vereinbarung in C++:
Beispiel einer Klassen-Implementierung in C++:
3.) Objekte
Ein Objekt ist im Grunde eine strukturierte Variable und hat einen inneren Zustand. D.h. sie besitzen sog. "Eigenschaften". Eigenschaften sind sozusagen Unter-Variablen innerhalb eines Objekts, die normalerweise nur dem Objekt selbst bekannt sind (siehe Datenkapselung). Eigenschaften lassen sich mit Komponenten einer Struktur in C vergleichen.
Ein Objekt hat sog. "Methoden". Sie dienen, um auf die Eigenschaften der Klasse zugreifen zu können. Methoden sind Funktionen oder Prozeduren innerhalb der Klasse.
Ein Objekt reagiert auf Nachrichten anderer Objekte, durch die Ausführung einer Methode, bzw. sendet selbst Nachrichten an andere Objekte um deren Methoden zu aktivieren. Eine Nachricht entspricht also einem Funktionsaufruf.
Bsp (Objekt der Klasse Person):
Objekt: Karl Müller
Eigenschaft: 23 Jahre alt
Methode: lerne
Nachricht: lerne C++.
Beispiel einer Klassen-Verwendung bzw. Instantiierung in C++:
(Vereinbarung und Implementierung der
Klasse "Point" unter Klassen)
Gegenüberstellung:
Vergleich der Begriffe der OOP mit nicht-OOP Begriffen.
Klasse |
Daten-Typ |
Objekt |
(strukturierte) Variable |
Eigenschaft |
Wert einer Variablen (Komponente) |
Methode |
Funktion / Prozedur |
Nachricht |
Aufruf einer Funktion / Prozedur |
4.) Vererbung:
Vererbung wird zum Aufbau einer Hierarchie von ähnlichen Klassen benutzt.
Untergeordnete Klassen bezeichnet man in der OOP als "abgeleitete Klassen", während man bei übergeordneten Klassen von "Basisklassen" spricht.
Eine "abgeleitete Klasse"
- erbt Eigenschaften und Methoden der "Basisklasse",
- kann Eigenschaften hinzufügen,
- kann neue Methoden hinzufügen und geerbte Methoden durch eigene ersetzen.
Durch die Vererbung wird immer weitere Spezialisierung bewirkt.
Die Vererbung stellt eine "Is-A"("ist-ein")-Beziehung dar (zB Schüler ist-eine Person).
Es ist auch möglich, dass eine "abgeleitete Klasse" mehrere "Basisklassen" hat, man spricht von mehrfach-Vererbung. Die "abgeleitete Klasse" erbt von allen "Basisklassen" sämtliche Methoden und Eigenschaften.
Beispiel einer Klassen-Hierarchie:
5. Mechanismen und Funktionalität
Konstruktor
Jede Klasse hat einen Konstruktor. Der Konstruktor ist eine Prozedur die den selben Namen wie die Klasse trägt. Diese Prozedur wird automatisch bei der Instantiierung eines Objekts ausgeführt. Der Konstruktor wird benutzt um die Eigenschaften zu Initialisieren.
Destruktor
Der Destruktor ist das Gegenstück zum Konstruktor. Er trägt (in C++) den Namen der Klasse mit führendem "~"-Zeichen. Diese Prozedur wird am Ende der Lebensdauer eines Objekts aufgerufen. Sie wird verwendet wenn es etwas zu "bereinigen" gibt (zB: Abbau einer verketteten Liste).
Für Konstruktor und Destruktor gilt: Wird vom Programmierer keine solche Prozedur definiert, so wird ein Standard-Konstruktor/Destruktor verwendet. Diese beiden Prozeduren existieren also bei jeder Klasse.
Zugriffsrechte
In C++ existieren drei Zugriffsbeschränkungen für die Elemente einer Klasse:
PUBLIC: Jeder (auch außerhalb der Klasse) darf zugreifen.
PRIVATE: Nur Methoden der eigenen Klasse dürfen zugreifen.
PROTECTED: Nur Methoden der eigenen und abgeleiteter Klassen dürfen zugreifen.
Zugriffsrechte können (in C++) in der Klasse selbst und bei der Vererbung festgelegt werden.
Der this-Zeiger
Jede Methode einer Klasse (in C++) hat einen versteckten Parameter, den sogenannten this-Zeiger. Dieser Zeiger zeigt auf das Objekt um dessen Methode es sich handelt. Mittels dieses Zeigers funktioniert der Zugriff auf die Eigenschaften innerhalb einer Methode.
Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen