Niveau d'étude
BAC +4
ECTS
3 crédits
Composante
Sciences économiques, gestion, mathématiques et informatique
Volume horaire
24h
Période de l'année
Enseignement septième semestre
Objectifs
Depuis sa version 1.8, Java inclut de nombreuses instances de concepts fonctionnels qui permettent d’améliorer la qualité du code. D’autres langages se développent aussi au-dessus de la JVM, comme Kotlin et Scala, compatibles avec Java, et vont encore plus loin en ce qui concerne l’application des principes de la programmation fonctionnelle et la proposition de particularités associées. L’objectif de ce cours est d’étudier ces principes et propositions d’un point de vue général puis de leur application dans le monde JVM.
Approche pédagogique et plan de cours.
- Problème des effets de bord, transparence référentielle, déterminisme, totalité et polymorphisme
- Fonctions de premier ordre, fonction anonymes (lambdas), interfaces fonctionnelles
- Application partielle et composition de fonctions
- Structures de données fonctionnelles, immutabilité, streams
- Gestion de la partialité et des erreurs
- Maps, filtres et folds
- Entrées-sorties fonctionnelles, notions d’effets
- Memoization, Evaluation paresseuse
- Patterns fonctionnels
- Lien avec Kotlin (librairie fonctionnelle Arrow) et Scala (acteurs avec Akka)
Évaluation
Session 1 : Évaluation continue (cf. règle par défaut de la section « Modalités spécifiques » des M3C spécifiques)
Session 2 : Règle par défaut décrite dans la section « Modalités de contrôle et examens / Modalités spécifiques »
Heures d'enseignement
- CMCM12h
- TDTD12h
Pré-requis obligatoires
Programmation objet en Java (des rappels sur la généricité seront faits)
Compétences visées
- Programmation fonctionnelle en Java
- Bases en Kotlin et en Scala
- Résolution de problèmes à l’aide de patrons de programmation fonctionnelle
Bibliographie
- Functional Programming in Java: How functional techniques improve your Java programs, P.-Y. Saumont, 2017
- Functional Programming in Java: Harnessing the Power of Java 8 Lambda Expressions, V. Subramaniam, 2014
- Functional Interfaces in Java: Fundamentals and Examples, R. Lecessi, 2019
- Programming in Scala (3rd Edition), M. Odersky, L. Spoon et B. Venners, 2016
- Functional Programming in Scala, P. Chiusano et R. Bjarnason, 2014
- Functional Kotlin: Extend your OOP skills and implement functional techniques in Kotlin and Arrow, M. Arias et R. Chakraborty, 2018