Dans le monde industriel comme dans le monde du logiciel libre, nombreux sont les logiciels de grande envergure, que ce soit de par leur taille, de par le nombre de leurs auteurs, ou de par leur durée de vie. De telles réalisations ne sont possibles que grâce à une architecture modulaire, qui idéalement doit permettre à chaque composant d'être conçu, réalisé, testé, modifié, ré-utilisé, indépendamment des autres composants du système.

Le principal objectif de ce cours est de présenter les concepts et les mécanismes fondamentaux qui, dans un langage de programmation moderne, permettent cette organisation modulaire. Par exemple, l'encapsulation, c'est-à-dire l'idée que certains détails d'un composant doivent être totalement opaques pour ses clients, peut être obtenue via différents mécanismes (abstraction de types; abstraction procédurale; ...). De même, la composabilité, c'est-à-dire l'idée que les liens entre composants ne doivent pas être figés à l'avance, peut être réalisée via différents moyens (paramétrisation; définition retardée; ...). S'il fallait résumer le cours en un concept, ce pourrait être abstraction, un mot dont nous étudions les multiples significations.

Nous présenterons les principes fondamentaux d'abstraction ainsi que leur mise en oeuvre dans le langage OCaml. Ce langage haut niveau est en effet idéal pour illustrer les concepts vus en cours.

Le cours incluera une introduction à OCaml (aucun pré-requis concernant la connaissance de ce langage), et des séances de travaux dirigés permettant d'en maîtriser l'usage.


Niveau requis :
Il est nécessaire d'avoir suivi soit INF321 soit (INF311 et INF411).
Aucune connaissance du langage OCaml n'est exigée (le cours introduira toutes les notions utiles).


Modalités d'évaluation :
Un contrôle classant par écrit.
Un projet de programmation réalisé en binôme.