Upload
phungnhan
View
221
Download
0
Embed Size (px)
Citation preview
Softwaretechnologie, © Prof. Uwe Aßmann 1
Objektorientierte Analyse
3) Strukturelle datengetriebene Analyse mit UML
Prof. Dr. rer. nat. habil. Uwe Aßmann
Institut für Software- und Multimediatechnik
Lehrstuhl Softwaretechnologie
Fakultät für Informatik
TU Dresden
Version 05-1.2, Nov 10, 05
Prof. Uwe Aßmann, Softwaretechnologie 2
Obligatorische Literatur
► Zuser, Kap. 7-9► Störrle 5.2-5.5► Balzert Kap. 6-7, 9-10
Prof. Uwe Aßmann, Softwaretechnologie 3
Hinweis: Online-Ressourcen!
► Über die Homepage der Lehrveranstaltung (bei "Vorlesungen") finden Sie die DateiTerminv.java
► Diese Datei enthält eine vollständige Umsetzung des Beispiels "Terminverwaltung" in lauffähigen Java-Code.
► Empfohlene Benutzung:■ Lesen
■ Übersetzen, Starten, Verstehen
■ Modifizieren
■ Kritisieren
Prof. Uwe Aßmann, Softwaretechnologie 4
Objektorientierte Analyse
1 Überblick Systemanalyse
2 Strukturelle Modellierung mit CRC-Karten
3 Strukturelle datengetriebene Modellierung mit UML
4 Nutzfalldiagramme
5 Dynamische Modellierung mit UML
Prof. Uwe Aßmann, Softwaretechnologie 5
Schritte der datengetriebenen objektorientierten Analyse
Ziel:Von den
Anforderungenzu einemModell
der fachlichenAufgabe
Variante:DatenorientierteVorgehensweise
Merkmale identifizieren
Klassen identifizieren
Klassenbeziehungen identifizieren
OOA
Verhalten der Merkmalebeschreiben
Strukturanalyse
Prof. Uwe Aßmann, Softwaretechnologie 6
Schritte der strukturellen, datengetriebenen Analyse
Ziel:Von den
Anforderungenzu einemModell
der fachlichenAufgabe
Variante:DatenorientierteVorgehensweise
Klassen nach Profilenklassifizieren
Attribute identifizieren
Assoziationen identifizieren
Merkmale identifizieren
Klassen identifizieren
Operationen identifizieren
Klassenbeziehungen identifizieren
Komposite Klassen identifizieren
Vererbungen identifizieren
Ereignisse identifizieren
strukturelle OOA
Ausnahmen identifizieren
Ströme identifizieren
Konnektoren identifizieren
Prof. Uwe Aßmann, Softwaretechnologie 7
Warnung: Modellierung vs. Realisierung
• Zuerst das Problem verstehen (Analyse), dann Architektur festlegen (Entwurf) dann Implementierungsdetails festlegen (Implementierung) !!
. Diese Regel gilt auch bei evolutionärer Entwicklung und eXtreme Programming !
► Klassischer Weg:■ Für Analyse nur UML, noch keine Programmierung
► In dieser Vorlesung wird OOP (Java) schon in der Analyse erwähnt - warum?
■ Java-Programmierung hilft beim Verständnis der abstrakten Konzepte der UML
– Pure fachliche Modelle können im Sinne eines Prototyps bereits in Programmiersprache realisiert werden:
. Keine Benutzeroberfläche, keine Datenhaltung
. Programmiersprache als Werkzeug zum besseren Verständnis des abstrakten Modells
Prof. Uwe Aßmann, Softwaretechnologie 8
Vom Analysemodell zum Entwurfsmodell
► Analysemodelle sind meist gröber als Entwurfsmodelle.► Beim Übergang zum Entwurfsmodell wird das Analysemodell
verfeinert, d.h. ausgefüllt. ■ Das Analysemodell ist sozusagen das Skelett des Entwurfsmodells
. Kontextmodell ergibt Architekturmodell
. Domänenmodell ergibt Materialentwurf
. GUI-Prototyp ergibt GUI
analysismodelKontextmodell
(context model,system interface)
Domänen-modell
Anwendungsfälle(use cases)
TextuelleAnforderungen
Architektur-Entwurf
Feinentwurf
Fachliches Modell
Top-level-Architektur
Nutzer-modell
Produktdefinition
Anforderungs-spezifikation
Prof. Uwe Aßmann, Softwaretechnologie 9
Datengetriebene Analyse
► Die Schritte der datengetriebenen Analyse gelten für alle Arten von Analysemodellen
■ Domänenmodell■ Kontextmodell■ Top-level-Architektur
► Im folgenden werden sie hauptsächlich für ein Analysemodell dargestellt, das alle obigen Teilmodelle integriert
■ Man kann aber Klassen den jeweiligen Teilmodellen zuordnen
Prof. Uwe Aßmann, Softwaretechnologie 10
Was man vom Analysemodell auflösen muss► Beim Übergang vom Analysemodell zum Entwurfsmodell und
Implementierungsmodell muss man verschiedene abstrakte Konstrukte auflösen, dh. in Java übersetzen (lowering)
► Strukturelle Features■ Mehrfachvererbung von Code■ n-stellige Assoziationen■ bidirektionale Assoziationen■ Aggregationen, Kompositionen■ Aktive Objekte■ Ströme■ Konnektoren
► Verhalten■ States■ Activites ■ Ereignisse auffangen und behandeln
Prof. Uwe Aßmann, Softwaretechnologie 11
Wdh. Realisierung von Klassen
Teammitglied
– name: String– abteilung: String
+ terminBestätigen(von: Date, bis: Date):boolean
class Teammitglied {
private String name; private String abteilung;
public boolean terminBestaetigen (Date von, Date bis) {// Methodenrumpf
}}
Zwei Alternativen für Datentypen in UML-Diagrammen: – Sprachunabhängige UML-Typen oder Java-Datentypen
Kein Ergebnistyp angegeben:Java-Pseudotyp "void"
Prof. Uwe Aßmann, Softwaretechnologie 12
Löschen von Objekten
► In Java gibt es keine Operation zum Löschen von Objekten(keine "Destruktoren").
■ Andere objektorientierte Programmiersprachen kennen Destruktoren (z.B. C++)
► Speicherfreigabe in Java:■ Sobald keine Referenz mehr auf ein Objekt besteht, kann es gelöscht
werden.
■ Der konkrete Zeitpunkt der Löschung wird vom Java-Laufzeitsystem festgelegt ("garbage collection").
■ Aktionen, die vor dem Löschen ausgeführt werden müssen:
protected void finalize() (über)definieren
► Fortgeschrittene Technik zur Objektverwaltung (z.B. für Caches):■ "schwache" Referenzen (verhindern Freigabe nicht)
■ Paket java.lang.ref
Prof. Uwe Aßmann, Softwaretechnologie 14
Schritte der strukturellen, datengetriebenen Analyse
Ziel:Von den
Anforderungenzu einemModell
der fachlichenAufgabe
Variante:DatenorientierteVorgehensweise
Klassen nach Profilenklassifizieren
Attribute identifizieren
Assoziationen identifizieren
Merkmale identifizieren
Klassen identifizieren
Operationen identifizieren
Klassenbeziehungen identifizieren
Komposite Klassen identifizieren
Vererbungen identifizieren
Ereignisse identifizieren
strukturelle OOA
Ausnahmen identifizieren
Ströme identifizieren
Konnektoren identifizieren
Prof. Uwe Aßmann, Softwaretechnologie 15
Profile und Stereotypen
► UML erlaubt es, Klassen mit Stereotypen zu annotieren■ Klassen werden “markiert”, dh. mit mehr Semantik ausgestattet
► Kataloge von Stereotypen heissen Profile► Wenn der Ingenieur einige Profile (inkl. ihrer Stereotypen) kennt,
kann er seine Klassenmodelle mit mehr Semantik ausstatten■ UML 2.0 superstructure, Appendix B, enthält eine grosse Menge von
Standardstereotypen■ Man kann auch seine eigenen Profile definieren
Prof. Uwe Aßmann, Softwaretechnologie 16
Bahrami Profil
► Konzept, Begriff (concept)■ Etwas, worauf sich viele Leute eines Anwendungsbereiches geeinigt
haben. Oft angeordnet in Taxonomien oder Ontologien■ Benutzt im Domänenmodell
► Ereignissklasse (Event)■ Ereignis in der Zeit
► Organization■ Verkörpert Wissen über eine Organisationseinheit
► Menschen (People)
► Plätze (Places class)
<<concept>>
<<event>>
<<organization>>
<<people>>
<<place>>
Prof. Uwe Aßmann, Softwaretechnologie 17
Rumbaugh Profil
► Physical class (e.g., Boat)► Business class (e.g., Bill)► Logical class (e.g., Timetable)► Application class (e.g., BillingTransaction)► Computer class (e.g., Set)► Behavioral class (e.g., Cancellation)
<<physical>>
<<business>>
<<logical>>
<<application>>
<<computer>>
<<behavior>>
Prof. Uwe Aßmann, Softwaretechnologie 18
Aktive und Passive Klassen
► Aktive Objekte■ Aktoren■ Prozesse■ Workflow (interaktiver Prozess)■ Werkzeuge (Tools)
► Passive Objekte (Materials, entities, data objects)■ Aktive Objekte arbeiten auf Materialien
► Konnektoren (connectors): Beschreiben, wie aktive Objekte miteinander kommunizieren
■ Über Konnektoren fliessen Daten
<<material>>
<<actor>>
<<process>>
<<entity>>
<<connector>>
<<tool>>
<<active class>>
<<passive class>>
Prof. Uwe Aßmann, Softwaretechnologie 19
BCED Profile (Boundary, Control, Entity, Database)
► GUI-Klassen (Grenzklassen, boundary classes)■ Teil einer Benutzerschnittstelle
► Steuerungsklassen (control class)■ Aktive Klasse, die die Ausführung eines
Prozesses steuert■ Mit oder ohne Zustand
► Material: Passive Klasse, beschreibt Daten■ Entitätsklassen (Entity): Beschreibt komposite,
persistente Datenobjekte der Domäne■ Database: Adapterklasse für eine Entity in der
Datenbank. Oft sind, Entity and Database vereinigt
■ MaterialContainer: Container für Material
► BCE-Architektur heisst auch 3-Schichten-Architektur (3-tier architecture)
► BCED unterscheidet Entity von Database (4-tier)
<<boundary>>
<<control>>
<<entity>>
<<database>>
<<container>>
<<tool>><<process>>
Prof. Uwe Aßmann, Softwaretechnologie 20
Identifikation von Grenzklassen
► Grenzklassen bestehen oft aus■ Formularen, die dem Benutzer präsentiert werden■ html-Seiten■ Abfragen■ Meldungen■ Sichten auf Daten
► Bsp: Terminanwendung:■ Tabelle der gebuchten Besprechungen ■ Formular, um eine neue Buchung eines Raumes einzutragen■ Tabelle der Besprechungen pro Mitarbeiter
Prof. Uwe Aßmann, Softwaretechnologie 21
Identifikation von Steuerungsklassen
► Steuerungsklassen sind Klassen, die Anwendungslogik enthalten, d.h. die anwendungsspezifische Funktionalität
► Steuerungsklassen treten oft in der Top-Level-Architektur auf, wo sie aus Schnittstellenklassen im Kontextmodell entwickelt werden
■ Im Entwurf werden die Steuerungsklassen der Top-Level-Architektur weiter verfeinert
Prof. Uwe Aßmann, Softwaretechnologie 22
Identifikation von Entitätsklassen
► Entitätsklassen werden aus den passiven Klassen eines Domänenmodells bestimmt
► Entitätsobjekte können physikalisch aus sehr vielen einzelnen Objekten bestehen (physikalische Splitterung)
■ --> Aggregations- und Kompositionsoperation in UML
Prof. Uwe Aßmann, Softwaretechnologie 23
Bsp: Analyse-Klassenmodell Liftsteuerung
Liftknöpfe
[Zuser]
Knöpfe an Fahrstuhl
Überwachungsmonitor
Sprechanlage
Liftsteuerung
Überwachung
Sensoren
Liftinformation
Stockwerk
Ruhezustand
Prof. Uwe Aßmann, Softwaretechnologie 25
Zeilenhierarchien
► Hierarchien kann man als auch als Zeilenhierarchien (Textbäume) anordnen, analog zu einem tree widget
■ Teile können leicht zu- und aufgeklappt werden■ Textuelle Annotationen können einfach in den Zeilen hinzugefügt werden
► Am einfachen sieht man das an einer Begriffshierarchie (Taxonomie)■ Ontologieeditoren benutzen dieses Format (z.B. Protege)
Einkommenssteuererklärung
Vermögenssteuererklärung
Erbschaftssteuererklärung
Umsatzsteuererklärung
Lohnsteuerjahresausgleich
Pflicht-Einkommenssteuererklärung
Vorsteuererklärung
Umsatzsteuernachzahlung
Steuererklärung
Prof. Uwe Aßmann, Softwaretechnologie 26
Ganzes/Teile-Zeilenhierarchie
► Auch owns-a-Hierarchien kann man als auch als Zeilenhierarchien (Textbäume) anordnen (Nicht: allg. part-of!)
► In UML auch als Kompositionshierarchie bezeichnet► Natürlich können Ganzes/Teile-Hierarchien auch mit Objekten
gezeichnet werden
Steuerpflichtiger
Nichtselbständiges Einkommen
Veräusserungsgewinne
Kapitaleinkommen
Steuernummer
Adresse
Zinserträge
Aktiengewinne
Steuererklärung
Prof. Uwe Aßmann, Softwaretechnologie 2727
Pakete in UML
► Klassen sind flach, Pakete dagegen rekursiv strukturierbar■ Pakete gruppieren Klassen, Objekte, andere UML-Elemente
► Paketrelationen sollten azyklisch oder baumförmig sein■ Sind einfach auf Paketkonzepte von Programmiersprachen abbildbar
Prof. Uwe Aßmann, Softwaretechnologie 2828
Beispiel Service-Station
Services
RefuelParking Maintenance
Customer
Purchase
Fuel
Inventory
Part
ServicesCustomers
Stock
Prof. Uwe Aßmann, Softwaretechnologie 29
Paket-Zeilenhierarchie
► Pakete sind Container von UML-Modellelementen (z.B. von Klassen)► Auch Paket-Hierarchien kann man als auch als Zeilenhierarchien
(Textbäume) anordnen► Operator ist die Paketvereinigung
Überprüfung Steuerpflichtiger
Regeln nichtselbständiges Einkommen
Bearbeitung Veräusserungsgewinne
Bewertung Kapitaleinkommen
Steuernummer-Datenbank
Adressenverwaltung
Berechnung Zinssteuer
Bewertung Aktiengewinne
Steuerabrechnung
+
+
+
Prof. Uwe Aßmann, Softwaretechnologie 30
Aktivitätenhierarchie
► Aktivitäten werden in UML durch leicht abgerundete Rechtecke dargestellt
► Strukturierte Aktivitäten können in Zeilenhierarchien dargestellt werden (nennt man Aktivitäts- oder Funktionsbaum)
Ziel:Von den
Anforderungenzu einem
Modellder fachlichen
Aufgabe
Variante:DatenorientierteVorgehensweise
Domänenmodell erstellen
Nutzer analysieren
Anforderungen spezifizieren
Anforderungsanalyse
Kontextmodell erstellen
Funktionale Anforderungen spezifizieren
Qualitätsanforderungen spezifizieren
Prof. Uwe Aßmann, Softwaretechnologie 31
Merke
► Venn-Diagramme drücken die Hierarchie durch Enthaltensein aus,► Zeilenhierarchien durch Faltung, ► Bäume durch vertikale Dekomposition
► Der geschickte Ingenieur wechselt die Darstellung je nach Bedarf
Prof. Uwe Aßmann, Softwaretechnologie 33
Schritte der strukturellen, datengetriebenen Analyse
Ziel:Von den
Anforderungenzu einemModell
der fachlichenAufgabe
Variante:DatenorientierteVorgehensweise
Klassen nach Profilenklassifizieren
Attribute identifizieren
Assoziationen identifizieren
Merkmale identifizieren
Klassen identifizieren
Operationen identifizieren
Klassenbeziehungen identifizieren
Komposite Klassen identifizieren
Vererbungen identifizieren
Ereignisse identifizieren
strukturelle OOA
Ausnahmen identifizieren
Ströme identifizieren
Konnektoren identifizieren
Prof. Uwe Aßmann, Softwaretechnologie 34
Aufgabe der Analyse von Klassen
► Domänenmodell: ■ Klassen kommen als Begriffe■ Vererbung zwischen Begriffen bilden Begriffshierarchien (Taxonomien)■ Kontextmodell■ Assoziation
► Kontextmodell und Top-level -Architektur:■ Klassen repräsentieren Daten, die auf Kanälen fliessen■ und Prozesse, die die Daten bearbeiten
► Funktionale Anforderungen:■ enden in Operationen, die Klassen zugeordnet sind
Prof. Uwe Aßmann, Softwaretechnologie 35
Klassenattribute (Statische Attribute)
► Attribute von Objekten kennen wir schon (Diese heißen auch Instanzattribute, weil sie für jede Instanz individuelle Werte annehmen.)
► Ein Klassenattribut A beschreibt ein Datenelement, das genau einen Wert für die gesamte Klasse annehmen kann.
► Notation: Unterstreichung
A : Typ
titel: Stringbeginn: Date
dauer: Intanzahl: Int
Teambesprechung► Beispiel:
Prof. Uwe Aßmann, Softwaretechnologie 36
Beispiel: Instanz- und Klassenattribute
Teammitgliedleitet
Teilnahme
1*
* 2..*
nameabteilung
BesprechungsraumraumNr
kapazität
1
*
1*für
Team
name
1..* Leiter
0..1
1
Termin
titelbeginndaueranzahl
Teambesprechung
Privater Termin
beschreibgbeginndauer
ortwegzeit
VeranstOrt
1Reservierung
Prof. Uwe Aßmann, Softwaretechnologie 37
Wann Klassen, wann Assoziationen
► Jede Klasse sollte mindestens ein sinnvolles Attribut tragen oder in mindestens einer Assoziation angebunden sein.
► Beispiel:
– Attribut "Reservierungsdatum" für eine Raumreservierung wird benötigt (z.B. um Konflikte aufzulösen).
– Die Klasse "Reservierung" wird in die bestehende Assoziation eingefügt und "zerlegt" sie in zwei neue Assoziationen.
Besprechungsraum
1
*Teambesprechung
VeranstOrt
Besprechungsraum
Teambesprechung
VeranstOrt
ReservierungZeitraum
Reservierungsdatum
1
*
für0..1
1
0..1 ?
Prof. Uwe Aßmann, Softwaretechnologie 38
Operation
► Definition Eine Operation einer Klasse K ist die Beschreibung einer Aufgabe, die jede Instanz der Klasse K ausführen kann.In der Beschreibung der Klasse wird der Name der Operation angegeben.
■ "Leere Klammern":. In vielen Büchern (und den Unterlagen zur Vorlesung) zur Unterscheidung von
Attributnamen: raumFestlegen(), einladen(), absagen() etc.
. Auf Analyseebene gleichwertig zu Version ohne Klammern
Teambesprechungtitel
beginndauer
raumFestlegeneinladenabsagen
• Beispiel:
KlasseAttribut_1
...Attribut_n
Operation_1...
Operation_m
► Notation:
Teambesprechungtitel
beginndauer
raumFestlegen()einladen()absagen()
Prof. Uwe Aßmann, Softwaretechnologie 39
Operation, Methode, Prozedur
► UML-Standard:■ operation: a service that can be requested from an object to effect
behaviour
■ method: the implementation of an operation
► Objektorientierte Programmierung (z.B. Java):■ "In den Methoden wird all das programmiert, was geschehen soll, wenn
das Objekt die betreffende Botschaft erhält." (Middendorf/Singer 1999, S. 78)
■ Ein Aufruf an eine Methode setzt sich also aus . einer Aufruf-Nachricht (Botschaft, Message) und . einer Aufruf-Fertigmeldung zusammen
Prof. Uwe Aßmann, Softwaretechnologie 40
Parameter und Datentypen für Operationen► Detaillierungsgrad:
■ Analysephase: meist Operationsname ausreichend■ Parameternamen und Datentypen können angegeben werden
(manchmal auch Parametername ohne Datentyp)■ Später (Entwurfsphase) sind vollständige Angaben nötig.
► Notation:
Operation (Art Parameter:ParamTyp=DefWert, ...): ResTyp■ Art (des Parameters): in, out, oder inout (weglassen heißt in)■ DefWert legt einen Default-Parameterwert fest, der bei Weglassen des
Parameters im Aufruf gilt.
► Beispiele (Klasse Teambesprechung):raumFestlegen (wunschRaum: Besprechungsraum): Boolean
absagen (grund: String);■ Achtung: Bei diesem Detaillierungsgrad bedeuten "leere Klammern",
daß keine Parameter vorhanden sind!
Prof. Uwe Aßmann, Softwaretechnologie 41
Klassenoperation (Statische Operation)► Definition Eine Klassenoperation A einer Klasse K ist die
Beschreibung einer Aufgabe, die nur unter Kenntnis der aktuellen Gesamtheit der Instanzen der Klasse ausgeführt werden kann.Gewöhnliche Operationen heißen auch Instanzoperationen.
► UML Notation: Unterstreichung analog zu Klassenattributen.
► Java: Die Methode main() ist statisch, und kann vom Betriebssystem aus aufgerufen werden
■ Sie gehört also zum Kontextmodell (Schnittstelle des Systems)
BesprechungsraumraumNr
kapazität
reservieren()freigeben()
freienRaumSuchen()
class Steuererlkaerung {
public static main (String[] args) { Steuerzahler hans = new Steuerzahler(); ... }}
Prof. Uwe Aßmann, Softwaretechnologie 42
Überladung von Operationen
► Auswahl aus mehreren gleichnamigen Operationen nach Anzahl und Art der Parameter.
► Klassisches Beispiel: Arithmetik
+: (Nat,Nat)Nat, (Int,Int)Int, (Real,Real)Real
► Java-Operationen:int f1 (int x, y) {...}
int f1 (int x) {...}
int x = f1(f1(1,2));
► Konstruktoren:public Teammitglied () {...}
public Teammitglied (String n) {...}
public Teammitglied (String n, String abt) {...}
Prof. Uwe Aßmann, Softwaretechnologie 43
Überladen vs. Polymorphismus
► Überladung wird vom Java-Übersetzer statisch aufgelöst. Ausint f1 (int x, y) {...}
int f1 (int x) {...}
int x = f1(f1(1,2));■ macht der Übersetzerint f1_2_int_int (int x, y) {...}
int f1_1_int (int x) {...}
int x = f1_1_int( f1_2_int_int(1,2) );■ indem er die Stelligkeit und die Typen der Parameter bestimmt und den
Funktionsnamen in der .class-Datei expandiert
► Polymorphie dagegen kann nicht zur Übersetzungszeit aufgelöst werden
■ Der Merkmalssuchalgorithmus muss dynamisch laufen, da dem Übersetzer nicht klar ist, welchen Unterklassentyp ein Objekt besitzt (es können alle Typen unterhalb der angegebenen Klasse in Frage kommen)
Prof. Uwe Aßmann, Softwaretechnologie 44
Konstruktoroperation
► Definition Eine Konstruktoroperation C einer Klasse K ist eine spezielle Klassenoperation, die eine neue Instanz der Klasse, d.h. ein neues Objekt, erzeugt und initialisiert.
Ergebnistyp von C ist immer implizit die Klasse K.
Eine Konstruktoroperationen ohne Parameter wird implizit für jede Klasse angenommen. Explizite Konstruktoroperationen werden mit "<<constructor>>" markiert.
► Beispiel:Besprechungsraum
raumNrkapazität
reservieren()freigeben()freienRaumSuchen()
neuerBesprechungsraum (raumNr, kapazität) <<constructor>>
Prof. Uwe Aßmann, Softwaretechnologie 45
Mehr zu Konstruktoren in Java
class Teammitglied {
private String name; private String abteilung;
public Teammitglied (String n, String abt) { name = n; abteilung = abt; }
public Teammitglied (String n) { name = n; abteilung = ""; } ... }
Teammitglied m = new Teammitglied("Max Müller", "Abt. B");
► Konstruktoren werden meist überladen.
Prof. Uwe Aßmann, Softwaretechnologie 46
Default-Konstruktor
class Teammitglied { ... // ohne Konstruktor }
Teammitglied m = new Teammitglied();
► Für jede Klasse gibt es immer mindestens einen Konstruktor.
► Wenn kein benutzerdefinierter Konstruktor vorliegt, wird ein "Default-Konstruktor" bereitgestellt.
► Der Default-Konstruktor ist nicht mehr für die Klasse verfügbar, wenn irgendein benutzerdefinierter Konstruktor definiert wird !
Prof. Uwe Aßmann, Softwaretechnologie 47
Die implizit definierte Variable "This"
class Teammitglied {
private String name; private String abteilung;
public Teammitglied (String name, String abteilung) { this.name = name; this.abteilung = abteilung; } ...};
Teammitglied m = new Teammitglied("Max Müller", "Abt. B");
► Bezüge auf Attributwerte und Operationsaufrufe werden i.a. mitObjekt . Name angegeben.
► "this" bedeutet das Objekt, auf dem die Methode ausgeführt wird.
► "this" wird vom Übersetzer automatisch ergänzt, wenn die Objektangabe fehlt.
Prof. Uwe Aßmann, Softwaretechnologie 48
Beispiel: Operationen im Analysemodell
Privater Termin
beschreibgbeginndauer
ortwegzeit
genehmigen()verschieben()
Teammitgliedleitet
Teilnahme
1*
* 2..*
nameabteilung
terminBestätigen()
Besprechungsraum
raumNrkapazität
reservieren()freigeben()
freienRaumSuchen()
Ort0..1
1* für
*
Team
name
1..* Leiter
0..1
1titel
beginndaueranzahl
Teambesprechung
Termin
raumFestlegen()einladen()absagen()
verschieben()
1
Prof. Uwe Aßmann, Softwaretechnologie 49
Beispiel OOP: Ausfüllen eines Methodenrumpfs in Java (1)
class Teambesprechung {
private Teammitglied[] teilnahme; ...
private boolean abstimmen (Hour beginn, int dauer) { boolean ok = true; for (int i=0; i<teilnahme.length; i++)
ok = ok && teilnahme[i].terminBestaetigen(beginn, dauer);
return ok; }}
Teambesprechung Teammitglied
– abstimmen()
teilnahme2..*
+terminBestaetigen()*
► Operationen aus dem Analysemodell müssen in der Implementierung ausgefüllt werden
Prof. Uwe Aßmann, Softwaretechnologie 50
Beispiel Methodenrumpf (2)
class Teambesprechung {
private Teammitglied[] teilnahme; ... private boolean abstimmen (Hour beginn, int dauer) ... public Teambesprechung (String titel, Hour beginn, int dauer, Teammitglied[] teilnehmer) {
... titel, beginn, dauer lokal speichernthis.teilnahme = teilnehmer;if (! abstimmen(beginn, dauer)) System.out.println("Termin bitte verschieben!");
else ... } ...}
Teambesprechung Teammitglied
– abstimmen()
teilnahme2..*
+terminBestaetigen()*
Prof. Uwe Aßmann, Softwaretechnologie 51
Beispiel Methodenrumpf (3)
class Teammitglied { ...
private Teambesprechung[] teilnahme;
public boolean terminBestaetigen (Hour beginn,int dauer){ boolean konflikt = false; int i = 0; while (i < teilnahme.length && !konflikt) {
if (teilnahme[i].inKonflikt(beginn, dauer)) konflikt = true;else i++;
}; return !konflikt; } ...}
Teambesprechung Teammitglied
– abstimmen()
teilnahme2..*
+terminBestaetigen()*
Softwaretechnologie, © Prof. Uwe Aßmann 52
Sichtbarkeit von Merkmalen und Datenkapselung
Die Sichtbarkeit von Merkmalen gehört eigentlich zum Entwurf, in dem sie zu einem
Analysemodell hinzugefügt wird.
Prof. Uwe Aßmann, Softwaretechnologie 53
Zugriff auf Attributwerte
► Attributwerte sind „Privatangelegenheit“ eines Objekts.
► Implizite Operationen zum Lesen und Schreiben von Attributwerten■ Lesen („get-Methode“)
■ Setzen („set-Methode“)
► Beispiel:■ Attribut: beginn: Date
■ Leseoperation: getBeginn(): Date
■ Schreiboperation: setBeginn(d: Date)
► In den meisten objektorientierten Programmiersprachen (auch Java) können Attribute syntaktisch wie Variablen eines Pascal/Modula-Records angesprochen werden:
Für Objekt x : Teambesprechung :
■ Attribut: x.beginn (Typ ist Date)
■ Leseoperation: … x.beginn …
■ Schreiboperation: x.beginn = …
Prof. Uwe Aßmann, Softwaretechnologie 54
Datenkapselung und Sichtbarkeit
► Definition Für eine Operation OP einer Klasse K wird eine Sichtbarkeit definiert, z.B. privat (Regelfall) oder öffentlich.
Die Sichtbarkeit eines Attributes ist gleichbedeutend mit der Sichtbarkeit seiner impliziten Operationen.
► Private Operation OP einer Klasse K: Die Ausführung von OP für ein Objekt der Klasse K ist nur durch ein Objekt der selben Klasse K möglich.
► Öffentliche (public) Operation: Ein beliebiges Objekt darf OP ausführen.
► Geschützte (protected) Operation: Ein Objekt O darf OP genau dann ausführen, wenn die Klasse von O eine Unterklasse von K ist.
► Notation:;■ Minuszeichen (privat) – Operation – Attribut
■ Pluszeichen (öffentlich) + Operation + Attribut
■ Kreuzzeichen (geschützt) # Operation # Attribut
Prof. Uwe Aßmann, Softwaretechnologie 55
Vererbung und Sichtbarkeit
K1– a1# a2
– op1()+ op2()# op3()
op2 kann verwenden: a1, a2, op1, op3
K2
op4()
• Alle Attribute und Operationen werden als Bestandteil der Objektstruktur vererbt.
• In der Unterklasse sichtbar sind nur öffentliche und geschützte Attribute und Operationen.
op4 kann verwenden: a2, op2, op3
Sichtbarkeitssymbole:– private+ public# protected
K3
op5()
op5 kann verwenden: op2
Prof. Uwe Aßmann, Softwaretechnologie 56
Modifikatoren (Modifier) für Deklarationen in Java
C– a1: T1# a2: T2+ a3: T3+a4: T4
– op1()# op2()+ op3()+op4()
class C {
private T1 a1; protected T2 a2; public T3 a3; public static T4 a4;
private ... op1(...) {...} protected ... op2(...) {...} public ... op3(...) {...} public static ... op4(...) {...}}
► Java: Vor den Deklarationen von Attributen und Operationen oft längere Ketten von Schlüsselworten
■ Bsp.: public static void main(...)
► Bei Modifikatoren für Sichtbarkeiten: Umsetzung der UML-Sichtbarkeiten
► Bei Klassenattribute und -operationen: Schlüsselwort static
Prof. Uwe Aßmann, Softwaretechnologie 57
Datenkapselung mit Sichtbarkeiten (1) - Beispiel
ar12: Teambesprechung
titel = "12.Abteilungsrunde"beginn = 10.10.00 09:00dauer = 60
Teilnahme
leitet
diverseTeammitglied-Objekte
Ort
Besprechungsraum-Objekt
verschieben(17.10.00 09:00) 1. Alle Teammitglieder nach Konflikten mit neuem Datum fragen2. Besprechungsraum zum neuen Termin reservieren3. Alte Reservierung (Raum) freigeben4. Datum ändern
Es steht nur lokale Information zur Verfügung:
Attributwerte, assoziierte Objekte
► Private Attributen für Datenkapselung (information hiding)► Private Attribute bilden die Grundlage für die Verantwortlichkeit des
Objekts
Leitendes Teammitglied
Prof. Uwe Aßmann, Softwaretechnologie 58
Datenkapselung (2) - Beispiel im Detail
verschieben(17.10.00 09:00)
4. Datum ändern
ar12: Teambesprechung
titel = "12.Abteilungsrunde"beginn = 10.10.00 09:00dauer = 60
leitet
Ort tm1: Teammitglied
tm2: Teammitglied
tm3: Teammitglied
Teilnahme
r18: Besprechungsraum
1. Alle Teammitglieder nach Konflikten mit neuem Datum fragen
1.1 terminBestätigen(neu)
1.2 terminBestätigen(neu)
1.3 terminBestätigen(neu)
2. Besprechungsraum zum neuen Termin reservieren
2. reservieren(neu)
3. Alte Reservierung (Raum) freigeben
3. freigeben(alt)
Anmerkung: Darstellung= UML-
"Kommunikationsdiagramm"
Prof. Uwe Aßmann, Softwaretechnologie 59
Datenkapselung (3) - Weiteres BeispielBeispiel: raumFestlegen() in Klasse Teambesprechung
Teambesprechungtitel
beginndauer
raumFestlegen()einladen()absagen()
1. Wieviele Teilnehmer?2. Welcher Raum?3. Reservieren.
tb: Teambesprechung
Teilnahme
(diverseTeammitglied-Objekte)n=5
Besprechungsraum
freienRaumSuchen()R15
R15: Besprechungsraum
reservieren(tb)
Prof. Uwe Aßmann, Softwaretechnologie 60
Zuordnung von Operationen
► Zweifelsfälle:■ freienRaumSuchen():
. Operation von "Besprechungsraum" oder von "Teambesprechung"?
■ genehmigen():. Operation von "Privater Termin" oder von "Teammitglied"?
► Prinzipien:■ Möglichst intensive Ausnutzung der Datenkapselung:
. da zuordnen, wo am besten von lokaler Information Gebrauch gemacht werden kann
■ Notwendigkeit zur Objektinteraktion möglichst minimieren
■ Möglichst Gebrauch von vorhandenen Operationen machen bzw. Operationen mehrfach nutzen.
Prof. Uwe Aßmann, Softwaretechnologie 62
Schritte der strukturellen, datengetriebenen Analyse
Ziel:Von den
Anforderungenzu einemModell
der fachlichenAufgabe
Variante:DatenorientierteVorgehensweise
Klassen nach Profilenklassifizieren
Attribute identifizieren
Assoziationen identifizieren
Merkmale identifizieren
Klassen identifizieren
Operationen identifizieren
Klassenbeziehungen identifizieren
Komposite Klassen identifizieren
Vererbungen identifizieren
Ereignisse identifizieren
strukturelle OOA
Ausnahmen identifizieren
Ströme identifizieren
Konnektoren identifizieren
Prof. Uwe Aßmann, Softwaretechnologie 63
Assoziation
► Definition: Eine (binäre) Assoziation AS zwischen zwei Klassen K1 und K2 beschreibt, daß die Instanzen der beiden Klassen in einer fachlich wesentlichen Beziehung zueinander stehen.
► Semantik: Für jedes Objekt O1 der Klasse K1 gibt es eine individuelle, veränderbare und endliche Menge AS von Objekten der Klasse K2, mit dem die Assoziation AS besteht. Analoges gilt für Objekte von K2 .
K1 K2AS
► Notation:
Teambesprechung TeammitgliedTeilnahme
► Beispiel:
Prof. Uwe Aßmann, Softwaretechnologie 64
Team-besprechung
Besprechungs-raum
Veranstal-tungsort
► Ein Name für ein Assoziationsende bezeichnet die Assoziation (evtl. zusätzlich) aus der Sicht einer der teilnehmenden Klassen.
■ Früher verwendeter Begriff für Assoziationsende (UML 1.1): Rollenname
► Für Assoziationsnamen kann die Leserichtung angegeben werden. Es ist möglich, mehrere Namen für eine Assoziation anzugeben.
Leserichtung und Assoziationsenden
Team-besprechung
Besprechungs-raum
findet statt in
ist Ort von
Prof. Uwe Aßmann, Softwaretechnologie 65
Beispiel: Assoziationen
Teambesprechung
Termin
Privater Termin Teammitglied
Besprechungsraum
Reservierung
Team
leitet Leiter
Teilnahme
VeranstOrt
Mitglied
für
Prof. Uwe Aßmann, Softwaretechnologie 66
Semantik (bidirektionaler) Assoziationen► Eine Assoziation (auch Relation) ist ähnlich zu einer Tabelle:
Teilnahme-Assoziation
Teambesprechung Teammitglied
ar12 tm1
ar12 tm3
pbX1 tm1
pbX1 tm2► Von einem beteiligten Objekt aus betrachtet, gibt eine Assoziation
eine Menge von assoziierten Objekten an:
Objekt ar12:Teambesprechung
Teammitglied-Objekte in Teilnahme-Assoziation: {tm1, tm3}
Objekt tm1:Teammitglied
Teambesprechung-Objekte in Teilnahme-Assoziation: {ar12,pbX1}
► Beide Sichtweisen sind gleichberechtigt und äquivalent.
Prof. Uwe Aßmann, Softwaretechnologie 67
► Definition Die Multiplizität (Kardinalität) einer Klasse K1 in einer Assoziation AS mit einer Klasse K2 begrenzt die Anzahl der Objekte der Klasse K2, mit denen ein Objekt von K1 in der Assoziation AS stehen darf.
Multiplizität bei Assoziationen
K1 K2AS
Mult► Notation:
Teambesprechung Teammitglied* 2..*nimmt-teil
► Beispiel:
Multiplizität Mult: n (genau n Objekte der Klasse K2) n..m (n bis m Objekte der Klasse K2)
n1, n2 (n1 oder n2 Objekte der Klasse K2)
Zulässig für n und m :
Zahlenwerte (auch 0)
* (d.h. beliebiger Wert, einschließlich 0)
Prof. Uwe Aßmann, Softwaretechnologie 68
Multiplizitäten bestimmen durch "Vorlesen"
► Von links nach rechts:■ "Jede Teambesprechung findet statt in (wie vielen?)
Besprechungsräumen."
■ "Jede Teambesprechung findet statt in genau 1 Besprechungsraum."
Team-besprechung
Besprechungs-raum
findet statt in
ist Ort von
► Von rechts nach links:■ "Jeder Besprechungsraum ist Ort von (wie vielen?)
Teambesprechungen."
■ Jeder Besprechungsraum ist Ort von 0 oder mehreren Teambesprechungen."
1
*
Prof. Uwe Aßmann, Softwaretechnologie 69
Beispiel: Multiplizitäten
Teambesprechung
Termin
Privater Termin Teammitglied
Besprechungsraum
Reservierung
Team
leitet
Teilnahme
1**
1
für
1..* Leiter
0..1
1
*
VeranstOrt
1
Mitglied
* 2..* 1
Prof. Uwe Aßmann, Softwaretechnologie 70
Einseitige einstellige Assoziationen
Child Mother0..1 class Child {
... private Mother mom; ...}
tom:Child jane:Mother
tom:Child
Child tom = new Child();tom.mom = jane;...tom.mom = null;
mom
mom
mom
Prof. Uwe Aßmann, Softwaretechnologie 71
Einseitige mehrstellige Assoziationen
Mother Child0..* class Mother {
... private Child[] kid; ...}
jane:Mother tom:Child Mother jane = new Mother();jane.kid[0] = tom;...jane.kid[0] = sally;
kid
kid
jane:Motherkid
jane:Mother tom:Childkid
sally:Childkid
► Eine Mutter kann aber viele Kinder haben■ Annahme: Die Obergrenze der Anzahl der Child-Objekte spätestens bei
erstmaliger Eintragung von Assoziationsinstanzen bekannt und relativ klein. (Allgemeinere Realisierungen siehe später.)
Prof. Uwe Aßmann, Softwaretechnologie 72
Optionale und notwendige Assoziationen
A Ba
0..1 class A { ... private B a; ...}
A Ba
1 class A { ... private B a; ... public A (B a, ...) { this.a = a; ... }}
Analog z.B. für Multiplizitäten 0..* und 1..*
Prof. Uwe Aßmann, Softwaretechnologie 73
Zweiseitige (Bidirektionale) Assoziationen
Child Mother0..1
class Child { ... private Mother mom; ...}class Mother { ... private Child[] kid; ...}
momkid
0..n
jane:Mother tom:Childkid
sally:Childkid
mom
mom
► Bidirektionale Assoziationen bilden zur Laufzeit Graphen (Objektnetze)
■ Vorsicht! Achte beim Aufbau eines Objektnetzes auf Konsistenz der Referenzen.
Mother jane = new Mother();jane.kid[0] = tom;tom.mom = jane;...jane.kid[0] = sally;
Prof. Uwe Aßmann, Softwaretechnologie 74
Bidirektionale Assoziationen: Beispiel
Teambesprechung
...
Teammitgliedteilnahme* 2..* –name: String
–abteilung: String
...class Teambesprechung {
private Teammitglied[] teilnahme; ... public Teambesprechung (Teammitglied[] teilnehmer) { this.teilnahme = teilnehmer; }}
class Teammitglied { private String name; private String abteilung; private Teambesprechung[] teilnahme; ...}
Damit wird eigentlich die Multiplizität "0..*" realisiert! (Verallgemeinerung)
Prof. Uwe Aßmann, Softwaretechnologie 75
Bidirektionalität von Assoziationen
► Realisierung nur in einer Richtung:■ Gibt nicht die volle Semantik des Modells wieder
■ Abhängig von Benutzung (Navigation) der Assoziation
► Realisierung durch zwei gerichtete Assoziationen■ Redundanz:
. zusätzlicher Speicheraufwand
. Gefahr von Inkonsistenzen
■ Aber: schnelle Navigation
► Realisierung durch Assoziationsklasse:■ Geeignete Datenstrukturen erforderlich
. "Beidseitige" Abfragemöglichkeit
. Sicherstellung der Mengeneigenschaft
► Genaue Entscheidung erst im Entwurf !
Prof. Uwe Aßmann, Softwaretechnologie 77
Schritte der strukturellen, datengetriebenen Analyse
Ziel:Von den
Anforderungenzu einem
Modellder fachlichen
Aufgabe
Variante:DatenorientierteVorgehensweise
Klassen nach Profilenklassifizieren
Attribute identifizieren
Assoziationen identifizieren
Merkmale identifizieren
Klassen identifizieren
Operationen identifizieren
Klassenbeziehungen identifizieren
Komposite Klassen identifizieren
Vererbungen identifizieren
Ereignisse identifizieren
strukturelle OOA
Ausnahmen identifizieren
Ströme identifizieren
Konnektoren identifizieren
Prof. Uwe Aßmann, Softwaretechnologie 78
Aggregation
► Definition: Wenn eine Assoziation den Namen „hat-ein“ oder "besteht-aus" tragen könnte, handelt es sich um eine Aggregation (Ganzes/Teile-Relation).
■ Eine Aggregation besteht zwischen einem Aggregat, dem Ganzen, und seinen Teilen.
■ Die auftretenden Aggregationen bilden auf den Objekten immer eine transitive, antisymmetrische Relation (einen gerichteten zyklenfreien Graphen, dag).
K1 K2
► Notation:
TeammitgliedTeam
► Beispiel:
Prof. Uwe Aßmann, Softwaretechnologie 79
Beispiel: Assoziationen und Aggregationen
Teambesprechung
Termin
Privater Termin Teammitglied
Besprechungsraum
Team
leitet
Teilnahme
1*
für
1..* Leiter
0..1
1
*
1
* 2..* 1
*
1 VeranstOrt
Reservierung
Prof. Uwe Aßmann, Softwaretechnologie 80
Komposition
► Definition: Ein Spezialfall der Aggregation ist die Komposition zwischen einem Komposit und seinen Komponenten.
■ Ein Objekt kann Komponente höchstens eines Komposits sein (owns-Relation).
■ Das Komposit hat die alleinige Verantwortung für Erzeugung und Löschung seiner Komponenten (gleiche Lebenszeit)
■ Wenn ein Komposit gelöscht wird, werden alle seine Komponenten gelöscht. Die Komponente ist abhängig vom Komposit (dependent).
► Komposite Objekte heissen oft Geschäftsobjekte (business objects), weil sie oft Objekten des Domädenmodells entsprechen
► Komposition ist wichtig im Domänenmodell und Datenhaltung!
► Notation: Aggregat
TeilAggregation
Komposit
KomponenteKomposition
Prof. Uwe Aßmann, Softwaretechnologie 81
Komposite Objekte
► Viele Daten, die in Anwendungen gehandhabt werden, sind komposite Objekte
■ Produktionsplanungssysteme verwalten Produkte. Die Teile eines Produkts werden in Stücklisten (eigentlich Stückbäume) verwaltet
■ Geschäftsprozesssoftware verwaltet Geschäftsvorgänge (Bestellungen, Rechnungen, Löhne, Mitarbeiter...), die ebenfalls komposite Objekte darstellen
► Typischerweise werden Materialien mit kompositen Objekten darstellt■ Materialien (Entities) gehören zur Datenhaltungsschicht■ Typischerweise besteht die Datenhaltungsschicht meist aus Materialien,
d.h. kompositen Objekten
Prof. Uwe Aßmann, Softwaretechnologie 82
Beispiel Komposite Objekte
► Produktionsplanungssysteme (PPS) verwalten Produkte. Die Teile eines Produkts werden in Stücklisten (eigentlich Stückbäume) verwaltet
■ Stückliste eines Phaeton (alle Teile sind lebenslang numeriert, um verfolgbar zu sein
p204:Phaeton
m204:10-Zylinder-Dieselmotor
c22:Chassis
zk29:Zylinderkopf k3392:Kolbenj299:Jetronic
l129:Lenkrad
Prof. Uwe Aßmann, Softwaretechnologie 83
Realisierung von Aggregation und Komposition
► Aggregationen können genau analog zu Assoziationen abgebildet werden !
► Komposition wird am einfachsten in gleicher Weise abgebildet.
class A { ... private B[] a; ...}
A Ba
0..*
Prof. Uwe Aßmann, Softwaretechnologie 84
► part-of: Teilebeziehung [Maciaszek]■ exclusively-owns: das Teil gehört exkusiv dem Ganzen und kann die
Zugehörigkeit nicht ändern■ owns: Zu einer Zeit hat das Teil genau einen Eigner. (alias-freie
Ganz/Teile-Beziehung). composed-of (in UML): das Teil hat die gleiche Lebenszeit wie das Ganze und
kann nicht alleine existieren
■ has-a: einfache Teilebeziehung. Das Teil kann Teil von mehreren Ganzen sein (Aliase möglich)
■ member-of: Wie has-a, aber Gleichheit mit Geschwistern gefordert
► Die Teilebeziehung ist mindestens azyklisch. Eigentumsbeziehungen (exclusively-owns, owns) sind baumförmig
► Welche Beziehung herrscht zwischen den Teilen des Phaeton?
Ganz/Teile-Beziehung (Whole-Part Relationships)
Prof. Uwe Aßmann, Softwaretechnologie 8585
Hierarchische Systemzerlegungmit owns-a
Car
Spark Plug
DynamoBody Work LightsWheelsEngine
Cylinder
PistonInjection Nozzle Front LightsRear Lights
<<owns>>
<<owns>>
► Bei Eigentumsbeziehungen gibt es kein Teilen von Unterteilen (kein sharing, kein aliasing)
Prof. Uwe Aßmann, Softwaretechnologie 8686
Geschichtete Systemzerlegung mit azyklischem part-of
Society
Students
SportClubFamily ChessClubGovernmentUniversity
Professors
FrankUwe SaraMary
Das Teilen von Teilen erzeugt gerichtete azyklische Graphen, die
schichtbar sind.
Prof. Uwe Aßmann, Softwaretechnologie 88
Schritte der strukturellen, datengetriebenen Analyse
Ziel:Von den
Anforderungenzu einemModell
der fachlichenAufgabe
Variante:DatenorientierteVorgehensweise
Klassen nach Profilenklassifizieren
Attribute identifizieren
Assoziationen identifizieren
Merkmale identifizieren
Klassen identifizieren
Operationen identifizieren
Klassenbeziehungen identifizieren
Komposite Klassen identifizieren
Vererbungen identifizieren
Ereignisse identifizieren
strukturelle OOA
Ausnahmen identifizieren
Ströme identifizieren
Konnektoren identifizieren
Prof. Uwe Aßmann, Softwaretechnologie 8989
Mehrfachvererbung (Multiple Inheritance)
ProfessorStudent
Person
Student
drinkBeer()
Professor
drinkBeer()
Von wo wird drinkBeer() geerbt?
MRO
► Mehrfachvererbung■ Eine Klasse kann mehrere
Oberklassen besitzen■ Dadurch wird die Vererbungsrelation
ein gerichteter azyklischer Graph (dag)
► Eine Klasse kann ein Merkmal mehrmals erben
■ Daher muss die Merkmalssuche einer Strategie gehorchen, der Merkmalsauflösungsordnung (method-resolution-order, MRO), einer Navigationsstrategie, die aufwärts nach Merkmalen sucht
■ Oft links-nach-rechts-aufwärts-Suche
Prof. Uwe Aßmann, Softwaretechnologie 90
Realisierung von Mehrfachvererbung
► In UML ist es prinzipiell möglich, daß eine Klasse von mehreren Klassen erbt:
Termin
persönl.Termin
Team-veranstaltung
Hausveranstaltung Reise
Team-besprechung
Vortrag
► Java unterstützt Mehrfachvererbung nicht !class Teambesprechung extends Teamveranstaltung, Hausveranstaltung
Prof. Uwe Aßmann, Softwaretechnologie 91
Mehrfachvererbung als Venn-Diagramm
Professor
Schill:Professor Aßmann:
ProfessorandStudent
Härtig:Professor
Student
Schneider:Student
Müller:Student
Weckermann:Student
Person
► Mehrfach-Vererbung ergibt ein Venn-Diagramm mit Überschneidungen
Prof. Uwe Aßmann, Softwaretechnologie 92
Ein grosser Mehrfachvererbungsverband
eat()work()sleep()getName()
Person
giveLecture()
Professor
visitLecture()drinkBeer()
Student
salary
Employee
ProfessorEmeritus
visitUniversity()drinkBeer()
Alumnus
visitNullCourse()
Beginner LonglifeStudent
► Eine Mehrfachvererbungs-struktur bildet
■ eine Halbordnung (gerichteten azyklischen Graphen, directed acyclic graph, dag)
■ einen Halbverband (falls mit gemeinsamer Oberklasse)
■ Einen Verband (falls mit gemeinsamer Ober- und Unterklasse)
Prof. Uwe Aßmann, Softwaretechnologie 93
Ersatz von Vererbung durch Komposition
Termin
persönl.Termin
Team-veranstaltung
Hausveranstaltung Reise
Team-Aspekt Orts-Aspekt
1 1
class Termin { private Teamaspekt ta; private Ortsaspekt oa; ...}
abstract class Teamaspekt {}
class Teamveranstaltung extends Teamaspekt { ... }
Prof. Uwe Aßmann, Softwaretechnologie 94
Elimination von nicht-konformer Vererbung
► In Analysemodellen hat die Vererbungsrelation oft mehrere Bedeutungen
■ structured-like■ behaves-like■ sometimes-behaves-like
► Während das Analysemodell diese Feinheiten nicht unterscheiden muss, sollte das Entwurfsmodell dies tun
■ Ansonsten kann es zu Laufzeitfehlern kommen
Prof. Uwe Aßmann, Softwaretechnologie 95
Konformität (behaves-like)
► Liskov'sches Substitutionsprinzip (Liskov substitution principle): Eine Unterklasse U heisst verhaltenskonform wenn jedes Objekt aus U jedes Objekt aus O ersetzen kann, ohne eine Anwendungsklasse, die O verwendet, in einen fehlerhaften Zustand zu versetzen
► Konforme Vererbung stellt sicher,■ dass Ableiten von Unterklassen niemals Fehler in eine Anwendung
einbringt (Robustheit)■ dass bei der Unterklassenbildung die Semantik von Oberklassen erhalten
bleibt
Prof. Uwe Aßmann, Softwaretechnologie 96
Extravaganz (restrictedly-behaves-like)
► Eine Unterklasse U heisst extravagant (eingeschränkt) zu einer Oberklasse O, wenn nicht alle Objekte aus U alle Objekte aus O ersetzen können, ohne dass in einer Anwendung, die O verwendet, Fehler auftreten
► Aka: Eingeschränkte Vererbung (restriction inheritance)
ProfessorEmeritus
giveLecture()
Professor
Frage: Was passiert, wenn einemeritierter Professor keine Vorlesungenmehr anbietet?
Antwort: Eine Anwendung der Klasse Professor,die dies erwartet, endet in einem fehlerhaftenZustand.
Erklärung: ProfessorEmeritus ist eine extravaganteUnterklasse von Professor
Prof. Uwe Aßmann, Softwaretechnologie 97
Konformitätsproblem von Analysemodellen
► Leider sind nicht alle Vererbungshierarchien konform, insbesondere nicht in Analysemodellen
■ Sowohl in UML als auch in Java drückt die Vererbungsrelation nicht unbedingt Konformität aus
■ Man muss jede einzelne Vererbung daraufhin untersuchen :-(■ Und im Entwurfsmodell Konformität herstellen
Prof. Uwe Aßmann, Softwaretechnologie 98
ProfManagement
Beispiel: Bibliotheken und Anwendungen
► Bibliotheken sind vorgefertigte Pakete (Vererbungshierarchien) von einem anderen Hersteller
► Anwendungen leiten speziellere Unterklassen davon ab
► Viele Anwendungen können eine Bibliothek benutzen (Wiederverwendung)
► Beispiele:■ Java Development Kit■ C++ Standard Template
Library (STL)
eat()work()sleep()getName()
Person
giveLecture()
Professor
visitLecture()drinkBeer()
Student
salary
Employee
visitUniversity()drinkBeer()
Alumnus
visitNullCourse()
Beginner
PersonManagementStudentManagement
Prof. Uwe Aßmann, Softwaretechnologie 99
Beispiel: Konforme Vererbung von Bibliotheksklassen
► Verwendet man beim Entwurf eine zugekaufte Klassenbibliothek, stelle man sicher, dass man Anwendungsklassen nur mit konformer Vererbung ableitet
► Ansonsten treten Laufzeitfehler in Klassen der Klassenbibliothek auf■ Deren Fehlermeldungen sind völlig unverständlich, da sie nicht die
eigentlichen Fehlerursache vermitteln können
Prof. Uwe Aßmann, Softwaretechnologie 100
Ähnlichkeitsrelationen (Similarity Relationships)
► is-a: zeigt Ähnlichkeit an■ is-a ist azyklische Relation, bei einfacher Vererbung baumförmig
► is-structured-like: zeigt ähnliche Struktur an (structurelle Ähnlichkeit oder Gleichheit)
► behaves-like: Verhaltensähnlichkeit■ always-behaves-like: Konformanz (conformance), Ersetzbarkeit
(substitutability)■ sometimes-behaves-like: gelegentlich verhaltensgleich■ restrictedly-behaves-like: im allgemeinen konformant, aber nicht in
speziellen Situationen (extravagance, restriction inheritance)■ Achtung: is-a, is-structured-like, behaves-like werden alle Vererbung
genannt
► instance-of: A ist aus einer Schablone B gemacht worden
Prof. Uwe Aßmann, Softwaretechnologie 101
class Teambesprechung extends Termin { private Teammitglied[] teilnahme; ... public Teambesprechung (String t, Hour b, Dauer d, Teammitglied[] tn) { super(t, b, d); teilnahme = tn; ... };};
Kompensation von Überschreiben: Aufruf von Oberklassen-Konstruktoren durch super-Aufruf
class Termin { protected String titel; protected Hour beginn; protected int dauer; ... public Termin (String t, Hour b, Dauer d) { titel = t; beginn = b; dauer = d; };};
Spezielle Syntaxfür Konstruktoren:"super" immer alserste Anweisung!
► "super" ermöglicht Aufruf von Methoden, die in der Oberklasse definiert und überschattet sind.
► Ein Super-Konstruktoraufruf ruft den Konstruktor der Oberklasse auf
Prof. Uwe Aßmann, Softwaretechnologie 102
"super" in überschriebenen Operationen
Termin
verschieben(neu: Date):Boolean
...
Teambesprechung
verschieben(neu: Date):Boolean
class Termin {
boolean verschieben (neu: Date) { ...z.B. Aufzeichnung in Log-datei }...}
class Teambesprechung extends Termin
boolean verschieben (neu: Date) { ... super.verschieben(neu) }...}
"super"ermöglicht auch den Zugriff aufüberschriebene Versionen vonOperationen, wie sie in einer
Oberklasse definiert sind.
Andere Syntax als bei Konstruktoren!
Prof. Uwe Aßmann, Softwaretechnologie 103
Die Klasse "Object"
► java.lang.Object: allgemeine Eigenschaften aller Objekte.■ Jede Klasse ist Unterklasse von Object (“extends Object”).■ Diese Vererbung ist implizit (d.h. man kann “extends Object” weglassen).
► Jede Klasse kann die Standard-Operationen überdefinieren:■ equals: Objektgleichheit (Standard: Referenzgleichheit)■ hashCode: Zahlcodierung■ toString: Textdarstellung, z.B. für println()
class Object {
protected Object clone (); // kopiert das Objektpublic boolean equals (Object obj); // prüft auf Gleichheit zweier Objektepublic int hashCode(); // produce a unique identifierpublic String toString(); // produce string representationprotected void finalize(); // lets GC runClass getClass(); // gets prototype object
}
Prof. Uwe Aßmann, Softwaretechnologie 104
drinkBeer() { ... select Erdinger; enjoy();}
eat()work()drinkBeer()getName()
Person
giveLecture()drinkBeer()
Professor
visitLecture()drinkBeer()
Student
salary
Employee
ProfessorEmeritus
drinkBeer()
visitUniversity()drinkBeer()
Alumnus
drinkBeer() { ... select Leffe; enjoy();}
drinkBeer() {}
drinkBeer() { ... select Radeberger; enjoy();}
Steuererklärungsum: intaddress:Addressship()
Einkommens-steuererklärungdeadline:DatecomputePayBack()
Vermögens-steuererklärung
Erbschafts-steuererklärung
Umsatzsteuer-Erklärung
taxRatio:int
Lohnsteuer-Jahresausgleich
ReineEinkommens-steuererklärung
Vorsteuer-erklärung
Umsatzsteuer-Nachzahlung
Object
Object clone()String toString() ...
Prof. Uwe Aßmann, Softwaretechnologie 105
Beispiel: Klassendiagramm
Teambesprechung
Termin
titelbeginndauer
verschieben() {abstract}
raumFestlegen()einladen()absagen()
verschieben()
Privater Termin
ortwegzeit
verschieben()
Terminverwaltung
1
*
Teammitgliedleitet
Teilnahme
1*
* 2..*
nameabteilung
terminBestätigen()
BesprechungsraumraumNr
kapazitätreservieren()freigeben()
freienRaumSuchen()
VeranstOrt0..1*
1* für
{abstract}
anzahl
Team
name
1..* Leiter
0..1
1
1
Prof. Uwe Aßmann, Softwaretechnologie 106
Wdh. Beispiel Java-Programm
► Ein Programm auf höherer Ebene muss zunächst ein Objektnetz verdrahten, bevor die Objekte kommunizieren können (Aufbauphase). Dies kann das Hauptprogramm sein
class Terminv { public static void main (String argv[]) { // Aufbauphase Besprechungsraum r1 = new Besprechungsraum("R1", 10); Besprechungsraum r2 = new Besprechungsraum("R2", 20); Teammitglied mm = new Teammitglied("M. Mueller", "Abt. A"); Teammitglied es = new Teammitglied("E. Schmidt", "Abt. B"); Teammitglied fm = new Teammitglied("F. Maier", "Abt. B"); Teammitglied hb = new Teammitglied("H. Bauer", "Abt. A"); Hour t1s5 = new Hour(1,5); // Tag 1, Stunde 5 Teammitglied[] tlB1 = {mm, es}; Teambesprechung tb1 = new Teambesprechung("Bespr. 1", t1s5, 2, tlB1); // jetzt erst Arbeitsphase tb1.raumFestlegen(); }}
Prof. Uwe Aßmann, Softwaretechnologie 108
Schritte der strukturellen, datengetriebenen Analyse
Ziel:Von den
Anforderungenzu einemModell
der fachlichenAufgabe
Variante:DatenorientierteVorgehensweise
Klassen nach Profilenklassifizieren
Attribute identifizieren
Assoziationen identifizieren
Merkmale identifizieren
Klassen identifizieren
Operationen identifizieren
Klassenbeziehungen identifizieren
Komposite Klassen identifizieren
Vererbungen identifizieren
Ereignisse identifizieren
strukturelle OOA
Ausnahmen identifizieren
Ströme identifizieren
Konnektoren identifizieren
Prof. Uwe Aßmann, Softwaretechnologie 109
Ströme
► Ein Strom-Port ist ein Ein- oder Ausgabekanal eines Objekts, über den Daten ein und aus fliessen
► Strom-Ports werden durch Strom-Konnektoren (pipes) zu Strömen verbunden
► Es entstehen Pipe-und-Filter-Architekturen (Datenflussarchitekturen)► Das Stromkonzept muss zum Entwurf hin aufgelöst werden
■ Iteratoren oder Stream-Klassen
Parser
ContextAnalyse
Refakturierer
Prof. Uwe Aßmann, Softwaretechnologie 110
Ausnahmebehandlung in Java
► Ausnahme (Exception):■ Objekt einer Unterklasse von java.lang.Exception
■ Vordefiniert oder und selbstdefiniert
► Ausnahme auslösen (to throw an exception)■ Erzeugen eines Exception-Objekts
■ Löst Suche nach Behandlung aus
► Ausnahme abfangen und behandeln (to catch and handle an exception)
■ Aktionen zur weiteren Fortsetzung des Programms bestimmen
► Ausnahme deklarieren■ Angabe, daß eine Methode außer dem normalen Ergebnis auch eine
Ausnahme auslösen kann (Java: throws)
■ Beispiel aus java.io.InputStream:
public int read() throws IOException;
Prof. Uwe Aßmann, Softwaretechnologie 111
Java-Syntax für Ausnahmebehandlung
class TotalDiv {
public static int tDiv (int x, int y) {
return (x / y);
}
}
try {
}
catch (ArithmeticException e) {
return 0;
}
Prof. Uwe Aßmann, Softwaretechnologie 112
Dynamische Suche nach Ausnahmebehandlung
main
m1
m2
/
Suchreihenfolge
• Bei mehreren Abfangklauseln an der gleichen Stelle der Hierarchie gilt die zuerst definierte Klausel:
try { }catch (xException e)catch (yException e) Suchreihenfolge
► Suche nach Abfangklausel (catch) entlang der (dynamischen)Aufrufhierarchie:
Prof. Uwe Aßmann, Softwaretechnologie 113
Definition neuer Ausnahmen
class TestException extends Exception { public TestException () { super(); }}class SpecialAdd { public static int sAdd (int x, int y)
throws TestException { if (y == 0) throw new TestException(); else return x + y; }}
Benutzung von vordefinierten Ausnahmen möglich und empfehlenswert !
Prof. Uwe Aßmann, Softwaretechnologie 114
Deklaration und Propagation von Ausnahmen► Wer eine Methode aufruft, die eine Ausnahme auslösen kann, muß
■ entweder die Ausnahme abfangen
■ oder die Ausnahme weitergeben (propagieren)
► Propagation in Java: Deklarationspflicht mittels throws (außer bei Error und RunTimeException)
public static void main (String[] argv){ System.out.println(SpecialAdd.sAdd(3,0));}
Java-Compiler: Exception TestException must be caught, or it must be declared in the throws clause of this method.
Prof. Uwe Aßmann, Softwaretechnologie 115
Bruch von Verträgen und Ausnahmen
► Man kann Verträge auch mit Ausnahmetests prüfen:class ContractViolation {..};
class ParameterContractViolation extends ContractViolation {..};
class FigureEditor{
draw (Figure figure) throws ContractViolation {
if (figure == null) raise ParameterContractViolation;
}}
►im Aufrufer:try {
editor.draw(fig);
} catch (ParameterContractViolation) {
fig = new Figure();
editor.draw(fig);
}
►Das hat den Vorteil, dass man kontrolliert auf Vertragsbrüche reagieren kann.
Prof. Uwe Aßmann, Softwaretechnologie 116
Regeln zum Umgang mit Ausnahmen
► Gesetz des pragmatischen Programmierers 58: Bauen Sie die Dokumentation ein
■ Ausnahmebehandlung niemals zur Behandlung normaler (d.h. häufig auftretender) Programmsituationen einsetzen
■ Ausnahmen sind Ausnahmen, regulärer Code behandelt die regulären Fälle!
► Gesetz 34: Verwenden Sie Aushanmen nur ausnahmsweise■ Nur die richtige Dosierung des Einsatzes von Ausnahmen ist gut lesbar
► Gesetz 35: Führen Sie zu Ende, was Sie begonnen haben■ Auf keinen Fall Ausnahmen “abwürgen”, z.B. durch triviale
Ausnahmebehandlung■ Ausnahmen zu propagieren ist keine Schande, sondern erhöht die
Flexibilität des entwickelten Codes.
► Gesetz 33 Verhindern Sie das Unmögliche mit Zusicherungen■ Vertragsüberprüfungen, generieren Ausnahmen
Prof. Uwe Aßmann, Softwaretechnologie 117
Wiederholung: Dynamische Suchalgorithmen in der JVM
► Merkmalssuchalgorithmus■ Die JVM sucht dynamisch nach Methoden und Attributen entlang der
Vererbungshierarchie. Diese ist im .class-Datei abgespeichert und wird darin abgesucht
■ Verwendung für Polymorphie und Reflektion
► Ausnahmenbehandlersuche■ Die JVM sucht dynamisch den Aufrufkeller nach oben ab, ob zur
ausgelösten Ausnahme ein Behandler definiert
Prof. Uwe Aßmann, Softwaretechnologie 118
Ausblick: Unterschied Analyse- vs. Entwurfsmodell
Analyse-Modell Entwurfs-ModellMehr Struktur & mehr Details
Notation: UML
Objekte: Fachgegenstände
Klassen: Fachbegriffe
Operationen: ohne Typen
Assoziationen: partiell
Vererbung: Begriffsstruktur
Annahme perfekterTechnologie
Funktionale Essenz
Völlig projektspezifisch
Grobe Strukturskizze
Notation: UML
Objekte: Softwareeinheiten
Klassen: Schemata
Operationen: voll typisiert
Unidirektionale Assoziationen mit voller Multiplizität
Vererbung: Programmableitung
Erfüllung konkreterRahmenbedingungen
Gesamtstruktur des Systems
Ähnlichkeiten zwischenverwandten Projekten
Genaue Strukturdefinition