340 likes | 488 Views
Objektorientierter Entwurf. Basiskonzepte innerhalb des OOD: Klassen (generische ~, Container, Schnittstellen) Attribut Operation UML: Komponentendiagramm. OOD-Modell.
E N D
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): 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 Queue queue: T[0..n] insert() delete() <<bind>> <Tfloat,n100> <<bind>> <TPerson,n100> FloatQueue Adressbuch
Klasse Container-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>>
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: Oder: Medium Medium {abstract} erfasse() 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
Attribute Eigenschaftswerte: • 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
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>> KomponenteB <<component>> KomponenteA <<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 Abhängigkeiten zwischen Artefakten und Komponenten 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
Komponentendiagramm • Darstellung des Innenlebens einer Komponente
Komponentendiagramm 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 • Abhängigkeiten zwischen Modellelementen
Ü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.