Câu hỏi này hơi khó hiểu về ngôn ngữ, nhưng không hoàn toàn, vì Lập trình hướng đối tượng (OOP) khác nhau, ví dụ, Java , không có các hàm hạng nhất, so với trong Python .
Nói cách khác, tôi cảm thấy ít tội lỗi hơn khi tạo các lớp không cần thiết trong một ngôn ngữ như Java, nhưng tôi cảm thấy có thể có một cách tốt hơn trong các ngôn ngữ ít nồi hơi như Python.
Chương trình của tôi cần thực hiện một thao tác tương đối phức tạp nhiều lần. Hoạt động đó đòi hỏi rất nhiều "sổ sách kế toán", phải tạo và xóa một số tệp tạm thời, v.v.
Đó là lý do tại sao nó cũng cần phải gọi rất nhiều "hoạt động phụ" khác - đưa mọi thứ vào một phương thức lớn không phải là rất hay, mô-đun, có thể đọc được, v.v.
Bây giờ đây là những cách tiếp cận đến với tâm trí của tôi:
1. Tạo một lớp chỉ có một phương thức công khai và giữ trạng thái bên trong cần thiết cho các hoạt động con trong các biến thể hiện của nó.
Nó sẽ trông giống như thế này:
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.
Vấn đề tôi thấy với cách tiếp cận này là trạng thái của lớp này chỉ có ý nghĩa trong nội bộ và nó không thể làm gì với các thể hiện của nó ngoại trừ gọi phương thức công khai duy nhất của chúng.
# 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. Tạo một loạt các hàm không có lớp và chuyển các biến cần thiết bên trong khác nhau giữa chúng (dưới dạng đối số).
Vấn đề tôi thấy với điều này là tôi phải vượt qua rất nhiều biến giữa các hàm. Ngoài ra, các chức năng sẽ liên quan chặt chẽ với nhau, nhưng chúng sẽ không được nhóm lại với nhau.
3. Thích 2. nhưng làm cho các biến trạng thái toàn cầu thay vì chuyển chúng.
Điều này sẽ không tốt chút nào, vì tôi phải thực hiện thao tác nhiều lần, với các đầu vào khác nhau.
Có một cách tiếp cận thứ tư, tốt hơn? Nếu không, một trong những cách tiếp cận này sẽ tốt hơn, và tại sao? Có thiếu thứ gì không?