【読書メモ】かんたん UML 入門

# UML

UML は大別して「構造図」と「振舞図」の 2 種類から構成される。

## 構造図

![context_model.UML.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/5c65edc1-7978-343d-8740-7d31265a06f2.png)

### クラス図

#### 図の目的

* システムの静的な構造を表現する。
* システムを構成する概念を表現する。
* データと操作の情報を表現する。

#### 表記法

![concept_model.クラス図.記法 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/8b5346a0-4a59-702a-805d-b7bf2236bc22.png)

##### 汎化

サブクラスがスーパークラスを基に具体化されたクラスである場合に使用する。

![concept_model.クラス図.汎化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/a85adde8-ce73-12a2-5500-fa74a84ae3be.png)

##### インターフェース

汎化の一種。
クラスが実現しなければならない操作のみが定義された
特別なクラスを「インターフェース」と呼ぶ。
操作の具体的な処理はサブクラスで記載する。

![concept_model.クラス図.インターフェース.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/cf708907-c096-f3ae-e2f4-60f2b952b365.png)

##### 集約

クラス間に「全体 - 部分」の関係がある場合に使用する。

![concept_model.クラス図.集約.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/9b004a14-e700-1db3-9532-c41747538c40.png)

##### コンポジション

全体インスタンスが部分インスタンスを所有する場合に使用する。

![concept_model.クラス図.コンポジション.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/a0ad94dd-0049-489f-b6e5-f3350ee02426.png)

##### 依存

![concept_model.クラス図.依存.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/372eb867-326c-7d69-0d3c-2cc0a7ea6866.png)

### オブジェクト図

#### 図の目的

* 個々のオブジェクトが保持する属性と値を表現する。
* オブジェクト間の繋がりを表現する。

#### 表記法

![object.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/5159ecfe-1c67-ed46-1c52-346c0ccf0d1e.png)

|名称|役割|
|---|---|
|オブジェクト|システム化の対象とするモノを表す。|
|クラス|オブジェクトを抽象化した概念を表す。|
|属性|オブジェクトが持つべきデータ(値)を表す。|

### コンポーネント図

システム内で自立している1つ以上のインターフェイスを持つ集合体をコンポーネントと呼ぶ。

#### 図の目的

* コンポーネント間の関係を明らかにする。
* システム全体を表現する。

#### 表記法

![component (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/3290f9a2-44cf-5e45-a01c-f0cd883fda0b.png)

|名称|説明|
|---|---|
|サブシステム|コンポーネントの集合体|
|コンポーネント|クラスの集合体|
|提供インターフェース|自コンポーネントが外部コンポーネントに対して提供しているインターフェース|
|要求インターフェース|外部コンポーネントが自コンポーネントを利用する際に要求するインターフェース|
|ポート|インターフェースとコンポーネントの接点|
|委譲コネクタ|インターフェースの実現をサブシステム内部のコンポーネントやクラスへ委譲することを表す|

### 配置図

#### 図の目的

* システムの物理的な構造を表現する。
* ハードウェア間の接続関係を明確にする。
* 実行環境の構成を表現する。
* ファイルや DB テーブルの配置を表現する。

#### 表記法

![haichi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/e27b6f2b-743b-f055-69fc-fa44726a6bd8.png)

### パッケージ図

#### 図の目的

* 複数のモデル要素をグルーピングして関係性を整理する。

#### 表記法

![package.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/cd47fba6-f5f4-bf46-49a2-1fdd9fb22f37.png)

## 振舞図

![context_model.UML (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/0dafe675-0b7d-0ab5-d287-af7ddbdf6d6b.png)

### ユースケース図

#### 図の目的

* システム化の対象とする機能を可視化する。
* 機能に関係する外部要素を可視化する。
* ユーザの視点からシステムの提供する機能を洗い出す。

#### 表記法

![usecase.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/f50b0b5b-7f0e-d70b-1ee6-4aac1037f7a6.png)

|名称|役割|
|---|---|
|ユースケース|システム利用者に対して提供する機能・振舞を表す。|
|アクター|システム利用者を表す。|
|システム境界|どこまでをシステム化の対象とするのかを表す。ユースケースはシステム境界の内側、アクターはシステム境界の外側に配置すること。|

##### 包含

複数のユースケースから共通利用されるユースケースを表す。

![concept_model.ユースケース図.包含.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/08d61d2a-d79a-d041-9bc8-7d0e42e72813.png)

##### 汎化

![concept_model.ユースケース図.汎化.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/734d1224-ee8f-e97d-5e52-c6ea826e53e1.png)

##### 拡張

条件付きで他のユースケースを利用することを表す。

![concept_model.ユースケース図.拡張.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/3ffe64f9-5bc6-8526-8b3f-4550db435711.png)

### アクティビティ図

#### 図の目的

* システムの処理の流れを表現する。
* システムのデータの流れを表現する。

#### 表記法

![activity (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/d51c6560-617e-b047-d25e-2e6054490e8d.png)

|名称|役割|
|---|---|
|アクション|モデリングの対象とするものが行う処理を表す。|
|デシジョンノード|処理の分岐を表す。|
|ガード|処理が分岐する条件を表す。|
|マージノード|個々のフローが一つに合流することを表す。|

### ステートマシン図

#### 図の目的

* オブジェクトの状態変化を表現する。
* 状態の遷移を表現する。
* 遷移を起こす契機を表現する。
* 遷移するか否かを決める判断条件を表現する。

#### 表記法

![state_machine.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/a6412996-54c0-3995-ecd8-c124a8a1c217.png)

|名称|役割|
|---|---|
|状態|オブジェクトの状態を表す。|
|トリガー|状態が遷移するきっかけとなる事象を表す。|
|ガード|状態を遷移させて良いと判断する条件を表す。|
|エフェクト|状態遷移する時に実行する処理を表す。|
|entry|状態遷移した直後に一度だけ実行される処理を表す。|
|do|当該状態にある間、継続して実行される処理を表す。|
|exit|状態遷移する直前に一度だけ実行される処理を表す。|

### シーケンス図

#### 図の目的

* 処理の内容を時系列で表現する。
* ライフライン間でやり取りされるメッセージの順番や方向を表現する。
* ライフラインの生成や消滅のタイミングを表現する。

#### 表記法

![sequence_model.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/bd1edf07-8ad5-cb2d-17e2-3113115a34f1.png)

### コミュニケーション図

#### 図の目的

* ライフラインとライフラインの接続関係を表現する。

#### 表記法

![communication_model.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/98355/b33462d9-8820-bcee-f537-143d2a02a5d0.png)

# 参考資料

|著者|書名|出版社|出版年|
|---|---|---|---|
|竹政昭利・林田幸司・大西洋平・三村次朗・藤本陽啓・伊藤宏幸|かんたん UML 入門|技術評論社|2017|