Domanda di progettazione
Recentemente, ho fatto sempre più FP in C ++, principalmente sotto forma di modelli di funzioni e lambda e sovraccarico pesante di un singolo nome di funzione. Mi piacciono molto le FP per alcune operazioni ben definite, ma ho anche notato che, come con OOP, si potrebbe facilmente cadere in anti-pattern di spaghetti code se non si presta attenzione (ad esempio, le dipendenze circolari, che è un problema più grande per codice basato sullo stato).
La mia domanda è, quando si pensa di aggiungere nuove funzionalità, come si decide tra l'uso di un paradigma FP o un paradigma OOP?
Sento che potrebbe avere a che fare con l'identificazione degli invarianti nel problema o nel design, ma non ne sono sicuro.
Ad esempio, senza un modello OOP / semplificazione del mondo reale, potrebbe non essere immediatamente ovvio cosa sia una classe Dog o Cat (quali sono i suoi stati? Quali sono i suoi metodi?). Otoh, da un POV FP, una funzione Eat () consente semplicemente ad un animale di trasformare il cibo in cacca ed energia. È più difficile immaginare che Eat () sia qualcos'altro (almeno per me).
Sto cercando più risposte C ++, ma questa domanda potrebbe applicarsi a qualsiasi sottomodulo in qualsiasi linguaggio in grado di gestire più paradigmi.