Tenete a mente che le cose come sono iseq Java.
In Clojure l'astrazione seq è in realtà solo "qualcosa" che è possibile fornire alle funzioni first, rest e nth (nota che non si chiama prima su un seq, si chiama prima con un argomento seq). Le funzioni principali del linguaggio Clojure operano tutte su raccolte, seq o tipi primitivi. Non ci sono dati in bundle con i metodi nelle interfacce esposte. Quindi l'implementazione di Clojure è in Java e tutto ciò che intercorre con JVM coinvolgerà Classi/Oggetti, ma Clojure non lo stesso linguaggio.
I metodi di raggruppamento con strutture dati sono ciò che Clojure scoraggia.
Detto tutto questo ... la realtà è che le funzioni hanno limitazioni su quali argomenti con cui lavoreranno. il primo riposo e l'ennesimo funzionano solo su qualcosa che può essere un seq. Da questo punto di vista non c'è molta differenza se le strutture di dati sono raggruppate con metodi o meno - devi ancora abbinarle correttamente. Le grandi vittorie derivano dalla flessibilità. Le funzioni possono essere scritti a prendere qualsiasi argomento e quindi composti con funzioni di ordine superiore senza definire classi ecc:
(def farms [{:name "Swansea", :value 100}
{:name "Broadmarsh", :value 200, :produce [:corn :wheat :rye]}
{:name "Snug", :value 50, :animals [:goats :pigs]}])
(reduce + (map :value farms))
-> 350
(reduce + (map :value (filter :animals farms)))
-> 50
fonte
2009-10-13 00:27:26
Un collegamento a una fonte per "riferito non a tutti object-oriented" sarebbe utile a capire se l'argomento è tecnico vs politico ... –
http://clojure.org/rationale parla di OOP e del perché Clojure lo evita. –
http://blog.thinkrelevance.com/2009/8/12/rifle-oriented-programming-with-clojure-2 è un articolo interessante che illustra come Clojure consente effettivamente l'uso di tutti i principali principali di OO. Tuttavia trovo che sia difficile combinarli. Ad esempio, l'utilizzo dell'incapsulamento di chiusura esclude l'estensione per eredità. L'approccio generale sembra essere quello di rinunciare all'incapsulamento a favore dell'estensibilità. –