Pertanyaan ini agak agnostik bahasa, tetapi tidak sepenuhnya, karena Object Oriented Programming (OOP) berbeda di, misalnya, Java , yang tidak memiliki fungsi kelas satu, daripada di Python .
Dengan kata lain, saya merasa kurang bersalah karena membuat kelas yang tidak perlu dalam bahasa seperti Java, tapi saya merasa mungkin ada cara yang lebih baik dalam bahasa yang kurang boilerplate-y seperti Python.
Program saya perlu melakukan operasi yang relatif kompleks beberapa kali. Operasi itu membutuhkan banyak "pembukuan", harus membuat dan menghapus beberapa file sementara, dll.
Itu sebabnya ia juga perlu memanggil banyak "sub-operasi" lainnya - memasukkan semuanya ke dalam satu metode besar tidak terlalu bagus, modular, mudah dibaca, dll.
Sekarang ini adalah pendekatan yang muncul di pikiran saya:
1. Buat kelas yang hanya memiliki satu metode publik dan pertahankan keadaan internal yang diperlukan untuk suboperasi dalam variabel instan.
Akan terlihat seperti ini:
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.
Masalah yang saya lihat dengan pendekatan ini adalah bahwa keadaan kelas ini hanya masuk akal secara internal, dan tidak dapat melakukan apa pun dengan instance-nya kecuali memanggil satu-satunya metode publik mereka.
# 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. Membuat banyak fungsi tanpa kelas dan meneruskan berbagai variabel yang diperlukan secara internal di antara mereka (sebagai argumen).
Masalah yang saya lihat dengan ini adalah saya harus melewati banyak variabel antar fungsi. Juga, fungsi-fungsi itu akan terkait erat satu sama lain, tetapi mereka tidak akan dikelompokkan bersama.
3. Suka 2. tetapi buat variabel keadaan global alih-alih melewatinya.
Ini tidak akan bagus sama sekali, karena saya harus melakukan operasi lebih dari sekali, dengan input berbeda.
Apakah ada pendekatan keempat yang lebih baik? Jika tidak, pendekatan mana yang lebih baik, dan mengapa? Apakah ada sesuatu yang saya lewatkan?