OO e puramente funzionale non formano una dicotomia. "puramente funzionale" di solito significa semplicemente evitare la mutazione, OO è un termine lanoso che IMO acquisisce solo un po 'di concretezza quando si riferisce al sistema di tipi.
Un po 'troppo semplicistico, il consenso generale è con sistemi di sistemi più grandi, più complessi e più concorrenti, la mutazione è sempre più uno strumento ingombrante.
Se cerchi di evitare l'uso della mutazione, la tua capacità di scoprire comunque la verbosità di java et al diventa molto peggiore. Un sacco di persone incolpano OO, il vero problema che penso si trova più con l'influenza della sintassi C e C. Java ti offre delle chiusure complete, infatti, con le classi anonime, è solo la sintassi che si confronta in modo ridicolo con le lingue che più apparentemente supportano.
Ancora una volta, il punto qui non è che OO e con parsimonia usando la mutazione non si mescolano, è che java è prolisso. Scala penso che sia l'esempio migliore in cui hai un sacco di espressività e un OO che francamente è OO più puro di java.
link Un'interessante intervista a Martin Odersky, creatore di Scala (e generici di Java).
Dal punto di vista opposto, il sistema di tipi di Haskell ti consente di fare molto di ciò che OO realizza, specialmente con le estensioni. Anche se la teoria del tipo sottostante è leggermente diversa, l'utilizzo da un punto di vista tecnico del software è abbastanza simile.
Si consideri in Java, un idioma comune è quello di scrivere un tipo di dati astratto tramite un'interfaccia, e quindi chiamare alcuni metodi in esso su una raccolta eterogenea, ma uno in cui tutti gli elementi implementano tale interfaccia. Prima di tutto, puoi scrivere una classe di tipi che fa esattamente ciò che fa quell'interfaccia. In secondo luogo, usando i tipi esistenziali (un'estensione), è possibile creare strutture di dati eterogenee e così via, proprio come con Java. Solo l'uso di una classe di tipo ti dà il polimorfismo, ma solo la spedizione statica. I tipi esistenziali ti forniscono invio dinamico.
link < - ulteriori informazioni sui tipi esistenziali.
quindi tl; dr se scegli una lingua con un sistema di tipi abbastanza strong e una sintassi abbastanza espressiva, puoi smettere di preoccuparti dei paradigmi e fare semplicemente ciò che si adatta meglio al tuo obiettivo.