2015-07-29 6 views
5

Da ich noch nicht vollständig verstanden die korrekte Verwendung von Port und Interface-Symbole in Komponentendiagrammen, ein paar Fragen:UML2: Ports und Schnittstellen in Komponentendiagrammen

I. ein Stück Stellen Sie sich vor von Software, die will einen sehr speziellen Remote Logger-Dienst über das Netzwerk (TCP) zu verwenden. Die Nachrichten können XML sein. So stellt der Logger eine Schnittstelle zur Verfügung, die Dinge wie Handshake, XML-Struktur, XML-Elemente usw. spezifiziert, so dass der Logger eine Nachricht akzeptiert.

enter image description here

a) Bin ich richtig, dass diese Schnittstelle „ILoggerProtocol“ bezeichnet werden kann, kann der Port benannt werden, nachdem der Dienst es bietet („logging“)?

b) Also implementiert die Komponente in meiner Anwendung diese Schnittstelle, so dass sie eine kompatible Nachricht für den Server generiert?

c) Nun eine interessante Sache: für die Kommunikation gibt es eine zusätzliche Bibliothek "Networking", die einfache TCP-Zeug bietet, so dass es TCP verbindet, sendet Nachrichten, behandelt Fehler usw. Brauche ich diese Klasse, wenn ich nur den Weg von den generierten Nachrichten zum Server hervorheben wollen? Ist dann mein Port die TCP-Schnittstelle?

d) Und wenn ich das vollständige Bild zeichnen möchte, wie kann ich die Netzwerkkomponente korrekt zum Diagramm hinzufügen und darauf hinweisen, dass ILoggerProtocol verwendet wird UND dass es über TCP über die Netzwerkkomponente geht?

II. Ports in meiner Anwendung: jetzt gibt es zwei Bibliotheken, in denen man nur den anderen benutzt; im Grunde genommen, in C/C++, würde es die andere Header-Datei # include:

enter image description here

e) Ist das das richtige Diagramm?

f) Brauche ich hier Anschlüsse? Wenn ja, was würden sie eigentlich in der Realität darstellen? Welche Namen würdest du ihnen geben?

g) Oder reichen die Lollipops gerade ohne die Portsymbole aus?

III. über Lutscher:

enter image description here

h) sind diese beiden Bezeichnungen grundsätzlich gleich und austauschbar? Ich habe den Namen "Assembly" für die kombinierte Version gefunden, also vielleicht gibt es einen Unterschied ...

+0

Ich machte eine kurze Bearbeitung meiner Antwort. –

Antwort

4

Eine kurze Antwort zuerst (versuchen, den Rest später zu zerreißen): Ein Port ist ein eingebettetes Element, das zu gruppieren erlaubt eine Reihe von Schnittstellen. Das Beste, was ich für ein Beispiel bekommen kann, ist ein komplexer Socket (der Port), der Dinge wie Stromversorgung, Kommunikationsleitungen bündelt, Sie nennen es (die Schnittstellen).

Jetzt für die Details.

a) Ja, das ist richtig. Sie würden normalerweise eine stereotype Assoziation <<delegate>> verwenden, um zu zeigen, dass die äußere Schnittstelle irgendwo benutzt wird (/ realisiert, wenn es ein Lollipop ist).

b) Nein. Dies ist eine erforderliche Schnittstelle. Es wird im Inneren verwendet, aber außerhalb implementiert (wo sich der Lollipop befindet).

c & d) Ich würde eine <<use>> von MyApplication in Richtung Networking verwenden, um das zu zeigen. Normalerweise würden Sie nicht zu sehr ins Detail gehen (außer es ist wichtig). Offensichtliche Dinge wie TCP sind deutlich mit dem <<use>>

e) Sie können/sollten stattdessen <<include>> oder <<use>> verwenden. siehe

f & g) die allgemeine Antwort oben

h) Ja. Die erste ist eine flexible Notation der zweiten.

P.S. Ich schaue einfach noch einmal darüber und bemerke, dass im oberen Bild die innere gerichtete Assoziation in die andere Richtung zeigen und stereotyp sein sollte <<delegate>>.

+0

Thomas, vielen Dank. b) mit "implements" meinte ich, dass meine App natürlich den _counterpart_ für ILoggerProtocol aufbaut ... f), so folge ich aus Ihrer Aussage, dass in meinem Beispiel das Denken als Programmierer gilt: wenn eine Klasse die andere Header-Datei für eine enthält einfacher Zweck, ich würde nicht unbedingt einen Hafen brauchen. Wenn ich Header-Dateien einer anderen Komponente hinzufügen würde, um einen komplexeren Dienst oder sogar verschiedene Dienste zu verwenden, würde ich Ports benötigen, richtig? Danke auch für die Hinweise auf die Stereotypen. Ein Bild sagt mehr als tausend Worte, aber manchmal macht ein Wort das Bild noch klarer ... – minastaros

+0

Reg. b) implements bedeutet, dass Sie eine definierte Schnittstelle implementieren. Dies wird mit einem Lollipop angezeigt (bedeutet, dass Sie es bereitstellen). Wenn Sie eine Schnittstelle verwenden (aka. Etwas importieren), zeigen Sie das als Socket (erforderliche Schnittstelle). Der Port ist ein virtuelles Konstrukt, um Dinge zu bündeln. Programmierisch ausgedrückt: Wenn Sie eine ganze Lib importieren, dann ist die lib der Port. –

+0

Thx, zwei Details: Sie sagten "... sollte stattdessen <> oder > verwenden", so schlagen Sie eine _dependency_ zwischen den beiden Komponenten_instead_ der Lutscher vor? Mit oder ohne die Portboxen? Bis jetzt habe ich in meinen Büchern nur Nutzungsabhängigkeiten zwischen einer Komponente und einer Schnittstelle gesehen (Box-Notation, kein Lollipop) - reg ports: Ich habe die Idee von port = lib auf der Seite der bereitstellenden Schnittstelle. In meinem ersten Diagramm hat MsgGenerator jedoch einen Port, dann die erforderliche Schnittstelle, dann den Delegaten, dann einen anderen Port und dann wieder die Schnittstelle. Also was ist dieser äußere Port eigentlich? Die _verwendete_ lib? – minastaros