ObjectSquare [1999 年 11 月号]

[トレーニングの現場から] 第5回 - 初めてのモデル その2 -


■はじめに

前回はクラスの抽出について、トレーニングの現場で見かけるパターンをご紹介しました。今回は振る舞いの設計についてトレーニングの現場でよく見かけるパターンをご紹介します。オブジェクト指向習得で最初の難関は、オブジェクトあるいはクラスの抽出です。次に待っている難関が振る舞いの設計です。振る舞いの設計では、処理の流れを考えるにあたり、誰に何をどのように依頼するか?ということに注意していかなければなりません。役割分担の考え方をしっかり身につける必要があります。では早速見てみることにしましょう。


■1つのオブジェクトがすべてを行っている例

最初にあげる例です。

オブジェクトはあげられているのですが、役割分担をまったくしていません。「洗濯機」オブジェクトだけがすべてを実施しています。

注意
部分のオブジェクトまで踏み込んで考えない段階ではすべてを一つのオブジェクトが実行するような図を作成することもありますが、部分のオブジェクトまで考える場合には役割分担を考慮にいれ、振る舞いを詳細化して考える必要があります。

「排水」を行うのであれば、「排水口」オブジェクトに「開ける」と依頼し、役割分担を行います。


■QとAがかみあっていない例

コミュニケーションがアンバランスになっている例です。

「開いているか?」という質問に対して、「洗濯物が入っています」と返しています。これでは対話が成り立っていません。

注意
相互作用図では、依頼に対して応答を書く場合もあれば省略して書かない場合もあります。

Is_OK()という操作の戻り値が、真偽値ではなく、何かのエンティティオブジェクトであったら、使いにくく、わかりにくい、まぎらわしいといわざるをえません。オブジェクト指向システムは、対話の積み重ねによって、処理が遂行されます。対話の一つ一つが明晰なQ(質問)と明晰なA(解答)になっていることに留意する必要があります。何と答えればよいかわからないようなあいまいな依頼の仕方や、問い掛けとは関係ないような応答になっていないか注意する必要があります。


■責務の委譲がわかりにくい例〜すべてをシースルー

次は、すべてのメッセージをほかのオブジェクトにスルーしている例です。

この2つのオブジェクトの間には役割分担ができていない可能性があります。すべてのメッセージを「洗濯機」オブジェクトが「洗濯機管理」オブジェクトにスルーするのであれば、「洗濯機」オブジェクトは「洗濯機管理」オブジェクトと分離している必要があるかどうかを検討し直す必要があります。


■責務の委譲がわかりにくい例〜データの引きずり回し

次の例は、情報のつながりを利用して、データをずるずると引き出して、利用している例です。

知り合いであるという理由で利用しているとしたら、組織の構造は無意味なものとなります。きちんとした命令系統が作成されていない、役割分担が不適切である可能性があります。構造の見直し、責務分担の明確化を行い、相互作用図を見直してみる必要があります。

<補足説明>
これは例として難しいかもしれませんので、説明を入れておきます。洗濯機のオブジェクト図は以下のようなものであると考えることができます。(洗濯機は注水口と排水口と電源スイッチから成り立っている)

サンプルの相互作用図を考えると、以下のようになります。「電源スイッチ」が「注水口」や「排水口」に直接メッセージを送信しており、上の構造より複雑になっています。「排水口」や「注水口」をコントロールする役割が、「洗濯機」と「電源スイッチ」とではどちらが適切かを考慮する必要があります。

解答例としては以下のようなものが考えられます。「注水口」や「排水口」へのコントロールは、「電源スイッチ」ではなく、「洗濯機」が担当しています。


■まとめ

いかがでしたか?
振る舞いの設計については、私たちの普段の組織活動を思い起こせばわかりやすいでしょう。私たち人間の活動のアナロジー(類似)表現としてオブジェクト指向システムがあるといえるのではないでしょうか。わかりやすいモデルというのは、私たちが創造していくものなのです。ですので、はじめから正解のモデルがあるのではなく、私たちの理解の進化に応じてモデルは進化成長していくものなのです。


短い間でしたが「トレーニングの現場から」をお読みいただき誠にありがとうございました。とても残念なのですが、この原稿を担当しております筆者の業務の都合によりこの連載は今回をもって終了させていただきます。

短い間でしたが多くの方にご愛顧いただき誠にありがとうございました。トレーニングはあくまで技術習得のためのスタートでしかありません。

というサイクルを繰り返すことで技術は高められるものだと思います。トレーニングで学び、業務で実践・応用し、業務のレビューや、UML技術者認定制度などの試験を通して、自分の習得レベルを確認し、さらにステップアップを計っていくことで技術は完成に向かいます。トレーニングはスタートであり、決してゴールではありません。より多くの方がオブジェクト技術に興味を持っていただき、トレーニングがオブジェクト技術チャレンジへの良いきっかけとなれれば幸いです。


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