|
|
|
|
|
|
|
In den Bildern sind die Variablen des Objektes im Zentrum, umschlossen
von den Methoden, gezeichnet. Dies deutet grafisch an, daß Variablen
gegen Zugriffe von außen geschützt sind, d.h. Programme können
nicht direkt auf die Variablen des Objektes zugreifen, sondern müssen
die entsprechenden Methoden aufrufen. Dieser Schutz wird in der OOP Welt
Kapselung genannt. Mit Kapselung werden Implementationsdetails
versteckt.
Vorteile der Kapselung: Ein Objekt hat eine nach außen definierte Schnittstelle, mit der andere Objekte kommunizieren können. Das Objekt kann die privaten Informationen und Methoden ändern, ohne daß andere Objekte betroffen sind. Zudem kann ein Objekt problemlos herumgereicht werden. Sie können Ihren Hund jemand anderem geben und er bellt immer noch. |
Objekte agieren und kommunizieren untereinander, indem sie sich gegenseitig
Meldungen schicken.
Eine Meldung umfaßt drei Komponenten:
Vorteile der Meldungen: Alles was ein Objekt machen kann, wird mit Meldungen ausgedrückt. Das Verschicken von Meldungen ist die einzige Möglichkeit, wie sich Objekte verständigen können. Objekte müssen sich nicht unbedingt auf derselben Maschine befinden. Meldungen können auch über das lokale Netzwerk oder Internet verschickt werden. Der Aufruf einer Methode entspricht dem Schicken einer Meldung. Deshalb sprechen wir meist von Methodenaufruf anstelle von Meldung verschicken. |
Oft finden wir mehrere Fahrräder gleicher Art. Es gibt Moutainbikes,
Citybikes, Rennräder, Tandems usw. All diese Fahrradtypen besitzen
gemeinsame Zustandsmerkmale (aktueller Gang, Pedalenkadenz, zwei Räder)
und gemeinsame Verhaltensmerkmale (Gang wechseln, bremsen). Fahrradhersteller
nützen diesen Vorteil aus und stellen mehrere Fahrräder des gleichen
Typs her. Es wäre höchst ineffizient für jedes individuelle
Fahrrad einen neuen Typ zu erfinden.
Wie der Fahrradhersteller können auch wir Vorteile aus der Tatsache
von gemeinsamen Merkmalen nutzen und mehrere Objekte desselben Typs erzeugen.
In der objektorientierten Welt sprechen wir jedoch nicht von Arten, sondern
von Klassen (engl. classes). Eine Klasse ist ein Prototyp, welcher die
gemeinsamen Attribute und Methoden aller Objekte dieser Klasse definiert.
|
Vorteil von Klassen
Klassen können mehrmals benützt werden. Fahrradhersteller
verwenden immer wieder den gleichen "Bauplan" um viele Fahrräder herzustellen.
Softwareentwickler benützen dieselbe Klasse um mehrere Objekte gleicher
Art zu kreieren.
Vererbung
Als im letzten Jahrhundert das Fahrrad erfunden wurde, gab es nur einen
Typ von Fahrrad. Später wurde das Urfahrrad weiterentwickelt und Damenfahrräder,
Mountainbikes und Rennräder hergestellt. Dabei nahm man das bestehende
Fahrrad und fügte neue Funktionalitäten wie eine Gangschaltung
hinzu, verbesserte die Bremsen und den Sitz. Das Verhalten des Fahrrades
änderte sich jedoch nicht. Auch heute noch muß man in die Pedalen
treten um das Fahrrad zu bewegen, oder die Bremsen drücken, wenn man
langsamer fahren möchte.
Eine ähnliche Entwicklungsmöglichkeit bietet OOP an. Wir können neue Klassen mit Hilfe anderer Klassen programmieren. Unser Fahrradbeispiel können wir wie folgt modellieren: Die Klasse Fahrrad ist unser Urfahrrad mit Eigenschaften und Verhalten die allen Fahrrädern gemeinsam sind. Danach erweitern wir die Klasse, fügen neue Eigenschaften hinzu und ändern bestehende ab. Somit erhalten wir unsere Mountainbike-, Citybike-, Rennräder- und Tandemklasse. Diese Klassen werden in OOP Unterklassen (engl. subclasses) von der Klasse Fahrrad genannt. Die ursprüngliche Fahrradklasse wird Oberklasse (engl. superclass) genannt.
Jede Unterklasse vererbt (engl. inherit) die Zustände in Form der Variablen von der Oberklasse. Moutainbikes, Citybikes, Rennräder und Tandems besitzen gemeinsame Zustandsmerkmale wie Farbe, Geschwindigkeit usw., welche sie von der Oberklasse Fahrrad geerbt haben. Unterklassen werden aber nicht durch die Zustände und das Verhalten der Oberklasse eingeschränkt. Unterklassen können Variablen und Methoden zu den geerbten Variablen und Methoden von der Oberklasse hinzufügen. Tandems, zum Beispiel, benötigen zwei Sitze und zwei Lenker. Unterklassen können sogar geerbte Methoden überschreiben (engl. override) und spezialisierte Implementationen zur Verfügung stellen. Tandems sind oft mit Trommelbremsen ausgestattet. Die Oberklasse Fahrrad vererbt eine Bremse, die durch unsere verbesserte Trommelbremse ausgetauscht wird.
Klassen sind nicht auf eine Vererbungsebene beschränkt. Die Klassenhierarchie
kann beliebig gross werden. Methoden und Variablen werden vererbt und weitervererbt.
Je weiter unten in der Hierarchie eine Klasse definiert ist, um so spezialisierter
ist ihr Verhalten.
Ein Objekt ist ein allgemeiner Datentyp, der Daten mit
Funktionen kombinieren und bearbeiten kann. Die Daten eines Objektes sind
seine Eigenschaften . Funktionen, die diese Eigenschaften
bearbeiten können, nennt man Methoden der Objekte.
Eine Klasse ist eine Sammlung aller Eigenschaften und Methoden
der Objekte dieser Klasse und legt fest, wie diese zu erzeugen sind. Eine
Instanz einer Klasse ist ein anderes Wort für ein tatsächliches
Objekt. Während Klassen eine abstrakte Darstellung eines Objekts sind,
ist eine Instanz dessen konkrete Darstellung. Jede Klasse besteht im allgemeinen
aus zwei Komponenten: Attribute und Eigenschaften. Attribute
sind die Eigenschaften, durch die sich ein Objekt von anderen unterscheidet.
Sie bestimmen Aussehen, Zustand und andere Qualitäten eines Objekts.
Attribute werden durch Variablen definiert. Sie können Sie sich
als globale Variablen für das gesamte Objekt vorstellen. Da jede Instanz
einer Klasse verschiedene Werte für ihre Variablen haben kann, nennt
man jede Variable eine Instanzvariable. Instanzvariablen
definieren die Attribute eines Objekts. Die Klasse definiert die Art des
Attributs, und jede Instanz speichert einen eigenen Wert für das jeweilige
Attribut. Jedes Attribut hat eine einzelne entsprechende Instanzvariable.
Durch Änderung des Wertes einer Variablen ändert sich das Attribut
des Objekts. Instanzvariablen können gesetzt werden, wenn ein Objekt
erstellt wird und können sich nach Belieben bei der Ausführung
des Programms ändern. Zusätzlich zu Instanzvariablen gibt es
Klassenvariablen, die die Klasse selbst und alle ihre Instanzen
betreffen. Im Gegensatz zu Instanzvariablen, deren Werte in der Instanz
gespeichert werden, werden die Werte von Klassenvariablen direkt in der
Klasse gespeichert. Die Eigenschaften einer Klasse bestimmen, was die Instanzen
der Klasse tun, wenn sich ihr interner Zustand ändert oder wenn die
Instanz von einer anderen Klasse oder einem Objekt aufgefordert wird, etwas
zu tun. Die Eigenschaften bestimmen, was Objekte alles machen können
und was man mit Objekten machen kann. Um das Verhalten eines Objekts zu
definieren, erstellt man die Methoden.
Vererbung ist ein Mechanismus in der objektorientierten
Programmierung, der bewirkt, daß alle Klassen in einer strikten Hierarchie
angeordnet sind und etwas von ihren übergeordneten Klassen erben.
Subclassing bedeutet das Erstellen einer neuen Klasse - einer
sogenannten Subklasse, die von einer anderen Klasse in der Klassenhierarchie
erbt. Übergeordnete Klassen, Klassen von denen geerbt wird, bezeichnet
man als Superklasse.
|