Cette page est maintenue par : Marc Champesme
Dernière mise à jour le : Mardi 17 janvier 2006
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)
.
FigureAbstraite
fournissant une implémentation basique de l'interface Figure
, puis adaptez les classes Dessin
, Polygone
et Rectangle
de la manière suivante:Dessin
possède en attribut une liste de Figure
et sa méthode paint()
se contente uniquement d'afficher les figures contenues dans cette liste. Toute référence explicite aux classes Point
, Rectangle
ou Polygone
doit donc disparaitre de cette classe (exceptée dans la méthode main(…)
).Polygone
est une sous-classe de FigureAbstraite
Rectangle
est une sous-classe de Polygone
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.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.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
. 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
. Dessin
et Polygone
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).PureEnsemble
) et donnez le code source complet:TabPureEnsemble
, possédant toutes les méthodes figurant dans l'interface PureEnsemble
et utilisant un tableau pour mémoriser les élements de l'ensemble ;ArrayList
(classe de la librairie standard JAVA, présente dans le package java.util
) au lieu d'un tableau.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
.
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: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).ListeOrdreInsertion
et ListeTriee
héritant toutes les deux de la nouvelle interface Liste
.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.Liste, ListeOrdreInsertion
et ListeTriee
.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
. 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.
Dessin
et Polygone
PurePileElem
,
PileElem
et Elem
PureListeElem
et ListeElem
ListeTableau
peut aussi être
utilisé comme exemple d'implémentation des
méthodes equals
, clone
, hashCode
et toString
.GMath.java
qui contient l'implémentation de la classe GMath
.
Aucun travail ne vous est demandé sur cette classe, elle est
à reprendre telle que.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).
Polygone
,
Point
et Rectangle
(versions sans héritage) comme point de départ.
Dessin
en l'adaptant et en implémentant une méthode
d'entête public void paint(Graphics g)
pour les
figures géométriques en profitant de l'héritage.Annuaire
et Personne
Annuaire
Scene
et des classes Polygone
et Point
Scene
,
Polygone
et Point
CpteBancaireReleve
qu'il s'agissait d'implémenter en respectant le contratCpteBancaireReleve.java
pour simplifier l'implémentation et la classe TestCpteBancaire
pour tester votre implémentationLe 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.
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:
Le sujet est disponible en ligne et au format pdf (à télécharger). Le code de l'application tableur est disponible ici.
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:
mvc
pour les classes abstraites du modèleclock
pour l'application exemplePour consulter en ligne la documentation des classes de l'exemple, cliquez ici
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.
Le site "officiel" (en anglais) de JML: www.jmlspecs.org
Documentation en français sur l'utilisation de JML: format pdf et en ligne