Les "patrons de conception" de la programmation fonctionnelleau service dune conception simple
Simplicité comme valeur agileUn des principes Agile (http://agilemanifesto.org)Simplicity--the art of maximizing the amoun...
Agilité, XP, Prog. FonctionnelleHaskell, Scala, Java                           @abailly
Le logiciel libreJava, JVM et optimisationFP (Clojure/Haskell)                            @CedricPineau
Quest quune conception simple ?
“Ce qui se conçoit bien s’énonce clairement et les        mots pour le dire viennent aisément”                (Nicolas Boi...
What XP says1. Runs all the tests.        Testable (facilement)1. Expresses every idea that we need to express.           ...
Ou encore :1. Runs all the tests.           ...1. Maximizes Cohesion1. Minimizes Coupling1. Says everything OnceAndOnlyOnc...
De quels leviers disposons nous ?•   les outils de développement ?•   les frameworks•   les patterns de conception•   les ...
On distingue deux grands paradigmes :•   Limpératif (objet, structuré, parallèle, ...)    o   basés sur la gestion détats ...
Clairement lapproche impérative a gagné !Pourquoi ?• limpératif est plus immédiat, plus intuitif• le déclaratif est un jou...
Mais mais mais...•   le fonctionnel nest pas du tout incompatible    avec les concepts de lorienté objet !•   limpératif a...
Pour toutes ces raisons demain vous utiliserez           des langages fonctionnels           Scala, Haskell, Erlang,      ...
Pour toutes ces raisons demain vous utiliserez           des langages fonctionnels           Scala, Haskell, Erlang,      ...
Non demain vous ferez du Java !        ou du C/C#/..
Non demain vous ferez du Java !        ou du C/C#/..     (comme aujourdhui)
mais différemment !
mais différemment !             Demain :       Java8 & sa JSR-355(Lambda Expressions for the JavaTM     Programming Langua...
Premier concept (fondamental)                      La Fonction•   au sens mathématique :    o   un calcul dont le résultat...
Pureté. Quel intérêt ?•   le repos de la tête !    o   pas de variables cachées    o   pas deffet de bord•   la testabilit...
Exemple
Que se passe til si• la fonction modifie la liste ou ses dates ?• cette même liste est modifiée par dautres  traitements ?
Second concept Limmutabilité
En java ?• Les String sont immuables, les collections  peuvent être protégées, ..• Rendez vos objets immutables
Troisième concept                  Lexpressivité•   fonction de première classe•   fonctions d’ordre supérieurExemple : Map
Avec une fonction explicitéeouEt avec les lambda Java 8
LIDE peut aussi donner lillusion dunlangage fonctionnel...
Quatrième concept  Composabilité
Functional Design Patterns                              Fowler(2 different sources: PEAA et DSL)Fluent Interface: Form of ...
Domain Driven DesignImmutable Value Object: objects w/o identity,  represent characteristics of some Entity or  other busi...
A Functional Pattern System for OO DesignFunction Object first class functions as objects : blocks, closures, lambdas...La...
Other Functional "Patterns"Monoid: provide a base value (eg. Null Object) and some operation for composing objects (simila...
May the lambdabe with you!
Debrief
Prochain SlideShare
Chargement dans…5
×

Patrons de conception de la programmation fonctionnelle

930 vues

Publié le

Les "patrons de conception"
de la programmation fonctionnelle au service d'une conception simple
Arnaud Bailly &

0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
930
Sur SlideShare
0
Issues des intégrations
0
Intégrations
3
Actions
Partages
0
Téléchargements
33
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Patrons de conception de la programmation fonctionnelle

  1. 1. Les "patrons de conception" de la programmation fonctionnelleau service dune conception simple
  2. 2. Simplicité comme valeur agileUn des principes Agile (http://agilemanifesto.org)Simplicity--the art of maximizing the amountof work not done--is essential.Aussi dans eXtremenProgramming: Simple Design
  3. 3. Agilité, XP, Prog. FonctionnelleHaskell, Scala, Java @abailly
  4. 4. Le logiciel libreJava, JVM et optimisationFP (Clojure/Haskell) @CedricPineau
  5. 5. Quest quune conception simple ?
  6. 6. “Ce qui se conçoit bien s’énonce clairement et les mots pour le dire viennent aisément” (Nicolas Boileau)Intuitivement, ce qui est• lisible, facilement compréhensible, court ?• sous contrôle : testable simplement
  7. 7. What XP says1. Runs all the tests. Testable (facilement)1. Expresses every idea that we need to express. Expressif, Lisible1. Says everything OnceAndOnlyOnce. Concis, expressif1. Has no superfluous parts.
  8. 8. Ou encore :1. Runs all the tests. ...1. Maximizes Cohesion1. Minimizes Coupling1. Says everything OnceAndOnlyOnce. ...
  9. 9. De quels leviers disposons nous ?• les outils de développement ?• les frameworks• les patterns de conception• les langages de programmation• les paradigmes de programmation !
  10. 10. On distingue deux grands paradigmes :• Limpératif (objet, structuré, parallèle, ...) o basés sur la gestion détats (modèle de Turing) o lalgorithme est une suite dinstructions de modification demplacements mémoire• Le déclaratif (fonctionnel, logique, par flot de données, ...) o basés sur les mathématiques et la logique o on y exprime le quoi plutôt que le comment
  11. 11. Clairement lapproche impérative a gagné !Pourquoi ?• limpératif est plus immédiat, plus intuitif• le déclaratif est un jouet pour matheux ratés aux concepts incompréhensibles : foncteur, monade, réacteur, banane, ... Lorienté objet est partout ! Victoire !
  12. 12. Mais mais mais...• le fonctionnel nest pas du tout incompatible avec les concepts de lorienté objet !• limpératif au sens large na pas répondu à toutes les attentes
  13. 13. Pour toutes ces raisons demain vous utiliserez des langages fonctionnels Scala, Haskell, Erlang, Clojure, Groovy, Python, F#, ...
  14. 14. Pour toutes ces raisons demain vous utiliserez des langages fonctionnels Scala, Haskell, Erlang, Clojure, Groovy, Python, F#, ...
  15. 15. Non demain vous ferez du Java ! ou du C/C#/..
  16. 16. Non demain vous ferez du Java ! ou du C/C#/.. (comme aujourdhui)
  17. 17. mais différemment !
  18. 18. mais différemment ! Demain : Java8 & sa JSR-355(Lambda Expressions for the JavaTM Programming Language)
  19. 19. Premier concept (fondamental) La Fonction• au sens mathématique : o un calcul dont le résultat nest fonction que de ses entrées o qui ne modifie pas létat du mondeOn appelle cela la pureté.
  20. 20. Pureté. Quel intérêt ?• le repos de la tête ! o pas de variables cachées o pas deffet de bord• la testabilité• la possibilité de rejouer• la possibilité de ne pas jouer
  21. 21. Exemple
  22. 22. Que se passe til si• la fonction modifie la liste ou ses dates ?• cette même liste est modifiée par dautres traitements ?
  23. 23. Second concept Limmutabilité
  24. 24. En java ?• Les String sont immuables, les collections peuvent être protégées, ..• Rendez vos objets immutables
  25. 25. Troisième concept Lexpressivité• fonction de première classe• fonctions d’ordre supérieurExemple : Map
  26. 26. Avec une fonction explicitéeouEt avec les lambda Java 8
  27. 27. LIDE peut aussi donner lillusion dunlangage fonctionnel...
  28. 28. Quatrième concept Composabilité
  29. 29. Functional Design Patterns Fowler(2 different sources: PEAA et DSL)Fluent Interface: Form of Closure of operations or even DSL, provides compositionality of actions/functionsExpression Builder Separate building from regular API calls, other examples (more modern): DZone, CumulativeFactory
  30. 30. Domain Driven DesignImmutable Value Object: objects w/o identity, represent characteristics of some Entity or other business object within the system. Immutability favors sharingSide-effect free Functions: self-explanatory!Closure of Operations: provide methods on objects returning same or other object transformed. Some primitive form of monoids and compositionality.
  31. 31. A Functional Pattern System for OO DesignFunction Object first class functions as objects : blocks, closures, lambdas...Lazy Object Defer computation to the latest possible timeValue Object Immutable objects with generator operationsTransfold aka. map-reduceVoid Value: remove the need for nullTranslator: replace Visitor as a way to structural recursion
  32. 32. Other Functional "Patterns"Monoid: provide a base value (eg. Null Object) and some operation for composing objects (similar to Closure of Operations)Option: signals the possibility of a non- existing value (eg. Null object)Zipper: Provide a way to traverse and modify immutable structuresMonad: compose operations while maintaining a context
  33. 33. May the lambdabe with you!
  34. 34. Debrief

×