it-swarm.com.de

Wie werden Konstanten im UML-Klassendiagramm dargestellt?

Ich arbeite an der Entwicklung eines UML-Klassendiagramms aus C++ - Code. Ich habe eine klassenlose Header-Datei, die im Grunde eine Definitionsdatei ist (sie enthält Strukturen, Aufzählungen und definierte Konstanten). Ich weiß, wie man Strukturen und Aufzählungen im Allgemeinen darstellt, aber ich bin mir nicht sicher, wie ich Konstanten im Klassendiagramm darstellen soll (oder ob ich sie darstellen soll). Außerdem bin ich gespannt, ob die Strukturen, Aufzählungen und Konstanten Teil eines größeren Containers sein sollten. (Wie das Verweisen auf den Namespace-Helfer oder die Definitionen.h)

#ifndef DEFINITIONS_H
#define DEFINITIONS_H

#include <stdint.h>
#include <string>

namespace helper
{

  enum Colors
  {
    Red = 0,
    Blue,
    Green   
  };

  struct volunteer
  {
    std::string FirstName;
    std::string MiddleName;
    std::string LastName;
    std::string Occupation;
  };


  typedef const std::string Constant;
  Constant Foo = "Foo";
  Constant Bar = "Bar";
  Constant Bat = "Bat";
 }

#endif
5
ÁEDÁN

Das Ziel eines Klassendiagramms besteht darin, die Beziehungen zwischen Klassen sowie die Art und Weise zu dokumentieren, wie sich Objekte dieser Klassen ändern können:

In der Softwareentwicklung ist ein Klassendiagramm in der Unified Modeling Language (UML) eine Art statisches Strukturdiagramm, das die Struktur eines Systems beschreibt, indem die Klassen des Systems, ihre Attribute, Operationen (oder Methoden) und die Beziehungen zwischen Objekten angezeigt werden.

Quelle: Wikipedia

Die Schlüsselelemente hier sind:

  • Beziehungen zwischen Klassen: Welche anderen Klassen werden bei einer gegebenen Klasse verwendet?
  • Operationen , die für eine Klasse ausgeführt werden können: Welche Methoden/Funktionen gehören zu einer Klasse?
  • Status einer Klasse: Welche Daten kapselt eine Klasse?

Eine Konstante passt in keines dieser Elemente. Es ist keine Beziehung und schon gar keine Operation. Das nächste Element ist state, aber eine Konstante ist so ziemlich das Gegenteil: Sie ist statisch und nicht an ein Objekt gebunden. Während ein Klassendiagramm Klassen dokumentiert, konzentriert es sich auf Elemente von Klassen, die von Objekten dieser Klassentypen verwendet werden.


In Ihrem speziellen Beispiel würde ich Folgendes tun:

  • Das enum wäre eine Klasse im Diagramm, aber wahrscheinlich leer. Der einzige Status ist die Ganzzahl, die jeden Aufzählungswert darstellt. Dies ist jedoch im Wesentlichen ein Ersatzschlüssel, auf den im Code nicht verwiesen wird. Beachten Sie, dass Sie möglicherweise einen dokumentationswürdigen Status haben, wenn Sie stattdessen ein C++ enum class Verwenden.

  • Das struct sollte eine Klasse ohne Verhalten sein, aber der als öffentlich dokumentierte Status.

  • Diese Konstanten sollten nicht in einem UML-Diagramm dokumentiert werden. Zum einen gehören sie keiner Klasse an, was sie völlig irrelevant macht. Zweitens gehören Konstanten aus den oben genannten Gründen ohnehin nicht in ein Klassendiagramm.

  • Ich würde ein separates ML-Paketdiagramm für namespace helper Erstellen (nebenbei empfehle ich, einen aussagekräftigeren Namen für diesen Namespace zu wählen), aus dem hervorgeht, dass enum und struct befinden sich im Namespace. Dieser Diagrammtyp ermöglicht auch die Dokumentation statischer Elemente im Allgemeinen und von Konstanten im Besonderen.

4
user22815

Ein Klassendiagramm soll ein Modell auf Entitätsebene zeigen. Eine Konstante ist ein kleines Implementierungsdetail und logischerweise kein Mitglied der Klasse. Sie hat in der Ansicht OO) keine Bedeutung. Die Antwort lautet also "Sie nicht".

3
Martin Maat

Einige Ihrer helper Informationen könnten als solche modelliert werden:

(enter image description here

Der Begriff einer Konstante in UML existiert, befindet sich jedoch normalerweise innerhalb einer Klasse und hat einen Typ. Siehe die Klasse Employee im obigen Diagramm.

1
Fuhrmanator

Ich würde sie als Objekte (oder "Instanzen" in der IBM Rational-Terminologie) der Klasse Constant oder std :: string darstellen (je nachdem, was angemessener erscheint). Für das Objektsymbol kann der Wert unter dem Namen hinzugefügt werden. Falls gewünscht, können Sie den Wert als {schreibgeschützt} markieren.

0
Simon B