Objektorientierter Entwurf
Basiskonzepte innerhalb des OOD:
Klassen (generische ~, Container, Schnittstellen)
Attribut
Operation
UML: Komponentendiagramm
OOD-Modell
• Soll das spätere Programm widerspiegeln; aber: höhere Abstraktionsebene, Verdeutlichung des Zusammenwirkens einzelner Elemente
• Erstellen eines statischen und dynamischen Modells
Klasse
Allgemein:Notation Name: Wie in der Analyse fett und
zentriert, beginnend mit Großbuchstabe
• Stereotypen verwenden, um Zugehörigkeit einer Klasse zu einer bestimmten Entwurfsschicht zu zeigen: <<interface>>, <<database>>, …
PERSON
<<interface>>
UIButton
Klasse
Parametrisierte Klasse (Template):
Queue
queue: T[0..n]
insert()
delete()
FloatQueueAdressbuch
<<bind>>
<TPerson,n100>
<<bind>>
<Tfloat,n100>
Die parametrisierte Klasse Queue enthält ein Attribut queue, das mit Hilfe des Typs T und der Multiplizität [0..n] definiert wird; in den beiden Klassen, die Queue als Vorlage benutzen, wird dann Typ und Anzahl der maximalen Werte/Objekte bestimmt
KlasseContainer-Klasse • Verwaltung von Objekten einer anderen Klasse (fehlte im
Entwurf!)• stellt Operationen bereit, um auf die zu verwaltenden Objekte
zugreifen zu können• Vordefiniert in Bibliotheken (z.B. C++ STL)
Implementierung
C++:template <class ElementType, int max>
class Queue{
public:
void insert(ElementType element) {...}
};
typedef Queue<int,100> IntQueue;
typedef Queue<string,100> StringQueue;
IntQueue intQueue;
StringQueue strQueue;
strQueue.insert(„Meier");
intQueue.insert(5);
Klasse
Schnittstelle (Interface)
• Enthält Signaturen von Operationen (abstrakt) und evtl. Attribute • Verwendung wie abstrakte Klasse• Schlüsselwort <<interface>>
Beispiel:
Schnittstelle : Implementierung
Java:Deklaration:
interface ClassInfo{
public abstract String getClassName();
}
Nutzung:
class MyClass implements ClassInfo{
public String getClassName(){
return „MyClass“;
}
}
C++:
Mittels Klassenkonzept
Klasse
Abstrakte Klassen• Oberklasse zu „realen“ Klassen• kann keine Objekte erzeugen• jede Klasse, die eine mit abstract gekennzeichnete
Operation enthält muss ebenfalls abstract sein
• UML:
Medium
{abstract}
erfasse()
Medium
Oder:
erfasse() {abstract}
Implementierung
Java:
- Kennzeichnung mittels „abstract“
- Eine Klasse, die eine abstrakte Operation besitzt, muss als abstrakt deklariert sein
abstract class AbstClass1{public void operation1(){}
public abstract void operation2(){}
}
C++:
- Keine spezielle Kennzeichnung
Attribute
• UML erlaubt alle Zeichen im Attributnamen Name an Konvention Programmiersprache anpassen; beginnend mit Kleinbuchstaben
• Sichtbarkeiten
public sichtbar in allen Klassen UML: +
protected sichtbar in der Klasse und allen Unterklassen
UML: #
private sichtbar in der Klasse UML: -
package sichtbar für alle Klasse im gleichen Paket
UML:~
Attribute
Notation:Sichtbarkeit / name : Typ [Multiplizität] = Anfangswert {Eigenschaftswert}
- Nur der Name des Attributs ist zwingend anzugeben;
Standard: Sichtbarkeit, Name, Typ
AttributeEigenschaftswerte:
- UML bietet eine Reihe von vordefinierten Eigenschaftswerten, wie z.B.:
{read only} Attributwert unveränderbar {ordered} Menge von Werten, geordnet ( vorname[1..3] {ordered} )
- Weitere Eigenschaftswerte dürfen nach Belieben definiert werden (ebenso Einschränkungen)
rueckflug: Date {rueckflug > hinflug}
Attribute
• Typen:
UML erlaubt neben vordefinierten Typen die Definition beliebiger weiterer Typen Typen der Programmiersprache, die verwendet werden soll, benutzen.
• Abgeleitete Attribute: Abgeleitete Attribute ins OOD- Modell eintragen. Sie werden
später als Attribute oder durch eine Operation realisiert, die den aktuellen Wert des abgeleiteten Attributs ermittelt.
Operationen
• Name:
beliebig, sollte mit Kleinbuchstaben beginnen; auch hier: Syntax der verwendeten Programmiersprache zu Grunde legen
• Überladen von Operationen:
Im OOD darf derselbe Operationsnamen innerhalb einer Klasse mehrfach vorkommen, allerdings mit
verschiedenen Parametern
Operation
Sichtbarkeiten :
• public sichtbar in allen Klassen UML: +• protected sichtbar in der Klasse und in allen
Unterklassen UML: #• privat sichtbar in der Klasse UML: -• package sichtbar im selben Paket UML: ~
Operationen
• Signatur:
Im OOD-Modell vollständig anzugeben
Spezifikation:
Sichtbarkeit name (Parameterliste) : Ergebnistyp {Eigenschaftswert}
Für die Parameterliste gilt:
Richtung parametername : Typ [Multiplizität] = Anfangswert {Eigenschaftswert}
Auch hier ist nur die Angabe des Namens zwingend.
Operation
Signatur: Richtung
• in : bei reinen Eingabeparametern; nur lesender Zugriff der Operation möglich
z.B. erfassen(in name: string)
• out : bei reinen Ausgabeparametern; Operation erzeugt den Wert des Parameters und gibt ihn an die aufrufende Funktion zurück
• inout : lesen, verändern, zurückgeben
Operation
• Eigenschaftswerte:
Analog zu Attributen gibt es in UML vordefinierte und die Möglichkeit, eigene zu definieren
Operation
• Für abstrakte Operationen gilt dasselbe wie für abstrakte Klassen:
- sie besteht nur aus der Signatur (ohne Wertangabe im OOD / ohne „aktive“ Implementierung)
- sie werden im Rahmen von Generalisierungsstrukturen ins OOD-Modell eingetragen
- UML: kursiv oder {abstract}
- in Schnittstellen sind Operationen immer abstrakt und müssen nicht gesondert als abstrakt gekennzeichnet werden
Beispiel
Operation
Erweiterung gegenüber Analyse:
• vollständige Signatur• Namen und Typen aller Parameter• Ergebnistyp der Operation• Sichtbarkeiten
Übung 1
• Ziel: Generische Klasse entwerfen Bilden sie generische Klassen und versuchen Sie die
Signaturen zu spezifizieren. Bilden Sie auch Klassen, die die Templates benutzen.
1) Liste: Operationen: Einfügen eines Elements in die Liste,
Entfernen an einer angegebenen Position, Lesen eines Elements an der angegebenen Position
2) Menge (Set): Operationen: Einfügen eines Elements, Prüfung auf
Enthaltensein eines Elements, Prüfen ob Menge Teilmenge einer anderen Menge ist, Bilden des Durchschnitts zweier Mengen
Komponentendiagramm
• Wie ist die Struktur des Systems, wie wird sie erzeugt?
• Komponente:
Softwarebaustein, der über feste Schnittstellen verfügt, wobei das Innenleben der Komponente modifiziert werden kann Vorteil: Austauschbarkeit
• Komponentenbasierte Entwicklung:
z.B. .NET, JavaBeans
Komponentendiagramm
• Notation: Komponente und Schnittstelle
<<component>>Komponente
Komponente
Komponentendiagramm
• Alternative Darstellung
Komponentendiagramm
• Die einzelnen Komponenten sind über ihre Schnittstellen miteinander verbunden:
<<component>>KomponenteA
<<component>>KomponenteB
<<component>>KomponenteC
Komponentendiagramm• Artefakte Artefakte sind physische Informationseinheiten, z.B. eine
Quellcodedatei oder eine ausführbare Binärdatei Die Art des Artefakts kann durch Stereotypen spezifiziert
sein: <<file>> =Datei <<document>> =Datei, die weder Quellcode noch ausführbaren Programmcode besitzt <<source>> =Datei mit Quellcode <<executable>> = ausführbare Datei <<library>> =Datei, die Bibliothek enthält (z.B. dll- Datei)
<<artefact>>ArtefaktX
Komponentendiagramm
Artefakt1 wird durch Komponente realisiert
Keine näher spezifizierte Abhängigkeit
Class-Datei wird automatisiert aus aus Java-Datei erstellt
OOD-Modell wird aus OOA-Modell erstellt
Abhängigkeiten zwischen Artefakten und Komponenten
Komponentendiagramm
• Darstellung des Innenlebens einer Komponente
Komponentendiagramm
• Abhängigkeiten zwischen Modellelementen
Klasse Fahrzeug ist Exemplar der Klasse Fahrzeugtyp
Kunden-Window besitzt Zugriffsrechte auf Klasse Kunde
OOD-Klasse Kunde realisiert OOA-Klasse Kunde
EditierbareListe ist durch Klasse Liste ersetzbar
Klasse Bestellung benötigt für volle Funktionalität Artikel
Übung 2
Ziel: Komponentendiagramm erstellen
Erstellen Sie ein Komponentendiagramm mit den folgenden Komponenten und den jeweils angegebenen Schnittstellen, die diese Komponenten zur Verfügung stellen und benutzen:
- Online-Reservierung: benutzt Reservierung
- Zimmerbelegung: bietet Zimmeranfrage und Buchung
- Preisberechnung: bietet Preisliste und Sonderangebote
- Zimmerreservierung: bietet Stornierung und
Reservierung, benutzt Zimmeranfrage, Buchung,
Preisliste und Sonderangebote.