Devoir n°1 de i-Java: Listes

 

Sujet du devoir

Introduction

Exercice 1

Exercice 2

Exercice 3

Exercice 4

Documentation

 

rendu par:

mail to:Antoine Jeangeot

mail to:Eric Vogt

mail to:Alexandre Séviran

 

Retour à l'index

 

Devoir de mai ...

Devoir à rendre sous la même forme que cet énoncé : c'est-à-dire une page html avec vos noms et prénoms, les liens sur les sources demandés à chaque question, avec les applettes en ligne, et le lien sur la documentation générée par javadoc.
Le chemin exact de cette page située dans votre répertoire de développement de ce devoir sur votre compte PC doit être envoyée par mail à Denis Bureau avant le mardi 30 mai 2000.
Bon courage.

Questions 1, 2, 3, 4

Pour toutes ces questions la documentation générée par l'utilitaire javadoc peut être obtenue en utilisant cette commande :
DOS>javadoc -d docs -version -author -private ListeSpec.java ElementIntrouvableException.java Liste.java ListeBis.java TestListe.java IHMTPListe.java AppletteTPListe.java

1) Les classes de gestion d'une liste d'"Object" respectent cette interface :  

/** ...*/
public interface ListeSpec{
  /** à documenter */
  public void ajouterElement(Object o);
  public void retirerElement(Object o) throws ElementIntrouvableException;
  public boolean estVide();
  public String toString();
}

Avec la classe ElementIntrouvableException suivante :

public class ElementIntrouvableException extends Exception{
  private Object o;
  public ElementIntrouvableException(Object o){this.o=o;}
  public String toString(){ return o.toString();}
}

  Proposer une première implémentation de cette interface en utilisant la classe java.util.Vector. Cette classe appelée "Liste" est composée d'une instance de la classe Vector soit l'extrait à compléter ci-dessous :

public class Liste implements ListeSpec{
  private java.util.Vector table = new java.util.Vector();
  ...
}

2) Proposer une deuxième implémentation en utilisant cette fois la classe java.util.Hashtable, soit l'extrait à compléter ci-dessous :

public class ListeBis implements ListeSpec{
  private java.util.Hashtable table = new java.util.Hashtable();
  ...
}

3) Compléter cette classe de test TestListe.java afin de "valider" vos deux implémentations d'une liste, vous pouvez ajouter à cette classe la méthode "main" et exécuter cette application ou bien créer une nouvelle classe en engendrant des instances de cette classe.

public class TestListe{
  private ListeSpec liste;
  public TestListe(ListeSpec liste){this.liste = liste;}
  public void executerUnTest(){
    java.util.Random rand = new java.util.Random();
    System.out.println(" test de " + liste.getClass());
    for ( int i = 0; i< 10 ; i++){
      liste.ajouterElement(new Integer(rand.nextInt() % 5));
    }
    System.out.println("liste apres ajout : " + liste);
    
    for ( int i = 0; i< 10 ; i++){
      try{
	liste.retirerElement(new Integer(rand.nextInt() % 5));
      }catch(ElementIntrouvableException e){
	System.out.println("ElementIntrouvable : " + e);
      }
    }
    System.out.println("liste apres retrait : " + liste);
  }
}

4) Compléter la classe IHMTPListe ci-dessous par la prise en compte de toutes les exceptions susceptibles d'être levées et proposer la classe AppletteTPListe qui utilise cette IHM (perfectible!). Votre classe doit tester les deux implémentations de l'interface ListeSpec (les classes Liste et ListeBis) comme le suggère cette Applette.

Une IHM de test des 2 listes

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class IHMTPListe extends Panel implements ActionListener{

  private Label          afficheur = new Label();
  private TextField      saisie = new TextField();
  private Panel          panelBoutons = new Panel();
  private Button         boutonAjouter = new Button("ajouter");
  private Button         boutonRetirer = new Button("retirer");
  
  private ListeSpec liste;
  private String    nomDeLaClasse;

  public IHMTPListe(ListeSpec liste){
    this.liste = liste;
    
    add(afficheur);add(saisie);
    
    panelBoutons.setLayout(new FlowLayout(FlowLayout.LEFT));
    panelBoutons.add(boutonAjouter);panelBoutons.add(boutonRetirer);
    add(panelBoutons);
    
    boutonAjouter.addActionListener(this);
    boutonRetirer.addActionListener(this);
    saisie.addActionListener(this);

    nomDeLaClasse = liste.getClass().getName();
    afficheur.setText(nomDeLaClasse);
  }
  
  
  public void actionPerformed(ActionEvent ae){
    try{
      if (ae.getSource() == boutonAjouter || ae.getSource() == saisie)
	liste.ajouterElement(new Integer(Integer.parseInt(saisie.getText())));
      else if (ae.getSource() == boutonRetirer)
	liste.retirerElement(new Integer(Integer.parseInt(saisie.getText())));
      
      afficheur.setText(nomDeLaClasse + ":" + liste.toString());
      
     }catch(ElementIntrouvableException e){
	afficheur.setText("ElementIntrouvable : " + e);
      }

  }
  
}