
L'objectif du cours est l’apprentissage de la programmation orientée objets et la mise en œuvre de solutions à des problèmes algorithmiques complexes. Le cours couvre une introduction à la programmation orientée objets, la conception d’algorithmes par analyse de leur coût puis leur implémentation dans un langage orienté objets. Il est illustré par la résolution de problèmes d'optimisation par différentes techniques (exploration combinatoire tronquée, programmation dynamique).
* Bases de l’orienté objets : concept d’objet, écriture de classes et utilisation d’objets
* Polymorphisme, héritage
* Type abstrait d’ensembles d’objets (conteneurs et itérateurs) : étude de ces types abstraits, manipulation via la notion d’interface et utilisation d’une bibliothèque de composants
* Rappel des notions de coût et d’analyse d’un algorithme (coût en temps et mémoire ; analyse au pire cas, en moyenne et amortie)
* Conception de structures de données complexes, étude de coût
* Programmation récursive, Branch&Bound
Le cours s’appuie sur le langage Java.
La première partie (programmation orientée objet) est faite sous la forme d'un apprentissage par projet (APP). Des travaux pratiques en séance permettent d'appliquer les concepts vus en deuxième partie.
En terme de modules : Algorithmique et structures de données 1 et 2.
En terme de compétences : programmation impérative (itération, récursion, programmation procédurale, généricité ; mise en pratique). Structures de données
Introduction to Algorithms (chap 1-4, 17, 14, 15, 22, 24, 25), Cormen Leiserson Rivest Stein, MIT PRESS
Thinking in Java, B. Eckel, Prentice Hall
APP : évaluation du rendu des APP
E1 : examen écrit de 3 h en fin de semestre (session 1)
E2 : examen de session 2
N1 = note finale de session 1 pour APOO
N2 = note finale de session 2 pour APOO
NB : la note d'APP ne se rattrape pas.
N1 = (3*E + APP) / 4
N2 = (3*E2 + APP) / 4