2009-08-30 4 views
1

別のオブジェクトの中に特定のオブジェクトを作成する理由はたくさんあります。いくつかの思考学校は、ある意味でプログラムを設計する理由を明示している。 「データ駆動型設計」または「ドメイン駆動型設計」。私はまだOOPの初心者ですが、1つのオブジェクトが別のオブジェクトに含まれるべき理由を理解することは、しばしば困難です。時には、私は素晴らしいと思われるオブジェクトで自分自身を見つけると、私は実現するところに到達する、 "今、私はこれはどこかに置く必要がありますか?私のハードディスク上にファイルを置くことにしたのは、これと似ているのでしょうか?特定のオブジェクトを構成する動機付け要因は?

私はこのための原則を導くカップル持っている:

  • それのモデルであれば物理的な世界での関係を。
  • コンポーザーにオブジェクトを構築するために必要なデータがある場合。
  • 作成されたオブジェクトがコンポーザーを聴いている場合。

あなたはこの決定を下すときに何を探しますか?

+0

この*オブジェクト*包含(コレクション)か*クラス定義*封じ込め(つまり、別のクラス内のクラスの定義)ですか?あなたは質問の途中で用語を切り替える。 –

答えて

3

これを手伝ってくれた非常に単純な概念は、単に「持っている」と「それは」の概念です。含まれているオブジェクトに含まれているオブジェクトが何か、またはそれが含まれているオブジェクトであるかどうか、自分自身に尋ねます。それが含まれているオブジェクトが持っているものなら、包含が適切です。それ以外の場合は、継承を調べる必要があります。

犬は動物である、と鼻を持っているので、それはです:

class Animal 
{ 
} 

class Dog : Animal 
{ 
    Nose n; 
} 

さて、これは正常に動作します。このアプローチの「問題」の1つは、鼻と犬を強く結びつけることです。そのため、オブジェクトではなくインターフェイスポインタを含むようなものが表示されることもあります。また、Googleの「Dependency Injection」があるかもしれません。しかし、言われるように、 "持っている"と "あります"はしばしば政府の仕事のために十分に近いです。

早期に、多くの例を試してみてください。時間の経過と共に自然になります。あなたがスパゲティで終わるなら、それにいくつかのミートボールを投げて、もう一度やり直してください! :)

0

どのような代替案を検討していますか?あなたはContainment対Inheritanceについて話していますか?John LockwoodのhasAに関するコメントとisAがその問題に役立っていますか?

おそらく、封じ込め対関連について話していますか? hasAにはさまざまな種類があります。例えば、ある人は配偶者を持つことができますが、配偶者は含まれていません。配偶者の変更と鼻の変更には違いがあります。あなたが考える関係の

種類:

  • 寿命:それは鼻なしで人を作成する意味がありますか?人がいなくても、ノーズは存在することができますか?人は配偶者なしで存在することができますか?これらの質問への答えは、あなたがPersonに持っていることを選択する操作の原動力になります。おそらく、setNose()メソッドは必要ありませんが、wipeNose()メソッドが必要なことがあります。おそらく、marry(Person)メソッドが必要です。

  • カーディナリティ:人の鼻の数はいくつですか?車両には何本のホイールとシートがありますか?これに答えることで、データ構造の種類が決まります。ちょうど参照?リスト?ハッシュテーブル?

私は、UMLモデリング、特にクラス図について読むことが有益であることを発見しました。これは、さまざまな種類の関係をどのようにして有効に捕捉するかという多くの経験を反映しています。

0

「さて、私はこの どこかに置く必要がありますか?」時々、私は素晴らしいと思われる オブジェクトに自分自身を見つけ、そして私は私が気付いてポイントを取得 、

上記の文章から、あなたがボトムアップから設計しようとしているように思えます。私が何年にもわたって学んだことの1つは、トップダウンデザインが行く方法だということです。 クラスは、使用する必要がある場所を知った後に書いてください。。それ以外の場合は、 "素晴らしいと思われる"クラスを作成し、まったく役に立たないコードを含むことになります。

+0

うん!それは正確に聞こえる。ありがとう。しかし、私は、デザインがトップダウンからボトムアップまで、そしてバック・リピート・リピート・アドセンス・ノーセムの相互作用であることを知っています。明確な「行く方法」は決してないようです: – Pup

関連する問題