オブジェクト指向プログラミング(OOP)は、たとえばPythonとは異なり、ファーストクラスの機能を持たないJavaとは異なるため、この質問は多少言語に依存しませんが、完全ではありません。
言い換えれば、Javaのような言語で不必要なクラスを作成することに対する罪悪感は減りますが、Pythonのような定型的でない言語にはもっと良い方法があるかもしれないと感じています。
私のプログラムは、比較的複雑な操作を何度も行う必要があります。その操作には多くの「ブックキーピング」が必要であり、いくつかの一時ファイルを作成および削除する必要があります。
そのため、他の多くの「サブオペレーション」も呼び出す必要があります。すべてを1つの巨大なメソッドに入れるのは、あまり良くなく、モジュール式で、読みやすいなどではありません。
今、これらは私の頭に浮かぶアプローチです:
1.パブリックメソッドを1つだけ持つクラスを作成し、そのインスタンス変数にサブ操作に必要な内部状態を保持します。
次のようになります。
class Thing:
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
self.var3 = []
def the_public_method(self, param1, param2):
self.var4 = param1
self.var5 = param2
self.var6 = param1 + param2 * self.var1
self.__suboperation1()
self.__suboperation2()
self.__suboperation3()
def __suboperation1(self):
# Do something with self.var1, self.var2, self.var6
# Do something with the result and self.var3
# self.var7 = something
# ...
self.__suboperation4()
self.__suboperation5()
# ...
def suboperation2(self):
# Uses self.var1 and self.var3
# ...
# etc.
私がこのアプローチで見ている問題は、このクラスの状態が内部でのみ意味を持ち、唯一のパブリックメソッドを呼び出すことを除いて、インスタンスで何もできないことです。
# Make a thing object
thing = Thing(1,2)
# Call the only method you can call
thing.the_public_method(3,4)
# You don't need thing anymore
2.クラスなしで関数の束を作成し、それらの間で内部的に必要なさまざまな変数を(引数として)渡します。
これに関して私が見る問題は、関数間で多くの変数を渡さなければならないことです。また、関数は互いに密接に関連していますが、グループ化されません。
3. 2.と似ていますが、状態変数を渡す代わりにグローバルにします。
異なる入力で操作を複数回行う必要があるため、これはまったく役に立ちません。
4番目の、より良いアプローチがありますか?そうでない場合、これらのアプローチのどれがより良いでしょう、そしてなぜですか?私が見逃しているものはありますか?