UML クラス図の書き方

間違ってるところもあるだろうけど、メモとして。
文中であいまいな表現をしているのは、自信がないから・・です。
ここで記述する以外にも書き方や機能はあるけど、基本の使い方を。
クラス図にはUMLmemoを使用する。

クラス

class Hoge
{
public:
  void Update();
  void set_piyo( int piyo );
  int piyo();

private:
  int piyo_;
};

のようなクラスの場合。

こんな感じ。

変数
アクセス指定子 変数名 : 型
関数
アクセス指定子 関数名( 引数の型 ) : 戻り値の型
アクセス指定子
アクセス指定子 記号
public +
protected #
private -

汎化

いわゆる継承。

親クラスの方に△が向くようにする。

インターフェイス


インターフェイス自体は○で示す。
クラスと繋ぐときは実線でつなぐ。

関連

(ここは本当に間違っている可能性が・・)

記号 意味
関連 実線だけ AとBは関連性がある
矢印付き関連 ←・関連に矢印が付く DからCへの関連がある

どちらにしても情報が少ないので、関連の度合いを示すために多重度がある。

(UMLmemoで関連に多重度の乗せ方がわからず、commentで強引に乗せた。)
意味は、名簿1個に対して、学生が0個以上関連している。

多重度 0 1 0..* 1..* * 2..5
意味 0 1 0以上 1以上 複数 2〜5

集約とコンポジション

どちらもクラスを保持していることは変わらないので差がわかりにくい・・
少し強引な例えだけどこんな感じ。

左が集約。右がコンポジション
ざっくりとした違いは、保持しているオブジェクト(PC)をA、保持されているオブジェクト(ディスプレイとか)をBとすると

集約 Aが破棄されても、保持しているBが破棄されるとは限らない。Bは生成されていない可能性も。
コンポジション Aが破棄されればBも破棄。AがBを生成・破棄する

依存


BはAに依存している。ローカル変数や引数、戻り値などに使用している場合に使う。
特に、Aの実装の変更がBの実装に影響を与える場合に使用する。

class B
{
 void piyo( constA& );
};