UMLモデリングのエッセンス第3版(3) クラス図1

代表的なUMLダイアグラム,クラス図.これを知らないとデザインパターンすら読みにくい……

クラス図をいつどのように使うべきか

  • 全部の表現を使おうとしない→クラス・関連・属性・汎化・制約などのみで使ってみる
  • ビジネスの説明のための概念的なクラス図→ソフトウェアについて考えずシンプルに書く
  • 主要なものだけに作成することで,使用され・更新され続けるダイアグラムができる
  • クラス図はクラスのプロパティと操作,オブジェクト同士の結合を表す制約も示す

プロパティ(property)

  • クラスの構造的特性を表す
  • 2つの記法.属性と関連で表される
  • 属性と関連はほとんどいっしょだけど異なる情報もある
属性
  • クラスボックス内のテキスト行として記述

可視性 名前: タイプ 多重度 = デフォルト値 {プロパティ文字列}

関連
  • 2つのクラスの間にある実線で示す
  • 行の両端に多重度を示すことができる
構文
  • 名前
    • 必須は名前だけ
  • 可視性
    • 名前の前に可視性を表す記号を付ける.パブリック(+)プライベート(-).他にもあるけどPerlでは使わなさそう
  • タイプ
    • オブジェクトの種類とか(型とかクラス名とか)
  • 多重度
    • プロパティの含むことのできるオブジェクトの数
    • [1] 1コだけ・ [0..1] 0か1コ・[*] 任意の数
    • [下限..上限] という書き方もできる.範囲演算子正規表現の量指定子みたいに書く

操作(operation)

ようにするにメソッド.だが違いがあり,区別することで役立つこともある

  • 操作: オブジェクトにたいして起動されるもの(手続き宣言)
  • メソッド: 手続きの本体

オーバーライドするときに実装と明確に区別するべき時に区別すると良いのかも

可視性 名前(パラメータリスト): 戻り値のタイプ {プロパティ文字列}

  • パラメータはこのように表される
    • 方向 名前:タイプ = デフォルト値
構文

基本的にプロパティのものといっしょ

汎化

継承

ノートとコメント

  • ノートは破線を使ってコメントを付けている要素にリンクできる
  • コメントはダイアグラムの要素にインラインで入れることができる.テキストの前にハイフン2つ(--)

依存関係

  • ひとつの要素の定義を変更したことによってもう一方の要素の定義が変わるときに,2つの要素の間には依存が存在する
    • 別のクラスにメッセージを送るとき
    • データの一部として別のクラスを有しているとき
    • 操作に対するパラメタとして別のクラスを指定するとき
  • 依存を一方向に限定することで影響を与えることなく変更できる
    • プレゼンテーションはドメインに依存するが,ドメインはプレゼンテーションに依存しない構成にすることで,ドメインのロジックを自由に変更できる
    • ドメインのインタフェイスを変更しない限り,ドメインが依存しているクラスの変更がプレゼンテーションに影響することはない
依存関係のキーワード(一部)
  • «call» 呼び出し
  • «create» インスタンスの生成
  • «instantiate» インスタンスである
  • «realize» インタフェイスまたは仕様の実装である
  • «use» 必要としている

制約規則

  • 関連,属性,汎化などでは表現できない残りの規約を表すことができる
  • 制約の記述には制限はなく,中カッコ{}のなかに入れれば良い

契約による設計(コラム)

  • 契約による設計の中心は表明(assertion)→決して偽にならないはずの命題→ただしチェックされるのは開発時だけである
  • 表明には3種類→事後条件・事前条件・不変表明
    • 事後条件: 操作の実行後に世界の状態がどう見えるべきかの定義
    • 事前条件: 操作の実行前に世界の状態がどういう状態であると予期しているかの定義
      • チェックのレスポンシビリティ(責務)がどこにあるかを示すための条件→ここに書かれている条件は呼び出し側が保証している必要があることが分かるので,チェックの過少過多を防ぐことができる
    • 事前・事後条件の定義から例外(Excaption)は,事前条件が満たされた状態でも事後条件が満たせない場合に発生すると定義できる
    • 不変表明(invariant): クラスに対する表明.不変表明はクラスのインスタンスすべてにたいして常に真となる
      • この表明によりスーパクラスに矛盾するようなサブクラスの定義を防ぐことができる

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)

UML モデリングのエッセンス 第3版 (Object Oriented SELECTION)