UML-Komponentendiagramme
Das System als Menge austauschbarer Teile und die Verträge dazwischen. Was jedes Stück anbietet, was es braucht, und - der nützliche Teil - was Sie einhalten müssten, um eines zu ersetzen.
13 Min. LesezeitUML 2.5.117 von 35
Die kurze Antwort
- Eine Komponente ist eine austauschbare Einheit mit definiertem Vertrag - etwas, das man ausschreiben könnte - und nicht bloß eine große Klasse.
- Jede Komponente trägt zwei Listen: was sie anbietet und was sie benötigt. Die benötigte Hälfte wird am häufigsten weggelassen, und genau sie trägt die Abhängigkeiten.
- Eine Kugel am Stiel ist eine angebotene Schnittstelle, eine Halbschale eine benötigte, und die Kugel in der Schale sind beide verbunden.
- Eine Komponente ist logisch, ein Knoten physisch. Sobald ein Kasten einen Hostnamen oder eine Instanzzahl bekommt, zeichnen Sie ein Verteilungsdiagramm.
01Was es zeigt#
Ein Komponentendiagramm beschreibt ein System als austauschbare Teile. Eine Komponente in UML ist nicht irgendeine Klasse - sie ist eine Einheit mit definierter Grenze, die sich im Prinzip gegen eine andere Implementierung derselben Verträge austauschen ließe, ohne dass die Umgebung es bemerkt.
In dieser Definition liegt der ganze Wert. Das Diagramm zwingt Sie, zu jedem Teil genau zwei Dinge aufzuschreiben: was es anbietet und was es benötigt. Diese beiden Listen sind der Vertrag des Teils mit dem Rest des Systems, und sie sind genau das, was man bei der Planung einer Migration, beim Zuschnitt einer Neuentwicklung oder bei der Frage, ob eine Servicegrenze richtig liegt, tatsächlich braucht.
02Die Notation#
| Element | Notation | Was es bedeutet |
|---|---|---|
| Komponente | Rechteck mit Stecker-Symbol | Eine austauschbare Einheit. Das Symbol in der Ecke ist die UML-2-Form; die ältere setzte das Symbol an die Stelle des Kastens. |
| Angebotene Schnittstelle | Die Komponente implementiert diesen Vertrag. Gezeichnet als Realisierung zu einem «interface» oder als Kugel an einem Stiel. | |
| Benötigte Schnittstelle | Die Komponente braucht jemanden, der das anbietet. Gezeichnet als Abhängigkeit oder als Pfanne - eine Halbschale an einem Stiel. | |
| Assembly-Konnektor | eine Kugel in einer Pfanne | Die angebotene Schnittstelle der einen Komponente an die benötigte der anderen gesteckt. Die kompakte Form der beiden Zeilen darüber. |
| Port | kleines Quadrat auf der Grenze | Ein benannter Interaktionspunkt. Nutzen Sie ihn, wenn eine Komponente mehrere getrennte Kanäle hat - etwa eine öffentliche und eine Admin-API. |
| Delegationskonnektor | Von einem Port außen zu einem Teil innen: diesen externen Vertrag bedient tatsächlich jenes interne Stück. |
Die Form Kugel und Pfanne (ball and socket) ist die kompakte und die, die die meisten Werkzeuge standardmäßig zeichnen: ein Lolli an einer Komponente ist eine angebotene Schnittstelle, eine Halbschale eine benötigte, und eine Kugel in einer Pfanne sind beide zusammengesteckt. Es ist dieselbe Information wie die Pfeile oben, auf weniger Platz. Nehmen Sie, was Ihre Leser leichter finden; bleiben Sie innerhalb eines Diagramms konsistent.
Jedes Zeichen, das diese Diagrammart tragen kann - beide Schnittstellennotationen, Assembly- und Delegationskonnektoren, Ports und die vier lohnenden Stereotypen - steht in Komponentendiagramm-Symbolen.
03Wie groß ist eine Komponente?#
An dieser Frage bleibt jedes erste Komponentendiagramm hängen, und die Spezifikation hilft nicht: UML sagt, eine Komponente sei eine austauschbare Einheit mit definiertem Vertrag, und überlässt die Größe ganz Ihnen. Für einen Standard ist das die richtige Antwort und am Whiteboard eine nutzlose, also hier die Arbeitsregel.
Eine Komponente ist, was Sie ausschreiben könnten. Können Sie sich vorstellen, einem anderen Team die Listen der angebotenen und benötigten Schnittstellen zu geben und zu sagen „baut das, wir schauen nicht hinein“, ist es eine Komponente. Würde diese Übergabe ein Gespräch über Interna erfordern, liegt die Grenze falsch - und das ist der Befund, kein Zeichenproblem, das man umgehen müsste.
In der Praxis landet das meist auf einer dieser Ebenen, und welche es ist, sagt Ihnen, wozu das Diagramm dient.
- Ein bereitstellbarer Service. Ein Repository, eine Pipeline, eine Rufbereitschaft. Die häufigste Antwort bei allem aus dem letzten Jahrzehnt und die Ebene, auf der es sich lohnt, das Diagramm im Repository zu halten.
- Eine Bibliothek oder ein Modul. Innerhalb einer Bereitstellungseinheit, wenn über interne Struktur gestritten wird - welches Paket von welchem abhängen darf. Hier sagt ein Paketdiagramm oft dasselbe billiger.
- Ein ganzes System. Das Mainframe, das CRM, der Zahlungsdienstleister. Die Ebene für ein Kontextdiagramm, wo es darum geht, wovon Sie abhängen, nicht wie es gebaut ist.
Zwei dieser Ebenen auf einem Diagramm zu mischen ist der Fehler, der die wuchernden Komponentendiagramme erzeugt, an die sich Leute erinnern. Ein Bild mit drei Microservices, einer Hilfsbibliothek und „SAP“ sind drei übereinandergelegte Diagramme, und kein Leser erkennt, welche Kästen gleichrangig sind.
04Richtig lesen#
Die nützlichste Lesetechnik ist, eine Komponente mit der Hand zuzudecken. Was übrig bleibt, ist ihr Vertrag: die Schnittstellen, die an ihr hingen. Können Sie diese Liste einem anderen Team geben und sagen „baut etwas, das das erfüllt“, tut das Diagramm seine Arbeit. Können Sie das nicht - würde ein Austausch Wissen erfordern, das nicht gezeichnet ist - liegt die Grenze falsch, und das ist es wert, vor dem Versuch zu wissen.
Die zweite Technik ist, den benötigten Schnittstellen zu folgen. Jede ist eine Abhängigkeit, die jemand erfüllen muss, und ein Zyklus in diesem Graphen ist ein echtes Architekturproblem, das ein Komponentendiagramm sofort sichtbar macht.
Beide Techniken sieht man leichter angewandt als beschrieben. Fünf Diagramme von Systemen, an denen Sie vermutlich gearbeitet haben - ein gemeinsamer Katalog, Ports und Adapter, eine Altsystemablösung, ein Plugin-Host und ein Zyklus - sind in Komponentendiagramm-Beispielen durchgearbeitet, jedes mit dem Streit, den es schlichtet.
05Welchen Kasten zeichne ich eigentlich?#
Fünf Diagrammarten sind Rechtecke, die mit Linien verbunden sind, und der Unterschied liegt ausschließlich darin, was ein Rechteck ist. Die falsche zu wählen ist hier der teuerste verfügbare Fehler, denn das Diagramm sieht gut aus und beantwortet eine Frage, die niemand gestellt hat.
| Element | Notation | Was es bedeutet |
|---|---|---|
| Komponente | eine austauschbare Einheit | Kästen sind Dinge, die sich gegen eine andere Implementierung desselben Vertrags tauschen ließen. Linien sind angebotene und benötigte Schnittstellen. Beantwortet: was verspricht jedes Teil, und was braucht es? |
| Klasse | ein Typ | Kästen sind Typen im Code. Linien sind Assoziationen, Generalisierungen und Abhängigkeiten. Beantwortet: welche Form hat der Code? Siehe das Klassendiagramm. |
| Paket | ein Namensraum | Kästen sind Gruppierungen - Ordner, Namensräume, Module. Linien sind erlaubte Abhängigkeiten. Beantwortet: was darf was importieren? |
| Verteilung | ein Knoten | Kästen sind Maschinen, Container und Laufzeitumgebungen. Linien sind Kommunikationspfade. Beantwortet: wo läuft das wirklich und worüber? Siehe das Verteilungsdiagramm. |
| Kompositionsstruktur | ein Teil in einem Ganzen | Kästen sind die Teile, aus denen ein Klassifizierer besteht, darin gezeichnet. Beantwortet: woraus ist dieses Ding intern gebaut? |
Dasselbe Rechteck in fünf Notationen. Lesen Sie die mittlere Spalte, bevor Sie zeichnen: sie ist der Satz, auf den das ganze Diagramm eine Antwort ist.
Am häufigsten kommt Komponente gegen Verteilung auf, und ausgesprochen ist die Trennung sauber: eine Komponente ist eine logische Einheit, ein Knoten eine physische. Eine Komponente kann auf vierzig Knoten laufen; ein Knoten kann ein Dutzend Komponenten beherbergen. Sobald ein Kasten auf Ihrem Komponentendiagramm eine Region, eine Instanzzahl oder einen Hostnamen bekommt, ist er keine Komponente mehr und das Diagramm ist still zu zweien geworden.
Wer C4 kennt: dessen Container-Diagramm liegt fast genau dort, wo ein Komponentendiagramm auf Service-Ebene liegt, und dessen eigene „Komponenten“-Ebene liegt eine Stufe tiefer, als UML es üblicherweise meint. Die Vokabulare decken sich nicht - schreiben Sie also aufs Diagramm, welches Sie verwenden; diese eine Legendenzeile verhindert die meisten Streitigkeiten.
06Wann man eines zeichnet#
Dazu greifen, wenn
- Servicegrenzen festlegen, bevor Systeme geteilt oder zusammengelegt werden
- Dokumentieren, was ein Team besitzt und was es von anderen bezieht
- Eine Ablösung planen - der Vertrag ist genau das, was das Neue erfüllen muss
- Prüfen, ob Abhängigkeiten so fließen, wie die Architektur behauptet
Zu etwas anderem greifen, wenn
- Sie meinen physische Maschinen und Prozesse - nehmen Sie ein Verteilungsdiagramm
- Sie meinen das Innere einer Komponente - nehmen Sie ein Kompositionsstrukturdiagramm
- Die Teile sind Klassen, keine austauschbaren Einheiten - nehmen Sie ein Klassendiagramm
- Es gibt drei Services und alle wissen längst, wie sie zusammenhängen
Komponentendiagramme altern gut, was ungewöhnlich ist. Schnittstellen ändern sich weit langsamer als der Code dahinter, ein eingechecktes Komponentendiagramm bleibt also viel länger wahr als ein Klassendiagramm desselben Systems - und lohnt entsprechend mehr, gepflegt zu werden.
07Häufige Fehler#
- Komponenten, die in Wahrheit Klassen sind. Lässt es sich nicht plausibel eigenständig austauschen, ist es keine Komponente. Nehmen Sie ein Klassendiagramm.
- Nur angebotene Schnittstellen gezeichnet. Die benötigten tragen die Abhängigkeitsinformation, und das ist die nützlichere Hälfte.
- Pfeile zwischen Komponenten ohne Schnittstelle. Ein nackter Pfeil sagt „hängt irgendwie ab“, und genau das soll dieses Diagramm präzisieren.
- Verteilung hineingemischt. Server, Regionen und Container gehören auf ein Verteilungsdiagramm.
- Schnittstellen nach dem Anbieter benannt.
ILedgerist in Ordnung, solange es ein Ledger gibt; sobald zwei Implementierungen denkbar sind, benennen Sie den Vertrag nach der Fähigkeit, nicht nach dem aktuellen Lieferanten.
In je einer Zeile
- 01Eine Komponente ist eine austauschbare Einheit mit definiertem Vertrag, keine große Klasse.
- 02Jede Komponente hat zwei Listen: was sie anbietet und was sie benötigt.
- 03Realisierung (hohles Dreieck, gestrichelt) zeigt auf die implementierte Schnittstelle.
- 04Abhängigkeit (offener Pfeil, gestrichelt) zeigt auf die benötigte Schnittstelle.
- 05Kugel und Pfanne ist die kompakte Form derselben Information.
- 06Komponente zudecken: was bleibt, ist das, was ein Ersatz erfüllen muss.
08Häufige Fragen#
Was ist die Kugel-Pfanne-Notation?
Die Kurzform für Schnittstellen. Eine angebotene Schnittstelle ist ein Lolli, ein kleiner Kreis an einem Stiel. Eine benötigte Schnittstelle ist eine Pfanne, ein Halbkreis. Passt die Kugel in die Pfanne, erfüllt eine Komponente die Abhängigkeit einer anderen, ohne dass die Schnittstelle als Klasse gezeichnet werden muss.
Was unterscheidet Komponenten- und Klassendiagramm?
Ein Klassendiagramm zeigt Typen und ihre innere Struktur. Ein Komponentendiagramm zeigt auslieferbare, austauschbare Einheiten und die Verträge zwischen ihnen und verbirgt bewusst, was in jeder steckt. Es beantwortet, was man einhalten müsste, um ein Teil auszutauschen.
Was ist ein Port in UML?
Ein kleines Quadrat am Rand einer Komponente, das einen eigenen Interaktionspunkt darstellt. Ports erlauben einer Komponente, mehrere getrennte Schnittstellen anzubieten - etwa eine Admin- und eine öffentliche API - statt einer einzigen undifferenzierten Fläche.
Wann lohnt sich ein Komponentendiagramm?
Wenn das System Teile hat, die man plausibel ersetzen oder kaufen statt bauen könnte, und die interessante Frage die Schnittstelle dazwischen ist. Ist nichts austauschbar, wiederholt das Diagramm nur die Paketstruktur.
In dieser Reihe
- 01Was ist UML?
- 02UML-Symbole
- 03Diagramm auswählen
- 04Klassendiagramme
- 05Klassendiagramm-Beispiele
- 06Klassendiagramm zeichnen
- 07Klassendiagramm-Symbole
- 08Sequenzdiagramme
- 09Sequenzdiagramm-Beispiele
- 10Sequenzdiagramm zeichnen
- 11Anwendungsfalldiagramme
- 12Anwendungsfall-Beispiele
- 13Aktivitätsdiagramme
- 14Aktivitätsbeispiele
- 15Zustandsdiagramme
- 16Zustandsdiagramm-Beispiele
- 17Komponentendiagramme
- 18Komponenten-Beispiele
- 19Komponentendiagramm zeichnen
- 20Komponenten-Symbole
- 21Verteilungsdiagramme
- 22Verteilungsbeispiele
- 23Objektdiagramme
- 24Paketdiagramme
- 25Kompositionsstrukturdiagramme
- 26Kommunikationsdiagramme
- 27Sequenz vs Kommunikation
- 28Zeitverlaufsdiagramme
- 29Interaktionsübersichtsdiagramme
- 30Profildiagramme
- 31UML mit KI
- 32E-Commerce-Beispiel
- 33Banken-Beispiel
- 34Microservices-Beispiel
- 35AWS-Beispiel
Passend dazu
Strukturdiagramme
Modellierungspraxis
Notationsreferenz
Strukturdiagramme
Strukturdiagramme
Strukturdiagramme