Wie stellt man die verschachtelte Klasse von C ++ in UML dar? [Duplikat]

10

Wie wird die verschachtelte Klasse von C ++ in UML dargestellt? Klasse a { Klasse b { } }

    
Victor S 06.01.2015, 11:19
quelle

2 Antworten

9

Ich hatte gedacht, dass die Spezifikation von der Kreuz-Kreis-Notation abkommt. Also bin ich in den Spezifikationen herumgelaufen und konnte es in 2.0 nicht finden. Ich muss feststellen, dass die 2.0-Spezifikation dies nicht mehr unterstützt. Während es tatsächlich in v1.4 angegeben ist, habe ich die 2.4.1-Spezifikation vollständig durchgesehen und es ist nirgendwo zu sehen (tatsächlich liefert das Wort "anchor" bei einer dokumentenweiten Suche 0 Ergebnisse). Ich schaute mich noch einmal um, und hier ist, was ich zusammensetzen kann.

Erstens hatte ich immer verstanden, dass verschachtelte Klassen ein Mittel zur Implementierung von Kompositionen waren. Außerdem versucht UML, nicht von der Implementierung unabhängig zu sein, und verschachtelte Klassen nicht. (Sie können Kompositionen auch auf andere Weise erstellen, und nicht alle OO-Sprachen unterstützen geschachtelte Klassen.) Nun enthält die Erklärung von 1.4 Folgendes:

  

Wenn Klasse B durch eine "Anker" -Zeile mit dem "Anker" -Symbol in Klasse A an Klasse A angehängt wird, dann wird Klasse B innerhalb des Namensraums der Klasse A deklariert. Das heißt, die Beziehung zwischen Klasse A und Klasse B. ist die Namespace-ownedElement-Verknüpfung.

Ok. Jetzt sagt UML 2.0 das:

  

Das Kernel-Paket repräsentiert die grundlegenden Modellierungskonzepte der UML, einschließlich Klassen, Assoziationen und Paketen.

Hier ist ein Diagramm des Kernel-Pakets:

Das ist ziemlich abstrus, aber schaut euch die abstrakte Klasse NamedElement oben links an. (Eine "NamedElement" -Klasse ist ein Element mit einem Namen.) Beachten Sie, dass der Namespace davon abgeleitet ist. Beachten Sie, dass rechts neben dem oberen Rand der Namespace-Klasse eine weitere NamedElement-Klasse vorhanden ist. Eine der Zuordnungen enthält die Eigenschaft {subsets ownedElement} und eine Kompositionsdiamant auf dem Ende des Namespace. Auf der Seite Namespace gibt es die Eigenschaft {Subsets Owner}.

Dies bedeutet, dass NamedElement, wenn es sich um eine Kompositionsassoziation mit Namespace handelt, eine Teilmenge von Namespace ist. Mit anderen Worten, die Beziehung zwischen Namespace und NamedElement ist die Namespace-ownedElement-Assoziation, die in der 1.4-Spezifikation beschrieben wird. Daher stellt die Kompositionsbeziehung, wenn sie mit den Eigenschaften namespace und ownedElement geschmückt ist, eine verschachtelte (oder innere oder interne oder wie auch immer Ihre bevorzugte Programmiersprache bezeichnet wird) Klasse dar.

Also werde ich sagen, dass dies der akzeptierte Weg ist, verschachtelte Klassen anzuzeigen, wenn Sie die Kompositionsnotation verwenden. So:

Nun können Sie die verschachtelte Klasse in der Klasse, in der sie enthalten ist, anders kleben. Die Notationsbeispiele in der Spezifikation zeigen diese AFAICS nicht, aber sie zeigen sie mit anderen NamedElements (Pakete, Komponenten usw.), so dass ich nicht sehe, warum Sie nicht können.

Ich sehe jedoch nicht, dass die Ankerschreibweise aktuell ist. Die Lieblings-Site von xmojmr (und auch eine gute Seite), www.uml-diagrams.org, sagt dazu:

  

Jetzt veraltet UML 1.4.2 Spezifikation definierte verschachtelte Klasse als eine Klasse, die in einer anderen Klasse deklariert ist und zum Namensraum der deklarierenden Klasse gehört. Die Beziehung zwischen diesen Klassen wurde "namespace owned element association

genannt      

Verschachtelter Klassifizierer, z.B. geschachtelte Klasse, verschachtelte Schnittstelle oder geschachtelter Anwendungsfall könnten wie jeder andere Klassifizierer verwendet werden, aber nur innerhalb der enthaltenden Klasse oder Schnittstelle.

     

Laut UML 1.4.2 könnte eine deklarierende (verschachtelte) Klasse und eine verschachtelte Klasse durch eine Linie verbunden dargestellt werden, mit einem "Anker" -Symbol am Ende, das mit der deklarierenden Klasse verbunden ist. Ein Ankersymbol ist ein Kreuz in einem Kreis.

     

UML-2.x-Spezifikationen - einschließlich der jüngsten UML 2.4.1 - beschreiben die Verschachtelung von Klassifizierern innerhalb strukturierter Klassen, ohne eine explizite Notation für die Verschachtelung bereitzustellen. Beachten Sie, dass die 1.4-Anker-Notation von UML in einem Beispiel in UML 2.4.x für Pakete immer noch als "alternative Mitgliedsnotation" und ohne Angabe weiterer Details oder Erklärungen verwendet wird.

Ich konnte das Diagramm "ein Beispiel" nicht finden, also ist es vielleicht noch da. Zumindest scheint die Notation veraltet zu sein. Ich würde entweder die Eigenschaften verwenden, einen Stereotyp <<nested>> erstellen oder die geschachtelte Klasse in die Owner-Klasse einfügen.

    
BobRodes 07.01.2015, 03:25
quelle
5

Verschachtelte Klasse in UML (für jede Sprache) kann wie folgt dargestellt werden:

Hier

  1. Die Klasse Inner1 ist innerhalb der äußeren Klasse Outer 1
  2. verschachtelt
  3. Klassen Inner2, Inner3, Inner4 Klassen sind in Outer2
  4. verschachtelt

Referenz aus hier

    
stamhaney 06.01.2015 14:16
quelle

Tags und Links