45
Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Embed Size (px)

Citation preview

Page 1: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Design - Enwurf

Objekt/KlasseAttribut

OperationAssoziationen

PolymorphismusVererbung

PaketSzenario

Zusatandsautomat

Page 2: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

• Basierend auf den Analyseergebnissen Softwarearchitektur festgelegen:- Schnittstellendefinitionen- Funktions- und Leistungsumfang der Komponenten

• Aufgabe des Entwurfsspezifische Anwendung auf einer Plattform unter den technischen Randbedingungen realisieren

• Entwufs und Implementierungsphasen sind eng miteinander verbunden, jede entworfene Klasse kann direkt implementiert werden.--> Programmiersprache festlegen

Page 3: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

OOD-Modell

• OOD - Objektorientiertes Design - wird zu OOD-Modell, wenn die technische Lösung des zu realisierenden Systems mit grafischen und/oder textuellen Symbolen (UML) modelliert wird

• OOD Modell --> Spiegelbild des späteren Programms

Page 4: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Dreischichten Architektur• Vorteil: einzelne Module ohne vollständige Aktualisierung

des Systems austauschbar

Page 5: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Dreischichten Architektur

Page 6: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

OOD-Modell• statisches und dynamische Modell, wesentlich

umfangreicher, als in der Analysephase.• Statisches Modell

alle Klassen beschreibenPakete nicht nur zur Bildung von Teilsystemen, sondern auch zur Darstellung verschiedenen Schichten

• Dynamisches Modellsehr wichtig innerhalb des Entwurfsübersichtliche Beschreibung der komplexen Kommunikation der Objekte (mit Programmcode sehr schwer nachvollziehbar)

Page 7: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Objekt - Klasse

• Klassennamen immer mit Großbuchstaben beginnen

• Stereotypen zur Strukturierung

Alle Klassen für die Benutzungsoberfläche Präfix UI (UserInterface) gefolgt von einem klassenbeschreibenden Substantiv (UIbutton)

Page 8: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Objekt - Klasse'normale' Klasse

Java:jede Klasse ist ein DatentypStandard: im Paket sichtbar (nutzbar!)

Modifier: • public - Deklaration: global sichtbar

(nutzbar!)• final - Deklaration: keine Vererbung

möglich• abstract - Deklaration: siehe dort

Page 9: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Objekt - Klasse'normale' Klasse

Java:class Zaehler{private int Zaehlerstand;public void inkrementieren(){...}public void initialisieren(){...}public int getZaehlerstand(){...}

}

public class Zaehler{}

Page 10: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Objekt - Klassegenerische Klasse

• definieren eine Familie von Klassen• ist eine Schablone zur Erzeugung von

Klassen --> wieder verwertbarer Code• Beschreibung der Klasse mit 1 - n

Parametern (obligatorisch)• Parameter bestehen immer aus Typ und

Namen und werden mit Kommata getrennt

• Vorteil gegenüber Vererbung: kein typecast notwendig!

• Konzept z.Zt. in Java nicht umgestzt, soll mit JDK 1.5 Herbst 2003 kommen....

Page 11: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Objekt - Klassegenerische Klasse

Bsp C++ :template <class Element>

class Warteschlange{public:

void anfügen(Element* i);void entnehmen(Element* i);...;

};

class Patient;class Pkw;...Warteschlange<Patient> Wartezimmer;Warteschlange<Pkw> Stau;

Page 12: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Objekt - Klassegenerische Klasse

• nie Oberklasse einer `normalen`Klasse, kann aber von Oberklasse abgeleitet werden

• Binden einer Klasse an eine generische Klasse: binding UML:<<bind>>

Page 13: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Objekt - KlasseContainer Klasse

• Verwaltung von Objekten einer anderen Klasse (fehlte im Entwurf!)

• stellt Operationen bereit, um auf die zu verwaltenden Objekte zugreifen zu können

Bsp: array, vector, ....

Page 14: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Objekt - KlasseInterfaces (Schnittstellen)

• Ausschnitte des vollständigen Verhalten einer Klasse• Signaturen von Operationen (ohne Implementierung)• Verwendung wie abstrakte Klasse• keine Attribute (Java aber Konstanten: final Attribute)UML: <<interface>>+gestrichelter Vererbungspfeil

Page 15: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Objekt - KlasseInterfaces (Schnittstellen)

Java:

Deklaration:interface ClassInfo{public abstract String getClassName();

}

Nutzung:class MyClass implements ClassInfo{public String getClassName(){

return „MyClass“;}

}

Page 16: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Objekt - Klasseabstrakte Klassen

• Oberklasse zu realen Klassen• kann keine Objekte erzeugen• jede Klasse, die eine mit abstract gekennzeichnete Operation

enthält muss ebenfalls abstract sein

• UML:Klassenname kursiv

Page 17: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Objekt - Klasseabstrakte Klassen

Java:

abstract class AbstClass1{public void operation1(){}public abstract void operation2(){}

}

Page 18: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Attribute• Name an Konvention Programmiersprache anpassen• UML immer Substantiv beginnend mit Kleinbuchstaben• Erweiterung: Sichtbarkeiten (Verwendung)

public sichtbar in allen Klassen UML: +protected sichtbar in der Klasse/Paket und allen Unterklassen/außerhalb des

Pakets UML: #privat sichtbar in der Klasse UML: -

Page 19: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Attribute

Java:

class Kreis{

int radius = 10;

static String form = „rund“;

//Klassenattribute

}

Page 20: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

OperationenName an Konvention Programmiersprache anpassen; UML immer

Verb mit KleinbuchstabenName muss nicht eindeutig sein, er kann mehrfach vorkommen,

muss sich dann aber in der Parameterliste unterscheiden --> overloading

Erweiterung gegenüber Analyse:• vollständige Signatur• Name der Operation• Namen und Typen aller Paramerter• Ergebnistyp der Operation• Sichtbarkeiten

Page 21: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Operationen Sichtbarkeiten

Sichtbarkeiten (Aufruf)• public sichtbar in allen Klassen UML: +• protected sichtbar in der Klasse/Paket und

allen Unterklassen/außerhalb des Pakets UML: #• privatsichtbar in der Klasse UML: -

Page 22: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Operationen abstrakte/Klassen Operationen

abstrakte Operationen bestehen auch in der Implementation nur aus der Signatur:abstract void zeichnen();

Klassenoperationen dürfen nur auf 'static' Elemente zugreifensind implizit 'final', da sie nicht überschrieben werden können

--> nie 'abstract‘

Summe aller Signaturen =Interface (Schnittstelle) der Klasse

Page 23: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Operationen

class Kreis{

public void zeichnen(){...}

protected void loeschen(){...}

privat void verschieben(Punkt neu){...}

public static int getAnzahl(){...}//Klassenoperation

}

Page 24: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

AssoziationenUnterscheiden:• unidirektionaler und• bidirektionalerWelche Klassen muss/soll auf was zugreifen. --> Navigation der AssoziationValidieren über Operationen

Page 25: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Assoziationen

Sichtbarkeiten• public sichtbar in allen Klassen

UML: + Name Assoziation/Rolle• protected sichtbar in der

Klasse/Paket und allen Unterklassen/außerhalb des PaketsUML: # Name Assoziation/Rolle

• privat sichtbar in der KlasseUML: - Name Assoziation/Rolle

Page 26: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

AssoziationenUmsetzung von Kardinalitäten:<=1 mit ‚einfachen‘ Klassenclass Angestellter{protected Abteilung arbeitetIn;public void link(Abteilung abt){

arbeitetIn = abt;}public void unlink(Abteilung abt){

arbeitetIn = null;}public Abteilung getlink(){

return arbeitetIn;}

}

Page 27: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

>1 Container Klasse z.B. Vector:

class Abteilung{protected Vector mitarbeiter;//Verwaltung Referenzenpublic void link(Angesteller ang){

mitarbeiter.addElement(ang);}public void unlink( Angesteller ang ){

mitarbeiter.removeElement(ang);} Angesteller getlink(int pos){

Angesteller ang;....

ang=(Angesteller)mitarbeiter.elementAt(pos);return ang;

}}

Page 28: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Assoziationen

Umsetzung von Aggregationen:• es muss sichergestellt sein, dass eine

Navigation vom Ganzen zu den Teilen möglich ist.

Umsetzung von Kompositionen:• es muss sichergestellt sein, dass eine

Navigation vom Ganzen zu den Teilen möglich ist

• Operationen, die das Ganze betreffen, müssen sich auch auf die Teile auswirken

Page 29: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Polymorphismusgehö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.

Dieser Mechanismus ersetzt aufwendige switch-Anweisungen, bei denen je nach Objekttyp eine bestimmte Aktion ausgeführt wird.

Page 30: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Polymorphismus• 'dynamische' oder 'späte Binden‘• zum Zeitpunkt der Übersetzung (kompilieren) noch

nicht geklärt ist, welche Operation ausgeführt werden wird. Erst zur Laufzeit steht der Typ des Objektes fest und so wird das Objekt 'spät' an eine bestimmte Operation gebunden

Page 31: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

abstract class Grafikobjekt{public abstract void zeichnen();...

}class Kreis extends Grafikobjekt{

public void zeichnen();...

}class Rechteck extends Grafikobjekt{

public void zeichnen();...

}---------------------------------------------------------Grafikobjekt eineGrafik;...eineGrafik = new Kreis();eineGrafik.zeichnen() //zeichnet einen Kreis...eineGrafik = new Rechteck ();eineGrafik.zeichnen() //zeichnet ein Rechteck

Page 32: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Vererbung• Oberklassen häufig abstrakten Klassen• gemeinsame Eigenschaften und Operationen

für die Unterklassen festlegen

Einfach- oder Mehrfach?

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

Page 33: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Vererbung

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

Problem dabei:• Klasse kann von ihren unterschiedlichen

Oberklassen Attribute und Operationen erben, die namensgleich, aber unterschiedlichen Inhalts sind.

• Keine Beispiele, da in Java nicht erlaubt!• Spaghetti Vererbung --> extrem

unverständliche Strukturen

Page 34: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

VererbungÜberschreiben

Unterklasse implementiert eine signaturgleiche Operation der Oberklasse neu, sie überschreibt diese:

Page 35: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Überladen

eine Klasse verfügt über mehrere namensgleiche Operationen, die sich aber in der Parameterliste unterscheiden.

Page 36: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Vererbung

In Java:class Grafikobjekt{...}class Kreis extends Grafikobjekt{...}

Mehrfachvererbung in Java grundsätzlich nicht möglich, aber:

class B1{...}interface B2{...}interface B3{...}class X extends B1 implements B2, B3{...}

Page 37: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Pakete

in der Analysephase nur zur Einteilung, im Enwurf wesentlich wichtiger:

• Klassen zu Gruppen zusammenfassen• Darstellung verschiedener Entwürfe

Bsp: für verschiedene Pattformen• Pakete werden ineinander verschachtelt• Paketinhalte Sichtbarkeitselemente

Page 38: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Pakete

• public sichtbar in allen Paketen, die das betreffende Paket importierenUML: +

• protected sichtbar in allen Paketen, die das betreffende Paket spezialisierenUML: #

• privat sichtbar nur im betreffende PaketUML: -

Page 39: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

PaketeImportieren

Beziehung zwischen zwei PaketenP2 importiert P1

Page 40: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

PaketePaketvariationen

Vergleichbar mit der Klassen-Vererbung werden Paketvariationen dargestellt:

Page 41: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Paketein Java

Achtung: kein Standardpackage mehr!Erstellung eines Paketes:Unterverzeichnis im Projektverzeichnis anlegen, das den

gleichen Namen trägt, wie das PaketJede Klasse des Pakets als eigene Datei (beginnend mit package Paketname;) in dieses Verzeichnis legen

Pakete importieren:import Paketname.*;

importieren von einzelnen Klassen anderer Pakete:import Paketname.Klassenname.*;

Page 42: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Sequenzdiagramme

nur geringe Erweiterungen gegenüber Analysephase:• Operationsnamen durch genaue Parameterangaben

erweitern• Rückgabewerte von Operationen an den gestrichelten

Rücklaufpfeil

Extrem wichtig für die Übersicht über ein Programm:• Das dynamische Verhalten wird nur in den

Sequenzdiagrammen abgebildet und ist bei der Implementation für die Abfolge der Operationsaufrufe enorm wichtig, kann aber nicht direkt in Code übersetzt werden

Page 43: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Zustandsautomaten

im Entwurf oft sinnvoll für die Modellierung der Benutzungsoberfläche

liefert präziese Vorgaben für die Programmierung.

Page 44: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Zustandsautomaten Beispiel Manipulation eines Dokumentes mit der

Maus:

Page 45: Design - Enwurf Objekt/Klasse Attribut Operation Assoziationen Polymorphismus Vererbung Paket Szenario Zusatandsautomat

Zustandsautomatenzusätzliche nicht triviale Lebenszyklen im Enwurf

werden nicht direkt in eine Programmiersprache übersetzt, sondern liefern folgende Informationen:

• jede involvierte Klasse erhält zur Feststellung des aktuellen Zustandes folgendes Attribut:private classState

• jede involvierte Operation muss als erstes dieses Attribut abfragen und bei Zustandsänderungen das Attribut anpassen

• Lebenszyklus Klassen müssen Operation zur Verfügung stellen, die aufgrund des aktuellen Zustandes eines Objektes, die entsprechende Verarbeitungsschritte auslöst:wenn im Zustand1, dann bearbeiten1(), wenn im Zustand2, dann bearbeiten2()