Anmerkung: Typischerweise „befruchten“ sich Entwick...

44
144 OOAD Prof. Dr. Stephan Kleuker Beispiel: Initialisierung Anmerkung: Typischerweise „befruchten“ sich Entwicklung von Klassendiagrammen und Sequenzdiagrammmen (Optimierung in einem iterativen Prozess)

Transcript of Anmerkung: Typischerweise „befruchten“ sich Entwick...

Page 1: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

144OOAD Prof. Dr. Stephan Kleuker

Beispiel: Initialisierung

• Anmerkung: Typischerweise „befruchten“ sich Entwick lung von Klassendiagrammen und Sequenzdiagrammmen(Optimierung in einem iterativen Prozess)

Page 2: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

145OOAD Prof. Dr. Stephan Kleuker

Beispiel: Anstoß der Funktionalität

• häufig werden Teilsysteme spezifiziert, deren Nutzu ng von außen angestoßen wird

• dann im Sequenzdiagramm „außen“ als „Extern“ modell ieren

Page 3: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

146OOAD Prof. Dr. Stephan Kleuker

Beispiel: Fertigstellungsgrad berechnen

Page 4: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

147OOAD Prof. Dr. Stephan Kleuker

Beispiel: Prüfung Projektaufwand aktualisierbar (1/ 2)

Page 5: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

148OOAD Prof. Dr. Stephan Kleuker

Beispiel: Prüfung Projektaufwand aktualisierbar (2/ 2)

Page 6: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

149OOAD Prof. Dr. Stephan Kleuker

Beispiel: Projektaufgabenaufwand aktualisierbar?

Page 7: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

150OOAD

Sequenzdiagramm und Kommunikationsdiagramm

• gleiches Ausdrucksvermögen wie einfache Sequenzdiagramme

• Zusammenspiel der Objekte wird deutlicher• interne Berechnung 2.1, 2.2 (ggfls. 2.1.1, 2.1.1.1)

Prof. Dr. Stephan Kleuker

Page 8: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

151OOAD Prof. Dr. Stephan Kleuker

GUI-Modellierung

• fachlich hängt Oberfläche (GUI, Graphical User Interface) eng mit unterliegendem Geschäftsklassenmodell (bisher behandelt) zusammen

• möglicher Ansatz: „Mache alle Modellanteile an der Oberfläche sichtbar, die ein Nutzer ändern oder für dessen Inhalte er sich interessieren kann.“

• Variante: mache ersten GUI-Prototyp und halte bei Ein- und Ausgaben fest, welche Modellinformationen sichtbar sein sollen

• GUI-Prototyp gut mit Kunden diskutierbar• Hinweis: Thema Softwareergonomie

5.5

Page 9: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

152OOAD Prof. Dr. Stephan Kleuker

Erweiterung mit Boundary-Klassen

Page 10: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

153OOAD Prof. Dr. Stephan Kleuker

Sequenzdiagramm mit Nutzungsdialog

Page 11: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

154OOAD Prof. Dr. Stephan Kleuker

Anforderungsverfolgung

Typische Fragen:• Werden alle Anforderungen umgesetzt?• Wo werden Anforderungen umgesetzt?• Gibt es Spezifikationsanteile, die nicht aus

Anforderungen abgeleitet sind?• Woher kommt eine Klasse, eine Methode, ein

Parameter?• Was passiert, wenn ich eine Anforderung oder eine

Klasse ändere?

• Generell werden die Fragen wesentlich komplexer zu beantworten, wenn Software später umgebaut oder erweitert wird

Page 12: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

155OOAD Prof. Dr. Stephan Kleuker

Anforderungsverfolgung - Beispielzusammenhänge

Page 13: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

156OOAD Prof. Dr. Stephan Kleuker

6. Vom Klassendiagramm zum Programm

6.1 CASE-Werkzeuge6.2 Übersetzung einzelner Klassen6.3 Übersetzung von Assoziationen6.4 Spezielle Arten der Objektzugehörigkeit6.5 Aufbau einer Software-Architektur6.6 Weitere Schritte zum lauffähigen Programm

Page 14: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

157OOAD Prof. Dr. Stephan Kleuker

Analyse des Ist-Standes

• bekannter Weg: Kundenwünsche, Anforderungsformulierung, Analyse-Modell

• Analysemodell kann realisiert werden, aber:– Klassen kaum für Wiederverwendung geeignet– Programme meist nur aufwändig erweiterbar– viele unterschiedliche Lösungen zu gleichartigen

Problemen• deshalb: fortgeschrittene Designtechniken studieren• aber: um fortgeschrittenes Design zu verstehen,

muss man die Umsetzung von Klassendiagrammen in Programme kennen (dieses Kapitel)

• aber: um fortgeschrittenes Design zu verstehen, muss man einige OO -Programme geschrieben haben

Page 15: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

158OOAD Prof. Dr. Stephan Kleuker

UML-Toolsuiten / CASE-Werkzeuge

Theorie:• UML-Werkzeuge unterstützen die automatische Umsetzu ng von

Klassendiagrammen in Programmgerüste (Skelette)• Entwickler müssen die Gerüste mit Code füllen• viele Werkzeuge unterstützen Roundtrip-Engineering, d.h.

Änderungen im Code werden auch zurück in das Design modell übernommen (wenn man Randbedingungen beachtet)

• Roundtrip beinhaltet auch Reverse-EngineeringPraxis:• sehr gute kommerzielle Werkzeuge (z. B. IBM Rationa l, Borland

Together); allerdings muss man für Effizienz Suite von Werkzeugen nutzen; d. h. auf deren Entwicklungsweg einlassen

• ordentliche nicht kommerzielle Ansätze für Teilgebi ete; allerdings Verknüpfung von Werkzeugen wird aufwändi g

6.1

Page 16: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

159OOAD Prof. Dr. Stephan Kleuker

Übersetzung einfacher Diagramme (1/3)

Anmerkung: auch bei Realisierung kann vereinbart werden, dass get-und set-Methoden in Übersichten weggelassen (und damit als gegeben angenommen) werden

Klassenmethoden sind unterstrichen

6.2

Page 17: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

160OOAD Prof. Dr. Stephan Kleuker

Übersetzung einfacher Diagramme (2/3)

public class Mitarbeiter {/*** @uml.property name="minr"*/

private int minr;/*** Getter of the property <tt>minr</tt>* @return Returns the minr.* @uml.property name="minr"*/

public int getMinr() {return minr;

}/*** Setter of the property <tt>minr</tt>* @param minr The minr to set.* @uml.property name="minr"*/

public void setMinr(int minr) {this.minr = minr;

}

Page 18: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

161OOAD Prof. Dr. Stephan Kleuker

private String vorname = "";public String getVorname() { return vorname;}public void setVorname(String vorname) {

this.vorname = vorname;}private String nachname = "";public String getNachname() {return nachname;}public void setNachname(String nachname) {

this.nachname = nachname;

private static int mitarbeiterzaehler;

public static int getMitarbeiterzaehler() {return mitarbeiterzaehler;

}

public static void setMitarbeiterzaehler(int mitarbeiterzaehler) {

Mitarbeiter.mitarbeiterzaehler = mitarbeiterzaehler;}

}

Übersetzung einfacher Diagramme (3/3)

= evtl. notwendige Korrekturen, bei CASE-Werkzeug

Page 19: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

162OOAD Prof. Dr. Stephan Kleuker

Notwendige Code-Ergänzung durch Entwickler

public Mitarbeiter(String vorname, String nachname){

this.vorname=vorname;

this.nachname=nachname;

this.minr=Mitarbeiter.mitarbeiterzaehler++;

}

@Override

public String toString() {

return minr+": "+vorname+" "+nachname;

}

= vom Entwickler ergänzt

Page 20: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

163OOAD Prof. Dr. Stephan Kleuker

Umgang mit Assoziationen im Design

• Assoziationen zunächst nur Strich mit Namen (und Multiplizitäten)

• für Implementierung jede Assoziation konkretisieren (Richtung der Navigierbarkeit, Multiplizitäten sind Pflicht)

public class Projektaufgabe {/** werkzeugspezifische Kommentare weggelassen */

private Mitarbeiter bearbeiter;public Mitarbeiter getBearbeiter() {

return bearbeiter;}public void setBearbeiter(Mitarbeiter bearbeiter) {

this.bearbeiter = bearbeiter;}

}

6.3

Page 21: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

164OOAD Prof. Dr. Stephan Kleuker

Multiplizität 1

• Objekreferenz darf nie null sein

private Mitarbeiter bearbeiter = new Mitarbeiter();

• oder im Konstruktor setzen• man sieht, default-Konstruktoren sind auch hier

hilfreich; deshalb, wenn irgendwie möglich definieren

• Gleiche Problematik mit der Werte-Existenz, bei Multiplizität 1..n

Page 22: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

165OOAD Prof. Dr. Stephan Kleuker

Multiplizität n (1/2)

• Umsetzung als Collection (Sammlung, Container)

• Umsetzung hängt von Art der Collection ab– sollen Daten geordnet sein– sind doppelte erlaubt– gibt es spezielle Zuordnung key -> value

• Entwickler muss zur Typwahl spätere Nutzung kennen• eine Umsetzung für 1..*

import java.util.List;import java.util.ArrayList;public class Projektaufgabe {

private List<Mitarbeiter> bearbeiter = new ArrayList<Mitarbeiter>();

• bitte, bitte in Java nicht alles mit ArrayList real isieren (!!!)• Multiplizität 0..7 als Array umsetzbar

Page 23: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

166OOAD Prof. Dr. Stephan Kleuker

Multiplizität n (2/2)

• Zum Codefragment der letzten Zeile passt besser fol gendes Klassendiagramm

• Hinweis: Standardhilfsklassen z. B. aus der Java-Klassenbibliothek oder der C++-STL werden typischer weise in Klassendiagrammen nicht aufgeführt

• Anmerkung: man sieht die UML-Notation für generisch e (oder parametrisierte) Klassen

• UML-Werkzeuge unterscheiden sich bei der Generierun g und beim Reverse-Engineering beim Umgang mit Collection s

*

Page 24: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

167OOAD Prof. Dr. Stephan Kleuker

Arten der Zugehörigkeit (Aggregation 1/2)

• nicht exklusiver Teil eines Objekts (Mitarbeiter ka nn bei mehreren Projektaufgaben Bearbeiter sein)

• in C++: Mitarbeiter *bearbeiter;Mitarbeiter* Projektaufgabe::getBearbeiter(){

return bearbeiter;}

oder Mitarbeiter bearbeiter;Mitarbeiter& Projektaufgabe::getBearbeiter(){

return bearbeiter;}

• Realisierungsproblem: Projektaufgabe kann Namen des Bearbeiters ändern bearbeiter->setNachname("Meier");

• Kann als Verstoß gegen Kapselung (Geheimnisprinzip) angesehen werden

• Designansatz: Klasse erhält Interface, die Methoden enthält, die bestimmte andere Klassen nutzen können

6.4

Page 25: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

168OOAD Prof. Dr. Stephan Kleuker

Arten der Zugehörigkeit (Aggregation 2/2)

• Designansatz: Verhindern unerwünschten Zugriffs dur ch Interface (generell gute Idee !)

KurzdarstellungInterfacerealisierer:

Page 26: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

169OOAD Prof. Dr. Stephan Kleuker

Arten der Zugehörigkeit (Komposition 1/2)

• Konkretisierung der Zugehörigkeit: existenzabhängig es Teil, Exemplarvariable gehört ausschließlich zum Objekt ( Mitarbeiter kann [unrealistisch] nur exakt eine Projektaufgabe bearbeiten; niemand anderes nutzt dieses Objekt)

• Realisierung in C++Mitarbeiter bearbeiter;

Mitarbeiter Projektaufgabe::getBearbeiter (){

return bearbeiter;

}

• Bei Rückgabe wird Kopie des Objekts erstellt und zu rück gegeben

Page 27: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

170OOAD Prof. Dr. Stephan Kleuker

Arten der Zugehörigkeit (Komposition 2/2)• Java arbeitet nur mit Referenzen (unschöne Ausnahme sind

Elementartypen), wie realisiert man

@Override // in Mitarbeiter.javapublic Mitarbeiter clone(){ // echte Kopie

Mitarbeiter ergebnis= new Mitarbeiter();ergebnis.minr=minr;ergebnis.nachname=nachname; //Strings sindergebnis.vorname=vorname; //Konstantenreturn ergebnis;

}

// in Projektaufgabepublic Mitarbeiter getBearbeiter() {

return bearbeiter.clone();}

• Variante: bei Realisierung überall doll aufpassen

Page 28: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

171OOAD Prof. Dr. Stephan Kleuker

Kurzzeitige Klassennutzungen• Klassen nutzen andere Klassen nicht nur für Exempla r- (und

Klassen-) Variablen• Klassen erzeugen Objekte anderer Klassen lokal in M ethoden,

um diese weiter zu reichenpublic class Projektverwaltung {private Projekt selektiertesProjekt;public void projektaufgabeErgaenzen(String name){Projektaufgabe pa= new Projektaufgabe(name);selektiertesProjekt.aufgabeHinzufuegen(pa);

}• Klassen nutzen Klassenmethoden anderer Klassen• In der UML gibt es hierfür den „Nutzt“-Pfeil • (Omondo: <<include>>)

• Wenn zu viele Pfeile im Diagramm, dann mehrere Diag ramme mit gleichen Klassen zu unterschiedlichen Themen

• UML-Werkzeuge unterstützen Analyse von Abhängigkeit en

Page 29: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

172OOAD Prof. Dr. Stephan Kleuker

Erstellen einer Softwarearchitektur

• Ziel des Design ist ein Modell, welches das Analyse modell vollständig unter Berücksichtigung implementierungsspezifischer Randbedingungen umsetz t

• allgemeine Randbedingungen: Es gibt ingenieurmäßige Erfahrungen zum gutem Aufbau eines Klassensystems; dieses wird auch SW -Architektur genannt

• Ziele für die Architektur– Performance– Wartbarkeit– Erweiterbarkeit– Verständlichkeit– schnell realisierbar– Minimierung von Risiken

6.5

Page 30: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

173OOAD Prof. Dr. Stephan Kleuker

Systematische Entwicklung komplexer Systeme

• Für große Systeme entstehen viele Klassen; bei gute n Entwurf: • Klassen die eng zusammenhängen (gemeinsame

Aufgabengebiete) • Klassen, die nicht oder nur schwach zusammenhängen

(Verknüpfung von Aufgabengebieten)• Strukturierung durch SW -Pakete; Pakete können wieder Pakete

enthalten

Page 31: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

174OOAD Prof. Dr. Stephan Kleuker

Typische 3-Schichten-SW -Architektur

• Ziel: Klassen eines oberen Pakets greifen nur auf Klassen eines unteren Paketes zu (UML-“nutzt“-Pfeil)

• Änderungen der oberen Schicht beeinflussen untere Schichten nicht

• Analysemodell liefert typischerweise nur Fachklassen

• Datenhaltung steht für Persistenz• typisch Varianten von 2 bis 5

Schichten• Klassen in Schicht sollten

gleichen Abstraktionsgrad haben • Schicht in englisch „tier“• obere und untere Schichten

können stark von speziellen Anforderungen abhängen (später)

Page 32: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

175OOAD Prof. Dr. Stephan Kleuker

Beispiel: grobe Paketierung (eine Variante)

• Anmerkung: Datenverwaltung noch nicht konzipiert

Page 33: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

176OOAD Prof. Dr. Stephan Kleuker

Beispiel: grobe Paketierung (zweite Variante)

Page 34: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

177OOAD Prof. Dr. Stephan Kleuker

Forderung: azyklische Abhängigkeitsstruktur

Page 35: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

178OOAD Prof. Dr. Stephan Kleuker

Umsetzung von Paketen in Java und C++

package fachklassen.projektdaten;import fachklassen.projektmitarbeiter.Mitarbeiter;public class Projektaufgabe {

private Mitarbeiter bearbeiter;/* ... */

}

#include "Mitarbeiter.h" //evtl. mit Dateibaumusing namespace Fachklassen::Projektmitarbeiter;namespace Fachklassen{

namespace Projektdaten{class Projektaufgabe{

private:Mitarbeiter *bearbeiter; // ...

};}

}

Page 36: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

179OOAD Prof. Dr. Stephan Kleuker

Paketabhängigkeiten optimieren

• Ziel ist es, dass Klassen sehr eng zusammenhängen; es weniger Klassen gibt, die eng zusammenhängen und viele Klassen und Pakete, die nur lose gekoppelt sind

• Möglichst bidirektionale oder zyklische Abhängigkeiten vermeiden

• Bei Paketen können Zyklen teilweise durch die Verschiebung von Klassen aufgelöst werden

• Wenig globale Pakete (sinnvoll für projektspezifisch e Typen (z. B. Enumerations) und Ausnahmen)

• Es gibt viele Designansätze, Abhängigkeiten zu verringern bzw. ihre Richtung zu ändern

Page 37: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

180OOAD Prof. Dr. Stephan Kleuker

Trick: Abhängigkeit umdrehen

• generell können Interfaces häufiger in anderen Pake ten liegen, als ihre Implementierer

• Java-Klassenbibliothek Swing fordert häufig die Int erface-Implementierung bei der Ereignisbehandlung

Page 38: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

181OOAD Prof. Dr. Stephan Kleuker

Architektursichten

• Paket- und Klassendiagramme geben einen guten Überblick über die Ergebnisse des statischen SW -Entwurfs

• Es gibt aber mehr Sichten (Betrachtungsweisen), die für eine vollständige SW -Architektur relevant sind

• z. B. wurde die HW des zu entwickelnden Systems noch nicht berücksichtigt

• Diese Sichten müssen zu einem System führen; deshalb müssen sich Sichten überlappen

• z. B. eigenes Diagramm mit Übersicht über eingesetzte Hardware und Vernetzung; dazu Information, welche SW wo laufen soll

6.6

Page 39: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

182OOAD Prof. Dr. Stephan Kleuker

Logische Sicht- funktionale Ana-lyseergebnisse

- Klassenmodell

4+1 Sichten

Ablaufsicht- Prozesse- Nebenläufigkeit- Synchronisation

Physische Sicht- Zielhardware- Netzwerke

Implementierungs-sicht

- Subsysteme- Schnittstellen

Szenarien

Page 40: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

183OOAD Prof. Dr. Stephan Kleuker

4+1 Sichten mit (Teilen der) UML

Logische Sicht- Klassendiagramme- Paketdiagramme

Ablaufsicht- Sequenzdiagramme- Kommunikations-

diagramme- Zustandsdiagramme

Physische Sicht- Deployment-

diagramme

Implementierungs-sicht

- Komponenten-diagramme

Szenarien-Use Case-Diagramme- Aktivitätsdiagramme

Page 41: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

184OOAD Prof. Dr. Stephan Kleuker

Ablaufsicht

• wichtig für verteilte Systeme; bzw. Systeme, die verteilt (auch auf einem Rechner) laufen

• Festlegen der Prozesse• Festlegen etwaiger Threads• so genannte aktive Klassen; werden Objekte dieser

Klassen gestartet, so starten sie als eigenständige Prozesse/Threads

• Prozessverhalten u. a. durch Sequenzdiagramme beschreibbar

• (übernächste VL etwas mehr; gibt eigenes Modul dazu)

AktiveKlasseaktivesObjekt:AktiveKlasse

Page 42: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

185OOAD Prof. Dr. Stephan Kleuker

Implementierungssicht

• Das Designmodell muss physikalisch realisiert werden; es muss eine (ausführbare) Datei entstehen

• Pakete fassen als Komponenten realisiert Klassen zusammen

• häufig werden weitere Dateien benötigt: Bilder, Skripte zur Anbindung weiterer Software, Installationsdateien

• Komponenten sind austauschbare Bausteine eines Systems mit Schnittstellen für andere Komponenten

• Typisch ist, dass eine Komponente die Übersetzung einer Datei ist

• Typisch ist, dass eine Komponente die Übersetzung eines Pakets ist; in Java .jar-Datei

Page 43: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

186OOAD Prof. Dr. Stephan Kleuker

Komponentendiagramm

• Bilder zeigen zwei alternative Darstellungen

• Komponenten bieten Schnittstellen(realisierungen) (Kreis) und benötigen Schnittstellen(realisierungen) (Halbkreis)

• Komponenten können über Schnittstellen in Diagrammen verknüpft werden

• in die Komponenten können die zugehörigen Klassen eingezeichnet werden

• Ports erlauben den Zugriff auf bestimmten Teil der Klassen und Interfaces (nicht im Diagramm)

Page 44: Anmerkung: Typischerweise „befruchten“ sich Entwick lunghome.edvsz.fh-osnabrueck.de/skleuker/SS12_OOAD/OOAD_Teil03.pdf · OOAD Prof. Dr. Stephan Kleuker 145 Beispiel: Anstoß

187OOAD Prof. Dr. Stephan Kleuker

Physische Sicht: vorgegebene HW mit Vernetzung

• Einsatz- und Verteilungsdiagramm (deployment diagram )• Knoten steht für physisch vorhandene Einheit, die ü ber

Rechenleistung oder/und Speicher verfügt• <<executable>> (ausführbare Datei) und <<artifact>> (Datei)

müssen zur HW -Beschreibung nicht angegeben werden