ObectSquare

[UMLとオブジェクト指向分析・設計が開発リスクを軽減する]


分析

 分析の目的はシステムで扱う領域の構造を理解することです.この分析作業から得られるモデルを開発のベースにすると,システムの機能や実現方法などに左右されない安定した構造を得ることができます.
 分析では具体的に次のような作業を行います.

・システムを構成するクラスを見つけだす.
・サブシステムに分割する.
・ユースケースをサブシステム単位に分割し,それを使ってクラスを検証する.

(1)システムを構成するクラスを見つけだす
 まず,クラス候補の洗い出しを行います.組み込みシステムの場合,初期のクラス候補は大きく以下の3種類に分類できます.

●ハードウェアラッパー
 制御する必要のある物理的なハードウェアとのインターフェイスとなります.エレベータシステムでは「エレベータリフト」や「フロアボタン」「方向ボタン」「ドアOPENボタン」「フロアセンサー」などが該当します.但し,「エレベータシャフト」のようにシステムとして直接制御する必要がないものはクラス候補にする必要はありません.

●制御の対象となるもの
 制御の対象となる実世界の物やシステムで扱う情報を表わします.エレベータシステムの場合,実際に運ぶ「人」や「荷物」が該当します.他システムの例だと,自動販売機システムの「商品」や「硬貨」,クルーズコントロールシステムの「路面状況」や「速度」などが考えられます.

●システムのコンセプト
 システムのコンセプトもクラスの候補となります.エレベータシステムでは「エレベータの運行スケジュール」やフロアから呼ばれた際の「エレベータの選択方法」などが候補として見つかります.組み込みシステムの中心であるシーケンス制御や計測制御なども,ここに分類されるクラス候補となります.

 以上のような分類を参考にしてクラス候補を抽出したら,次にグループ分けを行います.物理的,機能的に近いクラス同士をグループに分け,各グループ単位にその中のクラス候補がクラスとして適当かどうかを検討し洗練していきます.エレベータシステムの例だと,制御対象として候補に挙げた「人」や「荷物」は直接システムが意識する必要がないのでクラス候補からはずします.
 次に,各クラスの属性やクラス間の関連などを検討しながら,最終的にクラスとして特定していきます.この時点で作成されたモデルは概念モデルと呼ばれます.エレベータシステムの概念モデルの一部を図3に示します.

図3:エレベータシステムの概念モデル



(2)サブシステムに分割する
 システムがある程度大きな場合は,クラスを物理的・機能的な面からサブシステムと呼ばれるグループに分割します.サブシステムへ分割することによって得られるメリットは次のとおりです.
・システムの全体の見通しが良くなる.
・開発しやすい大きさになる.
・各サブシステム間の依存関係を少なくすることでシステムの保守性を高め,並行開発を可能にする.

 サブシステムは,それ単体で特定の機能を持つもの,物理的に隣接するもの,他のサブシステムにサービスを提供するもの,などいろいろなものが考えられます.この時点では,先に行ったグループ分けを参考にして,あまり小さくならない程度のサブシステムに分割します.これらのサブシステムはUMLのパッケージとして表現されます.
 エレベータシステムでは物理的,機能的な面からエレベータサブシステム,フロアサブシステムをそれぞれ導出します.なお,各サブシステムのインスタンス数もコメントなどを使って明記しておくと良いでしょう.今回の場合はそれぞれ4,8になります.

(3)ユースケースをサブシステム単位に分割し,それを使ってクラスを検証する
 分析の最後はユースケースを使ってサブシステムごとにクラスの構成を検証します.
 まずは,各ユースケースを実現するために必要なサブシステムを考えます.たとえば,外部とのインターフェイスやシステム全体の制御などを行うサブシステムなど概念モデルに含まれていないものはこの時点で追加する必要があります.
 次に複数のサブシステムにより実現されるユースケースを各サブシステム単位のユースケースに分割します.
 最後に,サブシステムごとに分割されたユースケースを使ってシナリオ図を作成し,サブシステム内部のクラス構成を検討します.この段階で,各クラスに操作が割り当てられたり,「処理」や「操作」を表わすクラスが追加されます.また,複数のクラスを制御する必要があれば,コントローラと呼ばれるクラスを導入します.
 具体的にエレベータシステムの例で考えてみましょう.まずフロアの乗客とエレベータ内の乗客からのリクエストにはエレベータおよびフロアの各サブシステムで対応します.最適なエレベータの選択についてはエレベータ選択サブシステムを新たに追加します.また,エレベータとフロアのやりとりなどシステム全体の制御を行うシステム制御サブシステムも追加します.乗車中のエレベータのスケジューリングについては各エレベータサブシステム内で対応します.以上の検討の結果をパッケージで表現したのが図4になります.
 そしてエレベータサブシステムのユースケース図と内部のクラス構成を検討した結果を図5,図6に示します.ここでは複数のハードウェアラッパーを制御するエレベータコントローラクラスを新たに追加し,主要なメソッドも合わせて記述しています.
 


図4:更新されたサブシステム


 

図5:エレベータサブシステムのユースケース図


 

図6:エレベータサブシステムのクラス図




© 1999 OGIS-RI Co., Ltd.
Prev Index Next
Prev. Index Next