Au
cours de ma carrière d'enseignant en informatique à
l'Université
de Paris-Sud XI, j'ai produit quelques ressources pédagogiques qui
pourraient être utiles aux personnes souhaitant découvrir les mystères
de la programmation, ou approfondir leurs connaissances.
Ces ressources se composent de livres,
de supports de cours, d'exemples, de
logiciels et de supports animés.
La plupart des éléments présentés sont liés à l'algorithmique,
que j'ai longtemps enseigné, et qui a beaucoup
évolué dans les dernières années,
notamment avec l'arrivée de la programmation "orientée
objet".
Il est difficile de résumer cela en quelques mots :
- les
programmes qui donnent toutes leurs fonctionnalités aux ordinateurs
sont composés d'instructions élémentaires très simples, qui inscrivent
des valeurs ou des textes dans la mémoire, font des calculs ou des
manipulations dessus, produisent des résultats. Pour que ces programmes
donnent les résultats attendus, encore faut-il que ces instructions
soient disposées de manière efficace et que les données sur lesquelles
elles travaillent le soient aussi. Ces arrangements s'appellent
repectivement des algorithmes et des structures de données. L'algorithmique est la technique qui permet de réaliser de tels arrangements avec élégance et performance.
- jadis,
les algorithmes manipulaient les données de manière autoritaire, avec
des instructions du genre : « donner à l'objet x la valeur 32 ! »,qui
ne tenaient aucun compte de la vraisemblance de cette valeur. Si x est
le nombre de passagers d'une voiture, une telle valeur est pourtant
absurde. Le résultat est un algorithme,donc un programme dont les résultats seront faux et dont le comportement sera incohérent. En algorithmique objet, les instructions sont plutôt du type : « proposer à l'objet x la valeur 32 ! ».
Ceci permettra à notre objet de n'accepter une modification que
lorsqu'elle conduit à une situation acceptable et stable. Les
programmes ainsi développés sont beaucoup plus sûrs et de bien
meilleure qualité.
- S'ajoute à cela, toujours dans l'algorithmique objet,
la construction d'objets plus rigoureux, à partir de classes d'objets
qui héritent les unes des autres, sont capables de réutiliser les codes
déjà réalisés, ont des capacités de généralisation (généricité), savent
traiter les incidents sans rendre les programmes instables et donnent
donc des programmes et des logiciels plus stables et plus faciles à
améliorer.
Les livres :
Ces
deux ouvrages étaient initialement destinés aux
étudiants de premier cycle universitaire. Le premier livre que
j'ai publié chez Vuibert Informatique présente les
principaux concepts de l'algorithmique objet sans les relier à
un langage de programmation précis.
Le logiciel ActiveTutor
permet l'animation des algorithmes qui y sont présentés. Ce livre a été
rapidement épuisé, puis a bénéficié d'un re-tirage.
.
Le
second, quelques années plus tard, était destiné
aux personnes souhaitant découvrir en même temps les
techniques algorithmiques et un langage de programmation permettant de
mettre en oeuvre les concepts les plus sophistiqués. Ce langage
aurait pu être par exemple Java ou Ada mais ces langages de
programmation ont tous deux des contraintes que C++ n'a pas, même
s'il comporte quelques défauts, liés en grande partie au
fait qu'il est un descendant du langage C des années 1970.
Ce livre a été rapidement épuisé, puis ré-édité.
Les principales améliorations de la seconde édition par
rapport à la première sont :
- l'ensemble
des exemples C++, ainsi que les corrigés d'exercices sont maintenant
conformes à la dernière norme C++ et emploient occasionnellement les
éléments de la STL,
- les comparatifs entre C++ et Java sont conformes à la
dernière norme Java (1.5),
- d'avantage d'exercices avec corrigés...
Les supports de
cours
La
plupart des cours que j'ai eu l'occasion de donner étaient
réalisés à l'aide de diaporamas Microsoft™
Powerpoint©.
Ils sont classés ci-dessous par matière enseignée.
Pour accéder à ces fichiers, il suffit de disposer du
logiciel Acrobat™
Reader©.
Algorithmique et C++
Un cours
d'introduction au rôle et à la place de l'algorithmique.
Une
autre version pour introduire le rôle et la place de l'algorithmique.
Un
cours sur les déclarations d'objets et les exceptions en C++.
Un cours sur
les objets et les classes.
Un cours
sur les fichiers.
Un cours sur
les listes chaînées. Un outil
de visualisation de listes chaînées permet de mieux se rendre
compte de ce qui se produit quand on ajoute des éléments dans ce type
de structure de données.
Un
cours sur les arbres binaires avec des exemples de mise en œuvre en C++.
Un
cours sur deux variétés d'arbres binaires
différentes, les ABR (arbres binaires de recherche) et la
technique de compression de fichiers de Huffmann.
Un cours sur
les arbres n-aires.
Un cours
sur la généricité.
Un cours
sur l'héritage et les particularités de sa mise en œuvre en
C++.
Un
cours sur l'héritage comme moyen d'organisation et de rangement
intelligent.
Un petit cours
sur l'algorithme de compression de données LZW.
C
Un
cours d'introduction à l'algorithmique et au langage C.
Un
cours sur les bases et l'histoire du langage C.
Un
cours sur l'utilisation de pointeurs en C.
Un
cours sur la manipulation de tableaux en C.
Un
cours sur l'utilisation de sous-programmes en C.
Java
Un
cours d'introduction au langage Java.
Un cours
sur la construction d'interfaces homme-machine graphiques avec Java.
Un
cours sur les flux en Java.
Un
cours sur la généricité en Java.
Un
cours sur l'héritage en Java.
Un cours
sur la gestion des images en Java.
Java et le Web
Un cours sur
la technique client/serveur RMI en Java.
Un
cours sur l'utilisation de servlets avec Java.
Un cours sur
les JSP (Java Server Pages).
Un
cours sur les applets Java (composants actifs de pages Web).
Java et Xml
Un cours
sur les interactions Java - Xml
Xml
Une
présentation générale du méta-langage Xml
C++ ou
Java ?
Un comparatif (en
anglais).
Javascript
Un cours
sur les bases de ce langage utilisé dans les pages Web
actives (côté client principalement), avec quelques exemples et
recommandations
simples.
Quelques exercices avec leur corrigés.
J'ai rassemblé dans ce
document
les exercices d'algorithmique (avec corrigés) qui étaient destinés aux
étudiants préparant le DUT informatique en 1 an à l'Iut d'Orsay (de
2002 à 2008)
Par ailleurs, voici 3 exercices d'initiation au langage Xml (avec corrigés)
Le premier
exercice comporte
l'écriture d'un fichier xml sans contrôle de cohérence, puis
l'adaptation de ce fichier à un contrôle de cohérence fourni par
l'intermédiaire d'une DTD, puis la réalisation d'un programme C++
produisant automatiquement à partir de données un fichier XML avec
cohérence contrôlée.
Le second exercice
amène les étudiants à modifier une DTD, à adapter leur programme du
premier sujet en conséquence, et à réaliser un transformateur xsl
permettant de présenter le contenu de leur fichier XML de manière plus
jolie
Le troisième exercice
consiste en une initiation à l'utilisation de schémas XML (XSD) pour
aborder autrement le problème général du contrôle de cohérence des
documents XML, toujours sur la même base.
Les exemples
Un jeu de pendu
en Java, comme exemple de conception d'interface graphique.
Un jeu d'explosion de bulles en Java, comme exemple plus sophistiqué
d'interface graphique.
Un outil
de conversion de monnaies en Java (conversion Francs
->
Euro et inverse)
Les animations
Un outil
de visualisation de listes chaînées,
Un outil
de visualisation d'arbres binaires de recherche,
Une démonstration
de déroulement de quelques algorithmes de tris rapides
Les logiciels
Au cours des séances d'algorithmique, il est bon
de montrer aux étudiants ce qui se passe en mémoire pendant leur
déroulement. J'ai développé à cet effet un logiciel d'animation
d'algorithmes dont une version allégée peut être téléchargée.
Cette page a été consultée 11385 fois depuis le 23 novembre 2008