UML入門
読んだ書籍
かんたんUML入門
UMLとは何か?
プログラムを設計するには
設計書が必要
設計書はプログラマだけではなく、ユーザーなど一般の人でも理解でき、設計の妥当性を判断できるものである必要がある
そのため、標準化された図=UMLを用いて、設計を行っていくと効果的
UMLは複数種類が存在しているので、目的や状況に合わせて選んでいくことが求められる
モデリングとは何か
モデリングとは
抽象化された概念を元に、システムの全体像をわかりやすく表現すること。
この抽象化された概念の抽象化される対象となるのは、作成しようとしているシステムが解決するべき課題が存在している領域(参考:ドメイン駆動設計)である
そのため、まずはその領域(ドメイン)を把握する必要がある。
ドメインの把握で意識するべきこと
その領域で行われている業務(活動)は複雑であることが多いので、それらの本質的なところを捉えることが大切である。
通常、細かなところに目が行きがちだが、詳細に着目することは避けるべきである
なぜなら、業務の本質的な部分に比べて、詳細な部分は、変更の頻度が多くなりがちだから。
https://gyazo.com/cbe767633eff23e619c2864bec4680c5
モデル
モデリングの成果物がモデル。
モデルは、開発対象領域を以下の二つに分けることができる
1. 静的な構造と
2. 動的な振る舞い
静的な振る舞いが、本質部分であり
動的な振る舞いが、実際にプログラムがどう動くか(という詳細)を表現する。
モデルとUML
1990年代ごろは、モデルの表記法は統一されていなかった。
そこで、様々な表記法を統一するものとして生まれたのがUML
UML は世界標準語
UMLはなぜ必要なのか?
システム開発における以下の課題を解決するため
1. システムに求められる要求の高度化と多様化
2. システムの大規模化と複雑化
3 関係者間でのコミュニケーションの困難さ
UMLを効果的に活用するための技術
表記法はシステム開発の工程の一部に過ぎない
システムの開発プロセスや、システム設計の考え方についても知る必要がある。
https://gyazo.com/91b57209e8a96c8d5de224650ae3065d
--.icon
オブジェクト指向の超絶基本的なこと
オブジェクト指向とは
システム化の対象を構成するモノ(オブジェクト)を中心として、システムを捉える考え方
オブジェクト指向のシステムは、オブジェクト同士が強調動作することで処理が進む。そのため、UMLを使ったオブジェクト指向開発を行う上で、基本的なオブジェクト指向の考え方を理解する必要がある。
オブジェクト
オブジェクトとは、物理的または概念的にまとまったモノ・コトのこと
オブジェクトには、目に見えるもの(物理的なオブジェクト)と目に見えないモノ(概念的なオブジェクト)がある。
https://gyazo.com/71ac38a3e7874a217adb7dbe5661c45a
オブジェクトはデータと振る舞いを持つ
クラス
クラスとは、オブジェクトの属性(データ構造)や操作(振る舞い)の共通性に着目して、オブジェクトを抽象化した概念
クラスはオブジェクトの雛形(テンプレート)である、と言うこともできる
https://gyazo.com/87fd562520b258cfd02b59bc4c782383
クラスにオブジェクトが持つべき属性と振る舞いを定義しておくと、クラスから生成されたオブジェクトは全て同じ属性と振る舞いを持つことができる。(=継承)
カプセル化
モジュールを公開部分と非公開部分に分ける仕組みのこと。
Rubyで言うと、private配下が非公開部分りく.icon
public部分が外部クラスとのインターフェース的役割を担っているりく.icon
カプセル化は情報隠蔽とも呼ばれる
カプセル化をすることによって、保守性が高いコードが出来上がる。
private(非公開部分)が変更されても、public(公開部分)が変更されなければ、外部への影響は少なくなるから。
ここから言えること
privateに詳細を記述し、publicにドメインにおける本質部分を記述するべき。
変更されにくいものに依存するべきという原則に基づくと、privateはpublicに依存するべき。
関連:オブジェクト指向設計ガイド#5e3e9af1ff16f600007f4123
継承
あるクラスが持っている性質を別のクラスが引き継ぐこと
共通の性質に着目して一般的なクラスを定義したり、独自の性質に着目して特殊化されたクラスを定義したりすることで、クラスの階層構造を実現する。
階層構造の上位クラスをスーパークラス
階層構造の下位クラスをサブクラス
と言う
継承は「is -a」の関係とも呼ばれる
「A is-a B」と呼べる時、AとBは継承関係が成り立つ
ポリモーフィズム
オブジェクトが同一のメッセージ内容を受けとっても、異なる振る舞いを行う仕組みのこと。
車クラスの①救急車オブジェクトと②パトカーオブジェクトそれぞれが、クラクションというメッセージを受信した場合、①は「ピーポーピーポー」という振る舞いをする一方、②は「ウーウー」という振る舞いをする
--.icon
UML図の種類とそれぞれの概要
図の体系
前述したが、モデルは開発対象領域を以下の二つに分けることができる
1. 静的な構造と
2. 動的な振る舞い
UML図に関しても、この二つに大別できる。
https://gyazo.com/e3c96e5ca31a1f891229eb55ff920f66
頻繁に利用されるダイアグラム
静的な構造を表現する「クラス図」
動的な振る舞いを表現する「相互作用図(シーケンス図・コミュニケーション図・)」や「ステートマシン図」
ユースケース図
目的
システムが提供するサービスの全体像を利害関係者間で確認すること
やること
システム化対象の機能と、その機能に関係する外部要素を可視化する
その際、システムが提供する機能を、ユーザー視点から可視化する
https://gyazo.com/e1a888ea6e3c63016c6623ee7ea94ecf
クラス図※
目的
システムの静的な構造を可視化する
やること
システムを構成する重要な概念を、クラスとして表現する
クラスには、属性や振る舞い、クラス間の関係性が表現できる
https://gyazo.com/da763145a028d06bf9cc32abaafdff62
シーケンス図※
目的
やること
処理の内容をライフライン(クラスやオブジェクト、コンポーネント)間の相互作用として動的に表現する
シーケンス図では、ライフライン間でやり取りされるメッセージの順番や方向、ライフラインの生成や消滅のタイミングなどを時系列で表現できる
https://gyazo.com/8b9aef2f0e83c1c5af21d36c9793feb9
コミュニケーション図※
目的
概要
シーケンス図と同様にライフライン間の相互作用を表現する
シーケンス図は時系列でそれらを表現するが、コミュニケーション図では、ライフライン間の接続関係を中心に表現する
シーケンス図との使い分け
https://gyazo.com/8b9aef2f0e83c1c5af21d36c9793feb9
ステートマシン図※
目的
オブジェクトの状態変化を表現する
概要
オブジェクトの状態変化を表現する
状態変化は、ある状態からある状態への遷移として表現し、さらに遷移を起こす契機(きっかけ)や、遷移を行うかどうかの判断基準を表記することができる
https://gyazo.com/31c6b8fa7a244b3ff3fa7f0cd3106055
アクティビティ図
https://gyazo.com/71b440ca588e39f4c9a6635b9b5e5953
パッケージ図
https://gyazo.com/bf1ca8a9109ddf0caa9662dfc81c89e9
オブジェクト図
https://gyazo.com/22d82ed9e66afe657e63c974a9addcd5
コンポーネント図
https://gyazo.com/cb98489634068da8d670339a38ef63d7
配置図
https://gyazo.com/dff7c8fff20efafeeb1798806bc0a753
合成構造図
https://gyazo.com/302033163c3a610de2b535cbc2b068ad
タイミング図
https://gyazo.com/c3d8037e86c6c76123ad5653bacd7424
相互作用図
https://gyazo.com/e4625e4143a2d5287b01e7096e0f99c2
#読んだ本
#UML
#CS
#ソフトウェア工学