Travaux Pratiques Java
1) Développer la traditionnelle structure de données Pile (premier entré, dernier sorti), les éléments sont de type int et la classe Pile doit respecter les signatures des méthodes ci-dessous. Une seconde classe TestPile est également demandée, celle-ci a pour objectif de tester toutes les méthodes de la classe Pile.
La documentation des classes Pile et
TestPile générée par "javadoc" doit être
fournie.
(DOS> javadoc -d docs -author -version -private
Pile.java TestPile.java)
public class Pile{ // fichier Pile.java private ....// Une première implémentation utilise : // - un tableau d'entiers (int), : le contenu de la pile // - un indice sur ce tableau : le pointeur de pile // comme données d'instances de la classe Pile public Pile(int taille){// à compléter} public void empiler(int i){...} public int depiler(){...} public boolean estVide(){...} public boolean estPleine(){...} } public class TestPile{ // fichier TestPile.java public static void main(String[] args){ Pile p1 = new Pile(5); Pile p2 = new Pile(10); // à compléter par vos tests, (bien choisis et probants !!) } }
2) Ajouter à la classe Pile la méthode
public String toString(); Cette méthode retourne le
contenu de la pile sous cette forme "[ i1, i2, i3, i4 ]" où
i1 est l'entier au sommet de la pile. Modifier la documentation en
conséquence. En exemple la pile résultante des actions
p1.empiler(2) suivi de p1.empiler(5) est en "String" la valeur
[5,2]
public class TestPile{ // fichier TestPile.java public static void main(String[] args){ Pile p1 = new Pile(5); Pile p2 = new Pile(10); // déjà complété par vos tests... System.out.println(" la pile p1 : " + p1.toString()); // ou bien System.out.println(" la pile p1 : " + p1); Object o = new Object(); o = p1; System.out.println(" o = " + o); // Quel est l'affichage résultant ? } }
3) Copier le source de cette "Applette" dans votre répertoire dans le fichier "ApplettePile.java", ce répertoire contient votre implémentation de la classe Pile, proposer le fichier ApplettePile.html qui lu par votre navigateur devrait avoir ce comportement
ApplettePile en action !
import java.applet.*; import java.awt.*; import java.awt.event.*; public class ApplettePile extends Applet implements ActionListener{ private TextField donnee = new TextField(6); private TextField sommet = new TextField(6); private Label contenu = new Label("[]"); private Pile p = new Pile(5); public void init(){ Button boutonEmpiler = new Button("empiler"); Button boutonDepiler = new Button("depiler"); Panel enHaut = new Panel(); enHaut.add(donnee); enHaut.add(boutonEmpiler); enHaut.add(boutonDepiler); enHaut.add(sommet); setLayout(new BorderLayout(5,5)); add("North",enHaut); add("Center",contenu); enHaut.setBackground(Color.green); boutonEmpiler.addActionListener(this); boutonDepiler.addActionListener(this); } public void actionPerformed(ActionEvent ae){ if(ae.getActionCommand().equals("empiler")){ p.empiler(Integer.parseInt(donnee.getText())); }else{ sommet.setText(Integer.toString(p.depiler())); } contenu.setText(p.toString()); } }
4) Ajouter à la classe Pile la gestion des exceptions : "PileVide" lorsque l'on tente de "dépiler" une pile qui est vide et "PilePleine" lorsque l'on tente d'"empiler" sur une pile déjà pleine, ces 2 exceptions sont implantées par ces 2 classes Java :
public class PileVideException extends Exception{} // fichier PileVideException.java public class PilePleineException extends Exception{}// fichier PilePleineException.java
Modifier en conséquence votre classe de Test : TestPile.java, produire une nouvelle documentation.
5) Modifier la classe ApplettePile.java afin de prendre en compte les exceptions susceptibles d'être levées, vous devriez obtenir une applette avec ce comportement, cette IHM reste perfectible, une extension simple serait d'invalider le bouton "empiler" lorsque la pile est pleine (appel de boutonEmpiler.setEnabled(false); ) et de même avec le bouton "depiler".
ApplettePile avec la prise en compte des exceptions