Komponente (UML)
Eine Komponente (englisch Component) ist ein Modellelement in der Unified Modeling Language (UML), einer Modellierungssprache für Software und andere Systeme.
Beschreibung
Komponenten sind modulare Teile eines Systems, die so strukturiert sind, dass sie in ihrer Umgebung durch eine andere, äquivalente Komponente ersetzt werden könnten. In der Softwareentwicklung heißt das entsprechende Konzept Softwarekomponente. Modelliert man komponentenbasierte Systeme mit der UML2, dann steht das Modellelement Komponente für ein derartiges abgeschlossenes Modul.
Komponente ist eine Spezialisierung von Klasse, und sie kann deshalb Strukturmerkmale wie Attribute oder Operationen haben, an Generalisierungen teilnehmen und über Assoziationen mit anderen Komponenten in Beziehung gesetzt werden.
Diese Eigenschaften einer Komponente treten jedoch gegenüber einem anderen Merkmal etwas in den Hintergrund. Wichtig ist vor allem, dass eine Komponente als Modul eine innere Struktur gegen außen abschottet und dafür gegen außen eine Hülle mit wohldefinierten Andockstellen anbietet. Als Konsequenz ergeben sich daraus je nach Standpunkt zwei Sichten auf eine Komponente, eine Black-Box-Sicht, die nur den Rand zeigt, und eine White-Box-Sicht, die auch die innere Struktur zeigt.
Die Andockstellen einer Komponente bestehen aus einer Menge von angebotenen und erforderlichen Schnittstellen sowie allenfalls aus einer Menge von Ports.
Eine Komponente wird ähnlich wie eine Klasse als Rechteck mit einem Namen gezeichnet. Das Schlüsselwort «component»
sowie optional ein Symbol in der rechten oberen Ecke unterscheiden die Notation einer Komponente von jener einer Klasse.
Black-Box-Sicht einer Komponente
Die Black-Box-Sicht einer Komponente zeigt den Rand der Komponente und die Schnittstellen, die die Komponente gegen außen anbietet bzw. die sie von anderen Komponenten beziehen muss. Graphisch können alle Möglichkeiten für die Notation von Schnittstellen verwendet werden (siehe Schnittstelle). Das Beispiel rechts zeigt angebotene Schnittstellen als Lollipops und benötigte als Socket. Möglich wäre auch die Darstellung in Classifier-Form und eine Abhängigkeitsbeziehung zwischen der Schnittstelle und der Komponente.
Das Beispiel rechts verwendet weiter zwei Ports für die Spezifikation der Komponentenhüllen. Einer davon, Management Port
, ist benannt.
White-Box-Sicht einer Komponente
Die White-Box-Sicht einer Komponente zeigt die innere Struktur der Komponente. Im Beispiel rechts besteht diese Struktur aus drei Teilkomponenten Meldungsspeicher
, Web-Frontend
und Benutzerverwaltung
.
Dass das Innere einer Komponente wiederum nur als Komponenten modelliert werden kann, ist nicht zwingend. Es ist Sache des Modellierers, geeignete Modellierungselemente für ein konkretes Modell zu finden. Kandidaten sind neben der Komponente etwa der Part oder ein gekapselter Classifier. Auch Klassen, Schnittstellen oder Subsysteme können je nach Bedarf verwendet werden. Subsysteme sind Komponenten, die mit dem Schlüsselwort «subsystem»
gekennzeichnet sind.
Komposition von Komponenten
Komponenten zeichnen sich vor allem dadurch aus, dass mehrere Komponenten zu einem größeren System, unter Umständen erneut einer Komponente, zusammengefügt werden können, dass man sie in diesem Sinn also komponieren kann. Die UML2 modelliert eine Komposition als Abhängigkeitsbeziehung zwischen der angebotenen Schnittstelle der einen Komponente und einer benötigen Schnittstelle der anderen. Die graphische Notation weist diese Abhängigkeitsbeziehung nicht immer explizit aus. Im Beispiel rechts ist die Komponente EmailManagement
mit den Komponenten MailEingang
bzw. MailAusgang
verbunden, indem die passenden Lollipop- und Socket-Schnittstellen zusammengeführt sind. Eine explizite Abhängigkeitsbeziehung ist zwischen dem Benutzer und der Schnittstelle Betrieb überwachen
ausgewiesen.
Unterschiede zur UML 1.4
Das Konzept einer Komponente als Modellelement war schon in der UML 1.4 bekannt. Es hat in der UML2 sowohl Änderungen im Metamodell als auch in der Notation erfahren. In UML2 ist eine Komponente eine Spezialisierung von Classifier. Sie kann aus diesem Grund alle Arten von Strukturmerkmalen haben. Die Notation wurde insofern vereinfacht, als eine Komponente nun wie viele andere Modellelemente auch, als Rechteck dargestellt werden kann, ohne die beiden aus der UML 1.4 üblichen kleinen zusätzlichen Rechtecke auf dessen Rand.