- PR -

クラスにちょっとだけ追加属性を持たせたい場合、オブジェクト指向的にはどうするのが良い?

投稿者投稿内容
オウオウ
常連さん
会議室デビュー日: 2008/11/26
投稿数: 38
投稿日時: 2008-12-11 18:37
(利用規約違反のため削除いたしました。@ITクラブメンバーシップセンター)
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-12-11 19:25
引用:
unibonさんの書き込み (2008-12-11 18:29) より:

たとえば
コード:
class FooAbc
{
    Foo foo;
    int abc;
}


コード:
class Hoge
{
    List<FooAbc> FooAbcList;
}


のようにもできますね。
考えてみると、私の悩みは、Dictionary<Foo, Bar> でも書けるし List<FooAbc> でも 書けるし、どちらも書けばちゃんと動くのはたしかだけど、場面場面でどう使い分ければいいかが分からないという感じなのかもしれません。




えっと、まず「○○ クラスにちょっとだけ追加属性を持たせたい」「けれど、○○クラスが持つのは適切ではない」ということは、その 2 つを持つべき適切なクラスが存在する (隠れている) 可能性が高いはずです。
だから、それを見つけ出すわけです。
決して、「どっかに Foo と Abc を持たせときたいからクラス一個定義するか」ではありません。
(そうすると、"FooAbc" ではダメだということがわかると思います。)


で、使い分けですが、Dictionary で事足りるのならば、別に Dictionary でも良いと思います。
僕が前回挙げた例ならば、貸出日付や返却予定日なんかも属性として持たせたくなった時、Dictionary では不都合でしょう。
貸出クラスならば貸出日付や返却予定日なんて属性も追加できます。
また、何らかの操作 (メソッド) が必要になったら、やはり Dictionary ではマズいわけです。


Dictionary では不都合になった時に初めて貸出クラスを定義するのか、
それとも最初からそれを見越して貸出クラスを用意するのかは、また別問題ですので言及しません。

_________________
C#と諸々

スキルアップ/キャリアアップ(JOB@IT)