SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Les "patrons de conception"
 de la programmation fonctionnelle
au service d'une conception simple
Simplicité comme valeur agile

Un des principes Agile (http://agilemanifesto.org)

Simplicity--the art of maximizing the amount
of work not done--is essential.



Aussi dans eXtremenProgramming: Simple
 Design
Agilité, XP, Prog. Fonctionnelle
Haskell, Scala, Java




                           @abailly
Le logiciel libre
Java, JVM et optimisation
FP (Clojure/Haskell)




                            @CedricPineau
Qu'est qu'une conception simple ?
“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
What XP says




1. Runs all the tests.
        Testable (facilement)
1. Expresses every idea that we need to express.
           Expressif, Lisible
1. Says everything OnceAndOnlyOnce.
           Concis, expressif
1. Has no superfluous parts.
Ou encore :

1. Runs all the tests.
           ...
1. Maximizes Cohesion

1. Minimizes Coupling

1. Says everything OnceAndOnlyOnce.
                ...
De quels leviers disposons nous ?

•   les outils de développement ?
•   les frameworks
•   les patterns de conception
•   les langages de programmation
•   les paradigmes de programmation !
On distingue deux grands paradigmes :

•   L'impératif (objet, structuré, parallèle, ...)
    o   basés sur la gestion d'états (modèle de Turing)
    o   l'algorithme est une suite d'instructions de modification
        d'emplacements 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
Clairement l'approche impérative a gagné !

Pourquoi ?
• l'impé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, ...

     L'orienté objet est partout ! Victoire !
Mais mais mais...

•   le fonctionnel n'est pas du tout incompatible
    avec les concepts de l'orienté objet !

•   l'impératif au sens large n'a pas répondu à
    toutes les attentes
Pour toutes ces raisons demain vous utiliserez
           des langages fonctionnels

           Scala, Haskell, Erlang,
       Clojure, Groovy, Python, F#, ...
Pour toutes ces raisons demain vous utiliserez
           des langages fonctionnels

           Scala, Haskell, Erlang,
       Clojure, Groovy, Python, F#, ...
Non demain vous ferez du Java !
        ou du C/C#/..
Non demain vous ferez du Java !
        ou du C/C#/..

     (comme aujourd'hui)
mais différemment !
mais différemment !

             Demain :

       Java8 & sa JSR-355
(Lambda Expressions for the JavaTM
     Programming Language)
Premier concept (fondamental)
                      La Fonction

•   au sens mathématique :
    o   un calcul dont le résultat n'est fonction que de ses
        entrées
    o   qui ne modifie pas l'état du monde


On appelle cela la pureté.
Pureté. Quel intérêt ?



•   le repos de la tête !
    o   pas de variables cachées
    o   pas d'effet de bord


•   la testabilité

•   la possibilité de rejouer

•   la possibilité de ne pas jouer
Exemple
Que se passe t'il si
• la fonction modifie la liste ou ses dates ?
• cette même liste est modifiée par d'autres
  traitements ?
Second concept
 L'immutabilité
En java ?
• Les String sont immuables, les collections
  peuvent être protégées, ..
• Rendez vos objets immutables
Troisième concept
                  L'expressivité

•   fonction de première classe
•   fonctions d’ordre supérieur

Exemple : Map
Avec une fonction explicitée




ou




Et avec les lambda Java 8
L'IDE peut aussi donner l'illusion d'un
langage fonctionnel...
Quatrième concept
  Composabilité
Functional Design Patterns

                              Fowler
(2 different sources: PEAA et DSL)

Fluent Interface: Form of Closure of
  operations or even DSL, provides
  compositionality of actions/functions

Expression Builder Separate building from
 regular API calls, other examples (more
 modern): DZone, CumulativeFactory
Domain Driven Design

Immutable Value Object: objects w/o identity,
  represent characteristics of some Entity or
  other business object within the system.
  Immutability favors sharing
Side-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.
A Functional Pattern System for OO Design
Function Object first class functions as
 objects : blocks, closures, lambdas...
Lazy Object Defer computation to the latest
  possible time
Value Object Immutable objects with generator
  operations
Transfold aka. map-reduce
Void Value: remove the need for null
Translator: replace Visitor as a way to
  structural recursion
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 structures
Monad: compose operations while maintaining
 a context
May the lambda
be with you!
Debrief

Contenu connexe

Tendances

cours Algorithmique SMP-SMC s2 by coursedu.blogspot.com
cours Algorithmique SMP-SMC s2 by coursedu.blogspot.comcours Algorithmique SMP-SMC s2 by coursedu.blogspot.com
cours Algorithmique SMP-SMC s2 by coursedu.blogspot.comcoursedu
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA Asmaa BENGUEDDACH
 

Tendances (6)

Python
PythonPython
Python
 
cours Algorithmique SMP-SMC s2 by coursedu.blogspot.com
cours Algorithmique SMP-SMC s2 by coursedu.blogspot.comcours Algorithmique SMP-SMC s2 by coursedu.blogspot.com
cours Algorithmique SMP-SMC s2 by coursedu.blogspot.com
 
Introduction a Java
Introduction a JavaIntroduction a Java
Introduction a Java
 
Builsing DSL using MDE
Builsing DSL using MDEBuilsing DSL using MDE
Builsing DSL using MDE
 
Formation VBA Excel
Formation VBA ExcelFormation VBA Excel
Formation VBA Excel
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA
 

En vedette

Standard fci briquet deprovence
Standard fci briquet deprovence Standard fci briquet deprovence
Standard fci briquet deprovence elyaneforet
 
Informática jurídica diapos
Informática jurídica diaposInformática jurídica diapos
Informática jurídica diaposjadfr
 
Exe Central
Exe CentralExe Central
Exe CentralASPM
 
Silvando un vals
Silvando un valsSilvando un vals
Silvando un valsLUZ M.
 
Estas cubierto(a)...
Estas cubierto(a)...Estas cubierto(a)...
Estas cubierto(a)...LUZ M.
 
Anunciacion y el aborto
Anunciacion y el abortoAnunciacion y el aborto
Anunciacion y el abortoRita Patri
 
Webassadors - Mixology #17 - Actu' Web de la semaine du 27.10.14
Webassadors - Mixology #17 - Actu' Web de la semaine du 27.10.14Webassadors - Mixology #17 - Actu' Web de la semaine du 27.10.14
Webassadors - Mixology #17 - Actu' Web de la semaine du 27.10.14Webassadors
 
Standard fci braque portugais
Standard fci braque portugaisStandard fci braque portugais
Standard fci braque portugaiselyaneforet
 
Artesanias mavic
Artesanias mavicArtesanias mavic
Artesanias mavicmvtrujillo
 
Reglement des epreuves_de_quete_au_bois_sur_ongules_terriers_d_ecosse
Reglement des epreuves_de_quete_au_bois_sur_ongules_terriers_d_ecosseReglement des epreuves_de_quete_au_bois_sur_ongules_terriers_d_ecosse
Reglement des epreuves_de_quete_au_bois_sur_ongules_terriers_d_ecosseelyaneforet
 
Claire's cartoon (:
Claire's cartoon (:Claire's cartoon (:
Claire's cartoon (:Kenzi Dachel
 
Software libre presentacion
Software libre presentacionSoftware libre presentacion
Software libre presentacionMario Ojeda
 
Relacion entre impacto social y calidad de vida
Relacion entre impacto social y calidad de vidaRelacion entre impacto social y calidad de vida
Relacion entre impacto social y calidad de vidairwing729
 
Satandard fci grand epagneul de münster
Satandard fci grand epagneul de münsterSatandard fci grand epagneul de münster
Satandard fci grand epagneul de münsterelyaneforet
 
Entorno personal de aprendizaje (ple)
Entorno personal de aprendizaje (ple)Entorno personal de aprendizaje (ple)
Entorno personal de aprendizaje (ple)Mario Ojeda
 

En vedette (20)

Standard fci briquet deprovence
Standard fci briquet deprovence Standard fci briquet deprovence
Standard fci briquet deprovence
 
51 transporte
51 transporte51 transporte
51 transporte
 
Informática jurídica diapos
Informática jurídica diaposInformática jurídica diapos
Informática jurídica diapos
 
Exe Central
Exe CentralExe Central
Exe Central
 
Silvando un vals
Silvando un valsSilvando un vals
Silvando un vals
 
Estas cubierto(a)...
Estas cubierto(a)...Estas cubierto(a)...
Estas cubierto(a)...
 
Anunciacion y el aborto
Anunciacion y el abortoAnunciacion y el aborto
Anunciacion y el aborto
 
Webassadors - Mixology #17 - Actu' Web de la semaine du 27.10.14
Webassadors - Mixology #17 - Actu' Web de la semaine du 27.10.14Webassadors - Mixology #17 - Actu' Web de la semaine du 27.10.14
Webassadors - Mixology #17 - Actu' Web de la semaine du 27.10.14
 
Standard fci braque portugais
Standard fci braque portugaisStandard fci braque portugais
Standard fci braque portugais
 
Inteligencias multiples copia
Inteligencias multiples   copiaInteligencias multiples   copia
Inteligencias multiples copia
 
Artesanias mavic
Artesanias mavicArtesanias mavic
Artesanias mavic
 
Sesion 1
Sesion 1Sesion 1
Sesion 1
 
Blogger(milton)
Blogger(milton)Blogger(milton)
Blogger(milton)
 
Reglement des epreuves_de_quete_au_bois_sur_ongules_terriers_d_ecosse
Reglement des epreuves_de_quete_au_bois_sur_ongules_terriers_d_ecosseReglement des epreuves_de_quete_au_bois_sur_ongules_terriers_d_ecosse
Reglement des epreuves_de_quete_au_bois_sur_ongules_terriers_d_ecosse
 
Claire's cartoon (:
Claire's cartoon (:Claire's cartoon (:
Claire's cartoon (:
 
Software libre presentacion
Software libre presentacionSoftware libre presentacion
Software libre presentacion
 
Ecumenismo
EcumenismoEcumenismo
Ecumenismo
 
Relacion entre impacto social y calidad de vida
Relacion entre impacto social y calidad de vidaRelacion entre impacto social y calidad de vida
Relacion entre impacto social y calidad de vida
 
Satandard fci grand epagneul de münster
Satandard fci grand epagneul de münsterSatandard fci grand epagneul de münster
Satandard fci grand epagneul de münster
 
Entorno personal de aprendizaje (ple)
Entorno personal de aprendizaje (ple)Entorno personal de aprendizaje (ple)
Entorno personal de aprendizaje (ple)
 

Similaire à Patrons de conception de la programmation fonctionnelle

Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojurelolopetit
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Jérôme Tamborini
 
Programmation orientee aspect 201401 - Ensim
Programmation orientee aspect 201401 - EnsimProgrammation orientee aspect 201401 - Ensim
Programmation orientee aspect 201401 - EnsimLaurent Broudoux
 
POO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdfPOO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdfLarbaSAWADOGO2
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieurFredy Fadel
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_finalDuchess France
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_finalagnes_crepet
 
Seance_1_cours_introduction_java_Copie.pptx
Seance_1_cours_introduction_java_Copie.pptxSeance_1_cours_introduction_java_Copie.pptx
Seance_1_cours_introduction_java_Copie.pptxRihabBENLAMINE
 
Tour d’horizon de scala
Tour d’horizon de scalaTour d’horizon de scala
Tour d’horizon de scalaBenoit Wilcox
 
Langage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetLangage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetMohammed Jaafar
 
Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! frameworkHoracio Gonzalez
 

Similaire à Patrons de conception de la programmation fonctionnelle (20)

La programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PFLa programmation fonctionnelle en javascript / PF
La programmation fonctionnelle en javascript / PF
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojure
 
Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)Back to the future of java (from 8 to 11 and beyond)
Back to the future of java (from 8 to 11 and beyond)
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
 
OOP and Design Patterns
OOP and Design PatternsOOP and Design Patterns
OOP and Design Patterns
 
Apprentissage du java
Apprentissage du javaApprentissage du java
Apprentissage du java
 
Programmation orientee aspect 201401 - Ensim
Programmation orientee aspect 201401 - EnsimProgrammation orientee aspect 201401 - Ensim
Programmation orientee aspect 201401 - Ensim
 
POO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdfPOO Licence L2 Partie I.pdf
POO Licence L2 Partie I.pdf
 
Javascript un langage supérieur
Javascript un langage supérieurJavascript un langage supérieur
Javascript un langage supérieur
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
Seance_1_cours_introduction_java_Copie.pptx
Seance_1_cours_introduction_java_Copie.pptxSeance_1_cours_introduction_java_Copie.pptx
Seance_1_cours_introduction_java_Copie.pptx
 
Tour d’horizon de scala
Tour d’horizon de scalaTour d’horizon de scala
Tour d’horizon de scala
 
Multi-Threading Et Cocoa
Multi-Threading Et CocoaMulti-Threading Et Cocoa
Multi-Threading Et Cocoa
 
Langage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté ObjetLangage Java et Programmation Orienté Objet
Langage Java et Programmation Orienté Objet
 
CPOO.pdf
CPOO.pdfCPOO.pdf
CPOO.pdf
 
Enib cours c.a.i. web - séance #5 : scala play! framework
Enib   cours c.a.i. web - séance #5 : scala play! frameworkEnib   cours c.a.i. web - séance #5 : scala play! framework
Enib cours c.a.i. web - séance #5 : scala play! framework
 
Drools
DroolsDrools
Drools
 
Javavs net
Javavs netJavavs net
Javavs net
 
Jpa(1)
Jpa(1)Jpa(1)
Jpa(1)
 

Plus de Association Agile Nantes

Agile Tour Nantes 2014 - Comment impliquer vos clients dans leurs projets ?
Agile Tour Nantes 2014 - Comment impliquer vos clients dans leurs projets ?Agile Tour Nantes 2014 - Comment impliquer vos clients dans leurs projets ?
Agile Tour Nantes 2014 - Comment impliquer vos clients dans leurs projets ?Association Agile Nantes
 
Le projet Aristote / Steeve Evers & Marc Dugué
Le projet Aristote / Steeve Evers & Marc DuguéLe projet Aristote / Steeve Evers & Marc Dugué
Le projet Aristote / Steeve Evers & Marc DuguéAssociation Agile Nantes
 
Initiation à l'agilité - Agile Tour 2017
Initiation à l'agilité - Agile Tour 2017Initiation à l'agilité - Agile Tour 2017
Initiation à l'agilité - Agile Tour 2017Association Agile Nantes
 
Agile Tour Nantes 2014 - 10 ans d'agile, c'est chouette ! La rétro des points...
Agile Tour Nantes 2014 - 10 ans d'agile, c'est chouette ! La rétro des points...Agile Tour Nantes 2014 - 10 ans d'agile, c'est chouette ! La rétro des points...
Agile Tour Nantes 2014 - 10 ans d'agile, c'est chouette ! La rétro des points...Association Agile Nantes
 
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAgile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAssociation Agile Nantes
 
Et si on maîtrisait vraiment notre produit
Et si on maîtrisait vraiment notre produitEt si on maîtrisait vraiment notre produit
Et si on maîtrisait vraiment notre produitAssociation Agile Nantes
 
Agile Tour Nantes 2013 - L'EPOPEE DU CHEVALIER AGILE FILS DU ROI PRAGMATIQUE ...
Agile Tour Nantes 2013 - L'EPOPEE DU CHEVALIER AGILE FILS DU ROI PRAGMATIQUE ...Agile Tour Nantes 2013 - L'EPOPEE DU CHEVALIER AGILE FILS DU ROI PRAGMATIQUE ...
Agile Tour Nantes 2013 - L'EPOPEE DU CHEVALIER AGILE FILS DU ROI PRAGMATIQUE ...Association Agile Nantes
 
Agile Tour Nantes 2013 - Urbanisation des services : Pour changer le monde du...
Agile Tour Nantes 2013 - Urbanisation des services : Pour changer le monde du...Agile Tour Nantes 2013 - Urbanisation des services : Pour changer le monde du...
Agile Tour Nantes 2013 - Urbanisation des services : Pour changer le monde du...Association Agile Nantes
 
Agile Tour Nantes 2013 - Scrum ou kanban - Alexandre BOUTIN
Agile Tour Nantes 2013 - Scrum ou kanban - Alexandre BOUTINAgile Tour Nantes 2013 - Scrum ou kanban - Alexandre BOUTIN
Agile Tour Nantes 2013 - Scrum ou kanban - Alexandre BOUTINAssociation Agile Nantes
 
Agile Tour Nantes 2013 - Introduction aux méthodes agiles - Grégoire ROBIN - ...
Agile Tour Nantes 2013 - Introduction aux méthodes agiles - Grégoire ROBIN - ...Agile Tour Nantes 2013 - Introduction aux méthodes agiles - Grégoire ROBIN - ...
Agile Tour Nantes 2013 - Introduction aux méthodes agiles - Grégoire ROBIN - ...Association Agile Nantes
 
Agt nantes 2013 aurélien morvant - agiletour.comment.etre.agile.et.le.rester
Agt nantes 2013   aurélien morvant - agiletour.comment.etre.agile.et.le.resterAgt nantes 2013   aurélien morvant - agiletour.comment.etre.agile.et.le.rester
Agt nantes 2013 aurélien morvant - agiletour.comment.etre.agile.et.le.resterAssociation Agile Nantes
 
Agt nantes 2013 rémy génin - l'agilité peut changer le monde
Agt nantes 2013   rémy génin - l'agilité peut changer le mondeAgt nantes 2013   rémy génin - l'agilité peut changer le monde
Agt nantes 2013 rémy génin - l'agilité peut changer le mondeAssociation Agile Nantes
 
Coching julien Sylvie Le Bail / Christophe Morin
Coching julien Sylvie Le Bail / Christophe MorinCoching julien Sylvie Le Bail / Christophe Morin
Coching julien Sylvie Le Bail / Christophe MorinAssociation Agile Nantes
 

Plus de Association Agile Nantes (20)

PI Planning-Vos échanges!.pdf
PI Planning-Vos échanges!.pdfPI Planning-Vos échanges!.pdf
PI Planning-Vos échanges!.pdf
 
Agile Tour Nantes 2014 - Comment impliquer vos clients dans leurs projets ?
Agile Tour Nantes 2014 - Comment impliquer vos clients dans leurs projets ?Agile Tour Nantes 2014 - Comment impliquer vos clients dans leurs projets ?
Agile Tour Nantes 2014 - Comment impliquer vos clients dans leurs projets ?
 
Le projet Aristote / Steeve Evers & Marc Dugué
Le projet Aristote / Steeve Evers & Marc DuguéLe projet Aristote / Steeve Evers & Marc Dugué
Le projet Aristote / Steeve Evers & Marc Dugué
 
Tous en scène - Arnaud Garnier
Tous en scène - Arnaud GarnierTous en scène - Arnaud Garnier
Tous en scène - Arnaud Garnier
 
Initiation à l'agilité - Agile Tour 2017
Initiation à l'agilité - Agile Tour 2017Initiation à l'agilité - Agile Tour 2017
Initiation à l'agilité - Agile Tour 2017
 
Agile nantes leanstartup_20160323
Agile nantes leanstartup_20160323Agile nantes leanstartup_20160323
Agile nantes leanstartup_20160323
 
Agile Tour Nantes 2014 - 10 ans d'agile, c'est chouette ! La rétro des points...
Agile Tour Nantes 2014 - 10 ans d'agile, c'est chouette ! La rétro des points...Agile Tour Nantes 2014 - 10 ans d'agile, c'est chouette ! La rétro des points...
Agile Tour Nantes 2014 - 10 ans d'agile, c'est chouette ! La rétro des points...
 
Agile Tour Nantes 2014 - Sois autonome !
Agile Tour Nantes 2014 - Sois autonome !Agile Tour Nantes 2014 - Sois autonome !
Agile Tour Nantes 2014 - Sois autonome !
 
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testableAgile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
Agile Tour Nantes 2014 - Tdd, le meilleur moyen d'écrire du code testable
 
Et si on maîtrisait vraiment notre produit
Et si on maîtrisait vraiment notre produitEt si on maîtrisait vraiment notre produit
Et si on maîtrisait vraiment notre produit
 
Agile Tour Nantes 2013 - L'EPOPEE DU CHEVALIER AGILE FILS DU ROI PRAGMATIQUE ...
Agile Tour Nantes 2013 - L'EPOPEE DU CHEVALIER AGILE FILS DU ROI PRAGMATIQUE ...Agile Tour Nantes 2013 - L'EPOPEE DU CHEVALIER AGILE FILS DU ROI PRAGMATIQUE ...
Agile Tour Nantes 2013 - L'EPOPEE DU CHEVALIER AGILE FILS DU ROI PRAGMATIQUE ...
 
Agile Tour Nantes 2013 - Urbanisation des services : Pour changer le monde du...
Agile Tour Nantes 2013 - Urbanisation des services : Pour changer le monde du...Agile Tour Nantes 2013 - Urbanisation des services : Pour changer le monde du...
Agile Tour Nantes 2013 - Urbanisation des services : Pour changer le monde du...
 
Agile Tour Nantes 2013 - Scrum ou kanban - Alexandre BOUTIN
Agile Tour Nantes 2013 - Scrum ou kanban - Alexandre BOUTINAgile Tour Nantes 2013 - Scrum ou kanban - Alexandre BOUTIN
Agile Tour Nantes 2013 - Scrum ou kanban - Alexandre BOUTIN
 
Agile Tour Nantes 2013 - Introduction aux méthodes agiles - Grégoire ROBIN - ...
Agile Tour Nantes 2013 - Introduction aux méthodes agiles - Grégoire ROBIN - ...Agile Tour Nantes 2013 - Introduction aux méthodes agiles - Grégoire ROBIN - ...
Agile Tour Nantes 2013 - Introduction aux méthodes agiles - Grégoire ROBIN - ...
 
Agt nantes 2013 aurélien morvant - agiletour.comment.etre.agile.et.le.rester
Agt nantes 2013   aurélien morvant - agiletour.comment.etre.agile.et.le.resterAgt nantes 2013   aurélien morvant - agiletour.comment.etre.agile.et.le.rester
Agt nantes 2013 aurélien morvant - agiletour.comment.etre.agile.et.le.rester
 
Agt nantes 2013 rémy génin - l'agilité peut changer le monde
Agt nantes 2013   rémy génin - l'agilité peut changer le mondeAgt nantes 2013   rémy génin - l'agilité peut changer le monde
Agt nantes 2013 rémy génin - l'agilité peut changer le monde
 
Des mots, des maux ? Démo !
Des mots, des maux ? Démo !Des mots, des maux ? Démo !
Des mots, des maux ? Démo !
 
REX Scrum mature
REX Scrum matureREX Scrum mature
REX Scrum mature
 
L'agilité dans la mobilité
L'agilité dans la mobilitéL'agilité dans la mobilité
L'agilité dans la mobilité
 
Coching julien Sylvie Le Bail / Christophe Morin
Coching julien Sylvie Le Bail / Christophe MorinCoching julien Sylvie Le Bail / Christophe Morin
Coching julien Sylvie Le Bail / Christophe Morin
 

Patrons de conception de la programmation fonctionnelle

  • 1. Les "patrons de conception" de la programmation fonctionnelle au service d'une conception simple
  • 2. Simplicité comme valeur agile Un des principes Agile (http://agilemanifesto.org) Simplicity--the art of maximizing the amount of work not done--is essential. Aussi dans eXtremenProgramming: Simple Design
  • 3. Agilité, XP, Prog. Fonctionnelle Haskell, Scala, Java @abailly
  • 4. Le logiciel libre Java, JVM et optimisation FP (Clojure/Haskell) @CedricPineau
  • 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. What XP says 1. Runs all the tests. Testable (facilement) 1. Expresses every idea that we need to express. Expressif, Lisible 1. Says everything OnceAndOnlyOnce. Concis, expressif 1. Has no superfluous parts.
  • 8. Ou encore : 1. Runs all the tests. ... 1. Maximizes Cohesion 1. Minimizes Coupling 1. Says everything OnceAndOnlyOnce. ...
  • 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. On distingue deux grands paradigmes : • L'impératif (objet, structuré, parallèle, ...) o basés sur la gestion d'états (modèle de Turing) o l'algorithme est une suite d'instructions de modification d'emplacements 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. Clairement l'approche impérative a gagné ! Pourquoi ? • l'impé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, ... L'orienté objet est partout ! Victoire !
  • 12. Mais mais mais... • le fonctionnel n'est pas du tout incompatible avec les concepts de l'orienté objet ! • l'impératif au sens large n'a pas répondu à toutes les attentes
  • 13. Pour toutes ces raisons demain vous utiliserez des langages fonctionnels Scala, Haskell, Erlang, Clojure, Groovy, Python, F#, ...
  • 14. Pour toutes ces raisons demain vous utiliserez des langages fonctionnels Scala, Haskell, Erlang, Clojure, Groovy, Python, F#, ...
  • 15. Non demain vous ferez du Java ! ou du C/C#/..
  • 16. Non demain vous ferez du Java ! ou du C/C#/.. (comme aujourd'hui)
  • 18. mais différemment ! Demain : Java8 & sa JSR-355 (Lambda Expressions for the JavaTM Programming Language)
  • 19. Premier concept (fondamental) La Fonction • au sens mathématique : o un calcul dont le résultat n'est fonction que de ses entrées o qui ne modifie pas l'état du monde On appelle cela la pureté.
  • 20. Pureté. Quel intérêt ? • le repos de la tête ! o pas de variables cachées o pas d'effet de bord • la testabilité • la possibilité de rejouer • la possibilité de ne pas jouer
  • 22. Que se passe t'il si • la fonction modifie la liste ou ses dates ? • cette même liste est modifiée par d'autres traitements ?
  • 24. En java ? • Les String sont immuables, les collections peuvent être protégées, .. • Rendez vos objets immutables
  • 25. Troisième concept L'expressivité • fonction de première classe • fonctions d’ordre supérieur Exemple : Map
  • 26. Avec une fonction explicitée ou Et avec les lambda Java 8
  • 27. L'IDE peut aussi donner l'illusion d'un langage fonctionnel...
  • 28. Quatrième concept Composabilité
  • 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/functions Expression Builder Separate building from regular API calls, other examples (more modern): DZone, CumulativeFactory
  • 30. Domain Driven Design Immutable Value Object: objects w/o identity, represent characteristics of some Entity or other business object within the system. Immutability favors sharing Side-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. A Functional Pattern System for OO Design Function Object first class functions as objects : blocks, closures, lambdas... Lazy Object Defer computation to the latest possible time Value Object Immutable objects with generator operations Transfold aka. map-reduce Void Value: remove the need for null Translator: replace Visitor as a way to structural recursion
  • 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 structures Monad: compose operations while maintaining a context
  • 33. May the lambda be with you!