web-dev-qa-db-fra.com

Comment représenter des constantes dans un diagramme de classes UML?

Je travaille sur le développement d'un diagramme de classes UML à partir de code C++. J'ai un fichier d'en-tête sans classe qui est essentiellement un fichier de définitions (il a des structures, des énumérations et des constantes définies). Je sais comment représenter les structures et les énumérations en général, mais je ne sais pas comment représenter (ou si je devrais représenter) les constantes dans le diagramme de classes. De plus, je suis curieux de savoir si les structures, énumérations et constantes doivent faire partie d'un conteneur plus grand? (Comme référencer l'assistant d'espace de noms ou les définitions.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

Le but d'un diagramme de classes est de documenter les relations entre les classes ainsi que la façon dont les objets de ces classes peuvent changer:

En génie logiciel, un diagramme de classes dans le langage de modélisation unifié (UML) est un type de diagramme de structure statique qui décrit la structure d'un système en montrant les classes du système, leurs attributs, opérations (ou méthodes) et les relations entre les objets.

Source: Wikipedia

Les éléments clés ici sont:

  • Relations entre les classes: étant donné une classe, quelles autres classes utilise-t-elle?
  • Opérations pouvant être effectuées sur une classe: quelles méthodes/fonctions appartiennent à une classe?
  • État appartenant à une classe: quelles données une classe encapsule-t-elle?

Une constante ne rentre dans aucun de ces éléments. Ce n'est pas une relation, et certainement pas une opération. L'élément le plus proche est l'état, mais une constante est à peu près le contraire: elle est statique et n'est pas liée à un objet. Alors qu'un diagramme de classe documente les classes, il se concentre sur les éléments des classes utilisées par les objets de ces types de classe.


Dans votre exemple spécifique, je ferais ce qui suit:

  • enum serait une classe dans le diagramme, mais serait probablement vide. Le seul état est l'entier qui représente chaque valeur d'énumération, mais il s'agit essentiellement d'une clé de substitution et non référencée dans le code. Notez que si vous utilisez un C++ enum class à la place, vous pourriez avoir un état à documenter.

  • struct doit être une classe sans comportement, mais l'état documenté comme public.

  • Ces constantes ne doivent pas être documentées dans un diagramme de classe UML . D'une part, ils n'appartiennent pas à une classe, ce qui les rend complètement hors de propos. Deuxièmement, les constantes n'appartiennent de toute façon pas dans un diagramme de classes pour les raisons que j'ai décrites ci-dessus.

  • Je créerais un diagramme de package UML séparé pour namespace helper (en passant, je recommande de choisir un nom plus descriptif pour cet espace de noms) montrant que les enum et struct sont dans l'espace de noms. Ce type de diagramme permet également de documenter les membres statiques en général et les constantes en particulier.

4
user22815

Un diagramme de classes est censé montrer un modèle au niveau de l'entité. Une constante est un détail d'implémentation mineur et logiquement, elle n'est pas un membre de la classe, elle n'a aucune signification dans la vue des choses OO. La réponse est donc "vous n'en avez pas").

3
Martin Maat

Certaines de vos informations helper pourraient être modélisées comme telles:

enter image description here

La notion de constante en UML existe, mais elle se trouve généralement à l'intérieur d'une classe et a un type. Voir la classe Employee dans le diagramme ci-dessus.

1
Fuhrmanator

Je les représenterais comme des objets (ou "instances" dans la terminologie IBM Rational) de la classe Constant ou std :: string (selon ce qui semble le plus approprié). Le symbole d'objet peut avoir la valeur ajoutée sous le nom. Vous pouvez marquer la valeur comme {lecture seule} si vous le souhaitez.

0
Simon B