作成日 2011/1/19 最終更新日 2011/1/19
問題2.9(問題タイトル:誘導可能性や依存の方向)
オブジェクト指向設計についての問題(中級レベル)です。
問題タイトル:誘導可能性や依存の方向
重要度:★★★★★(非常に重要)
難易度:★★☆☆☆(やや簡単)
問題タイトル:誘導可能性や依存の方向
重要度:★★★★★(非常に重要)
難易度:★★☆☆☆(やや簡単)
問題:以下はAさんとB君の会話である。「ア」〜「ウ」に入る語句をa〜eからそれぞれ選べ。
B君:Aさん、ZシステムのY部分のクラス図が出来ました。
Aさん:見せてみて。
B君:これです。(図1参照)
図1
Aさん:・・・。
Aさん:良くわからないなぁ。説明して貰えるかい?
B君:ユーザが画面を操作し、データを変更すると、クラス0のsetDataメソッドが呼ばれます。
B君:クラス0のsetDataメソッドはクラス1のsetDataメソッドを呼び出します。
Aさん:なるほど。
Aさん:クラス0のnotifyDataChangedメソッドは何なの?
B君:クラス1が持っているデータ(属性0)はクラス0からだけではなく、クラス2からも設定されます。
B君:そのため、クラス1のsetDataメソッドが呼ばれたときに、クラス0のnotifyDataChangedメソッドを呼ぶようにする考えです。
Aさん:クラス1がクラス0のメソッドを呼び出すの?
B君:そうです。
Aさん:・・・。
Aさん:ダメ。論外だね。
B君:エー。
B君:どうしてですか?
Aさん:まず、矢印(誘導可能性)なんだけど。双方向になっているところがあるだろ。
B君:はい。
Aさん:クラス0とクラス1とでどっちが上位モジュールなのか?
B君:クラス0です。
Aさん:なら、なぜ、クラス1がクラス0への矢印がある?下位モジュールが上位モジュールを「ア」したりしちゃダメだろ。
B君:はい。
Aさん:これだと、クラスの「イ」ができないよ。テストも面倒になるし。恐らく、「ウ」もあまり良くない(強すぎ)と思う。
Aさん:やり直し。GoFのデザインパターンの1つにオブザーバ(Observer)・パターンというのがあるから、それを参考にして、やり直して。
B君:わかりました。
B君はクラス図を修正した。
B君:Aさん。クラス図を修正しました。
Aさん:見せて。
B君:これです。(図2参照)
図2
Aさん:うん。これなら問題ないと思う。
Aさん:今回のクラス図のように、依存や関連の方向(誘導可能性)が一方に流れる(双方向になったり、循環しない)のが良い設計だよ。
Aさん:もちろん、常にそうできるとは限らないけど。
a.再利用
b.使用
c.継承
d.強度(凝集度)
e.結合度
問題文終わり
注意:これ以上、下にスクロールすると解答・解説が見えちゃいます。
解答:ア:b イ:a ウ:e
解説:
今回はオブザーバ・パターンを題材に、誘導可能性や依存の方向の理解を問う問題としました。
中級レベルにしては少し難易度を落としすぎちゃったかな?
誘導可能性や依存の方向について触れている書籍は意外と少ないのですが、実装を考えるうえでは重要です。
循環していたり、双方向になっていると、まず、クラスの再利用がしにくくなります。
また、オブジェクト間の関係を保つための実装が大変になります。
※もちろん、絶対ダメということはないですよ。双方向にしないとダメな場合はあると思います。
繰り返しになりますが、そういうことを理解しているかどうかを問う問題でした。
このページを作成する際に参考にしたページや、もっと勉強したい人向けの資料です。
このページの利用によって発生した、いかなる損害について、このホームページの作成者は責任を負いません。
このページの間違いや嘘を見つけた方、このページに書いて欲しい情報がある方は
メール をお願いします。
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の商標または登録商標です。
その他、社名および商品名、システム名称などは、一般に各社の商標または登録商標です。
このホームページの作成者はこれらの会社とはいっさい関係がありません。