Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete...

27
Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität

Transcript of Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete...

Page 1: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Objektorientierter Entwurf

Statische Konzepte im OOD:

Polymorphismus

Generalisierung

Pakete

Dynamische Konzepte im OOD:

Aktivität

Page 2: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Polymorphismus

gehört zu den wesentlichen Grundpfeilern der Objektorientierung

Grundsätzlich gilt:

Polymorphismus ermöglicht den gleichen Namen für gleichartige Operationen zu verwenden, die mit Objekten unterschiedlicher Klassen auszuführen sind.

So wird erreicht, das dieselbe Botschaft an Objekte unterschiedlicher Klassen gesendet werden kann, die darauf auf ihre Weise unterschiedlich reagieren.

Page 3: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Grafikobjekt-mittelpunkt

- istSichtbar

+ zeichnen( )

Kreis Rechteck- radius

+ zeichnen( )

- laenge

- breite

+ zeichnen( )

Polymorphismus

-spätes Binden: Operation wird erst zur Ausführungszeit an ein bestimmtes Objekt gebunden

-C++ explizites Deklarieren (virtual)

Java automatisch polymorph

Page 4: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Übung 1

Ziel: Polymorphismus anwenden

Erstellen Sie für folgende Problemstellung ein Klassendiagramm unter Verwendung des Konzepts Polymorphismus:

Literaturstellen (Bücher und Artikel aus Zeitschriften) sind nach Autoren sortiert in einer gemeinsamen Liste abzulegen. Für jedes Buch sind der Autor, Titel, Ort und Erscheinungsjahr zu speichern,

für jeden Artikel Autor, Titel, Zeitschriftentitel, Ausgabennummer und Seitenangaben.

Folgende Funktionalität soll realisiert werden: Jede Literaturstelle ist zu erfassen und nach Autoren sortiert in der Liste zu speichern. Alle

Literaturstellen sollen nach Autoren sortiert ausgegeben werden.

Page 5: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Generalisierung

• Oberklassen als abstrakte Klassen modellieren• gemeinsame Eigenschaften und Operationen für die

Unterklassen festlegen

Einfach- oder Mehrfachvererbung?

• Einfachvererbung --> Struktur, in der jede Klasse (außer der Wurzel) genau eine Oberklasse besitzt.Baumstruktur

Page 6: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Generalisierung

Mehrfachvererbung --> Struktur, in der jede Klasse (außer der Wurzel) mehrere Oberklasse besitzen kann.

Problem dabei:

• Namenskonflikte: Klasse kann von ihren unterschiedlichen Oberklassen Attribute und Operationen erben, die namensgleich, aber unterschiedlichen Inhalts sind.

• Spaghetti Vererbung unverständliche Strukturen

• in C++ möglich, in Java durch Schnittstellen nachbildbar

Page 7: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Generalisierung

Generalisierungsmenge

- Partitionierung der Unterklassen bezüglich eines bestimmten Aspekts

Page 8: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

GeneralisierungGeneralisierungseigenschaften

• complete: Partition enthält alle denkbaren Unterklassen• incomplete: Partition enthält nur eine Teilmenge der möglichen

Unterklassen• disjoint: kein Exemplar einer Unterklasse ist gleichzeitig

Exemplar einer anderen Unterklasse• overlapping: Exemplare, die zu mehr als einer Unterklasse

gehören können, sind möglich

Page 9: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Grafikobjekt-mittelpunkt

- istSichtbar

+ vergroesssern( faktor:int)

Kreis Rechteck- radius

+ vergroessern(faktor:int)

- laenge

- breite

+ vergroessern(faktor:int)

Generalisierung

void Kreis::vergroessern(int faktor)

{

faktorA=faktor;

...

}

void Rechteck:: vergroessern(int faktor)

{faktorA=faktor/2; ...

}

Überschreiben (Overriding, redefinition): Neuimplementierung einer Operation innerhalb einer Unterklasse unter gleichem Namen wie in der Oberklasse

Page 10: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Generalisierung

Überladen

Verwendung desselben Operationsnamens innerhalb einer Klasse mit unterschiedlichen Parametern

Page 11: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Generalisierung

Überblick

Page 12: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Pakete - Zusammenfassen von Klassen zu Gruppen - Verschiedene Abstraktionsebenen darstellbar durch Schachtelung von Paketen

- Sictbarkeiten: + public: für alle Pakete sichtbar, die das betreffende Paket importieren (Zugriff ohne qualifizierenden Namen) - private: Sichtbarkeit und Zugriff nur im betreffenden Paket Auf public-Elemente kann außerhalb des Pakets immer über einen qualifizierenden Namen zugegriffen werden (z.B. Paket::Klasse)

Paket

Paket1 Paket2

Page 13: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Pakete

Import-Beziehung zwischen Paketen oder Elementen von Paketen und Paketen:- <<import>>:; public-Import: Die Sichtbarkeiten bleiben im importierenden Paket unverändert erhalten

- <<access>>: private-Import-Beziehung: Sichtbarkeiten der Kategorie „public“ werden im importierenden Paket privat.

Page 14: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Pakete

- Paket-Merge: Elemente gleichen Namens können aus mehreren Paketen „gemischt“ werden

- Elemente des Zielpakets werden in das Quellpaket kopiert

- Einfacher Merge: Es gilt: 1.Enthält das Zielpaket Z

eine Klasse K und das Quellpaket keine Klasse K, dann wird die Klasse K in Q eingefügt.

2.Enthält Z eine Klasse K dann wird die Klasse Z::K in Q eingefügt, die Oberklasse von K ist.

Page 15: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

PaketeBeispiel: Komplexes Paketmerge

Page 16: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Pakete Notation Paket: Überblick

Page 17: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Übung 2Ziel: Paketdiagramm mit Beziehungen erstellen

1) Erstellen Sie ein Paketdiagramm mit den Paketen PAK1 und PAK2, die folgende Elemente enthalten:

PAK1 enthält die Klassen +K10, +K11, -K12;

PAK2 enthält die Klassen +K20, +K21, -K22, -K23, +K24

Ein weiteres Paket PAK3 soll zu PAK1 eine Importbeziehung besitzen,

zu PAK2 eine access-Beziehung. Das Paket PAK4 enthält eine access-Beziehung zu PAK3.

2) Auf welche Klassen aus PAK1 und PAK2 kann ohne qualifizierenden Namen zugegriffen werden? Welche Sichtbarkeiten besitzen diese Klassen

in den entsprechenden Paketen PAK3 und PAK4?

Page 18: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Dynamische Konzepte im Entwurf: Aktivität

- Eine Aktivität beschreibt die Ausführung von Verarbeitungsschritten

und besteht aus mehreren Aktionen - Aktion kann sein: + Aufruf einer Operation, Senden eines Signals + Objektbezogene Aktion + Berechnungen + Ausnahmebehandlung + Empfang von Signalen oder Botschaft - Aktivitätsdiagramm im Entwurf: Beschreibung komplexer

Operationen

Page 19: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Aktivität

• Benennung von Aktionen im Entwurf

Page 20: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Aktivität

• Konnektoren

Page 21: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Aktivität

Exeption Handler= Notationselement das verwendet werden kann um

alternative Aktionen im Falle von Fehlerauftreten darzustellen

Page 22: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Aktivität• Strukturierter Knoten (structured activity node)

Gruppierung von Knoten und Kanten einer Aktivität:

Page 23: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Aktivität

• Mengenverarbeitung

parallel, stream

Page 24: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Aktivität• Entscheidungsknoten, Schleifenknoten

Page 25: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Beispiel

Page 26: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

AktivitätAktivitätsdiagramm: Übersicht der Notationselemente

Page 27: Objektorientierter Entwurf Statische Konzepte im OOD: Polymorphismus Generalisierung Pakete Dynamische Konzepte im OOD: Aktivität.

Übung 3

Ziel: Operation durch ein Aktivitätsdiagramm darstellen

Erstellen Sie ein Aktivitätsdiagramm mit Entscheidungs- und Schleifenknoten, das folgendem Pseudocode entspricht:

summe=0; lese betrag; anzahl=1; while(betrag>0) { summe=summe+betrag; lese neuen betrag; anzahl=anzahl+1; }

gebe summe aus; gebe anzahl der summierten beträge aus;