Page Programmation Orientée Objet


Cette page est maintenue par : Marc Champesme
Dernière mise à jour le : Mardi 17 janvier 2006


Cours ILOG1/Licence Info 3ème année (2005/2006)

Sujets de TP

Les compte-rendus de TP sont à rendre à votre enseignant de TP par courrier électronique (ou sur disquette en cas de problème avec le courrier électronique), au plus tard au début de la séance de TP suivante.

TP n°5 (même énoncé pour tous)

En vous inspirant du travail réalisé précédement, définissez (y compris son contrat) une "interface JAVA" nommée Figure et répondant à la description suivante:

Une Figure est complétement caractérisées par une liste ordonnée et finie de points. Le role et le nombre de ces points dépendent entièrement des caractéristiques géométriques propres de chaque type de figure et sont donc laissés entièrement libre pour chaque classe implémentant cette interface.

Les caractéristiques communes à l'ensemble des sous-classes de cette classe sont:

Les figures ainsi définies sont capables de s'afficher dans un environnement graphique par l'intermédiaire d'une méthode paint(Graphics g).

Définnissez une classe abstraite nommée FigureAbstraite fournissant une implémentation basique de l'interface Figure, puis adaptez les classes Dessin, Polygone et Rectangle de la manière suivante:
Définissez ensuite une classe Cercle implémentant elle aussi l'interface Figure et mettez à jour la méthode main(…) de la classe Dessin de sorte qu'au moins une figure de chaque classe ainsi réalisée s'affiche.
Travail à rendre: les fichiers Dessin.java, Figure.java, Polygone.java, Rectangle.java et Cercle.java. Pour toutes les classes le contrat devra être définie complètement et en prenant en compte l'héritage du contrat.

TP n°4

Enoncé :
Pour les débutants:
A partir des nouvelles versions des classes Dessin et Polygone implémentez les classes Rectangle et Triangle par héritage de la classe Polygone (vous ne devez pas modifier la classe Polygone). Modifiez ensuite la classe Dessin afin de faire afficher des instances de Rectangle et de Triangle. Vous devrez rendre les fichiers Rectangle.java, Triangle.java et la version modifiée de la classe Dessin.
Pour ceux qui connaissent déjà l'héritage
En reprenant le travail fait lors du premier TP, réaliser une nouvelle classe ArraySet utilisant un tableau pour fournir une nouvelle implémentation de l'interface java.util.Set. Par rapport au contrat de l'interface Set, cette nouvelle classe aura comme propriété supplémentaire d'assurer que l'ordre de ses éléments -- déterminé en fonction de l'ordre d'insertion -- est conservé et détermine l'ordre dans lequel les éléments sont énumérés par l'iterateur. Pour simplifier votre travail définissez la classe ArraySet par héritage de la classe java.util.AbstractSet. Vous devrez rendre les fichiers ArraySet.java et ArrayIterator.java (implémentation de l'interface java.util.Iterator adaptée à cette nouvelle classe), ainsi qu'une classe TestArraySet.java permettant de tester la classe ArraySet.

TP n°3

Enoncé en ligne et au format pdf et les classes Dessin et Polygone
Pour ceux qui débutent en programmation par contrat, un exercice supplémentaire à faire après le premier exercice "Utilisation de l’environnement JML" (ne pas consacrer plus d'un quart d'heure au point 3):
  1. Téléchargez le fichier archive disponible ici.
  2. Compiler et executer le programme contenu dans l'archive avec javac/java.
  3. Chercher l'erreur en observant l'affichage (ne corrigez pas le code, notez le temps passé).
  4. Compiler/exécuter avec jmlc/jmlrac...
  5. Combien de temps avez-vous perdu inutilement à chercher l'erreur ???

TP n°2

L'énoncé (format pdf) est téléchargeable ici. Pour ce TP vous pouvez utiliser le code source des classes PileElem, CellElem et PureListeElem.

TP n°1

Pour les débutants en POO et ceux qui souhaitent se familiariser avec l'environnement BlueJ :

Le sujet est consultable en ligne ici et une version pdf peut être téléchargée ici. Travail à rendre :
  1. comme demandé à la dernière question du sujet, listez l'ensemble des opérations à effectuer pour obtenir le dessin de la maison (en supposant que vous démarrez avec un bureau des objets vide) ;
  2. en vous inspirant de la classe Square qui modélise un carré, écrivez le code source d'une nouvelle classe nommée Rectangle modélisant la forme géométrique rectangle (vous devez rendre le fichier source de cette nouvelle classe).

Pour ceux qui connaissent déjà le langage JAVA :

Reprenez le sujet d'examen utilisé comme évaluation lors de la première séance de TD (utilisez la documentation et le code de l'interface JAVA PureEnsemble) et donnez le code source complet:
Le travail à rendre sera constitué du ou des fichiers sources de la ou des classes implémentées.



Cours MIAS2 année 2004/2005

Partiel de juin 2005

Le sujet est ici et vous trouverez aussi une proposition de correction (fournie à titre indicatif) sous forme de fichiers source JAVA: exercices 1.1 et 1.2 (documentation) et l'exercice 2.1 (documentation).

Devoir

Une version préliminaire du sujet est disponible en ligne et en format pdf pour impression.
Le logiciel servant de base à la réalisation du devoir est ici.

La version définitive devrait être très proche de cette version et sera distribuée (et mise en ligne) dans la semaine de la rentrée.


Cours ILOG1/Licence Info année 2004/2005

Devoir

Le sujet détaillé est disponible en ligne et en format pdf pour impression.

Des informations complémentaire sur les graphes peuvent être trouvées aux adresses suivantes:

Sujets de TP

TP n°5

Enoncé :
Pour ceux qui ont fait la partie "pour les débutants" du TP n°4
Implémentez la classe abstraite ListeAbstraite en respectant son interface. Implémentez ensuite la nouvelle version de la classe ListeTableau héritant de ListeAbstraite. Dans un deuxième temps, implémentez une classe ListeTableauTriee, en utilisant au mieux les classes précédement définies (il n'est pas demandé de définir d'autres classes ou interfaces). Vous implémenterez, de plus, une classe TestListe permettant de tester les principales fonctionnalités de cette nouvelle implémentation de la classe ListeTableau et de la nouvelle classe ListeTableauTriee. Travail à rendre : les fichiers ListeAbstraite.java, ListeTableau.java, ListeTableauTriee.java, TestListe.java.
Pour ceux qui ont fait la partie "pour ceux qui connaissent déjà l'héritage" du TP n°4
On souhaite enrichir la hiérarchie des classes Liste avec des classes représentant des listes d'éléments triés. Pour cela vous devez modifier la hiérarchie de classes existante de la manière suivante:
  1. on modifie l'interface Liste de façon à ce qu'elle définisse les fonctionalités et le contrat communs aux listes "ordinaires" (i.e. dont l'ordre entre les éléments est défini par la manière dont on les y insère) et les listes triées (i.e. dont l'ordre est défini par la méthode compareTo dont doivent être munies ses éléments).
  2. on définie deux nouvelles interfaces ListeOrdreInsertion et ListeTriee héritant toutes les deux de la nouvelle interface Liste.
  3. on aménage ensuite le reste de la hiérarchie afin de pouvoir implémenter les classes ListeTableau et ListeChainee héritant de ListeOrdreInsertion et les classes ListeTableauTriee et ListeChaineeTriee héritant de ListeTriee en partageant au maximum les implémentations de même nature.
Travail à rendre:
  1. le code complet (i.e. y compris commentaires et assertions) des interfaces Liste, ListeOrdreInsertion et ListeTriee.
  2. la hiérachie de toutes les autres classes nécessaires en précisant pour chaque classe: son nom, si elle est ou non abstraite,  quelle est sa super-classe, quelle(s) interface(s) elle implémente, les méthodes qu'elle redéfinie et ses méthodes abstraites s'il s'agit d'une classe abstraite.

TP n°4

Enoncé :
Pour les débutants:
Implémentez les classes ListeTableau et ListeTableauEtendue telles que définies dans le sujet de TD ainsi qu'une classe TestListeTableau permettant de tester les deux classes précédentes. Pour réduire votre travail, vous pourrez utiliser le code de l'interface JAVA Liste.java. Travail à rendre: les fichiers ListeTableau.java, ListeTableauEtendue.java et TestListeTableau.java.
Pour ceux qui connaissent déjà l'héritage
Implémentez la classe abstraite ListeAbstraite en respectant son interface. Définissez ensuite une nouvelle classe ListeChainee héritant de ListeAbstraite et dont l'implémentation sera basée sur l'utilisation de cellules chaînées entre elles (comme pour la classe ListeElem). Pour ce travail, vous serez amenés à implémenter une classe Cell (correspondant à la classe CellElem utilisée pour implémenter ListeElem) et une classe définissant un itérateur adapté à ListeChainee (pour cette dernière classe, vous pourrez vous inspirer de la classe TableauIterator). Vous implémenterez, de plus, une classe TestListe permettant de tester les principales fonctionnalités de la classe ListeChainee. Travail à rendre : les fichiers ListeAbstraite.java, ListeChainee.java, TestListe.java ainsi que la classe implémentant un itérateur pour la classe ListeChainee.

TP n°3

Enoncé :
en ligne et au format pdf et les classes Dessin et Polygone


TP n°2

Enoncé :
au format pdf

TP n°1

Enoncé :
au format pdf
Correction (sans les commentaires, mais avec assertions) pour le type Pile :
classes PurePileElem, PileElem et Elem
Correction (sans les commentaires, mais avec assertions) pour le type Liste :
classes PureListeElem et ListeElem

Evaluation

Le sujet de cette évaluation -- qui était aussi le sujet d'examen de la session de septembre -- est disponible ici:
Le code source complet avec commentaires et assertions est accessible dans ce répertoire et la documentation complète ici. Le code de la classe ListeTableau peut aussi être utilisé comme exemple d'implémentation des méthodes equals, clone, hashCode et toString.


Cours MIAS2 année 2003/2004

Devoir

Le sujet détaillé est disponible en ligne et en format pdf pour impression.

Le travail demandé pour le devoir consiste à implémenter des classes à partir de leur interface. Les interfaces de ces classes sont disponibles en ligne ici et en téléchargement ici sous forme d'un fichier archive (.tgz). Ce travail est à faire individuellement.

Pour vous aider dans votre travail, les éléments suivants sont mis à votre disposition:

TP semaine du 3 mai

Le code source des classes présentées dans le sujet de TD est ici. A utiliser pour vérifier et confirmer les réponses aux exercices et pour construire des tests supplémentaires si vous avez des doutes sur certains points (ce qui ne vous empêche pas, bien sûr, de questionner votre enseignant).

TP semaine du 26 avril

Sujet et correction du partiel du 6 avril

TP semaine du 29 mars


Cours Licence & ILOG année 2003/2004

Examen

Devoir

Le sujet est disponible en ligne et au format pdf (à télécharger). Le code de l'application dessin est disponible ici et sa documentation est ici.


Cours MIAS2 année 2002/2003

Le code source de la classe Livre du TD/TP 1 est ici

La correction du TD 7 (assertions de la classe Joueur) est ici (au format pdf)

La version définitive du sujet du devoir (MIAS2 année 2002-2003) est disponible en ligne ici et ici sous forme de fichier pdf. Le code de l'application à partir de laquelle vous devrez travailler est ici. La documentation des classes de ce logiciel (javadoc avec assertions) est ici.

La sujet et la correction du partiel du 21 mars 2003 (MIAS2) sont disponibles:


Cours Licence & ILOG année 2002/2003

Devoir

Le sujet est disponible en ligne et au format pdf (à télécharger). Le code de l'application tableur est disponible ici.

Correction TP Mediatheque


Exemples de programme JAVA

Une horloge

Ce programme illustre l'utilisation de l'architecture Model View Controller (MVC), sur une petite application

Le fichier archive mvcapp.tgz contient un répertoire mvcapp qui contient deux répertoires:

Pour consulter en ligne la documentation des classes de l'exemple, cliquez ici

Une pile

Ce programme peut être utilisé pour tester la programmation par contrat dans un cas élémentaire

Le fichier archive PileSimple.tgz contient un répertoire PileSimple qui contient lui-même les deux fichiers sources de l'application.

Documentation sur JML

Le site "officiel" (en anglais) de JML: www.jmlspecs.org

Documentation en français sur l'utilisation de JML: format pdf et en ligne