UML 2.5 – Das umfassende Handbuch

Werbung
Wissen, wie’s geht.
Wissen aus erster Hand.
Leseprobe
Erfahren Sie alles über UML-Diagramme und Notationselemente,
und lernen Sie, diese sinnvoll in Projekten einzusetzen. Diese Leseprobe gibt Ihnen einen ersten Einblick, wie Sie UML richtig anwenden. Außerdem erhalten Sie das vollständige Inhalts- und Stichwortverzeichnis aus dem Buch.
»Einführung«
»Objektdiagramm«
»Paketdiagramm«
Inhaltsverzeichnis
Index
Die Autoren
Leseprobe weiterempfehlen
Christoph Kecher, Alexander Salvanos
UML 2.5 – Das umfassende Handbuch
458 Seiten, gebunden, mit Poster, 5. Auflage 2015
34,90 Euro, ISBN 978-3-8362-2977-7
www.rheinwerk-verlag.de/3668
Kapitel 1
Einführung
»Zeig mir, wie Du baust,
und ich sage Dir, wer Du bist.«
– Christian Morgenstern
1.1 Weshalb muss Software modelliert werden?
Zu Beginn der Arbeit an diesem Buch fragte mich ein befreundeter Programmierer,
weshalb man Software überhaupt modellieren sollte. Er sei im Laufe seiner Ausbildung nur am Rande mit dem Thema in Berührung gekommen und sehe nicht die
Notwendigkeit, diese »Zusatzaufgabe« während seiner Entwicklungsarbeit durchzuführen. Dies koste nur zusätzlich Zeit, und seine Programme liefen auch ohne sie vorher modelliert zu haben.
Um die Unumgänglichkeit der Modellierung großer Softwaresysteme zu veranschaulichen, lassen Sie uns den Softwareentwicklungsprozess mit dem Bau eines
Hauses vergleichen.
Bevor die eigentlichen Bauarbeiten beginnen, setzt sich der Bauherr zunächst mit
einem Architekten in Verbindung. Er erklärt dem Architekten möglichst genau, wie
sein Traumhaus aussehen sollte, wie die Räumlichkeiten aufgeteilt werden sollen
und was für eine Lage er bevorzugen würde. Der Architekt setzt die Vorstellungen des
Bauherrn in einen Bauplan des Hauses um.
In weiteren gemeinsamen Gesprächen klären der Architekt und der Bauherr alle
Details des Bauplans und besprechen mögliche Veränderungen oder auch Einschränkungen am geplanten Haus. Vielleicht fiel dem Bauherrn in der Zwischenzeit ein,
dass seine neue Garage doch für zehn und nicht, wie zunächst angenommen, für vier
Autos ausgelegt sein sollte. Der Architekt stellt andererseits fest, dass ein Gebäude in
der Größe der Cheops-Pyramide den verfügbaren Finanzrahmen sprengt.
Solche Überlegungen müssen zwingend vor dem Bau des Hauses erfolgen, um während der Bauphase bittere Enttäuschungen, Rückschläge und Verzögerungen der Fertigstellung zu vermeiden.
Nach den Abstimmungsgesprächen zwischen Bauherr und Architekt rückt die Planung der Realisierung in den Mittelpunkt der Überlegungen:
17
1
Einführung
왘 Wie muss das Fundament gegossen werden, um das gesamte Haus tragen zu
können?
왘 Welche Außenverklinkerung soll das Haus erhalten, welche Dachziegel, welche
1.2
Die Phasen bei der Softwareentwicklung
teren Systemen sie interagieren soll (= die Lage des Traumhauses). Ebenfalls muss
klargestellt werden, welche Anforderungen die neue Software nicht erfüllen kann
(= Cheops-Pyramide).
Fensterrahmen?
왘 Welche und wie viele Arbeiter, Arbeitsgeräte und Maschinen müssen wann und in
welcher Menge verfügbar sein?
왘 Wie stellt man sicher, dass alle Bauarbeiten korrekt durchgeführt werden?
Solche und viele weitere Fragen sind ebenfalls vor Beginn der Bauphase zu klären.
Erst nachdem der Bauherr die Sicherheit erlangt hat, dass der Architekt alle seine
Wünsche vollständig und korrekt erfasst und deren Umsetzung geplant hat, gibt er
ihm grünes Licht, um mit den eigentlichen Bauarbeiten zu beginnen.
In der darauffolgenden Bauphase definieren die erstellten Baupläne präzise, welche
Arbeiten in welcher Reihenfolge von den Bauarbeitern durchzuführen sind. Die
Pläne dienen als Kommunikationsgrundlage zwischen dem Architekten und den
Bauarbeitern, die bei den Architekturentscheidungen nicht dabei sein konnten.
1.2.2 Entwurf
In der Entwurfsphase nähert sich Ihr Projekt bereits der Implementierung, weshalb
es zu klären gilt, wie das Softwaresystem realisiert werden soll. Dabei werden auch
system- und architekturorientierte Fragen geklärt, wie z. B.:
왘 Welche Softwarearchitektur soll verwendet werden? Ist z. B. eine Datenbank ein-
zusetzen? (= Fundament)
왘 Wie ist die Benutzungsoberfläche des Programms zu gestalten (= Klinker, Dachzie-
gel, Fensterrahmen)?
왘 Welche Programmiersprachen und Entwicklungsumgebungen sollen verwendet
werden? Welches Know-how müssen die Entwickler mitbringen, um das Vorhaben realisieren zu können? Wann und in welchem Umfang sind die Entwickler
verfügbar (= Bauarbeiter, Arbeitsgeräte und Maschinen)?
왘 Welche Software-Qualitätssicherungsmaßnahmen sind einzusetzen (= Kontrolle
1.2 Die Phasen bei der Softwareentwicklung
Eine sehr ähnliche Vorgehensweise ist auch in der Softwareentwicklung notwendig,
um stabile und zuverlässige Softwaresysteme zu realisieren, die nicht an den Anwenderbedürfnissen vorbeizielen.
Die meisten Vorgehensmodelle zur Softwareentwicklung unterscheiden sechs
grundlegende Phasen:
왘 Analyse
왘 Entwurf
왘 Implementierung
왘 Test
왘 Einsatz
왘 Wartung
1.2.1 Analyse
Während der Analyse werden die Wünsche und Vorstellungen des Auftraggebers
(= Bauherr) und (falls verfügbar) der Endanwender (= Familie des Bauherrn) erfasst
und modelliert.
Der Softwarearchitekt erörtert mit den oben angesprochenen Beteiligten in Interviews, was die gewünschte Software (= das Traumhaus) leisten und mit welchen wei-
18
der Bauarbeiten)?
Das aus dieser Phase entstandene Modell (= Bauplan) dient dem Softwarearchitekten
als Kommunikationsgrundlage mit den Programmierern (= Bauarbeitern) und definiert präzise, welche Programmierarbeiten in welcher Reihenfolge durchzuführen
sind. Erst nach seiner Erstellung kann die Implementierung des eigentlichen Quellcodes beginnen.
Insgesamt kann davon ausgegangen werden, dass mit der Größe des Projekts auch
die Vorteile einer Analyse und eines Entwurfs unter Einsatz einer geeigneten Modellierungssprache überproportional steigen.
1.2.3 Implementierung und Dokumentation
In der Implementierungsphase wird der Quelltext der Software erstellt. Die UMLModellierung aus der Analyse und dem Entwurf repräsentiert einen Systembauplan,
der bei der Codegenerierung als Grundlage dient. Darüber hinaus wird UML von
CASE-Werkzeugen (Computer Aided Software Engineering) verwendet, um den
Quelltext der eingesetzten Programmiersprache automatisch per Codeengineering
erzeugen zu lassen. Weil hierbei auch eine ausführliche Dokumentation erarbeitet
werden muss, ist es besonders hilfreich, dass CASE-Werkzeuge Ihnen auch bei dieser
Aufgabe tatkräftig unter die Arme greifen.
19
1
Einführung
1.4
1.2.4 Test
Die wesentlichen Vorteile der Unified Modeling Language sind:
Bevor die Software bei dem Kunden eingesetzt werden kann, muss überprüft werden, ob die fachlichen Anforderungen des Kunden realisiert worden sind. Auch hierbei sind die UML-Modelle, die in den vergangenen Phasen erstellt wurden, sehr
nützlich, denn auf ihrer Grundlage kann durch Vergleich geprüft werden, ob die einzelnen Details der Anwendungsfälle vollständig in der Anwendung enthalten sind.
Darüber hinaus muss die Software in der Testphase ausgiebig auf Bugs untersucht
werden. Im geschäftskritischen Umfeld wird die Testphase in weitere Teststufen
unterteilt, denn ein Test kann vielfältige Ziele verfolgen. Beispielsweise unterscheidet man zwischen einem Entwicklertest, Validierungstest, Komponententest, Systemtest, Abnahmetest usw.
왘 Eindeutigkeit
Die Geschichte der UML
Die Notationselemente besitzen eine präzise Semantik und sind von vielen Experten definiert und geprüft.
왘 Verständlichkeit
Die einfach gehaltenen Notationselemente visualisieren grafisch die Aspekte der
modellierten Systeme und erleichtern damit das Verständnis.
Unterschiedliche Diagramme ermöglichen differenzierte Sichtweisen auf das zu
modellierende System und betonen oder vernachlässigen bewusst seine Teilaspekte. Damit wird die Kommunikation aller an der Softwareentwicklung beteiligten Personen erleichtert und auf eine stabile Basis gestellt.
왘 Ausdrucksstärke
1.2.5 Einsatz
Nach einer erfolgreichen Testphase wird die Software vom Kunden in Betrieb
genommen. In der Regel muss die Software hierbei in eine Systemlandschaft integriert werden. Auch hierbei ist der Einsatz von UML nützlich, um bei der Migration
mit zahlreichen Anwendungen, Datenbanken usw. den Überblick zu behalten.
1.2.6 Wartung und Pflege
Die Ausschöpfung aller Möglichkeiten der verfügbaren Notationselemente erlaubt die nahezu vollständige Definition aller wichtigen Details eines Softwaresystems.
왘 Standardisierung und Akzeptanz
Weltweit ist die UML in der Softwarebranche im Einsatz. Der Object Management
Group (OMG), die für die Spezifikation der UML verantwortlich ist, gehören mittlerweile mehr als 800 Unternehmen an.
왘 Plattform- und Sprachunabhängigkeit
Selbst nachdem eine Software vom Kunden abgenommen wurde, zeigen sich häufig Fehler, die im Nachhinein zu korrigieren sind. Aber nicht nur deshalb ist Software Veränderungen ausgesetzt. In den meisten Fällen keimen Erweiterungs- oder
Änderungswünsche bei den Nutzern auf, die ein sorgfältig geplantes Änderungsmanagement erforderlich machen. Hierbei zeigt sich erneut, wie vorteilhaft das gewissenhafte Dokumentieren mit UML sein kann, denn die in den vergangenen
Phasen eingepflegten Dokumente sorgen nun nicht nur für eine gute Übersicht,
sondern auch für einen Einblick bis in einzelne Details des Systems.
왘 Unabhängigkeit von Vorgehensmodellen
1.3 Was ist die UML?
1.4 Die Geschichte der UML
Die UML (Unified Modeling Language) definiert eine allgemein verwendbare Modellierungssprache (auch Notation genannt). Ihr Einsatzgebiet beschränkt sich nicht
auf die Softwareentwicklung. Sie stellt Diagramme und Notationselemente (= einzelne Bestandteile der Diagramme) zur Verfügung, mit deren Hilfe sowohl statische
als auch dynamische Aspekte beliebiger Anwendungsgebiete modelliert werden
können.
Um Ihnen einen ersten Eindruck von der UML zu vermitteln, stellt Abbildung 1.1 die
Geschichte der UML als ein Zustandsdiagramm dar. Sie werden diese Diagrammart in
Kapitel 10 kennenlernen (in Abbildung 1.1 werden der Einfachheit halber einige
Details ausgeblendet, die das Diagramm erst vollständig machen würden, wie z. B.
die Bezeichnungen der Transitionen zwischen den Zuständen). Mit der folgenden
Darstellung der UML-Geschichte dürfte das Diagramm jedoch selbsterklärend sein
und bereits die Verständlichkeit der UML im Ansatz demonstrieren:
20
Mit der UML können Sie Softwaresysteme für jede denkbare Plattform und Programmiersprache modellieren. Sie hat ihre Stärken in der objektorientierten Welt,
kann aber ohne Weiteres auch für prozedurale Sprachen eingesetzt werden.
Die UML definiert mit ihren Diagrammen und Notationselementen »Werkzeuge«,
um die Spezifizierung, Visualisierung und Dokumentation von Softwaresystemen
zu erleichtern. Sie überlässt den Softwareentwicklern die Entscheidung, wie sie
diese Werkzeuge am effizientesten nutzen.
21
1
Einführung
1.5 Von der UML 1.x zur UML 2.5
Anfang der 90er-Jahre begannen Grady Booch und Jim Rumbaugh die Arbeit an einer vereinheitlichten Vorgehensmethode und Notation, damals noch unter dem
Namen Unified Method.
Notwendigkeit einer
vereinheitlichten
Modellierungssprache
Zusammenführung
der Methoden
OMT+Booch
Integration der
OOSE und
weiterer Methoden
Unified Method 0.8
1995
Unified Modeling
Language 0.9
1996
Wegen
Rechtsstreitigkeiten bei der
Übergabe der
Copyrights an die
OMG nie freigegeben
Unified Modeling
Language 1.0
1997
Unified Modeling
Language 1.1
1997
OMG Unified
Modeling
Language 1.2
1998
OMG Unified
Modeling
Language 1.3
1999
OMG Unified
Modeling
Language 1.4
2001
OMG Unified
Modeling
Language 1.5
2003
OMG Unified
Modeling
Language 2.0
2005
OMG Unified
Modeling
Language 2.1.2
2007
OMG Unified
Modeling
Language 2.2
2008
OMG Unified
Modeling
Language 2.3
2010
OMG Unified
Modeling
Language 2.4.1
2011
OMG Unified
Modeling
Language 2.5Beta
2013
Abbildung 1.1 Die Geschichte der UML
Die Notwendigkeit der Modellierung von Softwaresystemen wurde bereits in der
»Softwarekrise« in den 70er-Jahren erkannt, als die Entwicklung immer größerer und
komplexerer Softwaresysteme zunehmend unbeherrschbar wurde. In den frühen
90er-Jahren standen sich viele inkompatible und teilweise widersprüchliche Notationen mit unterschiedlichen Notationselementen gegenüber. Die Object Modeling
Technique (OMT) von James Rumbaugh, die Booch-Methode von Grady Booch, das
Object-Oriented Software Engineering (OOSE) von Ivar Jacobson oder die Object-Oriented Analysis (OOA) von Peter Coad und Edward Yourdon sind nur einige Beispiele.
Diese Vielfalt erschwerte die Kommunikation zwischen Softwareentwicklern und
machte die Entwicklung von CASE-Werkzeugen (Computer Aided Software Engineering) äußerst aufwendig.
22
1996 steuerte Ivar Jacobson OOSE bei, wonach zum ersten Mal die Bezeichnung UML
(Unified Modeling Language) verwendet wurde. Ziel der Arbeit war es, die Stärken der
vielen Notationen herauszukristallisieren und zu einer einzigen Modellierungssprache zu konsolidieren.
Schnell erkannten viele namhafte Unternehmen, z. B. Microsoft, Oracle, IBM oder
Rational Software, die Vorteile einer einheitlichen Modellierungssprache und schlossen sich zu den UML Partners zusammen. Im Januar 1997 wurde die UML 1.0 als erste
offizielle Version verabschiedet.
Um einen industrieweiten Standard zu schaffen, strebten die UML Partners eine Zertifizierung durch das Standardisierungsgremium OMG (Object Management Group)
an. 1999 wurde die UML 1.3 zum ersten Mal von der OMG freigegeben.
Seitdem hat sich die UML ständig weiterentwickelt und weltweit in der Softwarebranche als Standard durchgesetzt. Die »drei Amigos« genannten Urväter Booch,
Jacobson und Rumbaugh arbeiten nach wie vor an der Weiterentwicklung. Inzwischen sind jedoch beinahe alle bekannten Unternehmen der Softwarebranche in die
Arbeit an der UML involviert und garantieren den hohen Standard und die Zukunftsfähigkeit der Modellierungssprache.
1.5 Von der UML 1.x zur UML 2.5
Bei der Betrachtung der Abbildung 1.1 ist Ihnen wahrscheinlich der Versionssprung
von UML 1.5 auf 2.0 aufgefallen. Was hat die OMG bewogen, diesen großen Entwicklungsschritt durchzuführen?
Seit der Entwicklung von UML 1.0 hatten die nachfolgenden Versionen lediglich
kleine »kosmetische« Änderungen erfahren. In der Zwischenzeit setzten sich neue
Programmiersprachen (z. B. Java oder C#) immer weiter durch und verdrängten alte
(z. B. C oder C++). Neue Anforderungen aufgrund immer weiterer Einsatzfelder der
UML wurden sichtbar, z. B. der Ruf nach exakteren Modellierungsmöglichkeiten
zeitlicher Aspekte. Alte Notationselemente entpuppten sich als zu nah an einer Programmiersprache entworfen (friend).
Durch das iterative Hinzufügen von Details wurde die UML zwar ständig mächtiger, jedoch immer weniger überschaubar und erlernbar. Die OMG hat dies erkannt
und entschied sich, vollständig aufzuräumen und einen großen Schritt auf Version
2.0 zu machen. Man teilte die Definitionen der UML in zwei Dokumente auf, eines
23
1
Einführung
für die Modellierung von Architektur, Profilen und Stereotypen (Infrastructure)
und eines für statische und dynamische Modellelemente (Superstructure). Aus diesem Grund wurden einige Diagramme vollständig überarbeitet. Das Konzept hinter Aktivitätsdiagrammen (siehe Kapitel 9) wurde beispielsweise komplett
verändert. Vollkommen neue Diagramme, z. B. das Timing-Diagramm (siehe Kapitel 13), wurden aufgenommen. Alte und bewährte Diagrammarten konnten fast
ohne Modifikationen übernommen werden, beispielsweise die Anwendungsfalldiagramme (siehe Kapitel 8) oder die Klassendiagramme (siehe Kapitel 2). Die
Definition der Object Constraint Language (OCL) und ein spezielles XML-Austauschformat wurden in weiteren Teilspezifikationen untergebracht. Mit der Version 2.2 der UML wurden weitere Profildiagramme (siehe Kapitel 15) in die UMLSpezifikation aufgenommen. Die UML 2.3 dehnte den Umfang der Spezifikation
noch weiter aus, sodass die Spezifikation erneut aus den Fugen geriet. Viele Stimmen wurden laut, die die Größe und Komplexität der Spezifikation kritisierten.
Deshalb versuchte man die Spezifikation zu vereinfachen. Dies gelang aber kaum.
Stattdessen gelangten weitere Features in die neue Spezifikation. Beispielsweise
führte die UML 2.4.1 URIs ein und ermöglichte ferner, dass Attribute als eindeutige
Identifier gekennzeichnet werden können. Diese Neuerungen waren wichtig und
mussten dringend hinzugefügt werden.
Für Version 2.5 entschied man sich, das Problem der exorbitanten Spezifikation aufs
Neue anzugehen. Mit viel Aufwand wurde aus den zwei Teilen der Spezifikation ein
neues, nur noch halb so umfangreiches und deutlich vereinfachtes Dokument. Dafür
wurde auf vieles verzichtet, was sich im Laufe der Zeit als irrelevant erwiesen hatte.
Beispielsweise definierte die UML vor 2.5 unterschiedliche Konformitätslevel L0, L1,
L2 und L3, die ein CASE-Tool-Hersteller anstreben kann. Weil dies aber in der Praxis
nicht genutzt wurde, besteht seit Version 2.5 nur noch ein einziger Konformitätslevel. Es ist zwar erlaubt, dass ein CASE-Tool nur eine Untermenge der Notationen oder
der Metamodelle einsetzt, aber dies muss der Hersteller mit einem expliziten Hinweis anzeigen. Ansonsten ist ein CASE-Tool von jetzt an entweder UML-konform
oder eben nicht. Darüber hinaus konnte sehr viel Text eingespart werden, indem alle
redundanten Informationen ganz einfach entfernt wurden.
Insgesamt erschuf die OMG eine neue UML, die kürzer und konsistenter als all ihre
Vorgänger geworden ist. Die inhaltlichen Änderungen der UML-Version 2.5 gegenüber der Vorgängerversion 2.4.1 sind hingegen marginal. So haben sich auch die Diagramme nur sehr wenig verändert. Für Sie als Anwender ist es daher von Bedeutung,
dass die UML-Diagramme die auf Basis älterer UML-Versionen modelliert wurden,
nach wie vor valide sind.
24
1.6
Diagramme der UML 2.5
1.6 Diagramme der UML 2.5
Im neu strukturierten Spezifikationsdokument der Version 2.5 fällt auf, dass es die
UML-Elemente nicht UML-Diagrammen, sondern den Modellierungsarten zuordnet.
Dabei werden grundsätzlich folgende Modellierungsarten unterschieden:
왘 Strukturmodellierung
(Structural Modeling)
왘 Verhaltensmodellierung
(Behavioral Modeling)
왘 Ergänzungsmodellierung
(Supplemental Modeling)
Auf diese Weise verdeutlicht die OMG, dass die Benutzung vieler UML-Elemente
nicht auf ein bestimmtes UML-Diagramm beschränkt ist.
Bei den Elementen der Strukturmodellierung handelt es sich beispielsweise um Klassen, Assoziationen, Pakete, Komponenten usw.
Bei der Verhaltensmodellierung werden die Elemente für die Zustandsmaschinen,
die Aktivitäten und die Interaktionen gezeigt.
Zuletzt erfolgt die Ergänzungsmodellierung, die mithilfe von Anwendungsfällen,
Deployments und Informationsflüssen zusätzliche Möglichkeiten bietet, um das
System in den jeweiligen Projektphasen modellieren zu können.
Der Anhang der Spezifikation geht schließlich erneut auf eine Unterteilung von
UML-Diagrammen ein. Allerdings taucht dort eine andere nämlich die in der Praxis
übliche Sortierung auf. Um in diesem Buch eine klare Linie vorzugeben, die auch in
der alltäglichen Arbeit gängig ist, wurden die Kapitel dieses Buches dieser Sortierung
entsprechend strukturiert.
An dieser Stelle finden Sie zunächst eine Übersicht der UML-Diagramme (siehe Abbildung 1.2), bevor deren Einzelheiten in den folgenden Kapiteln behandelt werden.
Zur Gruppe der Strukturdiagramme gehören:
왘 Klassendiagramm
Ein Klassendiagramm (engl. Class Diagram) beinhaltet die statischen Strukturbestandteile eines Systems, deren Eigenschaften und Beziehungen. Es fungiert als
eine Art allgemeiner Bauplan für Objekte (siehe Abbildung 1.3). Details zu Klassendiagrammen finden Sie in Kapitel 2.
25
1
Einführung
1.6
Diagramme der UML 2.5
Klassendiagramm
Objektdiagramm
Kompositionsstrukturdiagramm
Strukturdiagramm
Komponentendiagramm
Abbildung 1.3 Klassendiagramm
Verteilungsdiagramm
왘 Objektdiagramm
Ein Objektdiagramm (engl. Object Diagram) stellt eine Momentaufnahme der
Objekte eines Systems dar, die nach dem Bauplan eines Klassendiagramms gebildet wurden. Kapitel 3 behandelt alle wichtigen Aspekte von Objektdiagrammen.
Paketdiagramm
Diagramm
Profildiagramm
Anwendungsfalldiagramm
Aktivitätsdiagramm
Abbildung 1.4 Objektdiagramm
Zustandsdiagramm
왘 Kompositionsstrukturdiagramm
Verhaltensdiagramm
Sequenzdiagramm
Ein Kompositionsstrukturdiagramm (engl. Composite Structure Diagram, siehe
Kapitel 4) beschreibt die interne Struktur einer Komponente und deren Interaktionspunkte zu weiteren Komponenten des Systems.
Kommunikationsdiagramm
Interaktionsdiagramm
Timing-Diagramm
Interaktionsübersichtsdiagramm
Abbildung 1.2 Übersicht über die UML-Diagramme
Abbildung 1.5 Kompositionsstrukturdiagramm
26
27
1
Einführung
1.6
왘 Komponentendiagramm
Diagramme der UML 2.5
왘 Profildiagramm
Dieses Diagramm zeigt die Organisation und Abhängigkeiten der Komponenten.
Komponentendiagramme (engl. Component Diagrams) sind das Thema von Kapitel 5.
«artifact»
Profildiagramme (engl. Profile Diagrams) stellen einen leichtgewichtigen Mechanismus dar, mit dem die UML erweitert werden kann. Da sämtliche UML-Metaklassen erweitert werden können, werden Profildiagramme erst in Kapitel 15
behandelt, nachdem Sie alle wichtigen UML-Elemente kennengelernt haben.
«metamodel»
«profile»
«reference»
«realize»
Abbildung 1.9 Profildiagramm
Verhaltensdiagramme sind:
Abbildung 1.6 Komponentendiagramm
왘 Verteilungsdiagramm
Ein Verteilungsdiagramm (engl. Deployment Diagram, siehe Kapitel 6) definiert
die Architektur eines verteilten Systems, wie sie zur Laufzeit vorgefunden wird.
Die Definition beschränkt sich nicht auf Software-Umgebungen, sondern umfasst
auch Hardware und Kommunikationswege.
왘 Anwendungsfalldiagramm
Ein Anwendungsfalldiagramm zeigt die Beziehungen zwischen Akteuren und den
Anwendungsfällen. Anwendungsfälle stellen eine Menge von Aktionen dar, die
ein Akteur während der Interaktion mit einem System abrufen kann. Umfangreiche Informationen zu Anwendungsfalldiagrammen (engl. Use Case Diagrams) finden Sie in Kapitel 8.
«include»
«extend»
«artifact»
Abbildung 1.10 Anwendungsfalldiagramm
Abbildung 1.7 Verteilungsdiagramm
왘 Aktivitätsdiagramm
왘 Paketdiagramm
Das Thema von Kapitel 7 sind Paketdiagramme (engl. Package Diagrams), die
UML-Elemente in Pakete organisieren.
Aktivitätsdiagramme (engl. Activity Diagrams, siehe Kapitel 9) beschreiben das
Verhalten einer Klasse oder Komponente. Sie bedienen sich dabei eines Kontrollund Datenflussmodells.
«merge»
Abbildung 1.8 Paketdiagramm
28
Abbildung 1.11 Aktivitätsdiagramm
29
1
Einführung
1.6
왘 Zustandsdiagramm
Die möglichen Zustände, Zustandsübergänge, Ereignisse und Aktionen im
»Leben« eines Systems werden in einem Zustandsdiagramm (engl. State Machine
Diagram, siehe Kapitel 10) modelliert. Zustandsdiagramme basieren auf dem Konzept der deterministischen endlichen Automaten.
Diagramme der UML 2.5
왘 Kommunikationsdiagramm
Ein Kommunikationsdiagramm (engl. Communication Diagram, siehe Kapitel 12)
beschreibt die Interaktion zwischen Objekten. Im Gegensatz zum Sequenzdiagramm setzt es den Fokus auf die Kommunikationsbeziehungen der Objekte während einer Interaktion.
1:a
3:c
2:b
Abbildung 1.12 Zustandsdiagramm
Die folgenden Verhaltensdiagramme werden unter der Bezeichnung Interaktionsdiagramme (engl. Interaction Diagrams) zusammengefasst:
왘 Sequenzdiagramm
Sequenzdiagramme (engl. Sequence Diagrams, siehe Kapitel 11) definieren Interaktionen zwischen Objekten, wobei sie sich auf den Nachrichtenfluss konzentrieren.
Sie zeigen den zeitlichen Ablauf der Nachrichten, beinhalten jedoch keine Informationen über Beziehungen der Objekte.
Abbildung 1.14 Kommunikationsdiagramm
왘 Timing-Diagramm
Timing-Diagramme zeigen die Zustandswechsel von Objekten innerhalb einer
Zeitspanne als Antworten auf eintreffende Ereignisse. Kapitel 13 enthält alle
Details zu Timing-Diagrammen (engl. Timing Diagrams).
z3
z2
z1
a
b
c
d
e
f
alt
[if]
sec
0
10
20
30
40
50
60
70
[else]
Abbildung 1.15 Timing-Diagramm
왘 Interaktionsübersichtsdiagramm
Abbildung 1.13 Sequenzdiagramm
30
Beim Interaktionsübersichtsdiagramm handelt es sich um eine Diagrammart, die
den Kontrollfluss zwischen Interaktionen mithilfe der Notationselemente von
31
1
Einführung
Aktivitätsdiagrammen beschreibt. Die einzelnen Kontrollflussknoten können
vollständige Interaktionsdiagramme repräsentieren. Kapitel 14 befasst sich mit
den Feinheiten von Interaktionsübersichtsdiagrammen (engl. Interaction Overview Diagrams).
sd
sd
sd
Abbildung 1.16 Interaktionsübersichtsdiagramm
Nach dieser ersten Übersicht behandeln die folgenden Kapitel die einzelnen Diagramme und deren Notationselemente im Detail. Die gerade vorgestellte Gruppierung der Diagramme spiegelt sich dabei in der Reihenfolge der Kapitel wider.
Hinweis
Den vollständigen Code der im Buch verwendeten Beispiele können Sie unter »Materialien zum Buch« von www.rheinwerk-verlag.de/3668 herunterladen.
32
Kapitel 3
Objektdiagramm
Das Objektdiagramm zeigt eine Momentaufnahme
der Objekte eines Systems.
3.1 Anwendungsbereiche
Ein Objektdiagramm (engl. Object Diagram) kann als Sonderfall eines Klassendiagramms angesehen werden.
Während ein Klassendiagramm die allgemeinen Baupläne und alle möglichen Beziehungen der Objekte untereinander modelliert, stellt das zugehörige Objektdiagramm die tatsächlich erzeugten Objekte, deren Attributwerte und Beziehungen
innerhalb eines begrenzten Zeitraums zur Laufzeit dar.
Aus diesem Grund werden Objektdiagramme in allen Phasen der Softwareentwicklung parallel zu Klassendiagrammen eingesetzt. Ihre Verwendung wird zumeist
jedoch nur notwendig, wenn komplexe Klassendiagramme anhand von Beispielen
verdeutlicht und überprüft werden sollen.
3.2 Übersicht
Abbildung 3.1 präsentiert die wichtigsten Notationselemente von Objektdiagrammen:
121
3
Objektdiagramm
3.3
Abbildung 3.2 zeigt ein Objekt maren und dessen Attribute mit Attributwerten, die
ihren Zustand festlegen. Im Unterschied zum Notationselement einer Klasse werden
der Objektname und die Klassenzugehörigkeit unterstrichen dargestellt. Auf die Darstellung von Operationen wird bei Objekten verzichtet.
Objektname
Rolle
lieblingsgrieche :
Restaurant
Link
+Arbeitgeber
kategorie: Sterne = 3
name = "Platon"
besucht
besucht
Das Objekt maren der Klasse Gast wird zu einem Zeitpunkt seines Lebens gezeigt, in
dem seine Attribute status den Wert "König", geldbetrag vom Typ EUR den Wert 300
und hunger den Wert true aufweisen. Anschaulich ausgedrückt, besitzt der Gast maren
300 EUR, ist hungrig und wird wie ein König behandelt. Die Attributwerte müssen
erwartungsgemäß zu den Typen der Attribute passen.
zugehörige Klasse
Linkname
maren :Gast
bedient
status = "König"
geldbetrag: EUR = 300
hunger = true
Leserichtung
+Arbeitnehmer
klaudia :Gast
:Kellner
bedient
status = "König"
geldbetrag: EUR = 20
hunger = true
Objekt
Notationselemente
persAusweisNr = 12345
gehalt: EUR = 1500
Attributname Attributtyp
Attributwert
Abbildung 3.1 Notationselemente von Objektdiagrammen
Das Objektdiagramm beschreibt nicht, wie maren in diesen Zustand gekommen ist
oder welches ihr nächster Zustand ist. Die Modellierung aller Zustände und
Zustandsübergänge ist Aufgabe des Zustandsdiagramms, das Sie in Kapitel 10 kennenlernen.
Die Angabe der Attribute und Attributwerte eines Objektes kann unvollständig sein
und nur diejenigen umfassen, die gerade für seinen Zustand bedeutend sind.
Abbildung 3.3 zeigt ein Objekt der Klasse Gast mit dem Namen maren während der
Erteilung einer Bestellung.
Zu diesem Zeitpunkt hatte maren demnach 300 EUR und den status "König". Das Attribut hunger wird ausgeblendet, da es bei der Erteilung einer Bestellung nicht zwingend
eine Rolle spielen muss.
3.3 Notationselemente
3.3.1 Objekt
Zeitpunkt:
Erteilung einer
Bestellung
Objektname
zugehörige Klasse
Abbildung 3.3 Unvollständige, aber zulässige Objektspezifikation
maren :Gast
status = "König"
hunger = true
geldbetrag: EUR = 300
Objekt
Attributname
Attributtyp
Die Instanziierung einer Klasse durch ein Objekt kann auch mithilfe der <<instantiate>>-Abhängigkeit modelliert werden:
Attributwert
Abbildung 3.2 Objekt
Beschreibung
Ein Objekt (engl. Object) entsteht bei der Realisierung eines Bauplans, den eine Klasse
spezifiziert. Es wird auch als Instanz oder Exemplar einer Klasse bezeichnet.
122
maren :Gast
status = "König"
geldbetrag: EUR = 300
Objekt/Instanz
maren :Gast
status = "König"
geldbetrag: EUR = 300
hunger = true
Klasse
Abhängigkeit
«instantiate»
Gast
+
#
status: String = "König"
geldbetrag: EUR
hunger: boolean = true
Abbildung 3.4 Instanziierung einer Klasse
123
3
Objektdiagramm
Abbildung 3.4 zeigt, dass das Objekt maren eine Instanz der Klasse Gast darstellt. Man
erkennt dies zwar auch an der Klassenbezeichnung hinter dem Doppelpunkt im
Objektnamen. Die Darstellung aus Abbildung 3.4 hebt jedoch den Zusammenhang
zwischen Objekt und Klasse hervor und zeigt den »Bauplan« und das »Produkt« in
einem Diagramm.
3.3
A
private EUR geldbetrag;
protected boolean hunger;
B
public Gast(EUR g, boolean h)
Verwendung
Objektdiagramme sind hilfreich, um den konkreten Zustand einzelner Objekte in
einem gegebenen Kontext darzustellen. Sie stellen im Allgemeinen die Werte der
Attribute dar, die diesen Zustand charakterisieren. Alle anderen Attribute werden aus
Gründen der Überschaubarkeit weggelassen.
{
geldbetrag = g;
hunger = h;
}
B
Bei der Darstellung der Objekte können Klassendiagramme auf deren Vollständigkeit und Korrektheit überprüft werden. Benötigen Sie in einem der Objektdiagramme ein Objekt, das keiner der Klassen zugeordnet werden kann, ist Ihr
Klassendiagramm unvollständig. Klassen dagegen, nach deren Bauplan kein Objekt
erzeugt werden musste, können eventuell aus dem Klassendiagramm entfernt
werden.
Realisierung in Java
Zur Implementierung wird das Beispiel aus Abbildung 3.4 herangezogen.
Zunächst wird eine Klasse EUR erstellt, die den Datentyp für geldbetrag realisiert. Sie
kapselt lediglich eine Fließkommazahl (float):
class EUR
{
public float betrag;
public EUR(float b)
{
betrag = b;
}
}
Listing 3.1 /beispiele/java/kap3/kap_3_3_1/EUR.java (Download der Beispiele: www.rheinwerk-verlag.de/3668)
Nun kann die Klasse Gast implementiert werden:
class Gast
{
public static String status = "König";
124
Notationselemente
public Gast(EUR g)
{
geldbetrag = g;
hunger = true;
}
}
Listing 3.2 /beispiele/java/kap3/kap_3_3_1/Gast.java
A: Der geldbetrag erhält den geforderten Typ EUR.
B: Java bietet keine Möglichkeit, Vorgabewerte für Übergabeparameter zu definieren, was für das Attribut hunger notwendig wäre. Daher bedient sich dieses
Beispiel der Überladung von Konstruktoren und emuliert damit eine Art Vorgabewert.
Eine einfache Hauptoperation demonstriert die Instanziierung eines Objekts der
Klasse Gast:
public static void main(String[] args)
{
A
Gast maren = new Gast(new EUR(300), true);
}
Listing 3.3 /beispiele/java/kap3/kap_3_3_1/Test.java
A: Das in Abbildung 3.4 gezeigte Objekt maren mit einem geldbetrag von 300 EUR und
hunger = true wird mithilfe des new-Operators instanziiert.
125
3
Objektdiagramm
Das Attribut status muss nicht gesetzt werden, da es als Klassenattribut für alle
Objekte der Klasse Gast verfügbar ist und bereits bei seiner Deklaration mit
"König" vorbelegt wird.
Realisierung in C#
Die Umsetzung und Instanziierung der Klasse Gast unterscheidet sich in C# nicht
wesentlich von der in Java:
public class Gast
{
public static string status = "König";
private EUR geldbetrag;
A
3.3
Notationselemente
A: Das in Abbildung 3.4 dargestellte Objekt maren der Klasse Gast wird mit einem
geldbetrag von 300 EUR und hunger = true angelegt, was in C# ebenfalls mit dem
new-Operator durchgeführt wird.
3.3.2 Link
Linkname Leserichtung
:Kellner
mitarbeiterNr = 12
gehalt: EUR = 1500
maren :Gast
bedient
Link
status = "König"
geldbetrag: EUR = 300
hunger = true
Abbildung 3.5 Link
protected bool hunger;
Beschreibung
public Gast(EUR g, bool h)
{
geldbetrag = g;
hunger = h;
}
public Gast(EUR g)
{
geldbetrag = g;
hunger = true;
}
}
Listing 3.4 /beispiele/c#/kap3/kap_3_3_1/Kap_3_3_1.cs
Ein Link repräsentiert eine Beziehung zwischen zwei Objekten.
In einem Klassendiagramm werden Beziehungen zwischen Klassen als Assoziationen
bezeichnet. In einem Objektdiagramm ist ein Link die konkrete Ausprägung einer
Assoziation.
Grafisch sind Links und Assoziationen nicht unterscheidbar. Durch ihre Verwendung
zwischen Klassen bzw. Objekten sind sie jedoch nicht zu verwechseln.
Links erhalten alle Aspekte ihrer zugehörigen Assoziation, wie z. B. Rollen, Namen,
Leserichtungen oder Eigenschaften. Allein eine Multiplizität höher als 1 ist nicht
erlaubt, weil Links immer genau zwei Objekte verbinden. Hat eines der instanziierten
Assoziationsenden eine Multiplizität größer als 1, können mehrere Links zu mehreren Objekten modelliert werden.
A: In C# muss statt boolean der Datentyp bool verwendet werden.
Verwendung
static void Main(string[] args)
{
A
Gast maren = new Gast(new EUR(300), true);
}
Listing 3.5 /beispiele/c#/kap3/kap_3_3_1/Kap_3_3_1.cs
126
Genauso wie ein Klassendiagramm ohne Assoziationen nicht viel mehr als eine
Anhäufung von beziehungslosen Klassen ist, stellt ein Objektdiagramm ohne Links
eine Anhäufung von beziehungslosen Objekten dar. Verbinden Sie daher Objekte
mit Links auf dieselbe Art, wie Sie Klassen mit Assoziationen verbinden.
Sollte Ihnen während der Erstellung eines Objektdiagramms auffallen, dass ein Link
benötigt wird, dem keine entsprechende Assoziation im Klassendiagramm gegenübersteht, ist Ihr Klassendiagramm unvollständig und muss erweitert werden. Assoziationen aus Klassendiagrammen, die in keinem der Objektdiagramme verwendet
wurden, sind darauf zu überprüfen, ob sie im Klassendiagramm wirklich benötigt
werden.
127
3
Objektdiagramm
3.3
Realisierung in Java
bedienung = k;
k.kunde = this;
Das Objektdiagramm aus Abbildung 3.6 zeigt im oberen Teil die Klassen Kellner und
Gast, die durch eine Assoziation verbunden sind.
}
Der untere Teil der Abbildung beinhaltet die Objekte und einen Link, die diese beiden
Klassen sowie die Assoziation instanziieren.
Dieses Objektdiagramm soll im Folgenden umgesetzt werden.
Gast
Kellner
+Kunde
+Bedienung
Notationselemente
}
Listing 3.6 /beispiele/java/kap3/kap_3_3_2/Kellner.java & Gast.java
A: Die Assoziation zum Gast wird deklariert.
B: Da die Assoziation in beide Richtungen navigierbar ist, werden beide Assoziationsenden gleichzeitig instanziiert: sowohl auf der Seite des Kellners als auch
auf der Seite des Gastes.
1
Erst damit ist die Assoziation vollständig und konsistent instanziiert: Ein Link
entsteht.
«instantiate»
«instantiate»
maren :Gast
mathias :Kellner
C: Bei der Klasse Kunde wird auf dieselbe Art verfahren.
In einer Hauptoperation werden die Objekte instanziiert und die Links gesetzt:
+Kunde
+Bedienung
1
Abbildung 3.6 Link-Beispiel
public static void main(String[] args)
{
1
A
Gast maren = new Gast();
Kellner mathias = new Kellner();
B
maren.setKellner(mathias);
Zunächst werden die Klassendefinitionen realisiert:
class Kellner
{
}
Listing 3.7 /beispiele/java/kap3/kap_3_3_2/Test.java
A
public Gast kunde;
B
public void setGast(Gast g)
{
kunde = g;
g.bedienung = this;
}
A: Objekte werden in Java mithilfe des new-Operators instanziiert.
}
class Gast
{
C
128
public Kellner bedienung;
public void setKellner(Kellner k)
{
B: Die gegenseitigen Assoziationen werden gesetzt und damit zu Links instanziiert.
Der Aufruf einer der beiden set-Operationen ist ausreichend, da jede von ihnen
beide Assoziationsenden konsistent setzt und somit den gesamten Link instanziiert.
Realisierung in C#
Objekte werden in C# ebenfalls mit dem new-Operator instanziiert, sodass die Implementierung gegenüber dem Java-Programmcode keine erwähnenswerten Unterschiede aufweist. Sie finden den vollständigen Programmcode im Ordner beispiele/
c#/kap3/kap_3_3_2.
129
3
Objektdiagramm
3.5
3.4 Lesen eines Objektdiagramms
Irrungen und Wirrungen
Das Objektdiagramm aus Abbildung 3.8 zeigt vier Objekte:
Ein Objektdiagramm wird üblicherweise verwendet, um ein Klassendiagramm zu
illustrieren. Aus diesem Grund wird zunächst ein Klassendiagramm (siehe Abbildung 3.7) entworfen:
왘 lieblingsgrieche der Klasse Restaurant
왘 namenlosen Kellner
왘 maren der Klasse Gast
왘 klaudia der Klasse Gast
Restaurant
+ kategorie: Sterne
+ name: String
+Arbeitgeber +Arbeitnehmer
persAusweisNr
0..1
-
1..*
Mitarbeiter
persAusweisNr: int
gehalt: EUR
Als Arbeitgeber hat er einen Link zu seinem Arbeitnehmer. Zurzeit handelt es sich
dabei um einen einzigen Kellner, dessen Objektname nicht spezifiziert wurde, weil er
hier als nicht wichtig angesehen wird.
1
besucht
0..50
Gast
+ status: String = "König"
- geldbetrag: EUR
# hunger: boolean = true
Kellner
1..5
bestellt
bedient
+ bedienen(g :Gast)
1 + servieren(g :Gast, ge :Gericht)
+ kassieren(p :Preis)
+ bestellen() : Menuepunkt
+ zahlen(p :Preis) : EUR
Abbildung 3.7 Klassendiagramm als Grundlage für ein Objektdiagramm
Für das Klassendiagramm aus Abbildung 3.7 wird ein Objektdiagramm (siehe Abbildung 3.8) erstellt.
lieblingsgrieche :
Restaurant
Beachten Sie, dass kein Objekt der Klasse Mitarbeiter im Objektdiagramm aufgeführt wird. Wie in Abschnitt 2.3.14 erläutert wurde, dienen abstrakte Klassen als Vorlagen für weitere Klassen und können nicht selbst instanziiert werden. Bei der
Klasse Mitarbeiter handelt es sich um solch eine abstrakte Klasse. Sie wird von der
Klasse Kellner spezialisiert, weshalb das namenlose Kellner-Objekt über alle Attribute eines Mitarbeiters verfügt und sie mit den Werten 12345 (persAusweisNr) und
1500 (gehalt) belegen kann.
Das Klassendiagramm aus Abbildung 3.7 definiert, dass ein Kellner 1 bis 5 Gäste
bedienen kann. Im Objektdiagramm kann daher ein unbekannter Kellner zwei Gäste
(maren und klaudia) bedienen, mit denen er über zwei Links verbunden ist.
maren und klaudia sind zwei Objekte der Klasse Gast und besitzen damit alle Attri-
bute eines Gastes. Beide Objekte besuchen gerade dasselbe Restaurant und sind
daher mit dem lieblingsgriechen über Links verbunden.
+Arbeitgeber
Bei den Gast-Objekten sollte zusätzlich erwähnt werden, dass jedes der Gast-Objekte
das Attribut status mit dem Wert »König« besitzt, da es in der Klasse als statisches
Attribut deklariert und mit eben diesem Wert vorbelegt wird (statische Attribute
wurden bereits in Abschnitt 2.3.2 behandelt).
kategorie: Sterne = 3
name = "Platon"
besucht
Zu einem nicht näher spezifizierten Zeitpunkt besitzt der lieblingsgrieche den namen
"Platon" und die kategorie 3 Sterne.
besucht
maren :Gast
status = "König"
geldbetrag: EUR = 300
hunger = true
3.5 Irrungen und Wirrungen
bedient
+Arbeitnehmer
klaudia :Gast
status = "König"
geldbetrag: EUR = 20
hunger = true
Abbildung 3.9 zeigt ein fehlerhaftes Objektdiagramm, das ein Beispiel des Klassendiagramms aus Abbildung 3.7 sein sollte:
:Kellner
bedient
persAusweisNr = 12345
gehalt: EUR = 1500
Abbildung 3.8 Beispiel-Objektdiagramm
130
131
3
Objektdiagramm
3.6 Zusammenfassung
heiner :
Fleischlieferant
Macht das Objektdiagramm deutlich, dass ein zusätzlicher Link notwendig ist,
muss das Klassendiagramm um die entsprechende Assoziation ergänzt werden.
A
B
lieblingsgrieche :
Restaurant
+Arbeitgeber
+Arbeitnehmer
:Mitarbeiter
kategorie: Sterne = 3
name = "Platon"
besucht
maren :Gast
E
groesse: cm = 175
status = "König"
geldbetrag: EUR = 300
hunger = "sehr gross"
:Kellner
bedient
Neue benötigte Attribute müssen zunächst in der Klasse hinzugefügt werden.
F: Attributwert falsch
Die Attributwerte der Objekte müssen dem Datentyp der Attribute entsprechen.
Attribut hunger ist vom Typ boolean und erlaubt damit nur die Werte true und
false.
D
C
E: Neues Attribut
Objekte dürfen keine Attribute mit Werten belegen, die nicht bereits in der Klasse
deklariert sind. Das Objekt würde andernfalls die Definition der Klasse und damit
seinen eigenen Bauplan verändern.
persAusweisNr = 12345
gehalt: EUR = 1500
F
3.6 Zusammenfassung
Die wichtigsten Notationselemente von Objektdiagrammen und deren Bedeutung
werden im Folgenden noch einmal rekapituliert:
왘 Ein Objekt wird auch als Instanz oder Ausprägung einer Klasse bezeichnet und
entsteht als Produkt der Realisierung eines Klassen-Bauplans.
Abbildung 3.9 Mögliche Fehler in Objektdiagrammen
Objektname
A: Unbekannte Klasse
Es dürfen nur Objekte erstellt werden, die aus Klassen des zugrunde liegenden
Klassendiagramms erzeugt werden können.
Werden Objekte neuer Klassen benötigt, ist das Klassendiagramm unvollständig
und muss erweitert werden.
B: Instanz einer abstrakten Klasse
Aus abstrakten Klassen können keine Instanzen erzeugt werden.
C: Falsche Leserichtung
Die Links eines Objektdiagramms müssen den Assoziationen des Klassendiagramms in den Assoziationsnamen, Leserichtungen, Rollen, Navigationsrichtungen und Eigenschaften entsprechen und dürfen sie nicht verändern.
Objekt
maren :Gast
Abbildung 3.10 Objekt
왘 Links zeigen Beziehungen zwischen Objekten.
Linkname
maren :Gast
Zeichnet sich bei der Erstellung eines Objektdiagramms ab, dass eine andere
Assoziation benötigt wird, muss das Klassendiagramm modifiziert werden.
D: Neue Assoziation
Ein Objektdiagramm darf keine Links beinhalten, die nicht im Klassendiagramm
als Assoziationen vorhanden sind. Andererseits sollten Assoziationen aus dem
zugehörigen Klassendiagramm auch als Links im Objektdiagramm nicht fehlen.
132
zugehörige Klasse
Leserichtung
besucht
lieblingsgrieche :
Restaurant
Link
Abbildung 3.11 Link
133
Kapitel 7
Paketdiagramm
Paketdiagramme organisieren und strukturieren Elemente
in Paketen.
7.1 Anwendungsbereiche
Paketdiagramme (engl. Package Diagrams) werden zumeist in den frühen Phasen der
Softwareentwicklung (wie Analyse/Definition und Entwurf/Design) verwendet, um
das Modell sowohl horizontal als auch vertikal zu strukturieren.
Mit der horizontalen Strukturierung wird die Möglichkeit bezeichnet, beliebige UMLElemente, die logisch zusammengehören, in Paketen zusammenzufassen und damit
das UML-Modell zu modularisieren.
Pakete können Unterpakete enthalten und erlauben damit eine vertikale Strukturierung. Das Paket auf der obersten Ebene kann beispielsweise das gesamte Projekt
repräsentieren, während die Pakete auf den tieferen Ebenen sich den Projektdetails
nähern.
Mithilfe der vertikalen Strukturierung werden unterschiedliche Abstraktionsebenen
eines Modells definiert, und es wird die Möglichkeit geschaffen, aus einer übersichtsartigen Darstellung schrittweise in die Details zu zoomen.
Strukturieren Sie Ihr Modell sowohl horizontal als auch vertikal, um es möglichst
überschaubar und damit verständlich zu gestalten.
7.2 Übersicht
In Abbildung 7.1 sehen Sie die wichtigsten Notationselemente von Paketdiagrammen:
185
7
Paketdiagramm
7.3
Notationselemente
Beschreibung
Paketname
Paket
restaurantsystem
Pakete (engl. Packages) gruppieren Elemente und definieren Namensräume (engl.
Namespaces), in denen sich diese Elemente befinden.
gaesteverwaltung
Gast
#
#
ImportBeziehung
«import»
kundennummer
umsatz: float = 0
Klasse
AccessBeziehung
MergeBeziehung
Abbildung 7.2 zeigt ein Paket datenverwaltung, das ein Unterpaket datenbank und eine
Klasse Administrator enthält und damit Elemente gruppiert, die mit der Datenverwaltung im Zusammenhang stehen.
Die UML stellt hierfür eine weitere Notationsmöglichkeit zur Verfügung (siehe Abbildung 7.3):
werkzeuge
«access»
«access»
datenverwaltung
«merge»
+ PdfErzeuger
datenverwaltung
vipGaesteverwaltung
Paketgruppierung
datenbank
datenpflege
Gast
datenbank
#
#
lieblingswein
leibgericht
Administrator
Abbildung 7.1 Notationselemente von Paketdiagrammen
Abbildung 7.3 Gruppierung von Elementen in einem Paket
Die Diagramme aus Abbildung 7.2 und Abbildung 7.3 sind semantisch gleich.
7.3 Notationselemente
Alle Elemente innerhalb eines durch ein Paket definierten Namensraumes müssen
unterschiedliche Namen besitzen. Innerhalb von unterschiedlichen Paketen ist es
jedoch durchaus möglich, zwei Elemente mit demselben Namen zu definieren (siehe
Abbildung 7.4):
7.3.1 Paket
Paketname
Paket
datenverwaltung
restaurantsystem
gaesteverwaltung
datenbank
Administrator
Paket
datenbank
datenbank
Klasse
Abbildung 7.4 Pakete definieren Namensräume.
Abbildung 7.2 Paket
186
187
7
Paketdiagramm
Die Namen der Unterpakete datenbank in Abbildung 7.4 verursachen trotz ihrer
Gleichheit keinen Namenskonflikt, weil sie in unterschiedlichen Paketen und damit
in unterschiedlichen Namensräumen verwendet werden.
Außerhalb ihrer Pakete können sie jedoch nicht mehr über ihren unqualifizierten
Namen datenbank angesprochen werden, weil dieser sie nicht eindeutig identifiziert. UML definiert hierfür die qualifizierten Namen, in denen zusätzlich die Paketnamen getrennt durch zwei Doppelpunkte angegeben werden müssen. Für die
in Abbildung 7.4 modellierten Unterpakete lauten sie beispielsweise restaurantsystem::datenbank bzw. gaesteverwaltung::datenbank.
7.3
Hierarchieebenen von Paketen erlauben Ihnen eine vertikale Strukturierung des
Modells. Sie gliedern ein Gesamtsystem damit auf abstrakter Ebene bereits in Teilsysteme und deren Bestandteile auf und schaffen damit eine wichtige Grundlage für
Komponentendiagramme (siehe Kapitel 5).
Realisierung in Java
Als Beispiel soll das Paketdiagramm aus Abbildung 7.6 verwendet werden:
datenverwaltung
Der Inhalt ist mit seinem Paket untrennbar verbunden. Alle Elemente eines Pakets
werden aus dem Modell entfernt, wenn das Paket gelöscht wird.
datenbank
Administrator
Wenn ein Paket keine Elemente aufzeigt, heißt dies nicht automatisch, dass es keine
besitzt. Die UML erlaubt, den Inhalt von Paketen auszublenden, um das Paketdiagramm übersichtlicher zu gestalten.
Alle in einem Paket gruppierten Elemente sind innerhalb eines Pakets untereinander
sichtbar. Ihre Sichtbarkeit außerhalb ihres Pakets kann eingeschränkt werden, indem
sie als protected (#), private (-) oder package (~) (siehe auch Abschnitt 2.3.2) definiert wird (siehe Abbildung 7.5).
In Abbildung 7.5 wird ein Goldbarren als nur innerhalb des tresors sichtbar definiert
(private). Von außerhalb darf damit nicht auf den Goldbarren zugegriffen werden
(was manchen Einbrechern durchaus Schwierigkeiten bereiten könnte).
tresor
- Goldbarren
Sichtbarkeit
Abbildung 7.5 Sichtbarkeit eines Paketelements
Verzichtet man auf die Spezifikation einer Sichtbarkeit, wird public (+) angenommen, womit das Element auch außerhalb des Pakets über seinen qualifizierten
Namen referenziert werden kann.
Verwendung
Durch die Verwendung von Paketen teilen Sie das System horizontal auf. Sie strukturieren die modellierten Klassen und sogar ganze Systeme in logisch und funktionell
zusammengehörende Einheiten, modularisieren sie und gestalten ein Modell damit
einfacher und überschaubarer.
188
Notationselemente
-
Relation
alter: int
+ setAlter(alter :int) : void
+ getAlter() : int
Abbildung 7.6 Beispiel eines Paketdiagramms
Java verlangt die Abbildung modellierter Pakete auf Dateisystem-Ordner und die
Implementierung von Klassen in separaten Dateien mit dem Namen der Klasse und
einer Dateiendung .java.
Soll demnach das Paketdiagramm aus Abbildung 7.6 in Java implementiert werden,
muss ein Ordner mit dem Namen datenverwaltung im Dateisystem erstellt werden.
In ihm muss eine Programmcode-Datei mit der Bezeichnung Administrator.java
sowie ein weiterer Ordner datenbank angelegt werden, in dem sich wiederum eine
Datei namens Relation.java befindet.
Die Zugehörigkeit einer Klasse zu einem Paket wird mit dem Schlüsselwort package
deklariert:
A package datenverwaltung;
public class Administrator
{
B
private int alter;
public void setAlter(int alter)
{
this.alter = alter;
}
189
7
Paketdiagramm
public int getAlter()
{
return this.alter;
}
7.3
B
public class Administrator
{
private int alter;
public void setAlter(int alter)
{
this.alter = alter;
}
public int getAlter()
{
return this.alter;
}
}
C
namespace datenbank
}
Listing 7.1 /beispiele/java/kap7/datenverwaltung/Administrator.java (Download der Beispiele: www.rheinwerk-verlag.de/3668)
A: Die Klasse Administrator gehört zum Paket datenverwaltung. Während die UML
die Default-Sichtbarkeit von Elementen mit public definiert, gilt in Java package
als Vorgabewert. Um mit dem Paketdiagramm aus Abbildung 7.6 konform zu
sein, muss daher die Sichtbarkeit der Klasse explizit mit public angegeben
werden.
B: Alle Attribute und Operationen der Klasse müssen in Java in derselben Datei
implementiert werden.
{
D
public class Relation
{
}
A package datenverwaltung.datenbank;
public class Relation
{
}
Notationselemente
}
}
Listing 7.2 /beispiele/java/kap7/datenverwaltung/datenbank/Relation.java
Listing 7.3 /beispiele/c#/kap7/kap_7_3_1/Kap_7_3_1.cs
A: In Java erfolgt die Deklaration von Unterpaketen mithilfe des Punkt-Operators.
Hier wird definiert, dass die Klasse Relation ein Bestandteil des Pakets datenbank
ist, das sich selbst wiederum im Paket datenverwaltung befindet.
A: Pakete definieren Namensräume für Elemente und werden daher in C# mit dem
Schlüsselwort namespace deklariert, was an dieser Stelle für das Paket datenverwaltung erfolgt.
Realisierung in C#
B: Innerhalb des Namensraums wird eine Klasse Administrator implementiert.
Bezüglich der Default-Sichtbarkeit weist C# denselben Unterschied zur UML auf
wie Java (UML: public, C#: package).
Das Paket-Konzept von C# weist einige Unterschiede zum Paket-Konzept von Java
auf. C# verlangt nicht, dass jedes Paket durch einen eigenen Ordner im Dateisystem
abgebildet wird. Ebenso entfällt die Beschränkung, jede Klasse in einer separaten
Datei implementieren zu müssen. C# erlaubt, unterschiedliche Pakete, Unterpakete
und Klassen in derselben Datei zu deklarieren und zu implementieren:
A namespace datenverwaltung
{
190
C: Ein Unterpaket kann in C# intuitiv innerhalb des umfassenden Pakets deklariert
werden. Hier wird ein Paket (namespace) datenbank innerhalb des Pakets datenverwaltung angelegt.
D: Das Unterpaket datenbank enthält eine Klasse Relation.
Seit der Version 2.0 ist es in C# möglich, die Implementierung einzelner Klassen auf
unterschiedliche Dateien zu verteilen. So kann beispielsweise die Deklaration der
Attribute von der Implementierung der Operationen getrennt und auf beliebig viele
Quellcodedateien aufgeteilt werden.
191
7
Paketdiagramm
namespace datenverwaltung
{
7.3
Notationselemente
A: Auch in dieser Quellcodedatei muss die partielle Implementierung mit dem
Schlüsselwort partial signalisiert werden.
B: Es werden nur die Operationen der Klasse implementiert.
A
public partial class Administrator
7.3.2 Paket-Import
{
B
private int alter;
importierendes Paket
restaurantsystem
importiertes Paket
Paket-Import
werkzeuge
}
}
+ PdfErzeuger
«import»
Listing 7.4 /beispiele/c#/kap7/kap_7_3_1/Admin_Attribute.cs
Abbildung 7.7 Paket-Import
A: Die Aufteilung einer Klasse auf mehrere Quellcodedateien wird mit dem Schlüsselwort partial signalisiert.
B: Es wird nur das private Attribut alter deklariert.
In einer weiteren Datei können dann beispielsweise die Zugriffsoperationen implementiert werden:
namespace datenverwaltung
{
A
public partial class Administrator
{
B
public void setAlter(int alter)
{
this.alter = alter;
}
public int getAlter()
{
return this.alter;
}
}
Beschreibung
Ein Paket-Import (engl. PackageImport) ist eine Beziehung, die alle Namen öffentlicher Elemente eines Pakets dem importierenden Paket als öffentlich hinzufügt.
Damit wird die Referenzierung von Elementen eines Pakets über unqualifizierte
Namen möglich, so als wenn das importierende Paket diese Elemente selbst enthalten würde. Wird das importierende Paket aus dem Modell entfernt, bleiben die Elemente im importierten Paket erhalten.
Laut Paketdiagramm aus Abbildung 7.7 kann PdfErzeuger im Paket restaurantsystem
direkt über seinen unqualifizierten Namen angesprochen werden. In allen anderen
Paketen, die werkzeuge nicht importieren, kann seine Referenzierung nur über den
qualifizierten Namen werkzeuge::PdfErzeuger erfolgen.
Die importierten Elemente sind im importierenden Paket als öffentlich sichtbar. Damit kann ein weiteres Paket die Elemente erneut importieren (siehe Abbildung 7.8).
Im Paket restaurantkette aus Abbildung 7.8 kann PdfErzeuger direkt über seinen
unqualifizierten Namen angesprochen werden. Er ist sowohl in werkzeuge als auch im
restaurantsystem als öffentlich zugänglich und damit auch in restaurantkette verfügbar.
restaurantkette
restaurantsystem
werkzeuge
}
«import»
«import»
+ PdfErzeuger
Listing 7.5 /beispiele/c#/kap7/kap_7_3_1/Admin_Operationen.cs
Abbildung 7.8 Mehrfacher Paket-Import
192
193
7
Paketdiagramm
7.3
Um dies zu verhindern, bietet die UML den Paket-Accessals eine Einschränkung des
Paket-Imports.
restaurantkette
Paket-Import restaurantsystem
«import»
Paket-Access werkzeuge
renzierung über unqualifizierte Namen. Sie verdeutlichen auch die Struktur des
Modells und die Beziehungen der Pakete untereinander.
Soll der Zugriff auf die importierten Elemente in weiteren Paketen eingeschränkt
werden, ist die Access-Beziehung vorzuziehen.
+ PdfErzeuger
«access»
Realisierung in Java
Abbildung 7.9 Paket-Access
Ein Paket-Access (engl. PackageAccess) ist eine Beziehung, die alle Namen öffentlicher Elemente eines Pakets dem importierenden Paket als privat hinzufügt.
In Abbildung 7.9 importiert das Paket restaurantsystem alle Elementnamen des
Pakets werkzeuge über eine <<access>>-Beziehung, wodurch sie als privat (private)
deklariert werden.
Java enthält nativ keine Unterstützung des öffentlichen Imports von Paketen, der
mit dem Stereotyp <<import>> gekennzeichnet wird. Alle importierten Elementnamen sind nur im jeweils importierenden Paket verfügbar, was der <<access>>-Beziehung in der UML entspricht. Eine <<import>>-Beziehung muss daher in Java durch
<<access>>-Beziehungen ersetzt werden. Dies kann z. B. auf die in Abbildung 7.11 dargestellte Art durchgeführt werden:
restaurantkette
Etwas kompakter kann die <<import>>- und <<access>>-Beziehung auch innerhalb
von Paketen notiert werden (siehe Abbildung 7.10). Die Elemente müssen dabei über
ihre qualifizierten Namen eindeutig identifiziert werden:
restaurantsystem
restaurantsystem
«import»
Trotz der <<import>>-Beziehung zwischen restaurantkette und restaurantsystem
kann damit in restaurantkette kein Zugriff auf den PdfErzeuger über seinen unqualifizierten Namen erfolgen.
restaurantkette
Notationselemente
restaurantkette
werkzeuge
«import»
restaurantsystem
«access»
+ PdfErzeuger
werkzeuge
«access»
+ PdfErzeuger
werkzeuge
«access»
{import restaurantsystem::*}
{access werkzeuge::PdfErzeuger}
+PdfErzeuger
Abbildung 7.11 Umwandlung von <<import>> in <<access>>
Abbildung 7.10 Alternative Notation für Paket-Import und -Access
Das Paket restaurantkette aus Abbildung 7.10 importiert alle Elemente des Pakets
restaurantsystem, was an dem notierten * (Stern) hinter restaurantsystem zu erkennen ist. Das Paket restaurantsystem macht dagegen von der Möglichkeit Gebrauch,
das zu importierende Element genau zu spezifizieren, indem es explizit den PdfErzeuger aus dem Paket werkzeuge benennt. Eventuelle weitere Elemente von werkzeuge
werden nicht importiert.
Verwendung
Verwenden Sie Paket-Importe, wenn Sie Elemente eines Pakets häufig in weiteren
Paketen wiederverwenden möchten. Paket-Importe ermöglichen nicht nur die Refe-
194
Im oberen Teil der Abbildung 7.11 kann vom Paket restaurantkette sowohl auf die
(nicht gezeigten) Bestandteile von restaurantsystem als auch auf die von werkzeuge
über deren unqualifizierte Namen zugegriffen werden.
Um vergleichbare Zugriffsmöglichkeiten mithilfe von <<access>>-Beziehungen zu
modellieren, muss von jedem einzelnen Paket zu allen zuvor direkt oder indirekt
über <<import>>-Beziehungen erreichbaren Paketen eine eigene <<access>>-Beziehung modelliert werden (unterer Teil von Abbildung 7.11).
Es muss jedoch darauf hingewiesen werden, dass der obere und untere Teil der Abbildung 7.11 nicht exakt äquivalent sind: Ein weiteres Paket, das restaurantkette importiert, hätte im oberen Teil der Abbildung direkten Zugriff auf PdfErzeuger, im unteren
Teil nicht.
195
7
Paketdiagramm
7.3
Als Vorlage für die Java-Realisierung soll das folgende Paketdiagramm verwendet
werden:
Notationselemente
C: Unterpakete werden in Java mit dem Punkt-Operator referenziert. Das an dieser
Stelle verwendete *-Zeichen stellt in Java eine Art Joker dar, durch den alle Klassennamen des Pakets importiert werden.
werkzeuge
restaurantsystem
Realisierung in C#
xml
+ Restaurant
«access»
+ PdfErzeuger
+ XmlErzeuger
Auch C# unterstützt die <<import>>-Beziehung nicht. Der folgende Programmcode
realisiert das Diagramm aus Abbildung 7.12:
A namespace restaurantsystem
{
Abbildung 7.12 Beispiel für einen Paket-Import
B
using werkzeuge;
using werkzeuge.xml;
A package restaurantsystem;
public class Restaurant
{
PdfErzeuger p = new PdfErzeuger();
XmlErzeuger x = new XmlErzeuger();
}
B import werkzeuge.PdfErzeuger;
C import werkzeuge.xml.*;
public class Restaurant
{
PdfErzeuger p = new PdfErzeuger();
XmlErzeuger x = new XmlErzeuger();
}
Listing 7.6 /beispiele/java/kap7/restaurantsystem/Restaurant.java
}
Listing 7.7 /beispiele/c#/kap7/kap_7_3_2/Kap_7_3_2.cs
A: Die im Folgenden implementierten Klassen und Pakete befinden sich im Paket
(namespace) restaurantsystem.
B: C# verwendet das Schlüsselwort using, um einen Paket-Access zu deklarieren.
A: Die im Folgenden implementierte Klasse Restaurant befindet sich im Paket
restaurantsystem.
Es werden immer alle Klassennamen des Pakets importiert. Der Import eines einzelnen Klassennamens wird von C# nicht unterstützt.
B: Der Klassenname PdfErzeuger aus dem Paket werkzeuge wird in das aktuelle Paket
importiert. Im Unterschied zur UML, in der das Paket externe Elemente importiert, ist dies in Java die Aufgabe einer jeden Klasse des jeweiligen Pakets.
Der Zugriff auf Unterpakete erfolgt wie in Java mithilfe des Punkt-Operators.
Obwohl es sich im Sinne der UML streng genommen um eine <<access>>-Beziehung handelt, verwendet Java hierfür das Schlüsselwort import.
Es sollte an dieser Stelle nochmals betont werden, dass nicht die Klasse selbst, sondern nur deren Name importiert wird. Es wird also lediglich die Referenzierung
der Klasse über ihren unqualifizierten Namen PdfErzeuger ermöglicht. Wie von
der UML definiert, ist die Klasse auch ohne den Import über ihren qualifizierten
Namen werkzeuge.PdfErzeuger erreichbar.
7.3.3 Paket-Merge
Quellpaket
vipGaesteverwaltung
Zielpaket
Paket-Merge
gaesteverwaltung
«merge»
Abbildung 7.13 Paket-Merge
196
197
7
Paketdiagramm
7.3
Notationselemente
Was passiert aber, wenn beide Pakete bereits Elemente mit denselben Namen enthalten?
Beschreibung
Ein Paket-Merge (engl. PackageMerge) definiert eine Beziehung zwischen zwei Paketen, bei der die nicht privaten Inhalte des Zielpakets mit den Inhalten des Quellpakets
verschmolzen werden.
P1
Im Beispiel aus Abbildung 7.13 wird der Inhalt des Pakets gaesteverwaltung mit dem
Inhalt des Pakets vipGaesteverwaltung verschmolzen.
Im Prinzip stellt eine Merge-Beziehung eine verkürzende Notation für alle Transformationen dar, die bei der Verschmelzung des Zielpakets mit dem Quellpaket
benötigt werden. Das Beispiel aus Abbildung 7.14 verdeutlicht die prinzipielle Funktionsweise eines Paket-Merge und zeigt die entsprechenden Transformationen:
P2
A
«merge»
A
P1
P2::A
P1
P2
«merge»
A
A
B
Abbildung 7.15 Merge von Elementen mit demselben Namen
P1
P2::B
A
B
Die Pakete P1 und P2 enthalten im oberen Teil der Abbildung 7.15 beide ein Element A.
Bei einem Paket-Merge wird zwischen dem Element aus Paket P2 (P2::A) und dem Element aus Paket P1 (A) eine Generalisierungsbeziehung hinzugefügt, wie im unteren
Teil der Abbildung dargestellt ist.
Damit erweitert das Element A seine eigenen Attribute und Operationen durch diejenigen des Elements P2::A. Es entsteht somit ein neues Element, das nach den Regeln
der Generalisierung alle Attribute und Operationen der Elemente P1::A und P2::A
besitzt.
Abbildung 7.14 Merge zweier Pakete mit unterschiedlichen Elementen
Betrachten wir noch ein weiteres Beispiel, in dem ein leeres Paket zwei weitere Pakete
mergt, die beide dasselbe Element enthalten (siehe Abbildung 7.16).
Im oberen Teil der Abbildung 7.14 wird ein Paket-Merge des Pakets P2 in das Paket P1
modelliert. Paket P1 definiert ein Element A, Paket P2 ein Element B.
In Abbildung 7.16 werden die zwei Pakete P1 und P2, die jeweils ein Element A definieren, in ein leeres Paket P3 gemergt. Bei der Verschmelzung wird ein neues Element A definiert, das von P1::A und P2::A erbt und damit alle Attribute und
Operationen beider Elemente nach den Regeln der Generalisierung in sich vereinigt.
Der untere Teil der Abbildung zeigt die Auswirkungen des Merge auf das Paket P1.
Das ursprünglich bereits vorhandene Element A bleibt erwartungsgemäß erhalten.
Da das Element B zuvor nicht in P1 existierte, wird ein neues Element B definiert, das
das Element B des Pakets P2 (P2::B) spezialisiert und damit nach den Regeln der Generalisierung über alle Attribute und Operationen des Elements P2::B verfügt. (Generalisierung wurde in Abschnitt 2.3.12 vorgestellt.)
198
Es ist durchaus üblich, dass in den einzelnen Paketen bereits Generalisierungen und
Assoziationen definiert sind. Eine Merge-Beziehung verändert die Generalisierungen
und Assoziationen nicht.
199
7
Paketdiagramm
7.3
P1
P1
P2
A
Notationselemente
P2
B
B
A
C
A
P3
D
P3
«merge»
D
«merge»
«merge»
E
«merge»
P3
P3
P1::B
P1::A
P2::B
P2::A
B
A
P1::A
P2::C
P2::D
A
C
D
E
Abbildung 7.16 Ein leeres Paket mergt Elemente mit demselben Namen.
Sie verändert lediglich die Elemente, die an ihnen teilnehmen, was am Beispiel der
Abbildung 7.17 verdeutlicht wird.
Abbildung 7.17 Merge von Elementen mit Generalisierungen und Assoziationen
Im oberen Teil der Abbildung 7.17 definiert Paket P1 ein Element B, das von A spezialisiert wird. Im Paket P2 wird dagegen B vom Element C spezialisiert, das wiederum eine
Assoziation zu D besitzt. Paket P3 mergt die beiden Pakete P1 und P2 und definiert
gleichzeitig zwei Elemente D und E, die miteinander durch eine Assoziation verbunden sind.
Im oberen Teil der Abbildung 7.18 beinhaltet das Paket P1 das Paket P3 nicht. Daher
wird beim Merge (unterer Teil der Abbildung) in P1 ein neues Paket P3 definiert, das
mit dem Unterpaket P3 aus P2 (P2::P3) eine Merge-Beziehung eingeht.
Der untere Teil der Abbildung 7.17 zeigt die fünf durch den Merge entstandenen
Elemente A, B, C, D und E. Deren Struktur hat sich durchaus verändert, die ursprünglichen Generalisierungen und Assoziationen (hervorgehoben) bleiben jedoch erhalten.
Wie durch dieses Beispiel angedeutet, folgen die Unterpakete bei Merge denselben
Regeln wie innere Elemente von Paketen. Während die Elemente durch die Verwendung von Generalisierungen verschmolzen werden, geschieht dies bei Paketen
durch Merge-Beziehungen.
200
Es bleibt noch zu klären, was bei einem Merge mit Paketen passiert, die selbst in weiteren Paketen enthalten sind. Den einfachsten Fall zeigt Abbildung 7.18.
201
7
Paketdiagramm
7.3
P1
Notationselemente
hung zwischen dem Quellpaket P1 und dem Paket P4, wie im unteren Teil von Abbildung 7.19 dargestellt ist.
P2
P3
Verwendung
«merge»
Merge-Beziehungen werden verwendet, wenn im Modell Pakete vorhanden sind,
deren Inhalte und Konzepte sich ergänzen und daher zu neuer Gesamtheit zusammengesetzt werden können.
Wie eingangs erwähnt, stellt eine Merge-Beziehung lediglich eine abkürzende Notation für Transformationen der einzelnen Elemente aus Paketen unter Zuhilfenahme
von Generalisierungen dar. Erkennen Sie, dass Bedarf an der Spezialisierung vieler
Objekte aus unterschiedlichen Paketen besteht, um ein ähnlich arbeitendes Paket zu
erhalten, können Sie die Merge-Beziehung einsetzen.
P1
P2::P3
Sie sollten die entstehende Vererbungshierarchie jedoch genau überprüfen, da mit
der Verwendung der Merge-Beziehung auch unerwünschte Effekte auftreten können
(Beispiel in Abbildung 7.20).
«merge»
P3
P1
P2
Abbildung 7.18 Merge eines Unterpakets
A
B
Weitere Beziehungen zwischen Paketen (<<import>> und <<access>>) bleiben bei
einem Paket-Merge erhalten:
B
A
P1
P2
P3
P4
P3
«merge»
«import»
«merge»
«merge»
P1
P2::P3
P4
P3
«merge»
«import»
P3
Abbildung 7.19 Import-Beziehungen bleiben beim Merge erhalten.
Der obere Teil der Abbildung 7.19 modelliert ein Merge zwischen dem Paket P1 und
dem Paket P2, das seinerseits P4 importiert.
Trotz des Merge muss die Import-Beziehung erhalten bleiben, da das Paket P2::P3
andernfalls nicht mehr funktionsfähig wäre. Daher entsteht eine <<import>>-Bezie-
202
P1::A
P2::A
P1::B
A
P2::B
B
FEHLER !!!
Abbildung 7.20 Gefahr der Merge-Beziehung
203
7
Paketdiagramm
7.5
Abbildung 7.20 zeigt zwei Pakete P1 und P2. Im Paket P1 spezialisiert das Element B ein
Element A, in Paket P2 ist es genau umgekehrt: A spezialisiert B.
restaurantsystem
Irrungen und Wirrungen
gaesteverwaltung
Werden die beiden Pakete mithilfe der Merge-Beziehung in Paket P3 verschmolzen,
entsteht eine fehlerhafte Generalisierungshierarchie, in der sowohl A von B als auch
B von A erbt, wovor bereits in Abschnitt 2.5, »Irrungen und Wirrungen«, gewarnt
wurde.
Gast
#
#
kundennummer
umsatz: float = 0
Verwenden Sie die Merge-Beziehung daher nur mit großer Vorsicht.
«import»
Realisierung in Java
Java bietet kein Sprachmittel, das einem Paket-Merge entspräche, sodass die entstehende Hierarchie der Generalisierungen einzeln realisiert werden muss. Wie man in
Java eine Generalisierung implementiert, wird in Abschnitt 2.3.12 erläutert.
werkzeuge
«access»
«access»
«merge»
+ PdfErzeuger
Realisierung in C#
Für C# gilt bei der Merge-Beziehung dasselbe wie für Java.
datenverwaltung
datenbank
vipGaesteverwaltung
datenpflege
Gast
7.4 Lesen eines Paketdiagramms
#
#
Das Paketdiagramm aus Abbildung 7.21 definiert sieben Pakete:
lieblingswein
leibgericht
왘 restaurantsystem
왘 gaesteverwaltung
왘 werkzeuge
Abbildung 7.21 Beispiel für ein Paketdiagramm
왘 datenverwaltung mit zwei Unterpaketen datenbank und datenpflege
왘 vipGaesteverwaltung
Das Paket restaurantsystem importiert den Klassennamen PdfErzeuger aus dem
Paket werkzeuge als öffentlich, die Bestandteile der datenverwaltung als privat. Damit
wird der direkte Zugriff auf Elemente der datenverwaltung von allen weiteren Paketen, die restaurantsystem importieren, verboten.
Auch das Paket gaesteverwaltung importiert die datenverwaltung als privat und verbietet damit allen weiteren Paketen den direkten Zugriff.
Die Klasse Gast ist sowohl im Paket gaesteverwaltung als auch in vipGaesteverwaltung
enthalten. Da beide Pakete unterschiedliche Namensräume definieren, entsteht
dadurch kein Namenskonflikt.
Das Paket vipGaesteverwaltung mergt jedoch die gaesteverwaltung, wodurch eine
Generalisierung zwischen den beiden Gast-Klassen definiert wird und die Klasse vipGaesteverwaltung::Gast alle Attribute der Klasse gaesteverwaltung::Gast erbt.
204
7.5 Irrungen und Wirrungen
Abbildung 7.22 zeigt eine Auswahl der häufigsten Fehler bei der Modellierung mit
Paketdiagrammen:
A: Paketname fehlt
Pakete müssen mit Namen eindeutig definiert werden.
B: Bezeichnung der Beziehung fehlt
Definieren Sie die Art der modellierten Beziehung. Handelt es sich um eine
<<import>>-, <<access>>- oder eine <<merge>>-Beziehung?
C: Zirkulare <<merge>>-Beziehung
Zwei Pakete dürfen sich nicht gegenseitig mergen. Achten Sie auch darauf, dass
keine zirkulare Beziehung zwischen mehreren Paketen entsteht, die möglicherweise nicht so einfach zu erkennen ist wie in diesem Beispiel.
205
7
Paketdiagramm
7.6
D: Ungültige <<merge>>-Beziehung
Die <<merge>>-Beziehung darf nur zwischen Paketen modelliert werden. Ein
Merge einer Klasse mit einem Paket ist nicht definiert.
Zusammenfassung
Paketname
restaurantsystem
E: Falsche Hierarchie
Klassen können weitere Klassen, jedoch keine Pakete enthalten. Andersherum ist
es Paketen durchaus gestattet, Klassen in sich zu gruppieren.
Paket
A
Abbildung 7.23 Paket
gaesteverwaltung
Gast
#
#
kundennummer
umsatz: float = 0
왘 Ein Paket-Import importiert alle Namen des importierten Pakets als öffentlich,
ein Paket-Access als privat.
importiertes Paket
D
importierendes Paket
werkzeuge
«merge»
B
Werkzeuge
«access»
xml
restaurantsystem
C
Paket-Import
«import»
«merge»
«access»
«merge»
E
datenverwaltung
Paket-Access
Abbildung 7.24 Paket-Import und -Access
datenverwaltung
datenbank
vipGaesteverwaltung
왘 Mithilfe eines Paket-Merge können die Inhalte von Paketen verschmolzen
datenpflege
Gast
#
#
lieblingswein
leibgericht
werden.
Quellpaket
vipGaesteverwaltung
Paket-Merge
gaesteverwaltung
«merge»
Abbildung 7.22 Ein fehlerhaftes Paketdiagramm
7.6 Zusammenfassung
Zielpaket
Abbildung 7.25 Paket-Merge
Abschließend werden die wichtigsten Notationselemente kurz aufgeführt:
왘 Pakete gruppieren Elemente wie Klassen oder weitere Pakete und definieren
Namensräume.
206
207
Auf einen Blick
Auf einen Blick
1
Einführung ...............................................................................................................
17
TEIL I Strukturdiagramme ............................................................................................
33
2
Klassendiagramm ..................................................................................................
35
3
Objektdiagramm .................................................................................................... 121
4
Kompositionsstrukturdiagramm ..................................................................... 135
5
Komponentendiagramm .................................................................................... 157
6
Verteilungsdiagramm .......................................................................................... 173
7
Paketdiagramm ...................................................................................................... 185
TEIL II Verhaltensdiagramme ..................................................................................... 209
8
Anwendungsfalldiagramm ................................................................................ 211
9
Aktivitätsdiagramm .............................................................................................. 227
10
Zustandsdiagramm ............................................................................................... 309
TEIL III Interaktionsdiagramme .................................................................................. 357
11
Sequenzdiagramm ................................................................................................ 359
12
Kommunikationsdiagramm ............................................................................... 399
13
Timing-Diagramm ................................................................................................. 409
14
Interaktionsübersichtsdiagramm .................................................................... 423
TEIL IV Metamodellierung ........................................................................................... 433
15
Profildiagramm ...................................................................................................... 435
Inhalt
Inhalt
Vorwort ..................................................................................................................................................
13
1
Einführung
17
1.1
Weshalb muss Software modelliert werden? ........................................................
17
1.2
Die Phasen bei der Softwareentwicklung ................................................................
18
1.2.1
1.2.2
1.2.3
1.2.4
1.2.5
1.2.6
Analyse ....................................................................................................................
Entwurf ....................................................................................................................
Implementierung und Dokumentation ........................................................
Test ...........................................................................................................................
Einsatz ......................................................................................................................
Wartung und Pflege ............................................................................................
18
19
19
20
20
20
1.3
Was ist die UML? .................................................................................................................
20
1.4
Die Geschichte der UML ...................................................................................................
21
1.5
Von der UML 1.x zur UML 2.5 ..........................................................................................
23
1.6
Diagramme der UML 2.5 ...................................................................................................
25
TEIL I
2
Strukturdiagramme
Klassendiagramm
35
2.1
Anwendungsbereiche .......................................................................................................
35
2.2
Übersicht .................................................................................................................................
36
2.3
Notationselemente ............................................................................................................
37
2.3.1
2.3.2
Klasse .......................................................................................................................
Attribut ....................................................................................................................
37
39
2.3.3
2.3.4
2.3.5
2.3.6
2.3.7
2.3.8
Operation ................................................................................................................
Binäre Assoziation ...............................................................................................
Reflexive Assoziation ..........................................................................................
N-äre Assoziation .................................................................................................
Qualifizierte Assoziation ...................................................................................
Assoziationsklasse ...............................................................................................
45
55
63
64
68
70
5
Inhalt
Inhalt
4.4
Lesen eines Kompositionsstrukturdiagramms ......................................................
151
4.5
Irrungen und Wirrungen ..................................................................................................
153
4.6
Zusammenfassung .............................................................................................................
154
5
Komponentendiagramm
157
5.1
Anwendungsbereiche .......................................................................................................
157
111
5.2
Überblick .................................................................................................................................
157
Irrungen und Wirrungen ..................................................................................................
114
5.3
Notationselemente ............................................................................................................
159
Zusammenfassung .............................................................................................................
116
5.3.1
5.3.2
Komponente ..........................................................................................................
Konnektor ...............................................................................................................
159
163
5.3.3
Artefakt ....................................................................................................................
165
5.4
Lesen eines Komponentendiagramms ......................................................................
167
5.5
Irrungen und Wirrungen ..................................................................................................
169
5.6
Zusammenfassung .............................................................................................................
170
2.3.9
2.3.10
2.3.11
2.3.12
2.3.13
2.3.14
2.3.15
2.3.16
2.3.17
Aggregation ...........................................................................................................
Komposition ..........................................................................................................
Abhängigkeit .........................................................................................................
Generalisierung/Spezialisierung ....................................................................
Stereotyp .................................................................................................................
Abstrakte Klasse ...................................................................................................
Template .................................................................................................................
Schnittstelle ...........................................................................................................
Anmerkung ............................................................................................................
72
76
79
82
92
95
98
105
110
2.4
Lesen eines Klassendiagramms ....................................................................................
2.5
2.6
3
Objektdiagramm
121
3.1
Anwendungsbereiche .......................................................................................................
121
3.2
Übersicht .................................................................................................................................
121
3.3
Notationselemente ............................................................................................................
122
3.3.1
3.3.2
Objekt .......................................................................................................................
Link ............................................................................................................................
122
127
6
Verteilungsdiagramm
173
3.4
Lesen eines Objektdiagramms ......................................................................................
130
6.1
Anwendungsbereiche .......................................................................................................
173
3.5
Irrungen und Wirrungen ..................................................................................................
131
6.2
Übersicht .................................................................................................................................
173
3.6
Zusammenfassung .............................................................................................................
133
6.3
4
Kompositionsstrukturdiagramm
135
4.1
Anwendungsbereiche .......................................................................................................
135
4.2
Übersicht .................................................................................................................................
135
Notationselemente ............................................................................................................
136
4.3.1
4.3.2
4.3.3
4.3.4
136
139
147
149
4.3
6
Part ............................................................................................................................
Port und Konnektor .............................................................................................
Kollaboration .........................................................................................................
Kollaborationsanwendung ...............................................................................
Notationselemente ............................................................................................................
174
6.3.1
6.3.2
Knoten .....................................................................................................................
Kommunikationspfad ........................................................................................
174
179
6.4
Lesen eines Verteilungsdiagramms ............................................................................
180
6.5
Irrungen und Wirrungen ..................................................................................................
181
6.6
Zusammenfassung .............................................................................................................
183
7
Paketdiagramm
185
7.1
Anwendungsbereiche .......................................................................................................
185
7.2
Übersicht .................................................................................................................................
185
7
Inhalt
Inhalt
7.3
Notationselemente ............................................................................................................
186
7.3.1
7.3.2
7.3.3
Paket .........................................................................................................................
Paket-Import ..........................................................................................................
Paket-Merge ...........................................................................................................
186
193
197
7.4
Lesen eines Paketdiagramms ........................................................................................
204
7.5
Irrungen und Wirrungen ..................................................................................................
205
7.6
Zusammenfassung .............................................................................................................
206
TEIL II
8
Verhaltensdiagramme
Anwendungsfalldiagramm
211
9.3.3
9.3.4
9.3.5
9.3.6
9.3.7
9.3.8
9.3.9
9.3.10
9.3.11
9.3.12
9.3.13
Aktivitätsbereich ..................................................................................................
Objektknoten und Objektfluss ........................................................................
Signal-Sendung und Signal-Empfang ...........................................................
Aktivität ...................................................................................................................
Start- und Endknoten .........................................................................................
Entscheidungs- und Verbindungsknoten ....................................................
Gabelung und Vereinigung ..............................................................................
Schleifenknoten ....................................................................................................
Bedingungsknoten ..............................................................................................
Unterbrechungsbereich .....................................................................................
Expansionsbereich ...............................................................................................
233
236
249
259
265
267
273
281
287
292
297
9.4
Lesen eines Aktivitätsdiagramms ................................................................................
299
9.5
Irrungen und Wirrungen ..................................................................................................
301
9.6
Zusammenfassung .............................................................................................................
304
8.1
Anwendungsbereiche .......................................................................................................
211
8.2
Übersicht .................................................................................................................................
212
8.3
Notationselemente ............................................................................................................
212
10 Zustandsdiagramm
309
8.3.1
8.3.2
Systemgrenze ........................................................................................................
Akteur .......................................................................................................................
212
213
10.1 Anwendungsbereiche .......................................................................................................
309
8.3.3
8.3.4
8.3.5
8.3.6
8.3.7
Anwendungsfall ...................................................................................................
Assoziation .............................................................................................................
Generalisierung/Spezialisierung ....................................................................
Include-Beziehung ...............................................................................................
Extend-Beziehung ................................................................................................
215
216
217
219
220
10.2 Übersicht .................................................................................................................................
310
10.3 Notationselemente ............................................................................................................
311
8.4
Lesen eines Anwendungsfalldiagramms ..................................................................
221
8.5
Irrungen und Wirrungen ..................................................................................................
223
8.6
Zusammenfassung .............................................................................................................
224
9
Aktivitätsdiagramm
227
9.1
Anwendungsbereiche .......................................................................................................
227
9.2
Übersicht .................................................................................................................................
228
9.3
Notationselemente ............................................................................................................
230
9.3.1
9.3.2
231
232
8
Aktion .......................................................................................................................
Kontrollfluss ...........................................................................................................
10.3.1
10.3.2
10.3.3
10.3.4
10.3.5
10.3.6
10.3.7
10.3.8
10.3.9
10.3.10
10.3.11
Zustand ...................................................................................................................
Event und Transition ...........................................................................................
Startzustand, Endzustand und Terminator .................................................
Entscheidung und Kreuzung ............................................................................
Zusammengesetzter Zustand ..........................................................................
Region ......................................................................................................................
Rahmen eines Zustandsautomaten ..............................................................
Generalisierung/Spezialisierung ....................................................................
Zustandsdiagramm in Java ...............................................................................
Zustandsdiagramm in C# ..................................................................................
Protokoll-Zustandsautomat .............................................................................
311
312
319
320
322
326
328
330
332
340
348
10.4 Lesen eines Zustandsdiagramms .................................................................................
350
10.5 Irrungen und Wirrungen ..................................................................................................
351
10.6 Zusammenfassung .............................................................................................................
353
9
Inhalt
Inhalt
TEIL III
Interaktionsdiagramme
13.3.2
13.3.3
13.3.4
13.3.5
Lebenslinie ..............................................................................................................
Zustandsverlaufslinie .........................................................................................
Wertverlaufslinie .................................................................................................
Nachricht ................................................................................................................
411
412
414
415
11 Sequenzdiagramm
359
11.1 Anwendungsbereiche .......................................................................................................
359
13.4 Lesen eines Timing-Diagramms ...................................................................................
418
11.2 Übersicht .................................................................................................................................
360
13.5 Irrungen und Wirrungen ..................................................................................................
419
11.3 Notationselemente ............................................................................................................
361
13.6 Zusammenfassung .............................................................................................................
420
14 Interaktionsübersichtsdiagramm
423
11.3.1
11.3.2
11.3.3
11.3.4
Lebenslinie ..............................................................................................................
Nachricht ................................................................................................................
Interaktionsrahmen ............................................................................................
Kombinierte Fragmente ....................................................................................
361
364
370
375
11.4 Lesen eines Sequenzdiagramms ..................................................................................
391
14.1 Anwendungsbereiche .......................................................................................................
423
11.5 Irrungen und Wirrungen ..................................................................................................
393
14.2 Übersicht .................................................................................................................................
423
11.6 Zusammenfassung .............................................................................................................
395
14.3 Notationselemente ............................................................................................................
14.3.1
14.3.2
14.3.3
14.3.4
425
Interaktionsrahmen ............................................................................................
Interaktion und Interaktionsreferenz ...........................................................
Kontrollfluss ...........................................................................................................
Kontrollknoten ......................................................................................................
425
425
426
427
12 Kommunikationsdiagramm
399
12.1 Anwendungsbereiche .......................................................................................................
399
14.4 Lesen eines Interaktionsübersichtsdiagramms .....................................................
428
12.2 Übersicht .................................................................................................................................
399
14.5 Irrungen und Wirrungen ..................................................................................................
429
12.3 Notationselemente ............................................................................................................
400
14.6 Zusammenfassung .............................................................................................................
430
12.3.1
12.3.2
Interaktionsrahmen ............................................................................................
Lebenslinie ..............................................................................................................
400
401
12.3.3
Nachricht ................................................................................................................
401
12.4 Lesen eines Kommunikationsdiagramms ................................................................
405
12.5 Irrungen und Wirrungen ..................................................................................................
405
12.6 Zusammenfassung .............................................................................................................
407
13 Timing-Diagramm
409
13.1 Anwendungsbereiche .......................................................................................................
409
13.2 Übersicht .................................................................................................................................
409
13.3 Notationselemente ............................................................................................................
410
13.3.1
10
Interaktionsrahmen ............................................................................................
TEIL IV
Metamodellierung
15 Profildiagramm
435
15.1 Anwendungsbereiche .......................................................................................................
435
15.2 Übersicht .................................................................................................................................
436
15.3 Notationselemente ............................................................................................................
15.3.1
15.3.2
15.3.3
15.3.4
Metamodell, Profil und Metamodell-Referenz ..........................................
Metaklasse .............................................................................................................
Stereotyp und Erweiterung ..............................................................................
Profilanwendung .................................................................................................
437
437
439
440
443
410
11
Inhalt
15.4 Lesen eines Profildiagramms .........................................................................................
445
15.5 Irrungen und Wirrungen ..................................................................................................
447
15.6 Zusammenfassung .............................................................................................................
448
Index ........................................................................................................................................................
451
12
Index
Index
{complete} .................................................................. 85
{composite} ............................................................... 43
{disjoint} ..................................................................... 85
{extended} ............................................................... 331
{final} ......................................................................... 331
{incomplete} .............................................................. 85
{nonunique} ....................................................... 43, 58
{ordered} .............................................................. 42, 57
{overlapping} ............................................................ 85
{protocol} ................................................................. 349
{readOnly} ........................................................... 41, 42
{redefines} ........................................................... 42, 57
{required} ................................................................ 441
{seq} ....................................................................... 42, 58
{sequence} ........................................................... 42, 58
{subsets} ............................................................... 42, 57
{union} .................................................................. 42, 57
<<abstract>> .............................................................. 95
<<access>> ........................................... 194, 202, 207
<<application server>> ...................................... 175
<<artifacts>> .......................................................... 162
<<auxilliary>> .......................................................... 93
<<bind>> .................................................................. 100
<<call>> ....................................................................... 80
<<centralBuffer>> ...................................... 241, 242
<<client workstation>> ..................................... 176
<<create>> .................................................................. 80
<<custom code>> ................................................. 167
<<datastore>> ........................................................ 242
<<dataType>> ........................................................... 94
<<delegate>> .......................................................... 164
<<deploy>> ............................................................. 177
<<deployment spec>> ........................................ 178
<<derive>> ................................................................. 80
<<device>> .............................................................. 175
<<document>> ...................................................... 166
<<embedded device>> ....................................... 176
<<entity>> ............................................................... 161
<<enumeration>> ................................................... 94
<<executable>> ..................................................... 166
<<execution environment>> .......................... 175
<<extend>> ................................................... 220, 226
<<external>> .......................................................... 235
<<file>> ..................................................................... 166
<<focus>> ................................................................... 93
<<implement>> .................................................... 161
<<implementation class>> ................................. 93
<<import>> ......................................... 193, 202, 207
<<include>> .................................................. 219, 226
<<instantiate>> ............................................. 80, 123
<<interface>> ................................................. 93, 105
<<library>> ............................................................. 166
<<manifest>> ........................................................ 166
<<merge>> .................................................... 197, 207
<<metaclass>> ...................................................... 439
<<metamodel>> ................................................... 437
<<mobile device>> .............................................. 176
<<permit>> ................................................................ 80
<<postcondition>> ............................................. 259
<<precondition>> ................................................ 259
<<process>> ........................................................... 161
<<profile>> ............................................................. 437
<<provided interfaces>> ................................... 160
<<realization>> ..................................................... 162
<<refine>> ................................................................. 80
<<required interfaces>> .................................... 160
<<script>> ............................................................... 166
<<selection>> ........................................................ 241
<<service>> ............................................................ 162
<<source>> ............................................................. 166
<<specification>> ................................................ 161
<<substitute>> ......................................................... 80
<<subsystem>> .................................................... 162
<<tool-generated>> ............................................ 167
<<trace>> ................................................................... 80
<<type>> ..................................................................... 93
<<use>> .................................................... 81, 106, 159
<<utility>> ................................................................. 93
A
Abbruch .......................................................... 375, 389
Abgeleitete Klasse .................................................. 82
Abhängigkeit ............................................................ 79
Abstract Class ........................................................... 95
Abstrakte Klasse ............................................ 95, 117
AcceptEventAction ............................................. 249
Access-Beziehung ....................................... 194, 207
ACID-Prinzip .......................................................... 161
Action ....................................................................... 231
Activity ..................................................................... 259
Activity Diagram ........................................... 29, 227
ActivityEdge ........................................................... 230
ActivityFinalNode ............................................... 266
451
Index
Index
ActivityNode .......................................................... 230
ActivityPartition ................................................... 234
Actor .......................................................................... 213
Aggregation .............................................. 72, 78, 118
Akteur ............................................................. 213, 225
Aktion ............................................................. 231, 304
Aktionssequenz .................................................... 315
Aktiver Zustand .................................................... 311
Aktivität ......................................................... 259, 304
Aktivitätsaufruf .................................................... 259
Aktivitätsbereich ........................................ 233, 305
Aktivitätsdiagramm .................. 29, 227, 359, 423
Aktivitätsende .................................... 265, 266, 305
Aktivitätskante ...................................................... 230
Aktivitätsknoten ........... 230, 232, 234, 236, 259,
261, 292, 304, 305
All (AnyEvent) ........................................................ 314
Allgemeine Klasse ................................................... 82
Alternative .................................................... 375, 376
alt-Fragment .......................................................... 376
Analyse/Definition .................... 18, 227, 359, 360
Analyse-Phase ............................................. 227, 359
Anmerkung .................................................. 110, 119
Antwort-Nachricht .............................................. 367
Anwendungsfall ......................................... 215, 225
Anwendungsfalldiagramm ....................... 29, 211
AnyReceiveEvent ................................................. 314
Architekturdiagramm ........................................ 135
Artefakt ....................................... 165, 171, 177, 183
Artifact ...................................................................... 165
Assembly Connector .......................................... 163
assert-Fragment .................................................... 385
Assertion ................................................................. 385
Association ............................................................. 217
AssociationClass ...................................................... 70
Assoziation ................ 55, 117, 127, 179, 216, 225
Assoziationsklasse .................................................. 70
Assoziationsname .................................................. 56
Asynchrone Nachricht ....................................... 365
Attribut ........................................... 37, 116, 123, 176
Attributwert ........................................................... 123
Attributzuweisung .............................................. 368
Ausführbarer Knoten ......................................... 230
Ausführungsbalken ............................................ 361
Ausführungsumgebung .................................... 175
Ausgabeparameter .................................... 236, 260
Ausgangskollektion ............................................ 298
Ausnahme ............................................................... 386
Ausprägung ............................................................... 38
Austritt über Endzustand ................................. 325
452
Austritt über Terminator ................................. 325
Austrittspunkt ................................... 326, 328, 329
B
Ball-and-Socket-Symbol ........................... 106, 163
Ball-Symbol ................................................... 106, 160
Basisklasse ................................................................. 82
Bauteilkonnektor ................................................. 163
Bedingungsknoten ..................................... 287, 307
Behavior Port ........................................................ 141
Benötigte Schnittstelle ...................................... 106
Besitzanzeige ............................................................ 60
Binäre Assoziation ................................................. 55
Binary Association ................................................. 55
Binden ...................................................................... 100
Black-Box-Sicht ..................................................... 160
Booch, Grady ..................................................... 22, 23
Booch-Methode ....................................................... 22
break-Fragment .................................................... 389
C
CallEvent ................................................................. 312
CASE-Werkzeuge .................................... 19, 22, 114
CentralBuffer ......................................................... 241
ChangeEvent ................................................. 313, 314
Choice ....................................................................... 320
Class Diagram .................................................... 25, 35
Client-Supplier-Beziehung ................................. 79
Coad, Peter ................................................................. 22
Collaboration ......................................................... 147
CollaborationUse ................................................. 149
CombinedFragment ........................................... 375
Communication Diagram ......................... 31, 399
CommunicationPath ......................................... 179
Complex Port ........................................................ 141
Component ............................................................ 159
Component Diagram .................................. 28, 157
Composite State ................................................... 323
Composite Structure Diagram ................ 27, 135
Computer Aided Software Engineering ........ 19
ConditionalNode ................................................. 287
Connector ...................................................... 139, 232
consider-Fragment ............................................. 387
content ..................................................................... 442
Continuation ......................................................... 377
ControlFlow ........................................................... 232
ControlNode .......................................................... 230
Coregion .................................................................. 381
Coregion Area ........................................................ 381
Critical Region ....................................................... 384
critical-Fragment .................................................. 384
D
Datenspeicher ....................................................... 242
Datenstrom ............................................................ 238
DecisionNode ........................................................ 267
Deep History .......................................................... 324
Deep History Entry .............................................. 324
Default Entry .......................................................... 324
Default-Zustand .................................................... 319
Defer .......................................................................... 317
Definition-Phase .................................................. 227
Dekomposition ..................................................... 362
Delegate ................................................................... 257
Delegation Connector ........................................ 164
Delegationskonnektor .......... 163, 164, 171, 257
Dependency .............................................................. 79
Deployment Diagram ................................. 28, 173
DeploymentSpecification ................................ 178
Design Pattern ............................................. 148, 251
Design-Phase ...................................... 157, 228, 359
Destruktionsnachricht ...................................... 368
Do-Aktion ................................................................ 317
Do-Bereich .............................................................. 281
Drei Amigos ............................................................... 23
Drei-Schichten-Architektur ............................. 157
Dynamische Verzweigung ..................... 320, 355
Dynamisches Binden ............................................ 83
Entscheidung ............................................... 320, 355
Entscheidungsgrundlage ................................. 268
Entscheidungsknoten ............ 267, 306, 427, 431
Entwurf/Design ................... 18, 35, 228, 359, 360
Entwurf-Phase .............................................. 157, 228
Entwurfsmuster .......................................... 148, 251
Entwurfsphase ......................................................... 36
Ereignis .................................................................... 312
Erweiterung ........................................... 83, 440, 449
Erweiterungspunkt ............................................. 220
Erzeugungsnachricht ......................................... 368
Event ................................... 256, 312, 318, 349, 354
Exception ................ 242, 260, 267, 295, 296, 386
Exception-Handler .............................................. 242
Exception-Knoten ............................................... 260
Exception-Konzept .................................... 295, 296
Exception-Objekt ................................................. 242
Exception-Objektknoten .................................. 242
ExecutableNode ................................................... 230
ExecutionSpecification ..................................... 361
Exemplar ................................................................. 122
Exit Point ................................................................ 328
Exit Point Exit ....................................................... 326
Exit-Aktion ............................................................. 317
ExpansionRegion ................................................ 297
Expansionsbereich ..................................... 297, 308
Explicit Entry ......................................................... 324
Expliziter Eintritt ................................................. 324
Extend Relationship ........................................... 220
Extend-Beziehung ...................................... 220, 226
Extension ................................................................ 440
Extension Point .................................................... 220
E
Effekt ...................................................... 312, 315, 354
Eigenschaft ...... 41, 46, 47, 54, 57, 435, 440, 449
Eigenschaftswert ........................................... 40, 444
Eingabeparameter ..................................... 236, 260
Eingangskollektion ............................................. 298
Einsatzphase ............................................................. 36
Einsatzspezifikation ............................................ 178
Einschränkung ......................................................... 58
Eintrittspunkt ..................................... 325, 328, 329
Else-Guard ............................................................... 270
Elternklasse ............................................................... 82
Endknoten ........................ 265, 266, 305, 427, 431
Endzustand ....................... 319, 323, 327, 328, 354
Entry Point .............................................................. 328
Entry Point Entry ................................................. 325
Entry-Aktion .......................................................... 317
F
FIFO ........................................................................... 240
FinalState ................................................................ 319
First In First Out ................................................... 240
Flache Historie ...................................................... 324
FlowFinalNode ...................................................... 266
Flussende ............................................. 265, 266, 305
For-Bereich ............................................................. 281
Foreign Key ............................................................... 68
Fork ............................................................................ 327
ForkNode ................................................................. 274
format ...................................................................... 442
Fortsetzung ............................................................ 377
Found Message ..................................................... 369
Frame ........................................................................ 328
Fremdschlüssel ........................................................ 68
453
Index
Index
G
Gabel-Symbol ........................................................ 259
Gabelung ........................... 273, 306, 327, 427, 432
Gamma, Erich .............................................. 148, 251
Gang of Four ........................................................... 148
Ganzes-Teile-Beziehung ............................. 72, 118
Gate ............................................................................ 372
Gefundene Nachricht ......................................... 369
Generalisierung ................ 82, 118, 217, 225, 330
Generalisierungsgruppen ................................... 83
Generalization ................................................ 82, 217
GeneralizationSet ................................................... 83
GeneralOrdering ........................................ 380, 417
Generische Klasse ................................................... 99
Gerichtete Assoziation ......................................... 58
getter-Operation ..................................................... 48
Guard ....................... 268, 312, 314, 354, 376, 379,
388, 389, 403
InteractionUse ...................................................... 372
Interaktion .................................................... 425, 430
Interaktionsdiagramm ..................... 30, 357, 399,
409, 423
Interaktions-Operand ........................................ 375
Interaktions-Operator ....................................... 375
Interaktionspunkt ............................................... 139
Interaktionsrahmen .... 370, 372, 396, 400, 407,
410, 421, 425, 430
Interaktionsreferenz ....................... 372, 425, 430
Interaktionsübersichtsdiagramm 31, 370, 423
Interface .................................................................. 105
Interne Aktion ...................................................... 317
InterruptibleActivityRegion ........................... 292
in-Übergabemodus ................................................ 46
Invariante ............................................................... 349
Irrelevante Nachrichten ........................... 375, 387
Ist-Ein-Beziehung ................................................... 83
Iterative ................................................................... 299
Iteratives Versenden .......................................... 404
H
H (Flache Historie) ............................................... 324
H* (Tiefe Historie) ................................................ 324
Helm, Richard .............................................. 148, 251
Horizontale Strukturierung ............................ 185
I
Icon ............................................................................ 441
If-Bereich ................................................................. 287
If-then-else Konstrukt ........................................ 292
ignore-Fragment .................................................. 387
Implementierungsphase .......... 18, 36, 228, 360
Import-Beziehung ..................................... 193, 207
Include Relationship ........................................... 219
Include-Beziehung .................................... 219, 226
Initial ......................................................................... 319
Initialisierung ........................................................ 281
InitialNode .............................................................. 265
inout-Übergabemodus ......................................... 47
InputParameters .................................................. 260
Instanz ............................................................... 38, 122
Instanzattribut ......................................................... 39
Instanziierung ................................................ 38, 123
Instanzoperation ..................................................... 46
Interaction Diagram .............................................. 30
Interaction Frame ................................................ 370
Interaction Overview Diagram ............... 32, 423
InteractionOperand ............................................ 375
InteractionOperator ........................................... 375
454
J
Jacobson, Ivar .................................................... 22, 23
Johnson, Ralph ............................................. 148, 251
Join ............................................................................. 327
JoinNode .................................................................. 274
JoinSpec ................................................................... 274
Junction ................................................................... 320
K
Kindklasse .................................................................. 82
Klasse ................................................................. 37, 116
Klassenattribut ........................................................ 39
Klassendiagramm ................................. 25, 35, 121
Klassenoperation .................................................... 46
Knoten ............................................................ 174, 183
Kollaboration ............................................... 147, 155
Kollaborationsanwendung .............................. 155
Kollaborationsausprägung .............................. 149
Kombinierte Fragmente .......................... 375, 396
Kommunikationsdiagramm .......... 31, 370, 399,
409, 423
Kommunikationskanal ..................................... 180
Kommunikationspfad .............................. 179, 183
Kommunikationsprotokoll ............................. 350
Komplexer Port .................................................... 141
Komponente ................................................ 159, 170
Komponentendiagramm .......................... 28, 157
Komponentenkonnektor ................................. 163
Komposition ............................................ 76, 78, 118
Kompositionskonnektor .................................. 163
Kompositionsstrukturdiagramm .......... 27, 135
Konnektor ......................... 139, 147, 154, 163, 232
Konstruktor ............................................................... 44
Kontrollfluss ............................. 232, 304, 426, 431
Kontrollknoten ........................................... 230, 427
Körper ....................................................................... 287
Kreuzung ....................................................... 320, 355
Kritischer Bereich ...................................... 375, 384
Kunde-Dienstleister-Beziehung ....................... 79
n-ary Association .................................................... 64
Navigierbarkeit ........................................................ 58
Negation ......................................................... 375, 383
Negative ................................................................... 383
neg-Fragment ........................................................ 383
new-Operator ..................................... 125, 127, 129
Node .......................................................................... 174
Notation ..................................................................... 20
Notationselemente ................................................ 20
Note ........................................................................... 110
n-zu-m-Assoziation ............................................... 68
L
O
Last In First Out ..................................................... 240
Lebenslinie .............. 361, 395, 401, 407, 411, 421
Leserichtung ............................................................. 56
Lifeline ...................................................................... 361
LIFO ............................................................................ 240
Link .................................................................. 127, 133
LocalPostcondition ............................................. 231
LocalPrecondition ............................................... 231
location .................................................................... 442
Lokale Nachbedingung ...................................... 231
Lokale Vorbedingung ......................................... 231
loop-Fragment ...................................................... 388
LoopNode ................................................................ 281
Lost Message .......................................................... 369
Manifestation ........................................................ 167
many-to-many Association ................................ 68
Mehrfachvererbung ............................................... 86
Merge-Beziehung ....................................... 197, 207
MergeNode ............................................................. 268
Message .................................................................... 364
Message Label ........................................................ 416
Metaklasse ........................................... 435, 439, 449
Metaklassen-Referenz ........................................ 438
Metamodell .................................................. 437, 448
Metamodell-Referenz .............................. 437, 448
Multiplizität .............. 40, 41, 46, 47, 56, 137, 180
Oberklasse ................................................................. 82
Object Diagram .............................................. 27, 121
Object Management Group ......................... 21, 23
Object Modeling Technique ............................... 22
ObjectFlow .............................................................. 236
ObjectNode ................................................... 230, 236
Object-Oriented Analysis .................................... 22
Object-Oriented Software Engineering ......... 22
Objekt .............................................................. 122, 133
Objektdiagramm ........................................... 27, 121
Objektfluss ..................................................... 236, 305
Objektknoten ..................................... 230, 236, 305
Observable .............................................................. 251
Observer ......................................................... 251, 252
Observerable .......................................................... 252
OMG ................................................................... 23, 435
OMT .............................................................................. 22
OOA .............................................................................. 22
OOSE ............................................................................ 22
Operation ......................................... 37, 45, 116, 312
opt-Fragment ........................................................ 378
Option ............................................................. 375, 378
Ordered .................................................................... 240
Ordering .................................................................. 240
Ordnungsangabe ................................................. 240
Ordnungsbeziehung ................................. 380, 417
out-Parameter ....................................................... 368
OutputParameters .............................................. 260
out-Übergabemodus ............................................. 46
N
P
Nachbedingung .......................................... 259, 349
Nachricht ................. 364, 395, 401, 408, 415, 422
Nachrichten-Label ............................................... 416
Namensraum ............................................... 187, 206
n-äre Assoziation .................................................... 64
Package .................................................................... 187
package ....................................................................... 40
Package Diagram .......................................... 28, 185
PackageAccess ....................................................... 194
PackageImport ...................................................... 193
M
455
Index
Index
PackageMerge ........................................................ 198
Paket ................................................................ 186, 206
Paket-Access ................................................. 194, 207
Paketdiagramm ............................................. 28, 185
Paket-Import ....................................... 193, 207, 438
Paket-Merge ................................................. 197, 207
Parallel ...................................................................... 299
Parallele Abläufe ................................................... 274
Parallelität ..................................................... 375, 379
Parameter-Liste ....................................................... 46
Parametersatz ....................................................... 238
ParameterSet ......................................................... 238
Parametrisierbare Klasse ..................................... 99
par-Fragment ......................................................... 380
Part ................................................................... 136, 154
PartDecomposition ............................................. 362
Partition ...................................................................... 84
Pin-Notation ....................................... 236, 237, 238
Polymorphismus .................................................... 83
Pop-Operation ............................................. 247, 248
Port ............................................... 139, 154, 159, 171
Postcondition .............................................. 259, 349
Precondition ................................................ 259, 349
Primitiver Datentyp ............................................... 51
private .......................................................................... 40
Profil ................................................................ 437, 448
Profilanwendung ....................................... 443, 449
Profildiagramm ............................................. 29, 435
Profile Diagram ........................................................ 29
ProfileApplication ............................................... 443
Properties ................................................................... 54
protected .................................................................... 40
ProtocolStateMachine ....................................... 348
Protokoll-Transition ........................................... 349
Protokoll-Zustandsautomat ............................ 348
Protokoll-Zustandsdiagramm .............. 309, 350
Provided Interface ............................................... 106
public ........................................................................... 40
Punkt-Notation ........................................................ 55
Push-Operation .......................................... 246, 248
Q
Qualified Association ............................................ 68
Qualifier ...................................................................... 68
Qualifizierer .............................................................. 68
Qualifizierte Assoziation ..................................... 68
Qualifizierter Name ............................................ 188
Quellzustand .......................................................... 312
456
R
Rahmen ................................................................... 328
Realisierte Schnittstelle .................................... 106
Realisierung .............................................................. 81
Realization ................................................................. 81
ref ............................................................................... 372
Referenz-Datentyp .......................................... 51, 54
Reflexive Assoziation ............................................ 63
Region ............................................................. 326, 355
Relevante Nachrichten ............................. 375, 387
Required Interface ............................................... 106
Rolle ................................................................... 56, 147
Rückgabetyp ............................................................. 46
Rückgabewert ........................................................ 368
Rumbaugh, James ................................................... 22
S
Schleife .................................................. 269, 375, 388
Schleifenknoten .......................................... 281, 306
Schleifenkörper .................................................... 281
Schnittstelle ..................... 105, 119, 140, 159, 171
Schwache Sequenz ..................................... 375, 381
sd ................................................................................ 370
Selbst-Transition .................................................. 318
Selektionsangabe ................................................. 241
self .............................................................................. 361
Sende-Nachricht .................................................. 366
Senderichtung ...................................................... 401
SendSignalAction ................................................ 249
seq-Fragment ........................................................ 381
Sequence Diagram ....................................... 30, 359
Sequence Expression ......................................... 401
Sequenz-Ausdruck .............................................. 401
Sequenzdiagramm ........... 30, 359, 399, 409, 423
setter-Operation ..................................................... 48
Shallow History .................................................... 324
Shallow History Entry ........................................ 324
Sicherstellung .............................................. 375, 385
Sichtbarkeit .............................................. 40, 46, 188
Signal-Empfang ................................. 249, 305, 315
SignalEvent ............................................................ 313
Signal-Sendung ................................. 249, 305, 315
SimpleState ............................................................ 311
sm (State Machine) ............................................. 328
Socket-Symbol ............................................. 106, 160
Spezialisierung ..................................... 82, 217, 330
Spezifische Klasse ................................................... 82
Stack ................................................................. 245, 248
Standard-Eintritt .................................................. 324
Startknoten ................................ 265, 305, 427, 431
Startzustand ..................... 319, 323, 327, 328, 354
State ........................................................................... 311
State Machine Diagram .............................. 30, 309
State Timeline ....................................................... 412
StateInvariant ........................................................ 362
Statische Verzweigung ............................. 320, 355
Stereotyp ................... 92, 119, 161, 166, 167, 175,
180, 435, 440, 449
Stopp-Symbol .............................................. 362, 413
Stream ................................................... 238, 260, 299
Strict Sequencing ................................................. 382
strict-Fragment ..................................................... 382
Strikte Sequenz ........................................... 375, 382
Strukturdiagramm ................................................. 33
Subject ...................................................................... 251
Subklasse .................................................................... 82
Submachine State ................................................ 329
Superklasse ................................................................ 82
Switch ....................................................................... 292
Synchrone Nachricht .......................................... 365
Synchronisation ................................................... 274
System Boundary ................................................. 212
Systemgrenze ........................................................ 212
T
Tagged Value .......................................................... 444
Tanenbaum, Andrew .......................................... 385
Teilnehmer ............. 361, 395, 401, 407, 411, 421
Template ........................................................... 98, 117
Terminator .......................................... 319, 323, 354
Test-Bereich .................................................. 281, 287
Test-Phase ............................................ 157, 228, 360
Testphase .................................................................... 36
Then-Bereich .......................................................... 287
Thread ............................................................. 276, 279
Tiefe Historie ......................................................... 324
TimeEvent ............................................................... 313
Timing-Diagramm ..................... 31, 370, 409, 423
Transition ................................... 312, 316, 318, 354
Typ ................................................... 40, 41, 46, 47, 99
Unified Method ....................................................... 23
Unified Modeling Language ........................ 20, 23
Unordered .............................................................. 240
Unqualifizierter Name ...................................... 188
Unterbrechungsbereich ........................... 292, 307
Unterklasse ............................................................... 82
Unterzustandsautomatenzustand ............... 329
UpperBound .......................................................... 239
Use Case ................................................................... 215
Use Case Diagram ......................................... 29, 211
V
Value Lifeline ......................................................... 414
Verantwortungsbereich .................................... 234
Verbindungsknoten ..... 267, 268, 306, 427, 431
Vereinigung ..................... 273, 306, 327, 427, 432
Vereinigungsspezifikation .............................. 274
Vererbung .................................................................. 83
Verhaltensdiagramm ................................ 209, 357
Verhaltensport ...................................................... 141
Verhaltens-Zustandsdiagramm .................... 309
Verlorene Nachricht ........................................... 369
Verteilungsdiagramm ................................ 28, 173
Vertikale Strukturierung .................................. 185
Verzweigung .......................................................... 267
Viele-zu-viele-Assoziation .................................. 68
Vlissides, John .............................................. 148, 251
Vorbedingung .............................................. 259, 349
Vorgabewert ................................. 40, 41, 46, 47, 99
W
Wartungsphase ........................................................ 36
Weak Sequencing ................................................. 381
Weight ...................................................................... 240
Wert-Datentyp ......................................................... 54
Wertverlaufslinie ........................................ 414, 422
While-Bereich ........................................................ 281
White-Box-Darstellung ..................................... 135
White-Box-Sicht ................................................... 162
Y
U
Übergabemodus ...................................................... 46
Überladung ................................................................ 48
Überschreibung ....................................................... 83
Überwachungsbedingung ................................ 268
UML ....................................................................... 20, 23
UML Partners ............................................................ 23
Yourdon, Edward .................................................... 22
Z
Zeitbedingung .............................................. 365, 413
Zeitliches Ereignis ............................................... 250
Zeitskala ................................................................... 411
457
Index
Zentraler Puffer ..................................................... 241
Zielzustand ............................................................. 312
Zusammengesetzte Aktivität ....... 281, 287, 297
Zusammengesetzter Zustand ............... 322, 354
Zustand ....................................... 311, 353, 412, 414
458
Zustandsdiagramm ..................................... 30, 309
Zustandsinvariante ............................................. 362
Zustandsübergang .............................................. 312
Zustandsverlaufslinie ..................... 412, 414, 421
Zustandswechsel .................................................. 412
Wissen, wie’s geht.
Wissen aus erster Hand.
Christoph Kecher ist als Software-Ingenieur bei der
Internationalen Kapitalanlagegesellschaft mbH tätig.
Seine Expertise umfasst u. a. Data Warehouse-Technologien, Java, .NET, UML und Software-Qualitätssicherung.
Alexander Salvanos ist Java Enterprise Software-Architekt und seit vielen Jahren mit Modellierungsprozessen befasst. Ihm gelingt es, in großen Projekten agile
Prozesse und bewährte Standards zum Nutzen aller in
Einklang zu bringen, meist mit der Java Enterprise Edition. In seinen Schulungen bringt er Klarheit in komplexe Technologien. Als Mitglied des Java Community
Process beteiligt er sich an der Weiterentwicklung von Java und berät
Unternehmen beim professionellen Einsatz moderner Java-Technologien.
Christoph Kecher, Alexander Salvanos
UML 2.5 – Das umfassende Handbuch
458 Seiten, gebunden, mit Poster, 5. Auflage 2015
34,90 Euro, ISBN 978-3-8362-2977-7
www.rheinwerk-verlag.de/3668
Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Sie dürfen sie gerne empfehlen und weitergeben, allerdings nur vollständig mit allen Seiten.
Bitte beachten Sie, dass der Funktionsumfang dieser Leseprobe sowie ihre
Darstellung von der E-Book-Fassung des vorgestellten Buches abweichen
können. Diese Leseprobe ist in all ihren Teilen urheberrechtlich geschützt.
Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag.
Teilen Sie Ihre Leseerfahrung mit uns!
Herunterladen