Objektorientierte Programmierung 3. Vorlesung Prof. Dr. Peter Knauber FACHHOCHSCHULE MANNHEIM Hochschule für Technik und Gestaltung Wiederholung: Begriffsübersicht Strukturierte vs. objektorientierte Programmierung Definitionen, Beispiele, Zitate: Methoden Operationen Polymorphismus Folie 1
der Objektorientierung Klassen Instanziierung Vererbung / Inheritance Attribute Polymorphismus Dynamische Bindung Initialisierung Methoden Operationen Mitteilungen / Messages Sichtbarkeit Kapselung Identität von n Struktur und Verhalten Delegation Objektorientierte Analyse (OOA) Objektorientiertes Design (OOD) Objektorientierte Programmierung (OOP) Objektorientiertes Testen Objektorientierte Wartung Folie 2 Ideen der Objektorientierung Software wird gesehen als eine Sammlung diskreter (entsprechend denen aus der realen Welt) inklusive ihrer (Daten-) Struktur und ihres Verhaltens. Das führt zu Datenorientierung (im Unterschied zum imperativen Stil) Programm / Algorithmen sind um Daten gruppiert Folie 3
Konzepte der strukturierten Programmierung Prozeduren stehen im Mittelpunkt Unterprogramme als wichtigste Strukturierungseinheit oft der Problemstellung nicht angemessen Konzentration auf algorithmische Abstraktion mangelnde Datenabstraktion, Information-Hiding Eingabe Prozedur Ausgabe Folie 4 Konzepte der objektorientierten Programmierung Daten () stehen im Mittelpunkt, bewirken eine Zustandsänderung Die Programmstruktur ist möglichst nahe an der Struktur des Problemfeldes orientiert Lokalitätsprinzip Objekt (Datum) Folie 5
Folie 6 Definition: Objekt Ein Objekt ist eindeutig identifizierbar, gehört zu einer Klasse, hat einen änderbaren Zustand in Form von Werten von Attributen, unterstützt (polymorphe) Operationen. Weitere Eigenschaften: Ein Objekt wird charakterisiert durch die, die es interpretieren kann, hat eine begrenzte Sicht auf andere (benutzt deren Operationen). Folie 7
Beispiel für 1/2 Identität: genau dieser Kreis Struktur: diese drei Attribute Identität: genau dieses Verschiebe (x, y) Klassenzugehörigkeit: Quadrat alle Quadrate haben - diese Struktur und -dieses Verhalten Verschiebe (x, y) :Kreis :Achsenparalleles-Quadrat Mittelpunkt x0=4, y0=6 Linke untere Ecke x0=2, y0=1 Radius r=3 Kantenlänge l=5 Klassenzugehörigkeit: alle Kreise haben - diese Struktur und -dieses Verhalten Berechne-Fläche () Berechne-Fläche () Verhalten: diese beiden Operationen Folie 8 Beispiel für 2/2 Verschiebe (x, y) Verschiebe (x, y) :Kreis Mittelpunkt Radius r=3 :Punkt x0=4, y0=6 Berechne-Fläche () Sicht auf andere : der Mittelpunkt ist durch ein Punkt-Objekt realisiert Folie 9
Alle Daten werden diskreten, unterscheidbaren Entitäten (also n) zugeordnet. Zur Erinnerung: [Objektorientierte] Software wird gesehen als eine Sammlung diskreter (...) inklusive ihrer (Daten-) Struktur und ihres Verhaltens. Alle sind unterscheidbar, auch wenn alle Attributwerte übereinstimmen. Möglichkeiten der Realisierung: Adresse im Speicher Spezielles, geschütztes Attribut (eindeutige Nummer)... Jedes Objekt gehört (eindeutig) zu einer Klasse; Näheres dazu gleich Folie 10 Folie 11
Beispiele für Konkrete... Ein Fahrrad Ein Fenster (in echt oder auf dem Bildschirm) Ein Textdokument Ein Absatz in einem Textdokument Ein Bankkonto... vs. abstrakte Ein Algorithmus Eine Zuteilungsstrategie für Betriebssystemressourcen Eine Datentabelle Folie 12 Zitate: 1/2 An object represents an individual, identifiable item, unit, or entity, either real or abstract, with a well-defined role in the problem domain. M. Smith & S. Tockey, 1988 A single object is simply an instance of a class. Grady Booch, 1991 An object has state, behavior, and identity; the structure and behavior of similar objects are defined in their common class. Grady Booch, 1991 Folie 13
Zitate: 2/2 Instead of a bit-grinding processor raping and plundering data structures, we have a universe of well-behaved objects that courtesly ask each other to carry out their various desires. D. Ingalls, 1981 An object by itself is intensely uninteresting. Grady Booch, 1991 Folie 14 Folie 15
, Operationen, Methoden Zur Erinnerung aus der Definition: Ein Objekt... unterstützt (polymorphe) Operationen. Wir haben bisher gesagt: senden und empfangen. Beim Empfang einer Nachricht vollzieht ein Objekt eine entsprechende Operation. Anders ausgedrückt: Eine Operation ist eine Aktion oder Transformation, die ein Objekt beim Empfang einer Nachricht ausführt (oder die auf dem Objekt ausgeführt wird). Die Interpretation der Operation obliegt dem Objekt. Eine spezifische Implementierung einer Operation innerhalb einer bestimmten Klasse heißt Methode. Folie 16 Definition: Polymorphismus Polymorphismus bedeutet, dass die gleiche Operation von verschiedenen n in unterschiedliches Verhalten umgesetzt werden kann. Eine Operation ist also eine Abstraktion analogen Verhaltens über verschiedene hinweg. Folie 17
Polymorphismus 1/3 Achtung: Im Sinne der Verständlichkeit/Nachvollziehbarkeit von Programmen sollte das verschiedene Verhalten nach Außen immer sinngemäß gleich (also analog) wirken! Beispiel: Die Nachricht Verschiebe sollte nicht zum Drehen eines Objekts führen... Folie 18 Polymorphismus 2/3 Implementierung von Polymorphismus: Auf Grundlage des Namens der Operation und der Klassenzugehörigkeit des betroffenen Objekts wird die passendste Methode ausgewählt. Wie das geschieht und welches die passendste Methode ist, ist abhängig von der verwendeten Programmiersprache (manchmal sogar programmierbar)! Hinweis: Der Benutzer einer Operation (Sender einer Nachricht) braucht nicht zu wissen, wie viele Methoden zur Auswahl stehen (oder ob überhaupt mehrere). Folie 19
Polymorphismus 3/3 Vorteil des objektorientierten Paradigmas: Beim Hinzufügen neuer Klassen braucht bestehender Code nicht verändert zu werden, vorausgesetzt, die neuen Klassen stellen entsprechende Methoden zur Verfügung (oder erben sie). Folie 20 Beispiel für Polymorphismus 1/2 Polymorphismus: gleiche Operation, (zufälligerweise) gleiche Realisierung Verschiebe (x, y): x0 := x0 + x; y0 := y0 + y; Verschiebe (x, y): x0 := x0 + x; y0 := y0 + y; :Kreis Mittelpunkt x0=4, y0=6 Radius r=3 :Achsenparalleles-Quadrat Linke untere Ecke x0=2, y0=1 Kantenlänge l=5 Berechne-Fläche (): result := r*r*pi Berechne-Fläche (): result := l*l Polymorphismus: gleiche Operation, Folie 21 verschiedene Realisierung
Beispiel für Polymorphismus 2/2 Benutzen anderer : die Verschiebe-Operation wird durchgereicht oder delegiert Verschiebe (x, y): Mittelpunkt.Verschiebe(x, y) Verschiebe (x, y): x0 := x0 + x; y0 := y0 + y; :Kreis Mittelpunkt Radius r=3 :Punkt x0=4, y0=6 Berechne-Fläche (): result := r*r*pi Polymorphismus: gleiche Operation, verschiedene Realisierung Folie 22 Folie 23
der Objektorientierung Klassen Instanziierung Vererbung / Inheritance Attribute Polymorphismus Dynamische Bindung Initialisierung Methoden Operationen Mitteilungen / Messages Sichtbarkeit Kapselung Identität von n Struktur und Verhalten ( ) Delegation Objektorientierte Analyse (OOA) Objektorientiertes Design (OOD) Objektorientierte Programmierung (OOP) Objektorientiertes Testen Objektorientierte Wartung Folie 24 Noch ein Zitat... Just as the person holding a hammer tends to see everything in the world as a nail, so the developer with an object-oriented mindset begins to think that everything in the world is an object. Grady Booch, 1991 Folie 25
Ausblick Klassen und ihre Instanziierung Die Notation von n Klassen Attributen Operationen OO Entwurf nach Booch Ein Beispiel Vererbung Die Notation von Vererbung Folie 26