2. モデル・図の作成 |
2.1 設計クラスの導入 |
![]() |
では、まず設計のためのクラスを追加しよう。設計のためのクラスには、分析段階では考えなかった画面のクラスや外部システムとのインターフェースとなるクラスなどがあるよ。 | |||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
![]() |
クラスを意味的に分類するために、クラスにステレオタイプを指定することができるんだよ。分析時に抽出したクラスは、問題領域(ドメイン)に対して一般的に考えられるクラスという意味で「entity(エンティティ)」というステレオタイプを持ったエンティティクラスということができるんだ。エンティティクラスは、とりまく環境がシステムとどのようにコミュニケートしているかを関知しないクラスなんだよ。 | |||||||||||||||||||||||||||||||||||||||
![]() |
分かりました。では、ここではどんなステレオタイプのクラスを追加すればいいのですか? |
|||||||||||||||||||||||||||||||||||||||
![]() |
まず、バウンダリ(boundary)クラスについて考えてみよう。バウンダリクラスは、システムをとりまく環境とシステム内部の処理の間のインターフェースとなるコミュニケーションを管理するんだ。例えば、ユーザインターフェースとなる画面や、外部のシステムとのインターフェースとなる通信プロトコルなどが考えられるよ。Chen君、今回のモデルでは、どんなクラスが考えられるかな? | |||||||||||||||||||||||||||||||||||||||
![]() |
そうですね、まず、顧客係が注文を入力する「注文登録画面」クラスが考えられます。それから、顧客係が顧客情報を確認するときにアクセスする顧客情報管理システムとのインターフェースとなる「顧客情報管理システムインターフェース」(以降、「顧客情報管理システムIF」)クラスが考えられると思うのですが。 | |||||||||||||||||||||||||||||||||||||||
![]() |
そうだね。ユーザインターフェースについては、ウィンドウのレイアウトや数、ユーザからのイベントの処理などを決定して、設計を仕上げるんだよ。早い時点でプロトタイプを作成しておくことで、設計をうまく進めることができるんだ。もちろん、GUIツールも決定しないといけないね。 |
|||||||||||||||||||||||||||||||||||||||
![]() |
はい。そして、画面設計をするには、画面から何を入出力するのかという要求をきちんと考える必要がありますね。 | |||||||||||||||||||||||||||||||||||||||
![]() |
そのとおり。イベントフロー、シーケンス図、コラボレーション図が、インターフェースの要求を知るためのよい情報源になるよ。 | |||||||||||||||||||||||||||||||||||||||
![]() |
分かりました。他にはどんなクラスを追加するのですか? | |||||||||||||||||||||||||||||||||||||||
![]() |
次は、コントロール(control)クラスについて考えてみよう。コントロールクラスを使って、ひとつまたは複数のユースケースに特有の、制御に関する振る舞いをモデル化することができるんだ。コントロールオブジェクトは、制御対象のオブジェクトの生成、初期化、消滅などを行うんだよ。また、「いつ何をするか」という処理のシーケンスを制御する役割も持つんだ。 | |||||||||||||||||||||||||||||||||||||||
![]() |
つまり、コントロールクラスは処理の流れを知っているだけで、処理がどのように行われるかは知らないということですか? | |||||||||||||||||||||||||||||||||||||||
![]() |
そうだよ。コントロールオブジェクトは、ほとんどの場合、現実世界に対応しないオブジェクトで、メッセージを受けて実際に働くのはエンティティクラスのオブジェクトなんだよ。 | |||||||||||||||||||||||||||||||||||||||
![]() |
Jun先輩、コントロールクラスの導入は、実装上、どんな意味があるのですか? | |||||||||||||||||||||||||||||||||||||||
![]() |
シナリオ全体をプログラムレベルで見た場合、個々のオブジェクトがばらばらに動作すると、制御が分散されて全体としてのメンテナンス性が悪くなってしまうんだ。また、アプリケーション固有の機能をコントロールクラスにまかせることによって、エンティティクラスの汎用性が高まって、異なるユースケースでも使えるようになるんだよ。 | |||||||||||||||||||||||||||||||||||||||
![]() |
なるほど、分かりました。では、今回のモデルでは「注文登録コントローラ」クラスを作成して、「注文を登録する」ユースケースのシーケンスを管理するクラスとすればいいのですね? | |||||||||||||||||||||||||||||||||||||||
![]() |
そういうことだね。 | |||||||||||||||||||||||||||||||||||||||