UMLとは

基本情報技術者の内容を勉強していたら「UML」なるものが出てきた。
プログラムの設計を行うときに使う図の記法らしい。
種類がたくさんあったのでざっと確認していく。

#UMLとは

>UMLとは、オブジェクト指向のソフトウェア開発において、データ構造や処理の流れなどソフトウェアに関連する様々な設計や仕様を図示するための記法を定めたもの。ソフトウェアのモデリング言語の標準としてとして最も広く普及している。
https://e-words.jp/w/UML.html

UML 【Unified Modeling Language】 統一モデリング言語
オブジェクト指向の開発で複雑なシステムを把握しやすくするために、図で表現する書き方。
ページによってはAWSリソースの配置、ネットワークの構成なんかを図に起こしたものもUMLと言っている。
が、おそらく元々はオブジェクト指向の開発のために作られた規格（のはず）。


#UMLの種類
UMLではさまざまな図が定義されている。

>UMLで定義される図には様々なものがあるが、大きく分けてシステムの構造を表す構造図（structure diagram）と、動作や変化を表す振る舞い図（behavior diagram）の2種類に分類される。
https://e-words.jp/w/UML.html

##構造図（structure diagram）
システムの構造を表す構造図たち。
- クラス図（class diagram）
- オブジェクト図（object diagram）
- コンポーネント図（component diagram）
- パッケージ図（package diagram）
- 配置図（deployment diagram）
- 複合構造図（composite structure diagram）

##振る舞い図
システムの振る舞いを表す振る舞い図たち。
- アクティビティ図（activity diagram）
- ユースケース図（use case diagram）
- ステートマシン図（state machine diagram）
- 相互作用図（interaction diagram）
    - シーケンス図（sequence diagram）
    - コミュニケーション図（communication diagram）
    - タイミング図（timing diagram）
    - 相互作用概要図（interaction overview diagram）

###クラス図
>クラスの定義や関連付けを示す図です。
クラス内の属性と操作を記述し、クラス同士を線でつないで互いの関係をあらわします。
参考：キタミ式イラストIT塾　基本情報技術者　令和02年
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488939/e8e6cb41-5c69-57e9-bebb-6d977c0c78be.png)
https://www.itsenka.com/contents/development/uml/class.html

どんなクラスがどんな関係で存在しているか表す図。

###オブジェクト図
>実際の場面において登場する具体的なオブジェクトとそれらの間の関係を表したもの。
https://e-words.jp/w/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E5%9B%B3.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488939/0cda849f-9bc3-f402-aac7-ed87b5a95bd2.png)
https://www.itsenka.com/contents/development/uml/object.html

インスタンス同士の関係を記述することで、システムの挙動を表す図。


###コンポーネント図
>規模の大きなソフトウェアは通常、複数の実行ファイルやライブラリファイル、モジュールといったソフトウェア部品の組み合わせとして実装される。コンポーネント図はシステムがどのようなコンポーネント群から構成され、それらの相互の依存関係はどうなっているかといった内容を記述する。
https://e-words.jp/w/%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E5%9B%B3.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488939/a3f7dd4d-9359-2fa4-0d3f-1154dd56c94f.png)
https://www.itsenka.com/contents/development/uml/component.html

システムを構成する要素同士の関係をあらわした図。

###パッケージ図
>システムの構造や構成を表す構造図（structure diagram）の一つで、モデルを膨大な数作成する大規模なシステムの全容を把握する場合などに、機能群を分割し、グループ化して整理することができる。
https://e-words.jp/w/%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E5%9B%B3.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488939/8f984ee4-2d68-19f5-0c1e-484f78a18dc4.png)
https://www.itsenka.com/contents/development/uml/package.html


###配置図
>処理ノード、そのノード上で動くコンポーネントの関係からシステムの実装を記述する静的な構造図である。ハードウェアやその上で動作する各種コンポーネントの依存関係を可視化するのに役立つ。
https://ja.wikipedia.org/wiki/%E9%85%8D%E7%BD%AE%E5%9B%B3
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488939/a5f1f8ff-af1e-3c49-331c-440a5ce08ccf.png)
https://www.itsenka.com/contents/development/uml/deployment.html



###複合構造図
>所定の構造化された分類子の内部を示し、その構造クラス、インターフェイスやパッケージとその間の関連を詳細に定義する図です。
オブジェクト内に含まれる内容を正確に把握し、さまざまなプロパティが一体となって特定の動作を行う方法を表すことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488939/102da30b-2845-12a5-f48f-1199e2f8d08d.png)
https://www.lucidchart.com/pages/ja/uml-composite-structure-diagram


###アクティビティ図
>業務や処理をフローで表す図です。処理の開始から終了までの一連の流れを、実行される順番通りに図示します。
参考：キタミ式イラストIT塾　基本情報技術者　令和02年
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488939/5db6481f-6d4f-df73-6e27-dbb41ee3faaf.png)
https://www.itsenka.com/contents/development/uml/activity.html

アクティビティ図 = フローチャート


###ユースケース図
>利用者視点でシステムが要求に対してどのように振る舞うか示す図です。
参考：キタミ式イラストIT塾　基本情報技術者　令和02年
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488939/d1727a49-35e6-54cf-cad1-92d782a54cb0.png)
https://www.itsenka.com/contents/development/uml/usecase.html

アクターとユースケース、システム境界で描かれる。
システムを誰がどう使うか表す。


###ステートマシン図
>対象がどのような状態を持ち、どのような条件や出来事（イベント）によりそれらの間を遷移するかを一覧に表した図。
https://e-words.jp/w/%E7%8A%B6%E6%85%8B%E9%81%B7%E7%A7%BB%E5%9B%B3.html#Section_%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%9E%E3%82%B7%E3%83%B3%E5%9B%B3
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488939/e0974dfc-53b8-4309-cdb5-9aa6e2cae1fe.png)
https://www.itsenka.com/contents/development/uml/state_machine.html


###シーケンス図
>オブジェクト間のやり取りを時系列に沿って表す図です。オブジェクト同士の相互作用を表現するもので、オブジェクト下の点線で生成から消滅までをあらわし、そこで行われるメッセージのやり取りを横向きの矢印であらわします。
参考：キタミ式イラストIT塾　基本情報技術者　令和02年
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488939/e41cf1a0-2721-8bc0-b3ea-78ec363d1cec.png)
https://www.itsenka.com/contents/development/uml/sequence.html


###コミュニケーション図
>コミュニケーション図は、クラス図やオブジェクト図のような構造（関連）を表現する図法にメッセージを追記して、オブジェクト間の応答（相互作用）も表現しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488939/8ec258d4-8ada-f47e-e6ba-8a44ad213ade.png)
https://www.itsenka.com/contents/development/uml/communication.html



###タイミング図
>タイミング図により、オブジェクトの状態が遷移する順番やタイミング（きっかけ）が視覚的に表現できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488939/0adddfbb-9e9d-f87a-094b-3b831e63ae7d.png)
https://www.itsenka.com/contents/development/uml/timing.html


###相互作用概要図
>相互作用概要図は、機能ごとに記述された相互作用図（ユースケース図やシーケンス図など）が、より広域のシステム構成から見たとき、それぞれがどのように連携しているのかを表現する図です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1488939/d18f942e-2ccc-e6f7-247a-e455b17cc339.png)
https://www.itsenka.com/contents/development/uml/interaction_overview.html

アクティビティ図の変形型。

#まとめ、感想
似ているもの、他の図の一部として使用するものなどがあった。
クラス図、ユースケース図、アクティビティ図、シーケンス図あたりを押さえておけば良さそうだなと思った。

#参考資料
https://www.itsenka.com/contents/development/uml/

https://cacoo.com/ja/blog/what-is-uml/

https://e-words.jp/w/UML.html

[キタミ式イラストIT塾　基本情報技術者　令和02年 / きたみりゅうじ / 株式会社技術評論社](https://www.amazon.co.jp/%E3%82%AD%E3%82%BF%E3%83%9F%E5%BC%8F%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88IT%E5%A1%BE-%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85-%E4%BB%A4%E5%92%8C02%E5%B9%B4-%E3%81%8D%E3%81%9F%E3%81%BF-%E3%82%8A%E3%82%85%E3%81%86%E3%81%98-ebook/dp/B082DT76Z8)