Ist das Klassenstereotyp in einem UML-Klassendiagramm enthalten? Soll es angegeben werden?
Häufig sehe ich Klassendiagramme, in denen es kein <<class>>
Stereotyp gibt. Andere, wo es das Gemeinsame gibt <<interface>>
und andere mit einigen interessanten wie <<shape>>
oder <<computer>>
und so, was ich persönlich für ein Klassendiagramm nicht für notwendig halte, aber Ok.
Ich erstelle ein UML-Diagramm für ein modernes Algebra-Projekt in C++, aber wie wir wissen, sollte die Sprache bei der Arbeit mit UML nicht so einflussreich sein. Für dieses Projekt habe ich die <<interface>>
und <<abstract>>
Stereotypen bis zu diesem Punkt gut erkannt, aber es gibt Strukturen und Klassen, ich möchte die Dinge so gut wie möglich machen, also kam ich zu der Frage, ob <<class>>
und <<struct>>
gültige Stereotypen sind?
Ich danke Ihnen herzlich für Ihre Antworten oder Kommentare.
Hinweis: Ich denke, struct
sollte gültig sein, da es den Typ für eine bestimmte Implementierung angibt.
Antworten
Sie müssen nicht angeben, dass Klassen explizit in einem Klassendiagramm angegeben werden sollen: Laut UML wird dies standardmäßig angenommen:
Eine Klasse wird mit dem Klassifikator-Symbol dargestellt. Da Class der am weitesten verbreitete Classifier ist, ist kein Schlüsselwort erforderlich, um anzugeben, dass die Metaklasse Class ist.
Es steht Ihnen frei, Ihre eigenen Stereotypen in UML zu definieren. Sie werden am besten in einem Profildiagramm dokumentiert , das zeigt, wie sie sich auf Standard-UML-Elemente beziehen.
UML ist implementierungssprachenneutral. Es ist sehr üblich, sprachspezifische Datentypen (z . B. float
, double
die nicht zur Standard-UML gehören) und Stereotypen (z . B. class
und struct
) zu definieren. Siehe zum Beispiel hier ein C#-Profil für eine Sprache, in der Klassen und Strukturen unterschiedliche Semantik haben.
Beachten Sie, dass nicht alles zwischen « »
, was wie ein Stereotyp aussieht, ein Stereotyp ist. Es kann auch ein wohldefiniertes Schlüsselwort sein:
- interfaceist ein Schlüsselwort, das sich auf etwas mit einer klaren Bedeutung im UML-Metamodell bezieht, das von Klassendiagrammen und Komponentendiagrammen geteilt wird.
- enumerationist ein Schlüsselwort, das sich auf eine spezielle Art von Typ bezieht, der anders als andere grundlegende Datentypen und Klassen beschrieben werden muss.
Zwei sehr wichtige Anmerkungen dazu:
- Die Einführung sprachspezifischer Stereotypen macht Ihr Designmodell weniger allgemein und birgt das Risiko, detaillierte Implementierungsmodelle zu erhalten, anstatt sich auf das abstrakte Design zu konzentrieren. Sie sollten daher über die Vor- und Nachteile nachdenken. Wenn Ihr Modell sprachneutral ist, können Sie sich auf OOD konzentrieren und es beispielsweise für einen Java- oder C#-Port wiederverwenden lassen. Wenn Sie hauptsächlich ein Implementierungsmodell erstellen möchten, ist dies natürlich kein Problem.
- In C++ ist a standardmäßig
struct
aclass
mit allen Membern public. Dies ist ein zentrales Sprachprinzip. Der Unterschied besteht nur in der Zugriffskontrolle. Da Sie in UML die Zugriffskontrolle auf Mitgliedsebene dokumentieren,« struct »
erscheint es einfach überflüssig, ein Stereotyp zu haben, das verlangt, dass alle Mitglieder öffentlich sind. Ich würde empfehlen, stattdessen unstereotypisierte Klassen in UML zu verwenden und in der Implementierung zu entscheiden, ob eine Struktur oder eine Klasse verwendet wird, je nach Sichtbarkeit der Mitglieder.