TP5
NFP 121 - TP5
Classes abstraites, interface, héritage
Question 1.1
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
/** * 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
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
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
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
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
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
-
- 1. fwsa Le 25/02/2021
-
- 2. fwqsa Le 29/01/2021
-
- 3. fwsa Le 22/12/2020
Ajouter un commentaire