6. Weitere Strukturdiagramme Objektdiagramm Komponentendiagramm Paketdiagramm 6. Weitere Strukturdiagramme 1 6.1 Objekte Ausprägungsspezifikation von Klassen und Assoziationen 6. Weitere Strukturdiagramme 2 Definition Das Objektdiagramm zeigt eine bestimmte Sicht auf die Struktur des modellierten Systems. Die Darstellung umfasst dabei typischerweise Ausprägungsspezifikationen von Klassen und Assoziationen. Das Objektdiagramm ist eine Art Schnappschuss. Es zeigt den Zustand, also die Belegung der Attribute eines Objektes zu einem bestimmten Zeitpunkt. Wie das Klassendiagramm ist auch das Objektdiagramm ebenfalls ein Strukturdiagramm. Da die Anzahl der Attribute sehr groß sein kann, werden normalerweise nur diejenigen Attribute aufgelistet, welche für den Zweck, den man verdeutlichen möchte, ausreichen. 6. Weitere Strukturdiagramme 3 Verwendung Das Objektdiagramm wird nicht so oft verwendet. Es eignet sich dazu, beispielhaft ein zur Laufzeit existierendes Objektnetz mit sein Attributwerten zu visualisieren. Es kann zum Beispiel dazu benutzt werden, das Klassendiagramm und dessen Beziehungen zu verifizieren. Objektdiagramme werden nur verwendet, wenn komplexe Klassendiagramme anhand von konkreten Beispielen verdeutlicht oder überprüft werden sollen. 6. Weitere Strukturdiagramme 4 Objekt: Notation Ein Objekt ist eine konkrete Realisierung (Instanz) einer Klasse. Im Objektdiagramm wird der momentane Zustand des Objekts (attemptLimit = 5) dargestellt. Objekte haben keine Operationen. Statt Objekt sagt man darum oft auch Instanz. Das Objektdiagramm zeigt nicht, wer dieses Objekt erstellt hat oder wann oder warum ( Aktivitätsdiagramm, Sequenzdiagramm). Vom Objekt werden nicht alle Attribute dargestellt, sondern bloss diejenigen, welche für das Diagramm/den aktuellen Zustand relevant sind. 6. Weitere Strukturdiagramme 5 Beispiel: Bank Der Aufbau des Objektdiagramms ist ähnlich wie beim Klassendiagramm, nur dass im obersten Kasten nicht der Klassenname steht, sondern Instanzname : Typ und zwar unterstrichen. Der Instanzname ist optional und kann bei nicht benannten (anonymen) Objekten weggelassen werden. Ausserdem fehlen die Operationen. Diese gehören zu der Klasse, nicht zum Objekt. In Use-Case-, Sequenz- oder Kommunikationsdiagrammen werden Rollen und keine Objekte gezeichnet. 6. Weitere Strukturdiagramme 6 Rekursive Assoziationen lösen sich im Objektdiagramm auf. Ausserdem können Objekte in der Hierarchie mehrfach verbunden sein (z.B. der Angestellte Rolf, der zwei Chefs hat). 6. Weitere Strukturdiagramme 7 6.2 Komponenten Komponenten-Diagramm 6. Weitere Strukturdiagramme 8 Definition Eine Komponente … ist ein modulares (in sich abgeschlossenes) Teil eines Systems. ist so strukturiert, dass sie in ihrer Umgebung einfach durch eine andere, äquivalente Komponente ersetzt werden könnte. kann als eine spezielle Klasse mit Attributen, Operationen, Beziehungen, … gesehen werden. lebt/läuft oft in einer Umgebung (z.B. einem Container). Man spricht oft auch von Softwarekomponenten. Komponenten sind eine Spezialisierung von Klassen. Sie können deshalb Strukturmerkmale wie Attribute oder Operationen haben, an Generalisierungen teilnehmen und über Assoziationen mit anderen Komponenten in Beziehung gesetzt werden. Im Gegensatz zu einer Klasse ist eine Komponente als Modul abgeschlossen und bietet gegen aussen wohldefinierte Schnittstellen (Interfaces) an. Oft besteht eine Komponente aus mehreren Klassen oder anderen Komponenten. Je nach Blickpunkt gibt es zwei unterschiedliche Sichten auf eine Komponente: eine Black-Box-Sicht, die nur den Rand (Schnittstelle, angebotene Dienste) zeigt, und eine White-BoxSicht, die auch die innere Struktur der Komponente zeigt. 6. Weitere Strukturdiagramme 9 Verwendung Komponentendiagramme werden gebraucht für die Spezifikation der Software-Architektur zur Aufteilung des Systems in Subsysteme (zum Beispiel Persistenz-, Business- und GUI-Schicht) die Modellierung von komponentenbasierten Softwaresystemen die Aufteilung der Aufgaben des Systems in verschiedene Teil-Bereiche und ihre Schnittstellen (Interfaces) Kann aus logischen oder physikalischen Komponenten bestehen. Falls bei einem System die Austauschbarkeit der Klassen sehr wichtig ist, können auch „normale“ Klassen als Komponenten definiert werden. Um das Innere einer Komponente darzustellen, benutzt ein Komponentendiagramm auch Notationselemente, die sonst in Klassen- oder Kompositions-Struktur-Diagrammen verwendet werden, wie zum Beispiel Klassen, Interfaces oder Parts (die Kompositions-Teile eines Objektes). Die Black-Box Sicht einer Komponente wird ähnlich wie eine Klasse als Rechteck mit einem Namen gezeichnet. Das Schlüsselwort «component» sowie ein Symbol in der rechten oberen Ecke unterscheiden die Notation einer Komponente von jener einer Klasse. 6. Weitere Strukturdiagramme 10 Komponente:Black-Box-Sicht Die Black-Box-Sicht einer Komponente zeigt die Schnittstellen, die die Komponente gegen aussen anbietet bzw. die sie von anderen Komponenten beziehen kann/muss. Scrollable EventListener «component» JTextArea ImageObserver Beispiel einer Text-Komponente mit zwei angebotenen und einer benötigten Schnittstelle Das Beispiel hier zeigt die angebotenen Schnittstellen als Lollipops (Scrollable, ImageObserver) und die benötigten als Socket (EventListener). Zu lesen: JTextArea benötigt (<<uses>>) einen EventListener und implementiert (<<is>>) einen Scrollbar sowie einen ImageObserver (zum Einlesen von Bildern). 6. Weitere Strukturdiagramme 11 Komponente: White-Box-Sicht In der White-Box-Sicht werden die inneren Bestandteile (Klassen, Komponenten, Subsysteme) einer Komponente aufgezeichnet. «component» JTextArea «component» View «subsystem» Model TransferHandler Die White-Box-Sicht zeigt die innere Struktur der Komponente. Die Komponente JTextArea könnte zum Beispiel aus einer View (für das User Interface), einem Model (für das Verwalten der Daten) sowie aus einer Klasse TransferHandler (für das Verarbeiten von Drag und Drop) bestehen. 6. Weitere Strukturdiagramme 12 Notationselemente Eine Komponente hat einen Namen, den Stereotyp «component» sowie optional ein Symbol Ports definieren die Kommunikations-Punkte der Komponente. Eine Komponente wird ähnlich wie eine Klasse als Rechteck mit einem Namen gezeichnet. Zusätzlich ist das Schlüsselwort «component» oder ein Komponenten-Symbol eingefügt. Die realisierten und benötigten Schnittstellen der Komponente definieren vollständig das Verhalten einer Komponente. Schnittstellen können entweder direkt mit der Komponente kommunizieren oder über einen Port, d.h. über eine separate Klasse, welche dieses Interface implementiert. 6. Weitere Strukturdiagramme 13 Notationselemente Der Delega onsKonnektor zeigt an, welches Subsystem letztlich für die Schni stelle verantwortlich ist. Eine Komponente wird ähnlich wie eine Klasse als Rechteck mit einem Namen gezeichnet. Zusätzlich ist das Schlüsselwort «component» oder ein Komponenten-Symbol eingefügt. Die realisierten und benötigten Schnittstellen der Komponente definieren vollständig das Verhalten einer Komponente. Schnittstellen können entweder direkt mit der Komponente kommunizieren oder über einen Port, d.h. über eine separate Klasse, welche dieses Interface implementiert. 6. Weitere Strukturdiagramme 14 Alternative Schreibweise Alterna v lässt sich das vorherige Komponentendiagramm auch so darstellen. Es fehlt hier das Subsystem. 6. Weitere Strukturdiagramme 15 Port Ein Port definiert einen Kommunikationspunkt, durch den eine Komponente mit seiner Umgebung kommunizieren kann. Die Kommunikation wird von der Komponente selber (als Methode) oder durch einem inneren Teil (eigene Klasse) implementiert. Die Sichtbarkeit eines Ports ist public. Ports haben häufig keinen Namen (anonym). Die Suchmaschine realisiert das ProductSearch Interface und bietet dieses über den searchPort gegen aussen an. Port Ports können einfach (simple) oder komplex sein. Komplexe Ports können gleichzeitig die benötigten und angebotenen Schnittstelle anzeigen. searchPort benötigt zum korrekten Funktionieren eine Inventory-Schnittstelle und bietet anderseits die Schnittstellen SearchBooks und SearchVideo Die Beziehung verschiedener Komponenten kann entweder als Linie zwischen den Ports oder über die Schnittstelle gezeichnet werden. Artefakt Ein Artefakt ist eine physisches Bestandteil eines Software-Systems, welches beim SoftwareEntwicklungsprozess benutzt oder erzeugt wird. Artefakt Stereotyp «artefact» TextAreaSystem.jar Name des Artefakts Artefakte modellieren konkrete Bestandteile des Softwaresystems aus der realen Welt wie zum Beispiel Dateien mit Programmcode, Datenbanken, … Hier ist konkret ein Java Archiv (jar-File) notiert. Auch ein Artefakt kann Teil eines Komponentendiagramms sein. 6. Weitere Strukturdiagramme 18 6.3 Pakete Paket Diagramm 6. Weitere Strukturdiagramme 19 Verwendung Ein komplexes Gesamtsystem sollte möglichst früh in Pakete (Subsysteme) unterteilt werden Reduktion der Komplexität Gruppen von Use Cases (Funktionsgruppen) … Klassen, die fachlich zusammengehören (Produkte-Gruppe, Personen-Typen, usw.) … Klassen, die stark interagieren oder zur gleichen Schicht (Layer) gehören, … Klassen, welche ähnliche Funktionalität haben (Controller, DB-Zugriff, usw.) … … können in Paketen zusammengefasst werden. Auch die Pakete sollten einfache, beschreibende Namen haben, welche den Sinn des Pakets klar machen. 6. Weitere Strukturdiagramme 20 Definition Ein Paket … fasst Klassen, Interfaces, Komponenten, … zusammen bildet einen Namespace kann Unterpakete enthalten kann andere Pakete importieren (benutzen) kann benutzt werden, um eine hierarchische Struktur zu bilden Ein Paket fasst eine Menge von Modellelementen (Klassen, Komponenten, Interfaces, …) zu einer Gruppe zusammen und bildet einen Namensraum (Namespace) für sie. Die Elemente innerhalb eines Paketes müssen eindeutige (verschiedene) Namen haben. Pakete können andere Pakete als Unterpakete enthalten. Sie gliedern die Modellelemente hierarchisch in eine Struktur, analog zu einem Dateisystem (Directory). Jede Klasse, Interface, … gehört jeweils nur zu einem Paket. Oft wird statt Paket auch der Name Subsystem oder Kategorie verwendet. 6. Weitere Strukturdiagramme 21 Paket Diagramm Es werden nur die wichtigsten Klassen im Inneren eines Pakets notiert und davon oft bloss deren Namen Paketdiagramme dienen der Übersicht des Systems und enthalten darum nur die wichtigsten Klassen und nur die wichtigsten Details (Attribute, Operationen) davon. Der voll qualifizierende Name der Klasse innerhalb des Pakets wird zusammengesetzt aus dem Paket-Namen und dem Klassennamen. In Java package myns.myapp.ui; In C# namespace myns.myapp.ui { . . . } 6. Weitere Strukturdiagramme 22 Notationselemente Falls die Interna des Pakets aufgezeichnet werden, bietet es sich an, den Paketnamen auf den Reiter zu schreiben. Auch die Pakete sollten (kurz) dokumentiert werden (Aufgaben-, RollenKurzbeschreibung, 20-30 Wörter). Falls die Sichtbarkeit der Klasse fehlt, ist die Klasse public. Die access Beziehung entspricht dem Java import, bzw. dem C# usage Befehl. Die import Beziehung entspricht einem public import, dieses wird in Java und C# nicht unterstützt. Die import-Beziehung macht das Referenzieren von Elementen eines Pakets über unqualifizierte Namen möglich, so als wenn das impor erende Paket diese Elemente selbst enthalten würde. Die Paketgruppe kann auch als Paket mit Unterpaketen gezeichnet werden. 6. Weitere Strukturdiagramme 23 import access Auf die public Klassen von importierten Paketen kann direkt (ohne Angabe des Namespaces) zugegriffen werden. Java und C# unterstützen keinen transitiven public Import, sondern bloss die access-Beziehung. Auflösen der import Beziehung Die in Java oder C# importierten Elementnamen sind jeweils nur im importierenden Paket verfügbar, d.h. wenn das restaurantkette, welches restaurantsystem importiert kann nicht auf PdfErzeuger zugreifen. Dies entspricht der UML access Beziehung. Um ein UML import zu simulieren, muss die entsprechenden access Beziehung hinzugefügt werden. Java: package restaurantkette; import restaurantsystem; import werkzeuge; public class Restaurant { . . . } C# namespace restaurantkette { using restaurantsystem; using werkzeuge; public class Restaurant { . . . } 6. Weitere Strukturdiagramme 24 6.4 Spezielle Paketdiagramme Modell-Diagramm Verteilungsdiagramm 6. Weitere Strukturdiagramme 25 Modell-Diagramm Zeigt die logische Struktur (Architektur) eines Systems. Die logischen ModellElemente werden durch ein Dreieck markiert. Verteilungsdiagramm Das Verteilungs (oder Deployment)-Diagramm zeigt die physikalische Umsetzung der verschiedenen Komponenten (welche Komponente wird durch welches Artefakt implementiert). 6. Weitere Strukturdiagramme 27 Verteilungsdiagramm Verteilungsdiagramme spezifizieren auch die physische Hardwareund Softwareumgebung und die Verteilung der Komponenten in dieser Umgebung. Verteilungsdiagramme werden vor allem in der Design-Phase erstellt. Damit kann entschieden werden, welche Hardware und SoftwareKomponenten eventuell beschafft werden müssen, sowie welche Kommunikationswege zwischen den Komponenten nötig sind. 6. Weitere Strukturdiagramme 28