UML
UML=Unified Modeling Language
統一モデリング言語。さまざまな種類があったオブジェクト指向分析・設計を行う上での図表記述方式を統一したもの。
各種の図表の書き方が定められている。
- 上流工程から下流工程まで一貫した表現が可能
- 開発手法を選ばない
- 必要に応じて適切な図を使用する。
- 国際的な標準
要求図
- ユースケース図
- システムを使う人とシステムに分け、どのような機能が必要かをまとめる。
構造図
- クラス図
- クラスの属性や操作、関連、継承を図式化する。
振る舞い図
- シーケンス図
- オブジェクト間のメッセージのやりとりを時系列に沿って図式化する。
- ステートマシン図
- オブジェクトの「状態」の移り変わりを図式化する。状態遷移図。
- アクティビティ図
- 処理や手順の流れを図式化する。
実装図
- コンポーネント図
- ソフトウェアコンポーネントの実装時の構造を図式化する。
- 配置図
- ハードウェア、ソフトウェア、ネットワークなど実装時の配置を図式化する。
PlantUML
テキストで特定書式を書くことでUML図を書くことができるツール。
インストール
まず、描画ソフトであるGraphvizをインストールする。
次にPlantUMLをインストールする。Eclipseの場合、「Asciidoctor editor」プラグインを入れる。
[ヘルプ]-[Eclipseマーケットプレイス]から「asciidoctor」で検索し、「Asciidoctor editor」をインストール(再起動)。
使用方法
Eclipseの場合、[ファイル]-[新規]-[ファイル]から拡張子.pu でファイルを作成。右クリックし[次で開く]-[PlantUML Editor(Asciidoctor)]で開く
@startuml から @enduml の間に書いていく。詳細な記述方法は PlantUML のサイトで。
ユースケース図
外部から見たシステムの機能を表す図。要求・分析モデリングなどの上流工程で使用する。
システムを表す四角形を書き、そのシステムを表すユーザを表すアクター(人の形)を周りに書く。
システム内に楕円でユーザの利用内容(ユースケース)を書き、アクターからこれに線を伸ばす(関連)。
ユースケースはユーザから見た「システムができること」を書く。処理の仕組みには立ち入らない。
PlantUMLでの記述
@startuml left to right direction actor プレイヤー rectangle クイズソフト{ プレイヤー --> (クイズ解答) プレイヤー --> (成績の確認) } @enduml
ユースケース記述
ユースケースごとに詳細を書いた文書「ユースケース記述」を作成する。
例:ユースケース名 | クイズ解答 |
---|---|
概要 | クイズに解答する |
アクター | プレイヤー |
事前条件 | クイズソフトが起動し、問題を表示できる状態 |
基本フロー | 1.クイズの問題と選択肢の表示 2.選択肢の番号を入力 3.正解かどうか表示し、正解数を記録 4.全問終了まで1に戻る |
代替フロー | Alt2.番号入力時に数字以外を入力したとき 2a.エラー表示し再度入力する |
事後条件 | 正解数が記録されていること |
シナリオ |
|
クラス図
クラスの構造、関連を表す。分析・設計工程で使用する。
クラス:長方形でクラスを表し、内部を線で区切り、クラス名、属性、操作を書く。操作には()を付ける。 属性と操作にはpublicの場合、+を、privateの場合、- を付ける。
PlantUMLでの記述
@startuml class クイズ{ -問題 -選択肢 -正解 +表示() } @enduml
関連:各クラスに関連があれば実線を引いて表す。線上に関連名を書く。実線の端には数字で多重度を書く(多数の場合 * を書く)。矢印によってどのクラスがどのクラスを参照しているかを示す。 javaでは、インスタンスをフィールドに持つことで表される。
@startuml class タイマー{ -解答時間 +計測開始() +計測終了() } class クイズソフト{ -正解数 +開始() } タイマー <- クイズソフト @enduml
集約:◇と実線で示す(◆はより強い関係のコンポジション)。javaでは配列やコレクションで表される。
@startuml クイズソフト "1" *- "*" クイズ クイズソフト "1" o-- "4" プレイヤー @enduml
汎化:△と実線で汎化(継承)を表す。△と破線で、実現(インタフェースの実装)を表す。
@startuml class プレイヤー{ -名前 +解答する() } class CPUプレイヤー{ +解答する() } class MANプレイヤー{ +解答する() } プレイヤー <|-- CPUプレイヤー プレイヤー <|-- MANプレイヤー @enduml
それ以外の関係は破線で表す。これは「依存」と呼ばれ、何らかの形で別のクラスに依存していることを示す。javaでは他のクラスを引数、戻り値、局所変数で使用することを表す。
@startuml クイズソフト ..> ファイル @enduml
シーケンス図
オブジェクト間のメッセージのやりとりを時系列に沿って図式化する。分析・設計工程で使用する。
オブジェクト:四角で囲み、下に破線で生存線を書く。生存線上に実行していることを表す四角形(活性区間)を書く。 ここにユーザなどのアクターを書くこともできる。
メッセージ:メッセージは操作の呼び出しであり、実行仕様を矢印の線で結ぶ。呼ばれる方に矢印を書く。また、メッセージからの戻り値がある場合は破線で返す。
@startuml actor プレイヤー プレイヤー -> クイズソフト:クイズ開始() activate クイズソフト クイズソフト -> ファイル:読み込み() activate ファイル ファイル -> クイズ:生成() activate クイズ deactivate クイズ ファイル --> クイズソフト:クイズ数 deactivate クイズソフト deactivate ファイル @enduml
グループ化:繰り返し(loop)や条件分岐(alt/else、opt)がある場合、四角で囲んで何によるグループ化かを書く。
@startuml activate クイズソフト クイズソフト -> タイマー:計測開始() activate タイマー loop クイズソフト -> クイズ:表示() activate クイズ deactivate クイズ クイズソフト -> プレイヤー:解答() activate プレイヤー プレイヤー --> クイズソフト:選択番号 deactivate プレイヤー end クイズソフト -> タイマー:計測終了() deactivate タイマー deactivate クイズソフト @enduml
ステートマシン図
オブジェクトの「状態」の移り変わりを図式化する。状態遷移図。分析・設計工程で使用する。
- 開始状態:オブジェクト生成時を表し、黒丸で書く。
- 終了状態:オブジェクト消滅時を表し、黒丸を円で囲んで書く。
- 遷移:矢印で表す。
@startuml [*] -r-> 開始待ち 開始待ち --> 問題表示:クイズ開始 問題表示 --> 正解表示 正解表示 --> 問題表示 正解表示 -r-> 正解数表示 正解数表示 -r-> [*] @enduml
アクティビティ図
処理や手順の流れを図式化する。主に上流工程で要求・分析工程で業務の処理手順などを表す。下流工程ではプログラムの手順などを表す。
- 開始状態:オブジェクト生成時を表し、黒丸で書く。
- 終了状態:オブジェクト消滅時を表し、黒丸を円で囲んで書く。
- 遷移:矢印で表す。
- 処理の分岐、合流:◇で表す
@startuml start while(全問終了?) is (NO) :クイズ表示; :回答入力;< if(正解?)then(YES) :正解メッセージ表示; :正解数+1; else(NO) :正解表示; endif endwhile(YES) stop @enduml
コンポーネント図
ソフトウェアコンポーネントの実装時の構造を図式化する。実装工程で使用する。コンポーネントの依存関係を表す。
@startuml rectangle クイズソフト{ [ファイル操作\njava.io] as file [QuizApp]..>file } file ..> [テキストファイル] @enduml
配置図
ハードウェア、ソフトウェア、ネットワークなど実装時の配置を図式化する。実装工程で使用する。
@startuml rectangle スマートフォン{ [実行ファイル] as exe } rectangle サーバ{ [問題ファイル] as file } exe -->http:use http - file @enduml
共通要素
全ての図で共通して使用できる書式。
ステレオタイプ
要素の分類などに使用し、その種類は決められているものもあるが独自に拡張も可能。<<ステレオタイプ名>>で表す。
@startuml QuizApp ..> BufferedReader:<> @enduml
ノート
コメント(注釈)を表す。
@startuml actor 受付 受付 -> (受け付け処理) note bottom of 受付 カウンターとネットの両方 end note @enduml
制約
要素が満たすべき条件。{条件}で表す。
クイズソフト *- クイズ :{クイズIDで整列}
パッケージ
要素をグループ化したものを表現する場合に使用する。
@startuml package "quiz.main"{ [QuizApp] [Quiz] [Player] } @enduml