プログラミングからビジネス課題までをも見える化するUMLとは?

プログラミングからビジネス課題までをも見える化するUMLとは?

本のまとめ

▼読んだ本は?
■かんたんUML入門[改訂2版]
■竹政 昭利さん, 林田 幸司さん, 大西 洋平さん, 三村 次朗さん, 藤本 陽啓さん, 伊藤 宏幸さん
http://amzn.asia/d/9u7lJjX
▼UML(Unified Modeling Language)ってなに?
■日本語で「統一モデリング言語」とよばれる
■ISOやJISなどの製品規格にもなっていて、世界中で共通して利用できる
■言語と書かれているが、プログラミングの内部構造や動きを表現する、図の書き方をまとめたもの
▼オブジェクトとクラスって?
■オブジェクト
└具体的な「モノ」や「コト」

■クラス
└オブジェクトという具体的なモノやコトを抽象化した、テンプレート

■例えば「社員=クラス」、「オブジェクト=スズキさん」のようなイメージ

▼クラスの中に書く内容って?
■属性
└クラスが持つ特徴のこと
└例えば「社員クラス」の場合、「氏名属性」「生年月日属性」を持っているなど

■操作
└クラスが持つ動作のこと
└例えば「社員クラス」の場合、「出勤する」「退勤する」を持っているなど

▼継承とポリモーフィズムって?
■継承
└あるクラス(テンプレート)が持っている共通の性質を、別のクラスが引き継ぐこと
└例えば「社員クラスの共通の性質」を「派遣社員クラス」や「嘱託社員クラス」が受け継ぐようなイメージ

■ポリモーフィズム
└指示を出す側(メッセージを送信する側)のクラスが、同一のメッセージで、異なる振る舞いを他のクラスに指示すること
└例えば「上司クラスが移動しろ」という同じ指示を出すと、「部下A=タクシーで移動」「部下B=電車で移動」するようなイメージ

▼UMLの図で表現できる内容は?
【1】システムの静的な構造を表現できる図
└例えば、クラス図やオブジェクト図

【2】システムの動的なふるまいを表現できる図
└例えば、シーケンス図やコミュニケーション図

▼ユースケース図って?
■システムを使ってできることと、その利用者(アクター)の関係を表す図

【1】人間としてのユーザーに加えて、システムやハードウェアなどアクターを書く
└例えば「社員アクター」「マネージャーアクター」などの人間
└例えば「会計システムアクター」などのシステム

【2】各アクターがシステムを使って、何をするかを書く
└例えば「社員アクターが経費を申請する」「マネージャーアクターが経費申請を却下する」など

【3】図の参考URL(外部サイト参照)
https://it-koala.com/usecasediagrams-1832

▼オブジェクト図って?
■オブジェクトのもつ属性値や、オブジェクト間のつながりを表す図

【1】システム化の対象となるモノやコトを抽出する
└例えば「スズキさん:社員」など

【2】抽出したオブジェクトから、つながりのあるものをリンクする
└例えば「スズキさん:社員」、所属部署や役割として「開発部:営業」などのつながりをリンク

【3】図の参考URL(外部サイト参照)
http://www.itsenka.com/contents/development/uml/object.html

▼クラス図って?
■クラスの属性やクラス間の関係から、システムの静的な状態を表す図

【1】ユースケース図やオブジェクト図をもとに、テンプレートとなるクラスを書く
└例えば「社員クラス」「部署クラス」「会社クラス」など

【2】クラスが持つ属性や操作を書く
└例えば「社員クラス」の場合「氏名属性」を持つなど
└例えば「社員クラス」の場合「出勤する操作」を持つなど

【3】クラス間のつながりを書く
└例えば「社員クラス」の場合「部署クラス」の1つの部署に所属するなど

【4】図の参考URL(外部サイト参照)
https://www.ogis-ri.co.jp/otc/swec/process/am-res/am/artifacts/classDiagram.html

▼シーケンス図って?
■システム内でどのようにメッセージを送りあって動いているかを、メッセージ送信順序にフォーカスして表す図

【1】システム内で、どのような動きがあるかを書く
└例えば「書籍を貸出する」「蔵書を検索する」「会員を新規登録する」など

【2】テンプレートになるクラスを書き出す
└例えば「書籍クラス」「蔵書クラス」「会員クラス」など

【3】クラスとその動きを、順序や分岐を含めて書く
└例えば「ログインする→会員情報を認証する→会員情報の認可を受ける→会員ログインが完了する」など

【4】図の参考URL(外部サイト参照)
http://www.itsenka.com/contents/development/uml/sequence.html

▼コミュニケーション図って?
■システム内でどのようにメッセージを送りあって動いているかを、メッセージ送信者にフォーカスして表す図

【1】システム内で、どのような動きがあるかを書く
└例えば「書籍を貸出する」「蔵書を検索する」「会員を新規登録する」など

【2】テンプレートになるクラスを書き出す
└例えば「書籍クラス」「蔵書クラス」「会員クラス」など

【3】各クラスを中心に、メッセージの送受信の流れを書く
└例えば「会員がログインする→登録システムが会員情報を確認する→会員が会員情報の認可を受ける」など

【4】図の参考URL(外部サイト参照)
http://www.itsenka.com/contents/development/uml/communication.html

▼ステートマシン図って?
■システムのその時の状態にフォーカスを当てて、システムの動きを表す図

【1】システムの「状態」を抽出する
└例えば「電気ポットが湯沸かし中」「電気ポットが保温中」など

【2】状態が変わる時のトリガを抽出する
└例えば「電気ポットの湯沸かしボタンを押す」など

【3】図の参考URL(外部サイト参照)
https://www.changevision.co/tutorial-statemachine-japanese.html

▼アクティビティ図って?
■システム内の処理と、処理の順番を表す図
└例えば「1000円札を入れる→投入コインの種類を判定する→両替した100円硬貨を出す」など

■図の参考URL(外部サイト参照)
http://www.itsenka.com/contents/development/uml/activity.html

▼パッケージ図って?
■システムやプログラムの要素をひとかたまりにパッケージングし、パッケージ間の関係を表す図
└例えばショッピングサイトでは「注文パッケージ」と「製品パッケージ」が関連して存在しているイメージ

■図の参考URL(外部サイト参照)
https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E5%9B%B3

思ったこと

クラスをもとにプログラミングを行うオブジェクト指向を実現するために、そのプログラミングの状態や動きを中心に、世界統一の図で表現できる、UMLについてまとめられた本でした。

でも、UMLのはじまり自体はプログラミングのための図であっても、ユーザーやシステム管理者、システム自体のできることを表す図であるユースケース図などは、プログラミング表現だけにとどまらない可能性を秘めています。

例えば、ビジネス上のボトルネックや課題点を導き出すためにも、ユースケース図やアクティビティ図を使って、今のビジネスに誰が関わっていて、どんな順序でビジネスが展開されているかを、とってもわかりやすく表現できるんだと思います。

プログラミングと聞くと、ぼく自身もそうですが、どうしてもとっつきにくいし、途中でなんか聞いたことのない文言とか出てきて、どうにもならんときもあります。

が、厳密なルールが決まっていて、そのプログラムを処理するクラスや、その動きの順序をきちんと書き分けられれば、後はきっちりプログラムを書いていくという、本質的には、とっても難しいけどシンプルなものなんでしょうね。

ありがとうございました!

関連する記事