I am from background OO hanno appena iniziato a imparare il paradigma FP. È arrivato su quote di Michael Feathers - " OO rende il codice comprensibile incapsulando parti in movimento." FP rende il codice comprensibile minimizzando parti in movimento "
Che cosa intendeva esattamente con " moving parts
"? La mia ipotesi è che spostando le parti intendeva " state mutation
" perché FP promuove immutability
e quindi riduce al minimo la mutazione dello stato mentre OO non scoraggia la mutazione di stato ma piuttosto incapsula i dati (incapsulando quindi lo stato mutante dell'oggetto)
Riesco a sentire come le pure funzioni di FP che promuovono l'immutabilità e nessun effetto collaterale possano portare a una migliore chiarezza del codice, rendendolo così più comprensibile e più dichiarativo rispetto all'imperativo. In qualche modo i benefici di natura simile non mi sono molto evidenti in OO quando lo stato di muting è incapsulato.
Ad esempio sotto l'oggetto adattatore si accede solo tramite interfacce pubbliche, ma sento ancora che il suo stato non è incapsulato perché ogni passo assume una transizione di stato nel passaggio precedente e quindi il metodo execute ha un carattere imperativo.
void Execute(IdataAdapter adapter) {
adapter.ReadFromSource();
adapter.ProcessData();
adapter.WriteToDestination();
}
La definizione di OO intorno agli incapsulamenti parla principalmente di nascondere e diffondere i dati otteniamo come cambiare la struttura interna dei dati senza che si rompano i client, ecc. Ma mi piacerebbe capirlo meglio nel contesto della dichiarazione fatta sopra da Michael Feathers. La mia domanda è fondamentalmente - Incapsulando lo stato di muting in OO il codice diventa comprensibile allo stesso modo di FP minimizzando la mutazione di stato?