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.javapour faire fonctionner les boutons "Empiler" et "Dépiler". -
L'énoncé fournit une pile qui fonctionne avec des
int.
ModifiezPile.javapour que la pile fonctionne avec desObject, voir l'énoncé de Paris pour vous aider. -
Vérifiez que
IHMPilefonctionne toujours, et que vous pouvez saisir autre chose que desint. -
Ecrivez des classes de test pour les classes
PileetPolygoneRegulierTest(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".