Question

Je l'ai entendu à maintes reprises et je suis en train de comprendre et de valider l'idée que FP et OO sont orthogonales.

Tout d'abord, qu'est-ce que cela signifie pour 2 concepts orthogonaux?

FP encourage immuabilité et la pureté, autant que possible. et OO semble comme quelque chose qui est construit pour l'état et la mutation (une version légèrement organisée de la programmation impérative?). Et je me rends bien compte que les objets peuvent être immuable. Mais OO semble impliquer état / changement pour moi.

Ils semblent comme opposés. Est-ce que cela voulait dire qu'ils sont orthogonaux?

Une langue comme Scala le rend facile à faire OO et FP à la fois, cela affecte l'orthogonalité des 2 méthodes?

Était-ce utile?

La solution

Le terme « orthogonal » vient de mathématiques, où il a un synonyme: « perpendiculaire ». Dans ce contexte, vous pouvez le comprendre comme « les deux choses ont rien à voir avec l'autre. »

Quand les gens comparent FP et OO ils souvent confondre deux axes distincts.

D'une part vous avez la programmation fonctionnelle par rapport à la programmation impérative. Jonas donne une bonne comparaison des deux. La version d'une phrase dit que « le flux de données en fonction du débit de commande ».

L'autre axe est abstraction des données. Langues comme Haskell utilisent des types de données abstraites, eh bien, des données abstraites. Smalltalk utilise des objets, qui fusionnent les données et les opérations sur ces données dans une seule unité. William Cook explique mieux que moi dans son journal sur la compréhension d'abstraction de données, revisité .

Il est parfaitement compréhensible que la plupart des gens finissent par penser que FP et OO sont contraires: la plupart des langages OO sont impératives, donc si l'on compare, par exemple, Haskell et Java, vous avez le flux de données + ADT en fonction du débit de contrôle + objet. Mais il y a d'autres possibilités! Matthias Felleisen explique comment se marier avec bonheur FP et OO dans son discours Objets fonctionnels .

Autres conseils

Tout d'abord, qu'est-ce que cela signifie pour 2 concepts orthogonaux?

Cela signifie que les deux concepts ne sont pas des idées contrastées ou ne sont pas incompatibles entre elles.

FP encourage immuabilité et la pureté, autant que possible. et OO semble comme quelque chose qui est construit pour l'état et la mutation (une version légèrement organisée de la programmation impérative?). Et je me rends bien compte que les objets peuvent être immuable. Mais OO semble impliquer état / changement pour moi.

Ils semblent comme opposés. Comment cela affecte leur orthogonalité?

Une langue comme Scala le rend facile à faire OO et FP à la fois, cela affecte l'orthogonalité des 2 méthodes?

OO est de l'encapsulation, la composition de l'objet, l'extraction des données, par l'intermédiaire d'un polymorphisme de sous-typage, et la mutation contrôlée si nécessaire (immuabilité est encouragée OO aussi bien). FP est sur la composition de la fonction, abstraction de commande, et le polymorphisme contrainte (polymorphisme paramétrique aka). Ainsi, les deux idées ne sont pas contradictoires. Ils ont tous deux vous fournir différents types de pouvoirs et des mécanismes d'abstraction, certes possible d'avoir dans une seule langue. En fait, c'est la thèse sur laquelle Scala a été construit!

Dans son Scala expérience parler à Google, Martin Odersky explique très bien comment il croit que les deux concepts - OO et FP - sont perpendiculaires entre eux et comment Scala unifie les deux paradigmes avec élégance et en toute transparence dans un nouveau paradigme populairement connu dans la communauté Scala comme paradigme fonctionnel objet. Doit regarder parler pour vous. : -)


D'autres exemples de langages fonctionnels-objet: OCaml , F # , Nemerle .

Orthogonal signifie à peu près "indépendant".

Donc, si FP et OO sont orthogonales, ce qui signifie que vous pouvez utiliser immuabilité si vous utilisez des objets ou non, et vous pouvez utiliser des objets qu'ils soient immuables ou non.

* Je l'ai entendu à maintes reprises et je suis en train de comprendre et de valider l'idée que FP et OO sont orthogonales. *

Tout d'abord, qu'est-ce que cela signifie pour 2 concepts orthogonaux?

citation de Wikipedia: «orthogonalité garantit que la modification de l'effet technique produit par un composant d'un système ne crée ni ne se propage effets secondaires à d'autres composants du système »

Simplement, il signifie simplement que le passage à un système ne fonctionne pas et ne peut pas influer sur un changement dans l'autre système.

Par exemple, une voiture a des composantes orthogonales et des contrôles (par exemple l'accélération du véhicule n'influence rien d'autre que les composants impliqués exclusivement avec la fonction d'accélération. Il ne modifie pas la radio par exemple (même si je ne suis pas sûr que cela affecte jouer CD, étant donné que le mien ne saute parfois)).

FP encourage immuabilité et la pureté, autant que possible. et OO semble comme quelque chose qui est construit pour l'état et la mutation (une version légèrement organisée de la programmation impérative?). Et je me rends bien compte que les objets peuvent être immuable. Mais OO semble impliquer état / changement pour moi.

Ils semblent comme opposés. Est-ce que cela voulait dire qu'ils sont orthogonaux?

Kinda. Le problème est qu'aucun de ces concepts sont vraiment hard rock défini. Mais oui, vous avez l'essentiel.

Licencié sous: CC-BY-SA avec attribution
scroll top