作成日 2007/6/23 最終更新日 2007/7/14
オブジェクト指向とUML
このページではUML(※1)がどのようなものであるのか、また、UMLにはどのような表記法があるのかを、オブジェクト指向設計との関連を含めて簡単に説明します。
UMLは最近、
情報処理技術者試験
でも出題されるので、取得を考えている人は少しは勉強した方がいいです。
OCUP や
UMTP
の取得を考えている人に対しては、もう知っていると思うので何も伝えることは無いです。
-----
※1:このページを書いている時点(2007/6/23)ではUMLの最新バージョンは2.1.1ですが、だるまは最新バージョンのことはまったく知らないので、このページではUMLのバージョンは2.0のもので説明します。
UML(Unified Modeling Language 統一モデリング言語)とは、システム分析や設計で使用されている言語です。
言語というと、英語やプログラミング言語のような難解な(?)ものを想像してしまうかもしれませんが、そのようなものではなく図の描き方程度に考えておけばよいと思います。
UMLはただの言語なので、UMLを使ったらオブジェクト指向でないと駄目とか、ウォーターフォールモデル
では適用できないとか、そんなことはありません(※1)。どのように使うかは使う人次第です。
UMLを使用するメリットには以下のようなものがあると思います。
表記法や記号等の名前や意味がUMLの仕様により決まっています(※2)。
これは他の人とコミュニケーションをとるときに、非常に重要なことです。
それと図にいちいち凡例を描く必要がないというメリットもあります(※3)。
基本的に図であること。
図で表記するのと、文章で表記するのとでは、理解度スピードが違ってくると思います。多分ですが…。
理解スピードが変わらなくても、視覚化できるので、なにかメリットがあるかもしれない。(すいません。勉強不足でこれしかいえない…。)
当然のことですが、UMLは完全ではありません。
何でもかんでもUMLで表記するのは無理です。
例えば、画面遷移図をUMLに定義されている図で表記するのには無理があります。
ユースケース図はこれから作成するシステムの機能を表記できますが、システムの非機能要件(※4)は表せません。
UMLでは自分でいろいろ拡張して良い様にはなっているのですが、それでも出来ない(UMLではうまく表現できない)場合(※5)があったりします。
UMLでは出来ることとなっていても、UMLの作成ツールが対応していない場合もあります。
文字列の検索(属性名の検索など)が行いにくいかもしれません。
UMLの問題ではなくUMLの作成ツールの問題となるのですが、UMLの書類をGrep検索することは可能なのでしょうか…?
(そのうち出来るようになっていくと思いますが、現時点で、可能でしょうか?)
作成した図の再利用が難しいかもしれません。
あるツールを使用してクラス図を描き、そのクラス図を他のツールで利用したい場合それは可能でしょうか?
(これも、そのうち出来るようになっていくと思いますが、現時点で、可能でしょうか?)
他、いろいろ、書きたいのですが、長くなるので、UMLの説明はこれで終わりにしておきます。もっと詳しく知りたい人はGoogleで調べるなり、書籍を調べてみるなりしてみてください。
-----
※1:もう少し一般化して表現すると、
「UMLはプロセス中心アプローチ、
データ中心アプローチ 、オブジェクト指向分析・設計など分析・設計手法や
ウォーターフォールモデル 、プロトタイプモデル、
スパイラルモデル などの開発プロセスによって使用できたり使用できないということはありません」
です。
UMLとオブジェクト指向はセットで説明されることが多いので間違える人がいるかもしれない。ということで、一応、注意書きと言うことで書きました。
※2:表記法や記号の名前等はUMLのバージョンによって異なる場合があります。
だるまも結構忘れてしまうのですが、UMLで何か図を作成した場合は、UMLのバージョンを表記するようにした方が良いです。
※3:正確にはこれは間違い。UMLは自分で拡張できる(例えば、ステレオタイプを自分で定義できるなど)ので、そのようなものに対しては当然、凡例が必要です。
それと、UMLに詳しくない人に対して、UMLの資料を見せる場合は、凡例は書いてあげたほうが親切かもしれません。
※4:エクセルVBAでシステムを作成する際で一番問題となる非機能要件は、処理スピードだと思います。もちろん、他にもいろいろあります。
※5:例えば、クラス図において操作(Operation)の引数にin、out、inoutの指定が出来ないです。
実はUMLでは定義されている(UML 2.0の仕様書のFig 7.10とFig
7.11を見てください)のですが、表記方法がわかりません。(注意:だるまが知らないだけかもしれません。)
ユースケース図(UseCase
Diagram)は、主に、これから作ろうとしているシステムの機能と関連するシステム、ユーザとの関係を表す図です。(もちろん、それ以外の用途で使用しても良いです。)
ユースケース図はオブジェクト指向設計とは何の関係もありません。
ユースケース図を描き、それの実現方法を考えた結果オブジェクト指向設計はやめた方がいいとなる場合もありますし…。
図1はユースケース図の例です。例は、本屋に売っている書籍管理(何の本がどこに何冊あるのかを管理する)システムです(※1)。
図1 ユースケース図の例(画像をクリックすると別画面に拡大したものを表示します)
本屋に売っている書籍管理(何の本がどこに何冊あるのかを管理する)システムです(※1)。
-----
※1:この例はだるまが、このページ用として適当に考えたものです。実際のシステム開発で使えるようなものではありません。
書籍の原価管理は管理しないのとか、一般にユースケース図内のユースケース(図1の楕円記号のこと)は粒度をそろえる必要がありますが、もしかしたら、図1はそろっていないかもしれません。(すいません。)
アクティビティ図(Activity
Diagram)は、主に、処理の流れを表す図です。
主に、プログラムの処理の流れを描いたり、業務の流れを描いたりします。
フローチャートに似ているような気がします。
アクティビティ図はオブジェクト指向設計とはあまり関係がない気がします。あるクラスの操作(Operation)の処理の流れをアクティビティ図を使って描くことはあるかもしれませんが、しかし、それはオブジェクト指向設計orオブジェクト指向プログラミングではなく構造化プログラミング における処理の流れを描いただけです(※1)。
図2はアクティビティ図の例です。例はお客さんが本をレジに持っていって会計をするときの業務フローです(※2)。
図2 アクティビティ図の例(画像をクリックすると別画面に拡大したものを表示します)
お客さんが本をレジに持っていって会計をするときの業務フローです(※2)。
-----
※1:オブジェクト指向設計orオブジェクト指向プログラミングでも、メソッドの中の処理に関しては
構造化プログラミング とあまり変わりありません。
※2:お客さんが書籍代をクレジットカードで払う場合、名前を書いてもらう必要があるはずなのに、それが図2に無いのはおかしいって?
言い訳するとこれはただの例なので勘弁してください。ただ、仕事でこのアクティビティ図を描くとなったら、そのフローも記述する必要があると思います。
あ、このアクティビティ図も、だるまが、このページ用として適当に考えたものです。実際のシステム開発で使えるようなものではありません。
クラス図(Class Diagram)は、クラスが持つ属性や操作、クラス間の関連を表した図です。
クラス図はオブジェクト指向設計と関係があるような気がします。オブジェクト指向で設計する場合は大抵クラス図を描きます。もちろん絶対にクラス図を描かないといけないということは無いですし、オブジェクト指向設計以外でクラス図を使用するのはアリです(※1)。
図3はクラス図の例です。書籍がある場所を管理するのに必要な情報のデータ構造と、売り上げたときの情報を管理する情報のデータ構造をだるまなりに考えて、描きました。(※2、※3、※4)
図3 クラス図の例(画像をクリックすると別画面に拡大したものを表示します)
書籍を管理する上で必要なデータ構造(メソッドが1つ入っているが…)をクラス図から読み取れないでしょうか?(※2、※3、※4)
-----
※1:例えば、ER図の代わりクラス図を描くとか…。
※2:このクラス図もまた、だるまが、このページ用として適当に考えたものです。実際のシステム開発で使えるようなものではありません。
(コメントにも書いてあるけど)え、これだと雑誌が扱えないだって?それに、原価管理してないし、書籍が盗まれたときの管理はしなくて良いのとか?売れ残った処分することになった書籍や雑誌はどうするのかとか?
正規化 もちゃんと行われていないかもしれません。(ここで言っている正規化とはデータベースにおける正規化と同じ意味です。)
いや、このクラス図は例だから…。それに、それらを扱うクラスをクラス図に描くかどうかは作ろうとしているシステムがそれらを必要としているのかによります。
※3:クラス図はUMLの中で、一番難しい図だと思います。(もちろん、だるまが描いたクラス図の出来が悪い可能性もありますが、)分からなければ、こんなものなんだ〜くらいにいいと思います。
※4:だるまはエクセルVBAのプログラムを組む前にクラス図を使用して設計を行っています。だるまが作ったフリーウエアにヘルプの中に設計書が入っているものがあります。その中にクラス図(※5)があります。(多分)
※5:古いものは、記述が間違っていたり、UML1.5ベースだったりするので注意してください。
シーケンス図(Sequence
Diagram)はオブジェクト間のメソッドの呼び出しを時系列で表す(※1)図です。
主に、処理の流れを表したいときに使用する図です。
図4はシーケンス図の例です。お客さんが本屋さんに設置された書籍検索システムで書籍のある場所を調べるときのシーケンス図をだるまなりに考えて描いた図です。(※2、※3、※4)
図4 シーケンス図の例(画像をクリックすると別画面に拡大したものを表示します)
お客さんが本屋さんに設置された書籍検索システムで書籍のある場所を調べるときのシーケンス図です。(※2、※3、※4)
-----
※1:非同期にメソッドを呼ぶことがなければ、上から順に処理が流れていきます。
非同期にメソッドを呼び出すときがある場合は…、自分で調べてください(※OCUP
Fundamentalの出題範囲です。)。
※2:「あれ、これだと書籍の場所を検索するだけで、書籍自体は検索できないじゃないか?」という疑問が出てくるかもしれませんが…、もう、勘弁して。
ここでは、シーケンス図はこんなものなんだというくらいに思ってください。
※3:一般にアクター(actor)は通常、ユースケース図で使用される人型アイコン(スティックマン(stick
man)と呼びます)を使います。
今回はツールが対応していなかったため、キーワードを使用しました。
※4:もう、しつこいくらい書いていますが、このシーケンス図はだるまが、このページ用として適当に考えたものです。実際のシステム開発で使えるようなものではありません。
ステートマシン図(State Machine
Diagram)(※1)とは、早い話、状態遷移図です。
主に、あるオブジェクトの状態遷移やシステム全体の状態遷移を表現したいときに使用する図です。
図5はステートマシン図の例です。本屋の状態(開店状態、閉店状態)を表したものです。(※2)
図5 ステートマシン図の例(画像をクリックすると別画面に拡大したものを表示します)
本屋の状態(開店状態、閉店状態)を表したものです。(※2)
-----
※1:UML 1.5ではステートチャート図という名前です。
※2:もうこれで、最後にしたいのだけど、このステートマシン図は、だるまが、このページ用として適当に考えたものです。実際のシステム開発で使えるようなものではありません。
図ではないのですが、コメント(※1)、フレーム、ステレオタイプ(※2)
の3つは使用頻度が高いので知っておいた方が良いです。
コメント(Comment)
UMLの図の中にコメントや制約条件を書いたりするときに使用します。
図6 コメントの例(画像をクリックすると別画面に拡大したものを表示します)
フレーム(Frame)
図の種類や図の名称、図の領域を表します。
図7 フレームの例(画像をクリックすると別画面に拡大したものを表示します)
ステレオタイプ(Stereotype)
UMLの図中に描いた要素(※3)が特殊な種類のものであることを示します。見た目がキーワード(Keyword)(※4)と一緒なので良く間違える。
図8 ステレオタイプの例
-----
※1:多分、UML1.5ではノートという名前です。
※2:標準ステレオタイプの一覧がUML2.0の仕様書のp669(Annex
C Standard
Stereotypes)に載っています。
※3:クラス、オブジェクト、状態などUMLの図を構成しているもののことです。
※4:キーワードの一覧がUML2.0の仕様書のp663(Annex B UML
Keywords)に載っています。
ユースケース図、アクティビティ図、クラス図、シーケンス図、ステートマシン図について簡単に説明しましたが、UMLにはこれら以外の図も定義されています。
少なくともエクセルVBAのプログラムの設計をする場合は、上記の5つの図を知っていれば困ることは無いと思います。
このページを作成するのに参考にしたページです。
ただし、だるまは、このページを作成するにあたり、これらのページを100%理解してから作成したわけではない(おいおい。)です。
間違い(リンク先のページではなく、このページに)があったら、ごめんなさい。
このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方は
メール をお願いします。
Microsoft 、Windows 、Visual Basic および Excel は米国Microsoft
Corporationの米国およびその他の国における登録商標または商標です。
ここではExcel® をエクセル、Visual Basic® for Applications をVBAと表記する場合があります。
Mac 、Mac OS 、Mac OS X は米国Apple
Computer,Inc.の登録商標または商標です。
OMG、UML、Unified Modeling
Languageは、Object Management
Groupの商標または登録商標です。
UMTP は特定非営利活動法人UML モデリング推進協議会の登録商標です。
このページのUMLの図は日本電気株式会社製SystemDirector Application
Modeler UML
Editor V2.0とMicrosoft社製Excel 2003を使用して作成しました。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。
このホームページの作成者はこれらの会社とはいっさい関係がありません。