Sono uno sviluppatore da molto tempo (ho 49 anni) ma piuttosto nuovo allo sviluppo orientato agli oggetti. Ho letto di OO fin da Bertrand Meyer's Eiffel, ma ho fatto davvero poca programmazione OO.
Il punto è che ogni libro sul design OO inizia con un esempio di barca, auto o qualsiasi altro oggetto comune che usiamo molto spesso, e iniziano ad aggiungere attributi e metodi, spiegando come modellano lo stato dell'oggetto e cosa può fare da fare con esso.
Quindi di solito fanno qualcosa del tipo "migliore è il modello, meglio rappresenta l'oggetto nell'applicazione e migliore è il risultato".
Fin qui tutto bene, ma, d'altra parte, ho trovato diversi autori che danno ricette come "una classe dovrebbe rientrare in una singola pagina" (aggiungerei "su quale dimensione del monitor?" ora che proviamo a non stampare il codice!).
Prendi ad esempio una classe PurchaseOrder
, che ha una macchina a stati finiti che ne controlla il comportamento e una raccolta di PurchaseOrderItem
, uno degli argomenti qui al lavoro è che dovremmo usare una classe semplice PurchaseOrder
, con alcuni metodi (poco più di una classe dati) e hanno una "classe esperta" PurchaseOrderFSM
che gestisce la macchina a stati finiti per PurchaseOrder
.
Direi che rientra nella classificazione "Feature Envy" o "Inappropriate Intimacy" di Jeff Atwood's Odori di codice post su Coding Horror. Lo definirei semplicemente buonsenso. Se riesco ad emettere, approvare o annullare il mio ordine di acquisto reale, la classe PurchaseOrder
deve avere i metodi issuePO
, approvePO
e cancelPO
.
Non è questo che va con "massimizzare la coesione" e "minimizzare l'accoppiamento", principi antichi che capisco come pietre angolari di OO?
Inoltre, questo non aiuta a mantenere la classe?