Come rappresentare le costanti nel diagramma delle classi UML?

5

Sto lavorando allo sviluppo di un diagramma di classe UML dal codice C ++. Ho un file di intestazione classless che è fondamentalmente un file di definizioni (ha structs, enum e costanti definite). So come rappresentare le strutture e le enumerazioni in generale, ma non sono chiaro su come rappresentare (o se dovrei rappresentare) le costanti nel diagramma delle classi. Inoltre sono curioso di sapere se le strutture, le enumerazioni e le costanti dovrebbero essere parte di un contenitore più grande? (Come fare riferimento all'assistente spazio dei nomi o alla definizione. 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
    
posta ÁEDÁN 26.06.2017 - 17:44
fonte

4 risposte

4

L'obiettivo di un diagramma di classe è di documentare le relazioni tra le classi e il modo in cui gli oggetti di tali classi possono cambiare:

In software engineering, a class diagram in the Unified Modeling Language (UML) is a type of static structure diagram that describes the structure of a system by showing the system's classes, their attributes, operations (or methods), and the relationships among objects.

Fonte: Wikipedia

Gli elementi chiave qui sono:

  • Relazioni tra classi: data una classe, quali altre classi usa?
  • Operazioni che possono essere eseguite su una classe: quali metodi / funzioni appartengono a una classe?
  • Stato appartenente a una classe: quali dati incapsula una classe?

Una costante non si adatta a nessuno di questi elementi. Non è una relazione, e certamente non un'operazione. L'elemento più vicino è lo stato, ma una costante è praticamente l'opposto: è statica e non legata a un oggetto. Mentre un diagramma classe documenta le classi, si focalizza sugli elementi delle classi usate dagli oggetti di quei tipi di classe.

Nel tuo esempio specifico, farei quanto segue:

  • Il enum sarebbe una classe nel diagramma, ma sarebbe probabilmente vuota. L'unico stato è il numero intero che rappresenta ciascun valore enum, ma che è essenzialmente una chiave surrogata e non referenziato nel codice. Tieni presente che se invece utilizzi un% di C ++% co_de, potresti avere uno stato che vale la pena documentare.

  • Il enum class dovrebbe essere una classe senza comportamento, ma lo stato è documentato come pubblico.

  • Queste costanti non dovrebbero essere documentate in un diagramma classe di UML. Per uno, non appartengono a una classe, rendendoli completamente irrilevanti. Due, le costanti non appartengono comunque a un diagramma di classe per i motivi che ho descritto sopra.

  • Vorrei creare un diagramma del pacchetto UML separato per struct (come parte, ti consiglio di scegliere un nome più descrittivo per questo spazio dei nomi) che mostra che namespace helper e enum sono nello spazio dei nomi. Questo tipo di diagramma consente anche di documentare in modo specifico i membri statici e le costanti.

risposta data 26.06.2017 - 18:41
fonte
2

Un diagramma di classe dovrebbe mostrare un modello a livello di entità. Una costante è un dettaglio di implementazione minore e logicamente, non è un membro della classe, non ha alcun significato nella visione OO delle cose. Quindi la risposta è "tu non lo fai".

    
risposta data 26.06.2017 - 18:37
fonte
1

Alcune delle informazioni helper potrebbero essere modellate come tali:

La nozione di costante in UML esiste, ma di solito è all'interno di una classe e ha un tipo. Vedi la classe Employee nello schema sopra.

    
risposta data 14.07.2017 - 16:04
fonte
0

Li rappresenterei come oggetti (o "istanze" nella terminologia IBM Rational) di classe Constant o std :: string (quale sembra più appropriato). Il simbolo dell'oggetto può avere il valore aggiunto sotto il nome. È possibile contrassegnare il valore come {sola lettura} se lo si desidera.

    
risposta data 26.06.2017 - 18:36
fonte

Leggi altre domande sui tag