TP5

JO_NFP121

NFP 121 - TP5

Classes abstraites, interface, héritage




EnoncéEnoncé

Question 1.1


Méthode add(T) :


	public boolean add(T t) {//q1-1
			if(this.table.contains(t)){
				return false;
			} else {
				this.table.add(t);
				return true;
			} 
		}
	

La méthode addAll de la super-classe déclenche l'ajout de tous les éléments de la collection passée en paramètre.



Question 1.2

Méthode add() de test :


/**
     * Tests de la méthode Add dans la classe Ensemble.
     */
    public void testAdd() {//q1-2
        question1.Ensemble<Integer> e1, e2;
        e1 = new question1.Ensemble();
        e2 = new question1.Ensemble();
        assertEquals(true, e1.add(2));
        assertEquals(true, e1.add(3));
        assertEquals(2, e1.size());

        assertEquals(true, e2.add(3));
        assertEquals(true, e2.add(4));
        assertEquals(2, e2.size());

        assertEquals(false, e1.add(2));//déjà ajouter
        assertEquals(2, e1.size());
        
        assertTrue(e1.contains(2));
        assertTrue(e1.contains(3));
        assertTrue(e2.contains(4));
         
        assertEquals(true, e1.add(6));
        assertEquals(3, e1.size());
    }


Question 1.3

Union, intersection, différence, différence symétrique:


/**
     * Union.
     * @param e ensemble
     * @return union des ensembles
     */
    public Ensemble<T> union(Ensemble<? extends T> e) {//q1-3
        Ensemble union = new Ensemble();
        union.addAll(this);
        union.addAll(e);
        return union; 
    }
    /**
     * Intersection.
     * @param e ensemble
     * @return intersection des ensembles
     */
    public Ensemble<T> inter(Ensemble<? extends T> e) {//q1-3
        Ensemble inter = new Ensemble();
        inter.addAll(this);
        inter.retainAll(e);
        return inter;
    }
    /**
     * difference.
     * @param e ensemble
     * @return la difference entre des ensembles
     *         e1 - e2 retourne le reste de e1 
     */
    public Ensemble<T> diff(Ensemble<? extends T> e) {//q1-3
        Ensemble diff = new Ensemble();
        diff.addAll(this);
        diff.removeAll(this.inter(e));
        return diff; 
    }
    /**
     * difference symetrique.
     * @param e ensemble
     * @return difference symetrique entre des ensembles(inverse d'intersection)
     */
    Ensemble<T> diffSym(Ensemble<? extends T> e) {//q1-3
        Ensemble diffSym = new Ensemble();
        diffSym.addAll(this.union(e));
        diffSym.removeAll(this.inter(e));
        return diffSym; 
    }


Question 1.4

Classe ensemble de test :



package question1;
/**
 * Classe de tests sur les ensembles.
 * 
 * @author Oziol Joris
 * @version 07/11/2016
 */
public class EnsembleTest extends junit.framework.TestCase {

	/**
	 * Test Union.
	 */
	public void testUnion() {
		question1.Ensemble<Integer> e1, e2;
		e1 = new question1.Ensemble<Integer>();
		assertEquals(true, e1.add(2));
		assertEquals(true, e1.add(3));

		e2 = new question1.Ensemble<Integer>();
		assertEquals(true, e2.add(3));
		assertEquals(true, e2.add(4));

		question1.Ensemble<Integer> union = e1.union(e2);
		assertEquals(3, union.size());
		assertTrue(union.contains(2));
		assertTrue(union.contains(3));
		assertTrue(union.contains(4));
	}
	
	/**
     * Tests de la méthode Add dans la classe Ensemble.
     */
    public void testAdd() {//q1-2
        question1.Ensemble<Integer> e1, e2;
        e1 = new question1.Ensemble();
        e2 = new question1.Ensemble();
        assertEquals(true, e1.add(2));
        assertEquals(true, e1.add(3));
        assertEquals(2, e1.size());

        assertEquals(true, e2.add(3));
        assertEquals(true, e2.add(4));
        assertEquals(2, e2.size());

        assertEquals(false, e1.add(2));//déjà ajouter
        assertEquals(2, e1.size());
        
        assertTrue(e1.contains(2));
        assertTrue(e1.contains(3));
        assertTrue(e2.contains(4));
         
        assertEquals(true, e1.add(6));
        assertEquals(3, e1.size());
    }
	
    /**
     * Tests de la méthode intersection dans la classe Ensemble. 
     */
    public void testInter() {//q1-4
        question1.Ensemble<Integer> e1, e2;
        e1 = new question1.Ensemble();
        assertEquals(true, e1.add(2));
        assertEquals(true, e1.add(3));

        e2 = new question1.Ensemble();
        assertEquals(true, e2.add(3));
        assertEquals(true, e2.add(4));

        question1.Ensemble<Integer> inter = e1.inter(e2);
        assertEquals(1, inter.size());
        assertFalse(inter.contains(2));
        assertTrue(inter.contains(3));
        assertFalse(inter.contains(4));
    }
    /**
     * Tests de la méthode différence dans la classe Ensemble. 
     */
    public void testDiff() {//q1-4
        question1.Ensemble<Integer> e1, e2;
        e1 = new question1.Ensemble();
        assertEquals(true, e1.add(2));
        assertEquals(true, e1.add(3));
        assertEquals(true, e1.add(5));

        e2 = new question1.Ensemble();
        assertEquals(true, e2.add(3));
        assertEquals(true, e2.add(4));

        question1.Ensemble<Integer> diff = e1.diff(e2);
        assertEquals(2, diff.size());
        assertTrue(diff.contains(2));
        assertFalse(diff.contains(3));
        assertFalse(diff.contains(4));
        assertTrue(diff.contains(5));
    }
    /**
     * test de la méthode différence symétrique dans la classe Ensemble. 
     */
    public void testDiffSym() {//q1-4
        question1.Ensemble<Integer> e1, e2;
        e1 = new question1.Ensemble();
        assertEquals(true, e1.add(2));
        assertEquals(true, e1.add(3));

        e2 = new question1.Ensemble();
        assertEquals(true, e2.add(3));
        assertEquals(true, e2.add(4));

        question1.Ensemble<Integer> diffSym = e1.diffSym(e2);
        assertEquals(2, diffSym.size());
        assertTrue(diffSym.contains(2));
        assertFalse(diffSym.contains(3));
        assertTrue(diffSym.contains(4));
    }
}


Question 1.5

Classe AplletteTestEnsemble :


package question1;

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
/**
 * Applette de test.
 * 
 * @author Oziol Joris
 * @version 07/11/2016
 */
public class AppletteTestEnsemble extends JApplet {

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private JPanel panel1;
    private JLabel label1;
    private JTextField textField1;

    private JPanel panel2;
    private JLabel label2;
    private JTextField textField2;
    private JPanel panel3;

    private JLabel label4;
    private JPanel panel4;
    private JLabel label3;
    private JTextField textField3;

    private JButton button1;
    private JButton button2;
    private JButton button3;
    private JButton button4;
    /**
     * init.
     */
    public void init() {
        JRootPane rootPane = this.getRootPane();
        rootPane.putClientProperty("defeatSystemEventQueueCheck", Boolean.TRUE);

        initComponents();

    }
    /**initComponents.*/
    private void initComponents() {// GEN-BEGIN:initComponents
        setLayout(new GridLayout(4, 1, 2, 2));

        panel1 = new JPanel();
        panel1.setLayout(new java.awt.FlowLayout(0, 5, 5));
        panel1.setBackground(java.awt.Color.lightGray);
        label1 = new JLabel();
        label1.setBackground(java.awt.Color.orange);
        label1.setText("ensemble e1 :");
        panel1.add(label1);
        textField1 = new JTextField();
        textField1.setColumns(52);
        textField1.setName("saisieE1");
        panel1.add(textField1);
        add(panel1);

        panel2 = new JPanel();
        panel2.setLayout(new java.awt.FlowLayout(0, 5, 5));
        panel2.setBackground(java.awt.Color.magenta);
        label2 = new JLabel();
        label2.setText("ensemble e2 :");
        panel2.add(label2);
        textField2 = new JTextField();
        textField2.setColumns(52);
        panel2.add(textField2);
        add(panel2);

        panel3 = new JPanel();
        panel3.setLayout(new java.awt.FlowLayout(0, 5, 5));
        panel3.setBackground(java.awt.Color.green);
        label4 = new JLabel();
        label4.setText("Opérations e1 Op e2  :");
        label4.setName("label4");
        panel3.add(label4);

        button1 = new JButton("union");
        button1.setBackground(java.awt.Color.red);
        button1.setName("union");
        button1.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent ae){
                    AppletteTestEnsemble.this.unionActionPerformed(ae);
                }
            }
        );  
        

        panel3.add(button1);
        button2 = new JButton("intersection");
        button2.setBackground(java.awt.Color.yellow);
        button2.setName("intersection");
        button2.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent ae){
                    AppletteTestEnsemble.this.intersectionActionPerformed(ae);
                }
            }  
        );

        panel3.add(button2);
        button3 = new JButton("difference");
        button3.setBackground(java.awt.Color.pink);
        button3.setActionCommand("difference");
        button3.setName("difference");
        button3.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent ae){
                    AppletteTestEnsemble.this.differenceActionPerformed(ae);
                }
            }  
        );

        panel3.add(button3);
        button4 = new JButton("diffSymetrique");
        button4.setBackground(java.awt.Color.cyan);
        button4.setName("diffSymetrique");
        button4.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent ae){
                    AppletteTestEnsemble.this.diffSymetriqueActionPerformed(ae);
                }
            }  
        );

        panel3.add(button4);
        add(panel3);

        panel4 = new JPanel();
        panel4.setLayout(new java.awt.FlowLayout(0, 5, 5));
        label3 = new JLabel();
        label3.setText("Résultat");
        label3.setName("Résultat");

        panel4.add(label3);

        textField3 = new JTextField();
        textField3.setColumns(60);

        panel4.add(textField3);
        panel4.setBackground(java.awt.Color.orange);

        add(panel4);
    }// GEN-END:initComponents
    /**getSet.
     * @param saisie
     * @return un ensemble
     */
    private Ensemble<String> getSet(JTextField saisie) {
        Ensemble<String> e = new Ensemble<String>();
        java.util.StringTokenizer st = new java.util.StringTokenizer(
                saisie.getText(), " ,.:/-;");
        while (st.hasMoreTokens()) {
            e.add(st.nextToken());
        }
        return e;
    }
    /**
     * Action de difference.
     * @param evt
     */
    // ne pas modifier ces lignes
    private void differenceActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_differenceActionPerformed
        // Add your handling code here:
        Ensemble<String> e1 = getSet(textField1);
        Ensemble<String> e2 = getSet(textField2);
        textField3.setText(e1.diff(e2).toString());
    }// GEN-LAST:event_differenceActionPerformed
    /**Action d'intersection.
       *@param evt
       */
    private void intersectionActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_intersectionActionPerformed
        // Add your handling code here:
        Ensemble<String> e1 = getSet(textField1);
        Ensemble<String> e2 = getSet(textField2);
        textField3.setText((e1.inter(e2)).toString());
    }// GEN-LAST:event_intersectionActionPerformed
    /**Action d'union.
     * @param evt
     */
    private void unionActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_unionActionPerformed
        Ensemble<String> e1 = getSet(textField1);
        Ensemble<String> e2 = getSet(textField2);
        textField3.setText(e1.union(e2).toString());
    }// GEN-LAST:event_unionActionPerformed
    /**Action de difference symétrique.
     * @param evt
     */
    private void diffSymetriqueActionPerformed(java.awt.event.ActionEvent evt) {// GEN-FIRST:event_button4ActionPerformed
        // Add your handling code here:
        Ensemble<String> e1 = getSet(textField1);
        Ensemble<String> e2 = getSet(textField2);
        textField3.setText(e1.diffSym(e2).toString());
    }// GEN-LAST:event_button4ActionPerformed
    
}




Question 2.1

Liste et occurrences des mots : :


/**
     * Obtention d'une liste de mots à  partir de la constante CHAPITRE2.
     * 
     * @return la liste de mots
     **/
    public static List<String> listeDesMots() {
        List<String> liste = new LinkedList<String>(); // q2-1

        StringTokenizer st = new StringTokenizer(Chapitre2CoreJava2.CHAPITRE2,
                "[](){};, :.\n\"");
        while (st.hasMoreTokens()) {
            liste.add(st.nextToken());
        }
        return liste;
    }

    /**
     * Obtention d'une liste de couples <String,Integer>. à chaque mot présent
     * dans la liste, est associé son nombre d'occurrence.
     * 
     * @param liste
     *            la liste des mots
     * @return la table d'occurrence des mots de la liste
     */
    public static Map<String, Integer> occurrencesDesMots(List<String> liste) {
        Map<String, Integer> table = new HashMap<String, Integer>();
        ListIterator<String> it = liste.listIterator();
        while(it.hasNext()){
            String s = it.next();
            int freq = Collections.frequency(liste, s);
            if(!table.containsKey(s)){
                table.put(s, freq);
            }

        }
        return table;
    }


Question 2.2

Classe IHMListe :


package question2;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.LinkedList;
import java.util.Map;
/**
 * Classe IHMListe.
 * 
 * @author Oziol Joris
 * @version 07/11/2016
 */
public class IHMListe extends JPanel implements ActionListener, ItemListener {

    private JPanel cmd = new JPanel();
    private JLabel afficheur = new JLabel();
    private JTextField saisie = new JTextField();

    private JPanel panelBoutons = new JPanel();
    private JButton boutonRechercher = new JButton("rechercher");
    private JButton boutonRetirer = new JButton("retirer");

    private CheckboxGroup mode = new CheckboxGroup();
    private Checkbox ordreCroissant = new Checkbox("croissant", mode, false);
    private Checkbox ordreDecroissant = new Checkbox("décroissant", mode, false);

    private JButton boutonOccurrences = new JButton("occurrence");

    private TextArea texte = new TextArea();

    private List<String> liste;
    private Map<String, Integer> occurrences;

    public IHMListe(List<String> liste, Map<String, Integer> occurrences) {
        this.liste = liste;
        this.occurrences = occurrences;

        cmd.setLayout(new GridLayout(3, 1));

        cmd.add(afficheur);
        cmd.add(saisie);

        panelBoutons.setLayout(new FlowLayout(FlowLayout.LEFT));
        panelBoutons.add(boutonRechercher);
        panelBoutons.add(boutonRetirer);
        panelBoutons.add(new JLabel("tri du texte :"));
        panelBoutons.add(ordreCroissant);
        panelBoutons.add(ordreDecroissant);
        panelBoutons.add(boutonOccurrences);
        cmd.add(panelBoutons);

        afficheur.setText(liste.getClass().getName() + " et "
            + occurrences.getClass().getName());
        texte.setText(liste.toString());

        setLayout(new BorderLayout());

        add(cmd, "North");
        add(texte, "Center");

        boutonRechercher.addActionListener(this);
        boutonRetirer.addActionListener(this);
        boutonOccurrences.addActionListener(this);
        ordreCroissant.addItemListener(this);
        ordreDecroissant.addItemListener(this);
        
        saisie.addActionListener(this);//pour la touche ENTER
    }

    /** ne pas modifier les affichages, les classes de tests en ont besoin ... */
    public void actionPerformed(ActionEvent ae) {
        try {
            boolean res = false;
            if (ae.getSource() == boutonRechercher || ae.getSource() == saisie) {
                res = liste.contains(saisie.getText());
                Integer occur = occurrences.get(saisie.getText());
                afficheur.setText("résultat de la recherche de : "
                    + saisie.getText() + " -->  " + res);
            } else if (ae.getSource() == boutonRetirer) {
                res = retirerDeLaListeTousLesElementsCommencantPar(saisie
                    .getText());
                afficheur
                .setText("résultat du retrait de tous les éléments commençant par -->  "
                    + saisie.getText() + " : " + res);
            } else if (ae.getSource() == boutonOccurrences) {
                Integer occur = occurrences.get(saisie.getText());
                if (occur != null)
                    afficheur.setText(" -->  " + occur + " occurrence(s)");
                else
                    afficheur.setText(" -->  ??? ");
            }
            texte.setText(liste.toString());

        } catch (Exception e) {
            afficheur.setText(e.toString());
        }
    }

    public void itemStateChanged(ItemEvent ie) {
        if (ie.getSource() == ordreCroissant)
            Collections.sort(this.liste);
        else if (ie.getSource() == ordreDecroissant)
            Collections.sort(this.liste, Collections.reverseOrder());

        texte.setText(liste.toString());
    }

    private boolean retirerDeLaListeTousLesElementsCommencantPar(String prefixe) {
        boolean resultat = false;
        Iterator<String> iter = this.liste.iterator();
        while(iter.hasNext()) {
            String s = iter.next();
            if (s.startsWith(prefixe)) {
                iter.remove();
                resultat = true;
                this.occurrences.put(s, 0);
            }
        }

        return resultat;
    }

}


Question 2.3

Classe IHMListe2 (bonus IHMListe3) :



IHMListe2 avec une pile de listes :


package question2;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import java.util.ArrayList;
/**
 * Classe IHMListe2.
 * 
 * @author Oziol Joris
 * @version 07/11/2016
 */
public class IHMListe2 extends JPanel implements ActionListener, ItemListener {

    private JPanel cmd = new JPanel();
    private JLabel afficheur = new JLabel();
    private JTextField saisie = new JTextField();

    private JPanel panelBoutons = new JPanel();
    private JButton boutonRechercher = new JButton("rechercher");
    private JButton boutonRetirer = new JButton("retirer");

    private CheckboxGroup mode = new CheckboxGroup();
    private Checkbox ordreCroissant = new Checkbox("croissant", mode, false);
    private Checkbox ordreDecroissant = new Checkbox("décroissant", mode, false);

    private JButton boutonOccurrences = new JButton("occurrence");

    private JButton boutonAnnuler = new JButton("annuler");

    private TextArea texte = new TextArea();

    private List<String> liste;
    private Map<String, Integer> occurrences;

    //pile de sauvegarde.
    private Stack<List<String>> pileSave;
    
    public IHMListe2(List<String> liste, Map<String, Integer> occurrences) {
        this.liste = liste;
        this.occurrences = occurrences;

        //Nouvelle pile
        pileSave = new Stack();
        
        cmd.setLayout(new GridLayout(3, 1));
        cmd.add(afficheur);
        cmd.add(saisie);

        panelBoutons.setLayout(new FlowLayout(FlowLayout.LEFT));
        panelBoutons.add(boutonRechercher);
        panelBoutons.add(boutonRetirer);
        panelBoutons.add(new JLabel("tri du texte :"));
        panelBoutons.add(ordreCroissant);
        panelBoutons.add(ordreDecroissant);
        panelBoutons.add(boutonOccurrences);
        panelBoutons.add(boutonAnnuler);
        cmd.add(panelBoutons);

        afficheur.setText(liste.getClass().getName() + " et "
            + occurrences.getClass().getName());
        texte.setText(liste.toString());

        setLayout(new BorderLayout());

        add(cmd, "North");
        add(texte, "Center");

        boutonRechercher.addActionListener(this);
        boutonRetirer.addActionListener(this);
        boutonOccurrences.addActionListener(this);
        ordreCroissant.addItemListener(this);
        ordreDecroissant.addItemListener(this);

        saisie.addActionListener(this);//pour la touche ENTER
        boutonAnnuler.addActionListener(this);
    }

    public void actionPerformed(ActionEvent ae) {
        try {

            boolean res = false;
            if (ae.getSource() == boutonRechercher || ae.getSource() == saisie) {

                res = liste.contains(saisie.getText());
                Integer occur = occurrences.get(saisie.getText());
                afficheur.setText("résultat de la recherche de : "
                    + saisie.getText() + " -->  " + res);

            } else if (ae.getSource() == boutonRetirer) {
                List<String> listeBis = new ArrayList<String>(this.liste);
                res = retirerDeLaListeTousLesElementsCommencantPar(saisie.getText());
                if(res) {sauvegarder(listeBis);}
                afficheur.setText("résultat du retrait de tous les éléments commençant par -->  "
                    + saisie.getText() + " : " + res );

            } else if (ae.getSource() == boutonOccurrences) {

                Integer occur = occurrences.get(saisie.getText());
                if (occur != null ){
                    afficheur.setText(" -->  " + occur + " occurrence(s)");
                }else{
                    afficheur.setText(" -->  ??? ");
                }
            }else if(ae.getSource() == boutonAnnuler){//Bouton annuler
                try{
                    if(!pileSave.isEmpty()){
                        this.liste = pileSave.pop();
                        occurrences = Chapitre2CoreJava2.occurrencesDesMots(this.liste); //recalcule des occurrences systématique donc pas besoin de les sauver !!!!!!!

                    }else{
                    }
                } catch (Exception e){}
            }
            texte.setText(liste.toString());

        } catch (Exception e) {
            afficheur.setText(e.toString());
        }
    }

    public void itemStateChanged(ItemEvent ie) {
        List<String> listeBis = new ArrayList<String>(this.liste);
        boolean res = false;
        if (ie.getSource() == ordreCroissant){
            res = true;
            if(res) {sauvegarder(listeBis);}
            Collections.sort(this.liste);
        }else if (ie.getSource() == ordreDecroissant){
            res = true;
            if(res) {sauvegarder(listeBis);}
            Collections.sort(this.liste, Collections.reverseOrder());
        }
        texte.setText(liste.toString());
    }

    private boolean retirerDeLaListeTousLesElementsCommencantPar(String prefixe) {
        boolean resultat = false;
        List<String> temp = this.liste;
        Iterator<String> iter = temp.iterator();
        while(iter.hasNext()) {
            String s = iter.next();

            if (s.startsWith(prefixe)) {
                iter.remove();
                resultat = true;
                this.occurrences.put(s, 0);
            }
        }
        return resultat;
    }

    private void sauvegarder(List<String> listSave){
        pileSave.push(listSave);
        
    }
}  

    


IHMListe3 avec pattern memento :


package question2;
import java.util.List;

class Originator {
    private List<String> state;

    public void set(List<String> state) {

        this.state = state;
    }

    public Memento saveToMemento() {
        System.out.println("Originator: Saving to Memento.");
        return new Memento(this.state);
    }

    public List<String> restoreFromMemento(Memento memento) {
        this.state = memento.getSavedState();
        return state;
    }
}
package question2;
import java.util.List;
class Memento {
    private final List<String> state;

    public Memento(List<String> stateToSave) {
        state = stateToSave;
    }

    public List<String> getSavedState() {
        return state;
    }
}

    
package question2;
import java.util.Stack;
class Caretaker {
    private Stack<Memento> savedStates = new Stack<Memento>();

    public void addMemento(Memento m) {
        savedStates.push(m);
    }

    public Memento getMemento() {
        return savedStates.pop();
    }

    public Memento seeMemento() {
        return savedStates.peek();
    }

    public boolean isEmpty(){
        return savedStates.empty();
    }
}
package question2;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import java.util.ArrayList;
/**
 * Classe IHMListe2.
 * 
 * @author Oziol Joris
 * @version 07/11/2016
 */
public class IHMListe3 extends JPanel implements ActionListener, ItemListener {

    private JPanel cmd = new JPanel();
    private JLabel afficheur = new JLabel();
    private JTextField saisie = new JTextField();

    private JPanel panelBoutons = new JPanel();
    private JButton boutonRechercher = new JButton("rechercher");
    private JButton boutonRetirer = new JButton("retirer");

    private CheckboxGroup mode = new CheckboxGroup();
    private Checkbox ordreCroissant = new Checkbox("croissant", mode, false);
    private Checkbox ordreDecroissant = new Checkbox("décroissant", mode, false);

    private JButton boutonOccurrences = new JButton("occurrence");

    private JButton boutonAnnuler = new JButton("annuler");

    private TextArea texte = new TextArea();

    private List<String> liste;
    private Map<String, Integer> occurrences;

    

    private Originator originator;
    private Caretaker caretaker ;
	
	
    public IHMListe3(List<String> liste, Map<String, Integer> occurrences) {
        this.liste = liste;
        this.occurrences = occurrences;

        //Nouvelle pile
		
        originator = new Originator();
        caretaker = new Caretaker();
		
		
		
        cmd.setLayout(new GridLayout(3, 1));
        cmd.add(afficheur);
        cmd.add(saisie);

        panelBoutons.setLayout(new FlowLayout(FlowLayout.LEFT));
        panelBoutons.add(boutonRechercher);
        panelBoutons.add(boutonRetirer);
        panelBoutons.add(new JLabel("tri du texte :"));
        panelBoutons.add(ordreCroissant);
        panelBoutons.add(ordreDecroissant);
        panelBoutons.add(boutonOccurrences);
        panelBoutons.add(boutonAnnuler);
        cmd.add(panelBoutons);

        afficheur.setText(liste.getClass().getName() + " et "
            + occurrences.getClass().getName());
        texte.setText(liste.toString());

        setLayout(new BorderLayout());

        add(cmd, "North");
        add(texte, "Center");

        boutonRechercher.addActionListener(this);
        boutonRetirer.addActionListener(this);
        boutonOccurrences.addActionListener(this);
        ordreCroissant.addItemListener(this);
        ordreDecroissant.addItemListener(this);

        saisie.addActionListener(this);//pour la touche ENTER
        boutonAnnuler.addActionListener(this);
    }

    public void actionPerformed(ActionEvent ae) {
        try {

            boolean res = false;
            if (ae.getSource() == boutonRechercher || ae.getSource() == saisie) {

                res = liste.contains(saisie.getText());
                Integer occur = occurrences.get(saisie.getText());
                afficheur.setText("résultat de la recherche de : "
                    + saisie.getText() + " -->  " + res);

            } else if (ae.getSource() == boutonRetirer) {
                List<String> listeBis = new ArrayList<String>(this.liste);
                res = retirerDeLaListeTousLesElementsCommencantPar(saisie.getText());
                if(res) {sauvegarder(listeBis);}
                afficheur.setText("résultat du retrait de tous les éléments commençant par -->  "
                    + saisie.getText() + " : " + res );

            } else if (ae.getSource() == boutonOccurrences) {

                Integer occur = occurrences.get(saisie.getText());
                if (occur != null ){
                    afficheur.setText(" -->  " + occur + " occurrence(s)");
                }else{
                    afficheur.setText(" -->  ??? ");
                }
            }else if(ae.getSource() == boutonAnnuler){
                //Bouton annuler
                
                try{
                    if(!caretaker.isEmpty()){
                        liste = originator.restoreFromMemento(caretaker.getMemento());
                        occurrences = Chapitre2CoreJava2.occurrencesDesMots(this.liste); //recalcule des occurrences systématique donc pas besoin de les sauver !!!!!!!

                    } else{
                    }
                } catch (Exception e){}
            }
            texte.setText(liste.toString());

        } catch (Exception e) {
            afficheur.setText(e.toString());
        }
    }

    public void itemStateChanged(ItemEvent ie) {
         List<String> listeBis = new ArrayList<String>(this.liste);
        boolean res = false;
        if (ie.getSource() == ordreCroissant){
            res = true;
            if(res) {sauvegarder( listeBis);}
            Collections.sort(this.liste);
        }else if (ie.getSource() == ordreDecroissant){
            res = true;
            if(res) {sauvegarder( listeBis);}
            Collections.sort(this.liste, Collections.reverseOrder());
        }
        texte.setText(liste.toString());
    }

    private boolean retirerDeLaListeTousLesElementsCommencantPar(String prefixe) {
        boolean resultat = false;
        List<String> temp = this.liste;
        Iterator<String> iter = temp.iterator();
        while(iter.hasNext()) {
            String s = iter.next();

            if (s.startsWith(prefixe)) {
                iter.remove();
                resultat = true;
                this.occurrences.put(s, 0);
            }
        }
        return resultat;
    }

    private void sauvegarder(List<String> listeBis){
         listeBis = new ArrayList<>(this.liste);
        originator.set(listeBis);//memento// 
		caretaker.addMemento(originator.saveToMemento());//memento
    }
}  

    



Question 3.1

Pattern Fabrique :


public class TreeSetFactory<T extends Comparable> implements Factory<Set>{
    public Set create(){
        return new TreeSet<Comparable<T>>();
    }

}
public class HashSetFactory<T> implements Factory<Set>{
    public Set create(){
        return new HashSet();
    }

}


Question 3.2

Tests unitaires :


package question3;

import java.util.Set;

public class Tests extends junit.framework.TestCase {

    public void test1(question3.Factory<Set>  f) throws Exception {
        Set<Integer> set = f.create();
        for (int i = 20; i > 0; i--)
            set.add(i);
    }

    public void test_Creation() {
        try {
            test1(new TreeSetFactory<Integer>());
            test1(new HashSetFactory<Integer>());
        } catch (NoSuchMethodError e) {
            fail("NoSuchMethodError : " + e.getMessage());
        } catch (Exception e) {
            fail(" exception inattendue : " + e.getMessage());
        }
    }

    public void test_compare(){
        question3.Factory<Set> ft1 = new TreeSetFactory<String>();
        question3.Factory<Set> fh2 = new HashSetFactory<String>();
        question3.Factory<Set> fh3 = new HashSetFactory<String>();
        Set<String> set = ft1.create();
        fh2.create();
        fh3.create();
    }

}



Conclusion, biliographie et remarques :

TP très complet et très long avec beaucoup de techniques différentes.

Commentaires

Ajouter un commentaire

 
×