Objektorientierte Analyse -  · Die Schritte der datengetriebenen Analyse gelten für alle Arten...

119
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

Transcript of Objektorientierte Analyse -  · Die Schritte der datengetriebenen Analyse gelten für alle Arten...

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

Softwaretechnologie II, © Prof. Uwe Aßmann 13

Klassen-Profile

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

Softwaretechnologie II, © Prof. Uwe Aßmann 24

Zeilenhierarchien

Row-ordered hierarchies

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

Softwaretechnologie, © Prof. Uwe Aßmann 32

Analyse von Merkmalen

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.

Softwaretechnologie, © Prof. Uwe Aßmann 61

Analyse von Klassenbeziehungen

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 !

Softwaretechnologie, © Prof. Uwe Aßmann 76

Komposite Objekte mit Aggregation

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.

Softwaretechnologie, © Prof. Uwe Aßmann 87

Vererbungsbeziehungen zwischen Klassen

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(); }}

Softwaretechnologie, © Prof. Uwe Aßmann 107

Ausnahmen (Exceptions)

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

Prof. Uwe Aßmann, Softwaretechnologie 119

The End

► Die deutschen Folien sind eine überarbeitete Version der Vorlesungsfolien zur Vorlesung Softwaretechnologie von © Prof. H. Hussmann, 2002. used by permission.