Introduction
La version originale du TP se trouve sur http://lmi92.cnam.fr/progAvancee/ et contient des instructions pour BlueJ.Pour tester, vous pouvez suivre les instructions de Paris et importer le TP dans BlueJ, ça vous permettra par exemple d'avoir un diagramme de classe.
Cette page contient des instructions pour faire le TP sur Eclipse.
Une copie de l'énoncé original se trouve sur cnam-paris/tp3.html
Chaque question du TP correspond à un package.
Le code source des énoncés est dans le répertoire enonce/
Les tests unitaires donnés dans l'énoncé sont en junit3 et doivent être adaptés pour utiliser junit5.
Dans Eclipse, créez un nouveau projet java "tp3-pile"
Question 1
- Click droit sur le projet / Nouveau / Package ; nommez-le "question1"- Click droit sur le package question1 / Import / File system ; choisissez le répertoire enonce/question1/
(cela implique que vous ayez une version du cours sur votre machine - si vous avez déjà cloné le dépôt, mettez à jour avec
git pull -u
)
L'ennoncé du TP contient une version de la classe
Pile
qui marche avec des int
.
Sans modifier le code, vous pouvez tester l'IHM : click droit sur
IHMPile.java
/ Run as / Java application.
Les boutons ne répondent pas, c'est normal.
Question 1.1
-
Complétez
IHMPile.java
pour faire fonctionner les boutons "Empiler" et "Dépiler". -
L'énoncé fournit une pile qui fonctionne avec des
int
.
ModifiezPile.java
pour que la pile fonctionne avec desObject
, voir l'énoncé de Paris pour vous aider. -
Vérifiez que
IHMPile
fonctionne toujours, et que vous pouvez saisir autre chose que desint
. -
Ecrivez des classes de test pour les classes
Pile
etPolygoneRegulierTest
(en JUnit 5).
Pile
, vous verrez que la méthode toString()
utilise la classe StringBuffer
, pas vue en cours.
On pourrait très bien écrire cette méthode en n'utilisant que
String
.
Pour comprendre la différence, voir par exemple http://www.commentcamarche.net/forum/affich-52738-string-et-string-buffer-en-java
Question 1.2
Pour la suite du TP, suivez l'énoncé de Paris.Question 2
Dans le code fourni, tous les constructeurs ont une signature de type :public Pile(int taille)
; ça fonctionne, mais le nom du paramètre porte à confusion.
Vous pouvez remplacer par
public Pile(int capacite)
.
Créez un nouveau package "question2" en important les fichiers comme à la question1.
Question 2.1
Dans l'ennoncé, le lien "How to avoid traps and correctly override methods from java.lang.Object" est cassé, l'url correcte est https://www.javaworld.com/article/2076332/java-se/how-to-avoid-traps-and-correctly-override-methods-from-java-lang-object.htmlVous n'êtes pas obligés de comprendre tous les détails de l'article pour répondre à la question (utile pour la question 2.5).
Question 2.2
A lire avant : DélégationLes Piles 2 et 3 utilisent une syntaxe qu'on n'a pas encore vu :
private Stack<Object> stk;
En fait, cela veut seulement dire que
stk
est une Stack
qui contient des Object
.
Pour comprendre de quoi il s'agit, lisez le début du cours sur les génériques (lire l'intro et le paragraphe "Generic types").
Dans le constructeur de
Pile2
, pour initialiser stk
, vous aurez besoin de la syntaxe : this.stk = new Stack<Object>();
Pile4
utilise la notion de classe interne, voir le cours sur les types imbriqués.
Dans mon implémentation de
Pile4
, pour que ce soit plus clair j'ai remplacé suivant()
et element()
par getSuivant()
et getElement()
.
Question 2.3
Assez rapide à écrire, carPileTest
est déjà écrite, pour écrire les autres classes de test, il suffit de copier-coller PileTest
et de replacer "Pile" par "Pile2", "Pile3", "Pile4".