Questa domanda è in qualche modo indipendente dal linguaggio, ma non completamente, poiché la programmazione orientata agli oggetti (OOP) è diversa, ad esempio, Java , che non ha funzioni di prima classe, rispetto a Python .
In altre parole, mi sento meno in colpa per la creazione di classi non necessarie in un linguaggio come Java, ma sento che potrebbe esserci un modo migliore nei linguaggi meno stereotipati come Python.
Il mio programma deve eseguire un'operazione relativamente complessa un numero di volte. Quell'operazione richiede molta "contabilità", deve creare ed eliminare alcuni file temporanei, ecc.
Ecco perché ha anche bisogno di chiamare molte altre "sotto-operazioni": mettere tutto in un unico enorme metodo non è molto bello, modulare, leggibile, ecc.
Ora questi sono gli approcci che mi vengono in mente:
1. Crea una classe con un solo metodo pubblico e mantiene lo stato interno necessario per le operazioni secondarie nelle sue variabili di istanza.
Sembrerebbe qualcosa del genere:
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.
Il problema che vedo con questo approccio è che lo stato di questa classe ha senso solo internamente e non può fare nulla con le sue istanze, tranne chiamare il loro unico metodo pubblico.
# 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. Crea un sacco di funzioni senza una classe e passa tra le varie variabili necessarie internamente (come argomenti).
Il problema che vedo con questo è che devo passare un sacco di variabili tra le funzioni. Inoltre, le funzioni sarebbero strettamente correlate tra loro, ma non sarebbero raggruppate insieme.
3. Mi piace 2. ma rendi globali le variabili di stato invece di passarle.
Questo non sarebbe affatto positivo, dal momento che devo fare l'operazione più di una volta, con input diversi.
Esiste un quarto approccio migliore? In caso contrario, quale di questi approcci sarebbe migliore e perché? C'è qualcosa che mi manca?