Objektorientierte Programmiersprachen 1960 Algol 1970 Simula Pascal 1980 Smalltalk C Ada 1990 C++ Eiffel Eine ovale Box symbolisiert eine objektorientierte Programmiersprache. Eine rechteckige Box steht für eine nicht-objektorientierte Programmiersprache. c MM Joachim Lammarsch, Rothenberg (o00010) 1
Objekt Ein Objekt ist eine Software-Einheit, die Datenelemente (Attribute) und die auf ihnen anwendbare Operationen (Methoden) zusammenfaßt. Die Werte der Datenelemente können jederzeit variiert werden. Sie bilden den veränderlichen Zustand eines Objekts. Methoden realisieren die auf ein Objekt anwendbare Operationen. Sie bilden das Verhalten eines Objekts. Objekte modellieren konkrete und abstrakte Einheiten aus dem Anwendungsbereich. c MM Joachim Lammarsch, Rothenberg (o00020) 2
Beispiel für Attribute Zahlen Zeichenketten Graphische Figuren Listen Prozesse Angestellte Aufträge Fahrzeuge... c MM Joachim Lammarsch, Rothenberg (o00020) 3
Beispiel für Methoden addieren, subtrahieren multiplizieren, dividieren verketten, aufteilen zeichnen, vergrößern starten, stoppen einstellen, entlassen einsortieren, bearbeiten parken, reparieren... Nachdem man die Attribute und Methoden festgelegt hat, kann man sie zu den benötigten Objekten kombinieren. c MM Joachim Lammarsch, Rothenberg (o00020) 4
Beispiel für Objekte Das Objekt Datum Zu diesem Objekt existieren beispielsweise folgende Attribute: Tag Monat Jahr und man könnte nachfolgende Methoden anwenden: Gebe aus Ändere datum Differenz tage Datum morgen c MM Joachim Lammarsch, Rothenberg (o00022) 5
Das Objekt Person Zu diesem Objekt existieren beispielsweise folgende Attribute: Name Geburtsdatum Familienstand Adresse und man könnte nachfolgende Methoden anwenden: Ändere namen Ändere anschrift Ändere familienstand Berechne alter c MM Joachim Lammarsch, Rothenberg (o00023) 6
Nachrichten als Mittel der Interaktion Objekte kommunizieren ausschließlich durch Zusendung von Nachrichten. Eine Nachricht ist eine Aufforderung an ein Objekt, eine Operation mit den in der Nachricht angegebenen Parametern durchzuführen. Sie setzt sich aus drei Teilen zusammen: Name des Empfängerobjekts Name der Methode, die ausgeführt werden soll Gegebenenfalls weitere Übergabeparameter für die Methode Eine Nachricht kann einen einfachen Wert oder ein Objekt zurückgeben. Nachrichten können mit Prozeduraufrufen verglichen werden. c MM Joachim Lammarsch, Rothenberg (o00030) 7
Beispiel Sender Datum 31.12.1995 Nachricht Hugo Schmidt Berechne alter 31.12.1995 Empfänger Person Hugo Schmidt c MM Joachim Lammarsch, Rothenberg (o00030) 8
Verbergen von Informationen Die Interna eines Objekts bleiben durch zwei Maßnahmen verborgen: Datenkapselung Trennung von Spezifikation und Implementierung einer Methode Datenkapselung Die inneren Daten eines Objekts sind nach außen nicht sichtbar. Sie können nur durch die Methoden des eigenen Objekts gelesen und verändert werden. Trennung Bei der Trennung der Spezifikation und der Implementierung einer Methode kennt der Sender einer Nachricht nur die Methodenschnittstelle. Die Implementierung bleibt vor ihm verborgen. c MM Joachim Lammarsch, Rothenberg (o00035) 9
Das Verbergen der Objektinterna Das Verbergen der Objektinterna unterstützt die Datensicherheit und die Änderungsfreundlichkeit. Datenelemente können nicht direkt von anderen Objekten verändert werden. Es reicht aus, wenn die Methoden des eigenen Objekts die Richtigkeit der Daten sicherstellen, da nur sie auf die Daten zugreifen. Andere Objekte brauchen nichts über die manchmal komplexen internen Datenstrukturen zu wissen, was die Programmierung vereinfacht. Solange sich die Methodenschnittstellen nicht ändern, haben Änderungen in den internen Datenstrukturen keine Auswirkungen auf die restlichen Objekte. Solange sich die Methodenschnittstellen nicht ändern, haben Änderungen bei den Methodenimplementierungen keine Auswirkungen auf das Restsystem. c MM Joachim Lammarsch, Rothenberg (o00036) 10
Gleichartigkeit von Objekten Oft sind sich Objekte einander so ähnlich, daß sie sich nur in ihren Attributwerten unterscheiden. Ihre Attribute und Methoden sind gleich und brauchen deshalb nur einmal beschrieben zu werden. Beispiel Datum 28.2.1993 Attribut: Tag 28 Monat 2 Jahr 1993 Methode: Gebe aus Ändere datum Differenz tage Datum morgen c MM Joachim Lammarsch, Rothenberg (o00040) 11
Datum 31.12.1994 Attribut: Tag 31 Monat 12 Jahr 1994 Methode: Gebe aus Ändere datum Differenz tage Datum morgen Datum 22.5.1995 Attribut: Tag 22 Monat 5 Jahr 1995 Methode: Gebe aus Ändere datum Differenz tage Datum morgen c MM Joachim Lammarsch, Rothenberg (o00040) 12
Klassen und Instanzen Eine Klasse ist die statische Beschreibung gleichartiger Objekte. Die Beschreibung umfaßt die Attribute und Methoden der Objekte. Attribut: Name und Typ Methode: Schnittstelle und Implementierung Sie dient als Schablone zur Erzeugung von Objekten. Diese Objekte werden Instanzen der Klasse genannt. Die Instanzen einer Klasse besitzen alle die gleichen Attribute und Methoden. Die Attribute und Methoden sind einmal in der Klasse definiert. Sie können sich aber in ihren Attributwerten unterscheiden. Jedes Objekt ist Instanz genau einer Klasse. c MM Joachim Lammarsch, Rothenberg (o00045) 13
Objektorientiertes Programmsystem Die Klassen bilden den statischen Teil eines objektorientierten Programmsystems. Objektorientiertes Programm: Strukturierte Menge von Klassen Objektorientierte Programmierung: Definition der Klassen sowie Implementierung der Methoden Die Instanzen bilden den dynamischen Teil eines objektorientierten Programmsystems. In einem ablaufenden Programm werden Instanzen erzeugt und wieder vernichtet. Der Programmablauf ist charakterisiert durch eine Anzahl von miteinander interagierenden Instanzen, die sich Nachrichten zusenden. Die Empfänger einer Nachricht reagieren durch Ausführung von Methoden. c MM Joachim Lammarsch, Rothenberg (o00050) 14
Gleichartigkeit von Klassen Ähnliche Klassen besitzen oft gleiche Attribute und Methoden, die in jeder Klasse getrennt definiert werden. Klasse Arbeiter Attribute Name Adresse Arbeitszeit Stundenlohn Urlaub Klasse Vertreter Attribute Name Adresse Arbeitszeit Stundenlohn Verkäufe Kommission Methoden Drucke anschrift() Berechne gehalt() Methoden Drucke anschrift() Berechne gehalt() c MM Joachim Lammarsch, Rothenberg (o00068) 15
Klasse Manager Attribute Methoden Name Drucke anschrift() Adresse Berechne gehalt() Gehalt c MM Joachim Lammarsch, Rothenberg (o00068) 16
Vererbung Klassenhierarchie Die Klassen werden in einer Hierarchie von Ober- und Unterklassen angeordnet. Oberklassen definieren die Gemeinsamkeiten ihrer Unterklassen. Vererbung Die Oberklassen vererben ihre Eigenschaften (Attribute und Methoden) an ihre Unterklassen. In den Unterklassen können weitere Eigenschaften hinzugefügt werden. Vererbte Methoden können in der Unterklasse redefiniert werden. Bemerkung Es werden keine Objekte vererbt. c MM Joachim Lammarsch, Rothenberg (o00070) 17
Variationen der Vererbung Mehrfachvererbung Eine Klasse kann von mehreren Oberklassen erben. Namenskonflikte müssen aufgelöst werden. Selektive Vererbung Nicht alle Attribute und Methoden einer Klasse werden weitervererbt. Selektiver Export geerbter Methoden Die Sichtbarkeit von geerbten Methoden wird in der Unterklasse für andere Klassenbenutzer eingeschränkt. c MM Joachim Lammarsch, Rothenberg (o00075) 18
Vorteile Das Vererbungskonzept gestattet es, gemeinsame Eigenschaften von Klassen einmal weiter oben in der Klassenhierarchie zu definieren und an alle Unterklassen weiterzuvererben. Das führt zu folgenden Vorteilen: Der Implementierungsaufwand reduziert sich, da nur noch die Unterschiede zu den Funktionalitäten der Oberklassen programmiert werden müssen. Änderungen in Oberklassen sind für alle Unterklassen gültig und brauchen nicht mehrfach nachgezogen werden. Einfaches Hinzufügen neuer Klassen durch Unterklassenbildung. Bestehende Klassen werden nicht kopiert und nicht verändert. Natürlichere Modellierung der Anwendungswelt durch Generalisierung und Spezialisierung. Das System wird überschaubarer und leichter verständlich. Wiederverwendung von Klassenbibliotheken und eigener Klassen. c MM Joachim Lammarsch, Rothenberg (o00080) 19
Polymorphismus und Bindung Polymorphismus Polymorphismus ist die Fähigkeit einer Variablen, auf Objekte unterschiedlicher Klassen verweisen zu können. Die Klasse der Variablen legt fest, welche Methodenaufrufe zulässig sind. Die Objekte müssen Instanzen von Unterklassen der Variablenklasse sein. Die Klassenzugehörigkeit der Objekte kann erst bei Laufzeit ermittelt werden. Die Variablenklasse kann auch eine abstrakte Klasse sein. Dynamisches Binden Die Zuordnung einer Methodenimplementierung zu einem Methodenaufruf während der Laufzeit eines Programms wird als dynamisches Binden bezeichnet. Sie wird automatisch vom Laufzeitsystem ausgeführt. c MM Joachim Lammarsch, Rothenberg (o00085) 20
Vorteile Die Vorteile des Polymorphismus und dynamischen Bindens sind: Es sind keine Datentypunterscheidungen im Code zur Auswahl der richtigen Methode notwendig. Die sichere Auswahl der richtigen Methode in Abhängigkeit des jeweiligen Objekttyps ist durch das Laufzeitsystem gegeben. Beim Hinzufügen neuer Methoden ist der Änderungsaufwand im bestehenden Code minimal. Vermeidung von Namensexplosion Nachteile Kleinere Einbußen in der Speicher- und Laufzeiteffizienz Das Verfolgen der aufgerufenen Methoden wird schwieriger. c MM Joachim Lammarsch, Rothenberg (o00086) 21
Der Zugriffsschutz protected Bisherige Zugriffsschutzarten public Elemente können von den Elementfunktionen der eigenen Klasse und von externen Funktionen benutzt werden private Elemente dürfen nur von den Elementfunktionen der eigenen Klasse benutzt werden Dritte Zugriffsschutzart protected Elemente dürfen nur von den Elementfunktionen der eigenen Klasse und von den Elementfunktionen der abgeleiteten Klassen benutzt werden. Der Zugriffsschutz protected ermöglicht eine Unterscheidung von den Benutzern einer Klasse. Sie müssen sich an die public-schnittstelle halten und dürfen auf protected-elemente nicht zugreifen. c MM Joachim Lammarsch, Rothenberg (o00090) 22
den Erben (Ableitungen) einer Klasse. Sie erweitern die Klassenfunktionalität und dürfen deshalb auf weitere Klasseninterna zugreifen c MM Joachim Lammarsch, Rothenberg (o00090) 23
Vorteile Einfachere Implementierung der abgeleiteten Klassen Oft sind Erweiterungen von Basisklassen nur möglich, wenn der Zugriff auf bestimmte Klasseninterna erlaubt wird Bessere Laufzeiteffizienz Nachteile Die direkte Änderung von geerbten Elementen kann zu Inkonsistenzen führen. Die Erben sind für die Richtigkeit ihrer Änderungen verantwortlich. Änderungen von protected-elementen müssen in allen Ableitungen nachgezogen werden. c MM Joachim Lammarsch, Rothenberg (o00091) 24
Inhaltsverzeichnis c MM Joachim Lammarsch, Rothenberg (o00091) 25