Programmation avancée (INF441)

Alighapu Vakil

Images: Mohammad Domiri

J'ai assuré ce cours pendant deux ans, en 2014-2015 et 2015-2016. Le matériel ci-dessous est celui de l'année 2015-2016. Il peut être librement utilisé par les étudiants. Si vous êtes enseignant et si vous désirez en utiliser tout ou partie, merci de bien vouloir me contacter pour en demander la permission.

Les notes de cours sont peut-être l'élément le plus intéressant.

Présentation

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 étudions ces concepts et ces mécanismes dans le cadre de deux langages de programmation, à savoir Java et OCaml. Tous deux permettent l'écriture de code abstrait et modulaire, dans des styles parfois différents. Nous soulignerons la grande proximité (peu visible au premier abord) entre ces deux langages: ils organisent la mémoire de la même manière.

Le cours se veut non pas théorique, mais dirigé par des exemples motivants. Les amphis contiendront, autant que possible, des séances de “programmation vivante”. Le cours est accompagné de travaux dirigés sur machine et d'un projet de programmation.

Calendrier

Le cours a lieu le mardi à 8h30 en amphi Gay-Lussac. Les TDs ont lieu le mardi après-midi dans les nouvelles salles machines du LIX, au premier étage du bâtiment Alan Turing. Pour le moment, deux de ces salles sont numérotées, 1101 et 1106.

Voici les grandes lignes du programme:

Configuration de votre machine

Les travaux dirigés se dérouleront au premier étage du bâtiment Alan Turing, qui héberge le laboratoire d'informatique de l'École (LIX) ainsi que l'Inria Saclay.

En principe, ces salles seront équipées de machines déjà configurées. Toutefois, vous pouvez aussi utiliser votre ordinateur portable personnel, à condition d'y installer les logiciels nécessaires avant le début du cours. Nous disons bien avant le début du cours et non pas pendant la première séance de travaux dirigés...

Pour faciliter cela et pour garantir une meilleure uniformité, nous vous fournissons une machine virtuelle, c'est-à-dire un ordinateur imaginaire tout prêt, sur lequel OCaml, Eclipse, etc. sont déjà installés. Installez-la et vérifiez que tout fonctionne bien en effectuant le TD0, un exercice très court.

Pour les initiés qui souhaiteraient éviter la machine virtuelle ci-dessus et installer Java et OCaml directement sur leur machine, ou bien pour ceux qui ne parviennent pas à faire fonctionner la machine virtuelle, voici des instructions d'installation manuelle, à utiliser en dernier recours.

Éditeurs de texte

Pour éditer du code Java ou OCaml, nous vous conseillons d'utiliser soit Eclipse, soit emacs. Voici un tutoriel pour emacs. Sous emacs en mode Tuareg, trois commandes sont particulièrement utiles:

Voici une liste plus complète, en une page, des principales commandes disponible sous emacs en mode Tuareg.

En salle info, si le mode Tuareg ne s'active pas automatiquement lorsque vous ouvrez un fichier .ml ou .mli dans emacs, recopiez cette incantation dans votre fichier ~/.emacs.

Poly et livres

La version courante du poly est disponible. N'hésitez pas à me signaler les erreurs qu'il pourrait contenir.

À propos d'OCaml:

À propos de Java et surtout à propos de programmation modulaire:

Contrôle classant

Tous les documents seront autorisés. Il y aura des questions de programmation en Java et en OCaml. La meilleure façon de se préparer est probablement de faire une partie des exercices du poly.

Voici les sujets et corrigés des examens précédents:

Enseignants

Le responsable du cours est François Pottier. Envoyez-lui vos questions et commentaires. Les travaux dirigés sont assurés par