汎化/特化を使用する場合のポイント責任の振り分けについて更新履歴ぜひ、感想をお送りくださいオブジェクトの発見オブジェクト指向をはじめたばかりの頃は、何をオブジェクトとすればよいか悩むところです。MEYER氏によれば、「オブジェクトはそこに転がっている」らしいですが、凡人の私にはそこに転がっている物が見えません。オブジェクトを発見するための視点を以下のようにまとめてみました。オブジェクトを発見するための視点ユースケース図よりシステムの外部との接点に注目する。ユースケースシナリオより名詞を抽出する。ユースケースシナリオより責務を探し出し、それをだれが行なうべきかを考える。線を引く処理}}などとした方が、良いと私は感じます。汎化/特化を使用する場合のポイント継承のお話しです。継承を正しく使いこなせるようになるとオブジェクト指向の9割を理解したと言っても過言ではありません。(うそ)でも、継承を正しく使わないと、とんでもない物ができるのも事実です。以下に汎化/特化を行う場合のポイントをまとめてみました。関係が成立するか?そのまんまですね。サブクラスの関係が成り立つかどうかです。サブクラスは、スーパークラスの「特殊な種類」であって、スパークラスによって「果たされる役割」ではない。これは、人・従業員とあった場合に、従業員が人の特殊な種類なのか?特殊な種類ではなく、単なる役割なのではないか?と言うことです。したがって、人<-従業員という継承関係はあまり良くないことになります。インスタンスは一度あるクラスに分類されると、そのクラスのインスタンスであり続ける。これは、クラスとインスタンスの関係が理解できていれば何となく分かると思うのですが、人・子供・大人とあった場合に、「子供=みつき」は将来「大人=みつき」となるので、人<-子供や、人<-大人という継承関係は良くないということになります。※「みつき」はうちの子の名前です。より、誰が何をどうやって行なうか?をモデリングできる(する?)ようになりました。ここでは、オブジェクト指向の肝の一つとして、ある責任を誰(どのオブジェクト)が行うべきか?と言うことを説明します。下記のようなクラス構造があったとしましょう。ここで、社員が主任であるか、課長であるかを問い合わせるメソッドをどこかに定義したいと思います。初心者にありがち(私も以前やってしまった)なのは、単純に社員クラスにisForeperson()(主任ですか?)やisChief()(課長ですか?)を追加してしまうことです。これだと、部長が追加になったときに部長クラスの追加の他に社員クラスにも新たに問い合わせメソッドを追加することになり、あまりよろしくありません。ここでは、主任クラス自体にhasRole(社員)と言ったメソッドを追加する方が良いでしょう。更新履歴2003年9月1日、責任の振り分けについてを追記。2003年1月3日、オブジェクトの発見、汎化/特化を使用する場合のポイントを記述。感想をお送りくださいあなたのご意見・感想をお送りください。