2

私は Python で小さなコードを書いていますが、他の人がこれについてどう思うか興味があります。

それぞれにいくつかのメソッドを持ついくつかのクラスがあり、何が「より良い」かを判断しようとしています: メソッド呼び出しを介してオブジェクトを渡すか、オブジェクトからのメソッドが 1 つだけ必要な場合にメソッド呼び出しを介してメソッドを渡すか。基本的に、これを行う必要があります:

def do_something(self, x, y, manipulator):
    self.my_value = manipulator.process(x, y)

またはこれ

def do_the_same_thing_but_differently(self, x, y, manipulation):
    self.my_value = manipulation(x, y)

私の見方では、2 番目のクラスは、操作と他のクラスの間の結合がさらに緩い結合/より強い結束を促進するため、間違いなく「優れている」と言えます。オブジェクトから単一のメソッドのみが必要な場合のこのアプローチに対する賛否両論を知りたいです。

編集:明らかに動揺していたので、OOP の文言を削除しました。私は主に、疎結合と高い結束について言及していました。

4

3 に答える 3

4

2番目のソリューションは、「OOP」ではなく「機能的」であるため、より疎結合を提供する可能性があります。最初の解決策には、クロージャーを持たない C++ のような言語で機能するという利点があります (ただし、テンプレートとメンバー関数へのポインターを使用して同様の効果を得ることができます)。しかし、Pythonのような言語では、私見では2番目の選択肢がより「自然」であるようです。

編集: ここで入手可能な無料の本「Higher order Perl」で、「関数型 vs. オブジェクト指向」テクニックの非常に優れた議論を見つけることができます:

http://hop.perl.plover.com/

(第1章、パート6を見てください)。これは Perl (Python ではありません) の本ですが、そこでの議論はここで尋ねられた質問に正確に適合し、そこで説明されている機能的な手法は同様の方法で Python に適用できます。

于 2011-01-09T19:36:05.007 に答える
1

私は2番目のアプローチを言います; これは間違いなくコールバックのように見えるため、高凝集度と低結合度のコードの開発を支援するパラダイムであるハリウッドの原則(私たちとは呼ばないでください)を使用するときに非常に使用されます[参照2 ]。

于 2011-01-09T19:43:45.063 に答える
0

私は間違いなく2番目のアプローチを使用します。

また、任意の Manipulator クラスのインターフェイスを変更して、process代わりに__call__.

于 2011-01-09T21:09:28.710 に答える