7

オブジェクトが純粋なデータで構成される場合があります。このようなオブジェクトには、フィールドとアクセサーがあり、その他のメソッドはほとんどありません。

オブジェクトが純粋な動作で構成される場合があります。状態を表す他のオブジェクトがあるか、データがメソッド パラメーターとして渡されます。通常、このようなオブジェクトは、アルゴリズムまたはある種のポリシーを表します。

どの状態/行動比率が好みですか?
より保守しやすいものは何ですか?
エラーが発生しやすいのはどれですか?

4

4 に答える 4

2

私はどちらか一方を実行するオブジェクトが好きです-動作するものを表す(理想的にはvoidメソッドのみを公開する)か、純粋な状態を表す(理想的には不変であり、状態の維持と可能な検証以外のコードはありません)。

最初のタイプのオブジェクトは、他のタイプを相互に渡します。これはアクターモデルにかなり近いものであり、これを行うことで多くの問題が解決されます。(Java / C#でこれを行う場合は、インターフェイスを「値」として最初のタイプに渡すことができます。)

問題が発生するのは、中間のオブジェクト(状態と動作の両方)であることがわかります...動作オブジェクトの一部の状態は、その主な目的が照会されない限り、問題ありません。

于 2009-08-26T06:55:12.077 に答える
2

すべての動作があり、状態がない、またはすべての状態があり、動作がないオブジェクトを設計している場合、設計のどこかに欠陥があると思います。現実の世界でこれらの種類のオブジェクトに遭遇することは実際には一般的ではありません。これらがあなたが説明している補足オブジェクトではなく、現実世界のオブジェクトの表現である場合、どこかに何か問題があると思います。

状態/動作の比率は設定されていません。すべてのオブジェクトは独自の形をしており、これはオブジェクト間でかなり根本的に異なる可能性があると思います。しかし、時間が経つにつれて、オブジェクトで作業している場合、動詞は名詞/形容詞よりも多くなる傾向があります。つまり、動作が状態を支配します。

それは私が私のプログラムで観察したことです。

于 2009-08-26T07:01:59.630 に答える
1

私は(優先順位で)オブジェクトが好きです:

  1. 無効な状態にならないように、それらの使用方法に関する詳細な手順を用意してください。
    • メソッドを呼び出したときに例外が正しい状態にない場合は、例外をスローします。
    • メソッドを呼び出す前に、メソッドが正しい状態にあることをアサートできるメソッドを用意します。

これらの対策が整っている場合、物事を台無しにすることははるかに困難です.

動作を持たないオブジェクトはハッシュ テーブルである可能性があり、状態を持たないオブジェクトは関数のコレクションである可能性があります。

于 2009-08-26T06:36:40.040 に答える
0

ビヘイビアは、ジェネリックであり、異なるクラスのオブジェクトに適用できる場合にのみ、別のクラスとして実装する必要があります。その場合、「比率」を選択することはできません。特定のシステムの一般的な戦略の数だけに依存します。

そうでなければ、時期尚早の一般化のケースであり、さらに悪いことに、OO 原則の不当な違反です。はい、エラーが発生しやすいです。

于 2009-08-26T07:10:27.960 に答える