💻

クラス図におけるデフォルト多重度のルール定義

2020/12/10に公開

はじめに

クラス図を用いて分析・設計する上で、正しく多重度を設定することはとても大切なことです。誤った多重度の解釈は大きなリスクとなるでしょう。しかしクラス図のあらゆる関連に対して多重度を定義することは、モデルの閲覧性を大きく損ないます。

そこで関連の種類、親側か子側か、それぞれの状態ごとに省略時のデフォルト多重度を決定することで、簡潔で読みやすいモデルを書くことができます。

ここでは、その一例を紹介します。

関連の種類

UMLのクラス図には3種類の関連があります。

  • 関連
  • 集約
  • コンポジション

また集約とコンポジションには両端に、親子の関係が発生します。

どの種類か?親側なのか子側なのか?によって適切なデフォルトの多重度は変わってきます。

デフォルト多重度

関連

両端のいずれであっても1ををデフォルトとする。

関連の多重度の多くは1:n、n:1であり、n:nの関連はそれ以外の多重度に比較して少ないです。そのためデフォルトルールを1としておくことで記述を最小限にできます。

集約

  • 親側:0~n
  • 子側:0~n

集約は「全体と部分」の関係を表します。

一般的に部分側は全体に対して複数あることが多いため、子側のデフォルト値を0~nとします。

また集約はコンポジションとは異なり、同一の子を複数の親が共有するような場合を表現するため、親側も0~nをデフォルトとします。

コンポジション

  • 親側:1
  • 子側:0~n

コンポジションは集約と同様に「全体と部分」を表しますが、子側のライフサイクルが親側のライフサイクルに依存する、つまり親が消されると子も消されるような場合を表現します。

このため集約と異なり、親側の多重度は1であることが多くなります。

限定子

集約もしくはコンポジションで限定子が指定された場合、いずれであっても以下をデフォルトとする。

  • 親:集約・コンポジションそれぞれのルールに従う
  • 子:限定子ごとに1

限定子は子側の多重度を明確にするため利用します。

このため多くは子側の多重度は、限定子に対して1になることが多くなります。

Discussion