UML

目次

1  UML

オブジェクト指向による設計やプログラミングにおいて、情報を整理し、複数人の統一を図るため

UML (Unified Modeling Language) 統一モデリング言語

が全世界で利用されている。

1.1 種々のUML記法

クラス図

システムをデータの視点から見てクラス構造を記述する図法。
中心となるモデル。

ユースケース (ユースケース記述とユースケース図)

ユーザの視点でシステムの機能的な流れを示す記述法。
システムの使用イメージを表現する。

ユースケース記述は、ユースケース (ユーザから見た機能要求) に対してシステムとアクター (役割) のやり取りを自然言語でシナリオとして記述したもの。

ユースケース図は、複数のユースケースをまとめて一覧できる図として表したもの。

ユースケースを列挙し、アクターと関連付ける
図1  「図書貸し出し・返却システム」のユースケース図の例
アクティビティ図

手続きなどの振る舞いを記述するための記法。ペトリネットと似ており、並列的な動作を記述できる。

シーケンス図

オブジェクト群がメッセージ送信によってどのように相互作用してシステムの一機能を実行していくかを、順序をおって記述する図法。
UML 2 では、相互作用フレームを使って条件分岐や繰り返しも記述できる。

「図書貸し出し・返却システム」で。蔵書の貸し出しが問題なく行われる場合の処理手順、メッセージの流れをシーケンス図で表すと下図のようになる。ただし、「受付」オブジェクト、「貸し出し希望者」オブジェクト、「データ管理」オブジェクトを参加者とする。

シーケンス図例

コラボレーション図 (UML 1) または コミュニケーション図 (UML 2)

オブジェクト群が相互作用して行うまとまった動作を、オブジェクト相互のリンクを強調して記述する図法。

状態マシン図

システムをその振る舞いの視点から記述する図法。
個々のオブジェクトが状態マシンとしてモデリングされる。

1.2 クラス図 (class diagram)

UMLで最もよく使われるクラス図について、もう少し詳しく説明する。

(a) クラス、属性、オペレーション

クラス (class)
同じ属性、オペレーションを持つインスタンスのグループの記述

属性 (attribute)
クラスに属するオブジェクトが保有するデータ

オペレーション (operation)
クラスに属するオブジェクトが持つ機能。メッセージインタフェース

メソッド (method)
オペレーションを具体的に実装したもの

(b) 関連、役割、多重度

関連 (association)または 関係 (relationship)
オブジェクト間の関係をクラスレベルで表現したもの

役割 (role)
関連する2つのクラス間で、片方のクラスからもう一方のクラスを見たときの呼び名

多重度 (multiplicity)
関連する2つのクラス間で、片方のクラスのインスタンス1つに対する、もう一方のクラスクラスのインスタンスの数についての決り。
1対 (0または1)、1対1、1対多、など。

(c) 集約 (aggregation)

関連の特殊なもの。
部品を表すクラスと、それを用いて組み立てられるクラスを対応付ける関連。

(d) 汎化 (generalization) - 特化 (specialization)

あるクラスを基にして新たなクラスを定義する場合、それらを「汎化-特化」関係にあるといい、特化されたクラスから汎化クラスへ向かう白抜き三角の矢印で表す。

汎化 (generalization)
複数のクラスに共通の特性を持ったクラスを作ること。

特化、特殊化 (specialization)
元のクラスに、属性やオペレーションの追加、属性間制約の追加を行って新しいクラスを作ること。

「汎化-特化」関係は、実装においては 継承 (inheritance)コンポジション (composition) で表現される。

1.3 クラス図の記述法と例

UMLにおけるクラス図の記述法の基本を示すと共に、例として、「図書の貸し出し・返却業務」システムのクラス図を示す。

簡易形のクラス図では、利用するクラスをクラスを四角い枠で示して列挙する。枠の中にはクラス名のみを記述する。
また、クラス間の「関連 (association)」は実線でクラス同士をつないで表す。
関連の役割名 (関連ロール, role) を相手側につける。
片方あるいは両方の端に矢印をつけて関連の方向性を表すことができる。

方向性指定なし
方向性を指定 (単方向)
←→方向性を指定 (双方向)

また、

11個限定
0..50個以上5個以下
*任意数 (0個以上)
2..*2個以上

などのように、多重度 (multiplicity) を指定することができる。

例で、「登録者」「蔵書」「受付」をそれぞれクラスとし、また、「データ管理」クラスを「登録者データのリスト」と「蔵書データのリスト」を持つものとして、全体の関係をクラス図で表すと下図のようになる。

簡易クラス図

クラス図では、「汎化 - 特化」関係は 白抜き三角矢印 (汎化クラスに向ける) のある線 で表される。これは、実装上ではクラスの継承関係を表す。

例で、「登録者」クラスを特化した「貸し出し希望者」クラスおよび「返却希望者」クラスを考えた場合、下図のようになる。

簡易クラス図に継承関係を追加

詳細なクラス図では、クラス内部の詳細(属性・メソッド)まで含めて記述する。
クラスの詳細表現は、

クラス名・属性・メソッド

の形で表す。

例で、クラス内部の詳細 (属性・メソッド) も設計した上、詳細なクラス図としてまとめると、例えば以下のようになる。
属性およびメソッドの詳細説明は省略する。

詳細クラス図の一例

コーディングに直接結びつくような設計段階の詳細クラス図には、属性や操作において下記のように型の明示をすることができる。

属性名 : 型

操作名 ( パラメータのコンマ区切りのリスト ) : 戻り値の型

パラメータのリストの中の一つ一つのパラメータも、

パラメータ名 : 型

のように型の明示をすることができる。上図では、属性・操作・パラメータ全ての型を明示している。


別の例として、以下のような、お絵描きアプリケーションの主要部をオブジェクト指向でモデル化した場合の、UMLの詳細クラス図を示す。

クラス     キャンバス
属性:
  • 高さ
関連:
  • 描画要素配列 ←(双方向)→ クラス「描画要素」(多重度 1 対 多)
  • 描画対象 (単方向) → クラス「描画対象」(多重度 1 対 1)
操作:
  • サイズ設定(x, y)
  • 再表示()
  • 追加(描画要素)
  • 削除(描画要素)
クラス     描画要素
属性:
  • 線の太さ
関連:
  • キャンバス ←(双方向)→ クラス「キャンバス」(多重度 多 対 1)
操作:
  • 線の太さ設定(太さ)
  • 回転(角度)
  • 移動(x, y)
  • サイズ変更(sx, sy)
  • 描画()
クラス     直線
「描画要素」を継承
属性:
  • 長さ
クラス     長方形
「描画要素」を継承
属性:
  • 高さ
クラス     円
「描画要素」を継承
属性:
  • 半径
クラス     描画対象

詳細クラス図
(ただし、属性・操作・パラメータの型は示していない)
お絵描きアプリ詳細クラス図