Patrons de conception de la programmation fonctionnelle

944 views

Published on

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

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
944
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
33
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

×