UML

# UML(Unified Modeling Language)とは？
オブジェクト指向プログラミングにおいて、設計で用いられる標準的な記法です。

### 長所
* 複数人で```設計モデルを共有```してコミュニケーションを図ることができる。
* ```わかりやすくビジュアル化```をすることができる。
* 過去の設計ノウハウを整理して、これに舐めをつけて再利用可能にした雛形のことを```デザインパターン```と呼ぶ。

# UMLのダイアグラム（図）
システム構造を示す```構造図```、システムの振る舞いを示す```振る舞い図```の２つの分類することができる。

## 構造図の種類
### クラス図
クラスの定義や、関連付けなど```クラス構造```を表す。

#### 線の種類を紹介
https://www.itsenka.com/contents/development/uml/class.html#:~:text=%E9%96%A2%E4%BF%82%E3%81%AE%E8%A1%A8%E7%8F%BE-,%E7%B7%9A%E5%BD%A2,-%E4%B8%8B%E8%A8%98%E7%B7%9A%E5%BD%A2%E3%82%92

#### 集約とコンポジション集約の違い
http://architect360.apricot-jp.com/400/post_15.html

#### 関連
```基本的なつながり```を表す。

#### 集約
```クラスBは、クラスAの一部```である。ただし、両者にライフサイクルの```依存関係はない```。

##### ライフサイクルとは？
製品やサービスなどが生まれてから消えるまでの全過程のこと。
出典 https://e-words.jp/w/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AB.html

#### コンポジション
```クラスBはクラスAの一部```であり、クラスAが削除されると```クラスBも合わせて削除```される。

#### 依存
クラスAが変更された時、```クラスBも変更が生じる依存関係```にある。

#### 汎化
クラスBは```クラスAの性質を継承```している。クラスAがスーパークラスであり、クラスBはサブクラスの関係にある。

#### 実現
抽象化な定義にとどまるクラスAの振る舞いを、```具体的に実装したもの```がクラスBである。

### オブジェクト図
クラスを実体化させる```インスタンス（オブジェクト）の具体的な関係```を表す。

### コンポーネント図
処理を構成する```複数のクラスを一つのコンポーネント```と見なし、その```内部構造と相互の関係```を表す。

### 複合構造図
複数クラスを内包する```クラスやコンポーネントの内部構造```を表す。

### 配置図
システムを構成する```物理的な構造```を表す。

## 振る舞い図
### ユースケース図
利用者や外部システムからの要求に対して、システムが```どのような振る舞い```をするかを表す。

#### ユースケースとは？
利用者があるシステムを用いて特定の目的を達するまでの、双方の間のやり取りを明確に定義したもの。利用者は機器を操作する人間以外にも外部の他のシステムなどを想定する場合もある。
出典 https://e-words.jp/w/%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9.html#:~:text=%E3%83%A6%E3%83%BC%E3%82%B9%E3%82%B1%E3%83%BC%E3%82%B9%20%E3%80%90use%20case%E3%80%91,%E6%83%B3%E5%AE%9A%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%82%82%E3%81%82%E3%82%8B%E3%80%82

##### 図で使われる要素
https://www.itsenka.com/contents/development/uml/usecase.html

### アクティビティ図
システム実行時における、```一連の処理の流れや状態遷移```を表す。フローチャート的なもの。

#### ライフライン
オブジェクトの生存期間を表す点線

#### 活性区間
オブジェクトがアクティブになりなんらかの処理が実行される期間

https://www.itsenka.com/contents/development/uml/activity.html

### 状態マシン図
イベントによって起こる、```オブジェクトの状態遷移```を表す。

### シーケンス図
オブジェクト間の```やり取りを、時系列```に沿って表す。

### コミュニケーション図
```オブジェクト間の関連```とそこで行われる```メッセージのやり取り```を表す。

### 相互作用概要図
ユースケース図やシーケンス図などを構成要素として、より```大枠の処理の流れ```を表す。アクティビティ図の変形。

### タイミング図
オブジェクトの```状態遷移を時系列```で表す。

#### 状態遷移
状態遷移の名前を「再生ボタンが押された」に書き換えます。
出典 http://www.changevision.co/tutorial-statemachine-japanese.html#:~:text=%E7%8A%B6%E6%85%8B%E9%81%B7%E7%A7%BB%E3%81%AE%E5%90%8D%E5%89%8D%E3%82%92%E3%80%8C%E5%86%8D%E7%94%9F%E3%83%9C%E3%82%BF%E3%83%B3%E3%81%8C%E6%8A%BC%E3%81%95%E3%82%8C%E3%81%9F%E3%80%8D%E3%81%AB%E6%9B%B8%E3%81%8D%E6%8F%9B%E3%81%88%E3%81%BE%E3%81%99%E3%80%82

##### 気づき
状態遷移は条件によって状態が変わることなのかな。
矢印のことなのか。

# テストを解いた時の気づき
### エンティティとは？
E-R図で出てくる「箱」のことを「エンティティ」と言います。
出典 https://wa3.i-3-i.info/word11594.html#:~:text=E%2DR%E5%9B%B3%E3%81%A7%E5%87%BA%E3%81%A6%E3%81%8F%E3%82%8B%E3%80%8C%E7%AE%B1%E3%80%8D%E3%81%AE%E3%81%93%E3%81%A8%E3%82%92%E3%80%8C%E3%82%A8%E3%83%B3%E3%83%86%E3%82%A3%E3%83%86%E3%82%A3%E3%80%8D%E3%81%A8%E8%A8%80%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

### ビジネスプロセスとは？
一連の工程, 作業, 業務などをいう
出典 https://www.comitx.jp/glossary/businessprocess/#:~:text=%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%EF%BC%88Business%20Process%EF%BC%89%E3%81%A8,%E3%82%AA%E3%83%9A%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%81%93%E3%81%A8%E3%82%92%E6%8C%87%E3%81%99%E3%80%82

### シーケンス図とコミュニケーション図のどちらも表現されているものとは？
送受信されるメッセージがどちらも表現されている。
#### シーケンス図とは?
クラスやオブジェクト間の```やりとりを時間軸に沿って表現```する図です。機能ごとに相互作用（Interaction）と呼ばれる下記のようなフレーム内に処理内容を記述します。
##### ライフライン
```使用するオブジェクトやクラス```を表現します。どちらか一方なら省略可能です。
##### 実行仕様（ExecutionSpecification）
生成されている```ライフラインが実行状態```であることを意味します。
##### 停止（Stop）
生成された```ライフライン自体の消滅```を意味します。
##### 同期（Synchronous）メッセージ	
送り先のライフラインの実行に```同期されるメッセージ```を意味します。
##### 非同期（Asynchronous）メッセージ
送り先のライフラインの実行に```同期されないメッセージ```を意味します。
##### 応答（Reply）メッセージ
```送り先のライフラインから送り手への戻り値```を意味します。
##### ファウンド（Found）メッセージ
```図解上にない送り手```から送られた、もしくは```送り手がダイアグラム上にないこと```を意味します。
##### ロスト（Lost）メッセージ
```意図された受け手```に送られていない、もしくは```受け手がダイアグラム上にないこと```を意味します。
出典　https://www.itsenka.com/contents/development/uml/sequence.html

#### コミュニケーション図とは？
```クラスやオブジェクト間の応答（相互作用）と関連```の両方を表現する図

##### ライフライン（Lifeline）
```使用するオブジェクトやクラス```を表現します。どちらか一方なら省略可能です。

##### 同期（Synchronous）メッセージ	
送り先のライフラインの実行に```同期されるメッセージ```を意味します。

##### 非同期（Asynchronous）メッセージ
送り先のライフラインの実行に```同期されないメッセージ```を意味します。

##### 応答（Reply）メッセージ	
```送り先のライフラインから送り手への戻り値```を意味します。

### 気づき
UMLはプログラミングをすることにおいて重要だと思う。
基本情報にとどまらずもっと勉強したほうがいいと思う。
これからも頑張る。