2014-11-26 13 views
10

Ich habe eine Frage zu UML. Ich habe eine Klasse, die einfach eine innere Klasse mit dem privaten Zugriffsmodifikator enthält - auf die von nirgendwo anders zugegriffen werden kann ... Normalerweise kann ich eine (+) Beziehung wie hier (InnerOddIterator) verwenden:Private verschachtelte Java-Klasse im UML-Diagramm

enter image description here

(entnommen aus http://www.uml-diagrams.org/nested-classifier.html)

ich habe nirgendwo keine Informationen darüber, wie deutlich zu betonen, dass diese Klasse ist privat gefunden. Weißt du, ob eine solche Methode überhaupt existiert? Wenn ja, bin ich Ihnen dankbar, dass Sie mir hier einen Link oder etwas geben?

zu halten gerade die Dinge klar, ein Beispielcode:

public class DataStrucure { 
    // fields, methods, etc 
    private class InnerOddIterator{ 
      // ... 
    }; 
} 
+0

Siehe auch "Privater Import" in http://www.uml-diagrams.org/package-diagrams.html#package-import – xmojmr

+0

Wenn Sie der Meinung sind, dass es wichtig ist, klarzustellen, dass diese Klasse privat ist, ziehen Sie in Erwägung, a Stereotyp wie <>. Du dokumentierst einfach, was dein Stereotyp bedeutet, und da bist du. Stereotype sind der "offizielle" Weg, um die UML-Spezifikation zu erweitern, und der Punkt an ihnen, der manchmal übersehen wird, ist, dass jeder sie verwenden kann, um die UML beliebig zu erweitern. Die Tatsache, dass einige Stereotypen (zum Beispiel "<>") ihren Weg in den allgemeinen Gebrauch gefunden haben, ändert dies nicht. – BobRodes

+1

Siehe [diesen Beitrag] (http://stackoverflow.com/questions/27797531/how-to-represent-the-nested-class-of-c-in-uml/27810986#27810986) für aktuellere Informationen. – BobRodes

Antwort

2

Zunächst einmal: Sie etwas in Ihrem Code haben und für eine UML-Darstellung zu fragen. Aber, IMHO, sollten Sie es anders herum betrachten: Wie kann diese UML-Idee im Code dargestellt werden? (Einige Programmiersprachen bieten nicht einmal private verschachtelte Klassen an ...).

Wie für private verschachtelte Klassen: Ich empfehle, eine Komposition zu verwenden. Es ist stärker als die Assoziation, aber nicht so stark wie die Vererbung. Und die komponierte Klasse kann ohne ihren Komponisten nicht existieren. Ziemlich genau eine private geschachtelte Klasse.

Die Zeichnung von http://www.uml-diagrams.org/association.html genommen wird: enter image description here

+0

"Einige Programmiersprachen bieten nicht einmal private verschachtelte Klassen" - guter Punkt, richtig ...Ich habe Java-Tag hinzugefügt, um genauer zu sein –

+0

In Java innerhalb einer Instanz, wenn die verschachtelte innere Klasse können Sie 'this verwenden, um auf die äußere Instanz zuzugreifen - sie sind letztlich miteinander verbunden - es kann nicht ohne die äußere Instanz existieren. Wie gesagt IMHO ist es genau eine Zusammensetzung. –

+0

Übrigens ist es in C# nicht so - es gibt keine automatische Bindung an eine äußere Instanz ... –

0

Um anzuzeigen, dass Ihre innere Klasse ist privete das Beste für mich zu verwenden ist - Zeichen, wie unten dargestellt, aber natürlich in diesem Fall, dass Sie verpassen die innere Struktur Ihrer inneren Klasse. enter image description here

4

Aus UML Sicht. Wenn Klassifikator (auch Klasse) in einer anderen Klasse verschachtelt ist, spielt die Verschachtelungsklasse die Rolle des Namespace. In diesem Fall sind verschachtelte Klassen im Kontext-Namespace verborgen (privat). Das bedeutet, Ihr Diagramm definiert implizit die Definition der privaten inneren Klasse. . In ihrem Umfang, einschließlich der Klassen Verschachtelung von Klassifizierer schränkt die Sichtbarkeit von

„A-Klasse fungiert als Namensraum definiert für verschiedene Arten von Klassifikatoren:

hier Teil der Definition von UML Oberbau Abschnitt strukturierten Wert Klassifizierer ist der Klassifikator in den Geltungsbereich des Namespace der enthaltenen Klasse und wird für Gründe für das Ausblenden von Informationen verwendet. Verschachtelte Klassifizierer werden wie alle anderen Klassifizierer in der enthaltenden Klasse verwendet. "

+0

Interessante Information. – BobRodes

+0

Ich habe das ein bisschen mehr studiert. Die "Anker" -Notation im OP-Diagramm ist in 1.4 aber nicht in 2.x angegeben. Ich habe ein bisschen das Namespace-Metamodell analysiert und es sieht so aus, als würde man eine Namespace-Eigenschaft auf die enthaltene Klasse setzen, eine Kompositions-Raute auf das Assoziationsende der enthaltenden Klasse setzen und die {Subsets-Namespace} -Eigenschaft auf die geschachtelte Klassenende. Die Eigenschaft subsets implementiert die Sichtbarkeit, die dieses Zitat beschreibt. Siehe [this] (http://stackoverflow.com/questions/27797531/how-to-represent-the-nested-class-of-c-in-uml/27810986#27810986) für mehr. – BobRodes

Verwandte Themen