1

テスト コレクション オブジェクトに格納された一連のテスト実行からのいくつかの測定オブジェクト インスタンスがあります。また、2 つのテスト結果オブジェクト インスタンスを比較して、それらが「十分に近い」かどうかを教えてくれるロジックもあります。

このロジックはどこに配置する必要がありますか?

  1. オブジェクトをメソッドとして?お気に入り:instance.approximately_equal(other)
  2. クラス/静的メソッドとしてのオブジェクトのクラスで? class.approximately_equal(a,b)
  3. コレクションオブジェクトをメソッドとして? collection.approximately_equal(a,b)

これに対する正しい OO 設計は何ですか?

(#1は正しい解決策のように見えますが、あるインスタンスが別のインスタンスとほぼ等しいかどうかを尋ねることは決してありません.「オブジェクトのいくつかのグループ」が互いに等しい場合のみ. ..)

ありがとう

4

3 に答える 3

1

オプション 1 (インスタンス メソッド) を使用すると、(必要に応じて) 派生クラスの比較ロジックを改良できるためです。

于 2010-11-01T21:40:02.267 に答える
1

私が読んだオブジェクト指向の設計書では、クロスクラス機能をサービス プロバイダー オブジェクトに組み込むことを提案しています。これにより、2 つのオブジェクトが切り離されて複雑さが軽減されますが、プロジェクトが小規模な場合はやり過ぎになる可能性があります。

于 2010-11-01T21:41:34.277 に答える
0

#3が最も目立たず、コードの肥大化が少なくなることがわかりました。これは、これらのメソッドを可能な限り柔軟/再利用可能にする必要があるためです。たとえば、C++ では、演算子のオーバーロードを使用してそれを処理する可能性があります。ユーティリティ クラスがある場合 (または、ネイティブ データ型を拡張する予定がある場合) は、プレゼンテーションが異なるだけで、最終的な効果は同じです。

于 2010-11-01T21:44:26.250 に答える