Travaux Pratiques Java

Questions 1, 2, 3, 4, 5  

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