私はC++コードからUMLクラス図の開発に取り組んでいます。基本的に定義ファイルであるクラスレスヘッダーファイルがあります(構造体、列挙型、定義済み定数があります)。構造体と列挙型の一般的な表現方法は知っていますが、クラス図で定数を表現する方法(または定数を表現する必要があるかどうか)がわかりません。さらに、構造体、列挙型、および定数をいくつかのより大きなコンテナの一部にする必要があるかどうか知りたいですか? (名前空間ヘルパーまたはdefinitions.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
クラス図の目的は、クラス間の関係と、それらのクラスのオブジェクトがどのように変化するかを文書化することです。
ソフトウェアエンジニアリングでは、統一モデリング言語(UML)のクラス図は、システムのクラス、それらの属性、操作(またはメソッド)、およびオブジェクト間の関係を示すことによってシステムの構造を記述する一種の静的構造図です。
出典: Wikipedia
ここでの重要な要素は次のとおりです。
定数はこれらの要素のいずれにも適合しません。それは関係ではなく、確かに手術ではありません。最も近い要素は状態ですが、定数はほぼ逆です。それは静的であり、オブジェクトに関連付けられていません。 classダイアグラムはクラスを文書化しますが、これらのクラスタイプのオブジェクトによって使用されるクラスの要素に焦点を当てています。
あなたの具体的な例では、私は次のことを行います:
enum
は図ではクラスですが、おそらく空です。唯一の状態は、各列挙値を表す整数ですが、これは本質的に代理キーであり、コードでは参照されません。代わりにC++ enum class
を使用する場合は、文書化する価値のある状態になる可能性があることに注意してください。
struct
は動作のないクラスである必要がありますが、状態はpublicとして文書化されています。
これらの定数は、UMLclassダイアグラムに文書化しないでください。 1つは、それらはクラスに属していないため、まったく無関係です。 2つ目は、上で概説した理由により、定数がクラス図に属していないことです。
私は別の MLパッケージ図 をnamespace helper
に作成します(余談ですが、この名前空間にはよりわかりやすい名前を付けることをお勧めします)enum
とstruct
は名前空間にあります。この図のタイプでは、静的メンバー一般および定数を具体的に文書化することもできます。
クラス図は、エンティティレベルのモデルを示すことになっています。定数は実装の詳細であり、論理的にはクラスのメンバーではないため、OOの観点から見ると意味がありません。したがって、答えは「あなたはしない」です。
それらを、クラスConstantまたはstd :: string(どちらか適切と思われる方)のオブジェクト(またはIBM Rational用語では「インスタンス」)として表します。オブジェクトシンボルには、名前の下に値を追加できます。必要に応じて、値を{読み取り専用}としてマークできます。