Programmation Fonctionnelle, TP10

Figure
Version & licenses
Creative Commons License

Programmation Fonctionnelle, TP10 : programmation fonctionnelle en Java

Guyslain Naves

Pour ce dernier TP, il vous est demandé de refaire un des TP ou un exemple de programme vu pendant ce cours de programmation fonctionnelle ou même pendant un autre cours, en Java. Vous êtes libre de choisir quel TP vous souhaitez refaire.

Il vous est demandé d'essayer d'utiliser au maximum les aspects fonctionnels de Java. En particulier, vous limiterez au maximum l'utilisation de variables non-finales et de structures de données mutables.

En plus de votre code source, vous rendrez un rapport expliquant ce que vous avez réussi à faire dans un style fonctionnel, et ce que vous n'avez pas réussi à traduire en fonctionnel et pourquoi. Vous devez aussi commentez la pertinence des choix de conceptions que vous avez effectués, par exemple en quoi un style fonctionnel vous aurait permis d'obtenir un programme de meilleure ou de moins bonne qualité.

Exceptionnellement, vous aurez deux semaines pour terminer ce devoir et le rendre comme d'habitude sur Ametice.

Voici quelques exemples de sujets possibles :

  • créer une mini-librairie de dessin à la façon de Vg,
  • utiliser junit-quickcheck sur un petit exemple (comme une structure de données),
  • refaire l'algorithme de Reingold et Tilford,
  • ou l'algorithme du "compte est bon" ,
  • implémenter des listes paresseuses en Java,
  • créer une librairie de combinateurs pour construire des comparateurs,
  • utiliser Stream pour résoudre le problème des $n$-reines,
  • écrire une structure de données (une de celles vues en algorithmique par exemple) en programmant aussi les fonctionnelles usuelles (map, fold,...).

Attention à ne pas essayer de faire une traduction litérale du programme OCaml. Les programmes en OCaml et Java ont des structures très différentes (Java étant orienté objet), une traduction litérale donnerait nécessairement du Java de mauvaise qualité. Il vous faudra repenser l'architecture du programme, en utilisant les intuitions acquises en programmation fonctionnelle et vos connaissances acquises en cours de conception orientée objet.