UML:クラス図についてのメモ

前提

  • Javaで実装する前提で考える

クラス図

基本的な考え方

  • 1つの概念 = 1つのクラスと考える
  • 概念間の 関係(Relatioships) を明示的に記述することで、概念が指し示す意味をより明確にする

関係(Relatioships) の類型

  • インスタンスレベルのものとクラスレベルのものが存在する [1]
  • インスタンスレベル
  • クラスレベル
    • 汎化( Generalization / Inheritance ) : 継承, extends を使う時はこちら
    • 実現( Realization / Implementation ) : interface, implements を使う時はこちら

関係(Relatioships) の図での記述ルール

図1: 関係の図での表現ルール

関連(Association)

  • 1つの型のインスタンスともう一方の型のインスタンスをつなぐ線をリンクと呼ぶ
  • 2つの概念を線( Link ) で結びその関係性を関連名として記述する
    図2:関連名

SourceとTarget

  • 左側のクラス - 関連名 - 右側のクラスには、英語の 「主語(S) - 動詞(V) - 目的語(O)」 の関係がなりたつ
    • 例えば以下の図は、 「購読者は/雑誌を/購読する」 と読み替えることができる
    • 主語になる側を ソース (Source) , 目的語になる側をターゲット(target)と呼ぶ
      図3:SourceとTargetと関連名の関係性

実装パターン

  • 関連を実装する際は、 source 側のインスタンスtarget 側のインスタンスへのリンクを保持する、つまり参照型のフィールドを持つようパターンが多い [3]
    • とのことなので以下のようになる??
    • このように、あるインスタンスが別のインスタンスに対し参照を持つことを navigatable である、 navigtability がある、という
public class Source{
  private Target target;
  ...
}

多重度(Multiplicity)

定義

多重度の記載方法

下限値の考え方

脚注/参考

[1] Wkipedia上は、他にGeneralレベルのものがあるが割愛 https://en.wikipedia.org/wiki/Class_diagram#Realization/Implementation
[2] 『UMLモデリング入門』P60
[3] 『UMLモデリング入門』P61
[4] 『ダイアグラム別UML徹底活用 第2版』P59

/* https://sunrise033.com/entry/hatena-blog-how-to-hierarchicalize-categories */