Universit Montpellier II
Programmation par objets en Java (GLIN 505)
2012/2013
TD/TP 4
Polymorphisme param trique (ou g n ricit )
Exercice 1 : classe g n rique (impl mentant une interface g n rique)
Voici une interface d finissant un type abstrait "Pile de <A>" avec les fonctionnalit s
classiques d'une pile :
public interface IPile<A>
{
boolean estVide();
void empile(A a);
A depile(); // retourne l' l ment en sommet de pile et d pile
int nbElements();
A sommet(); // retourne le sommet de pile mais ne le d pile pas
}
1. Ecrivez une classe g n rique CPile qui impl mente l'interface IPile. Vous stockerez les
l ments de la pile dans une liste cha n e (instance de java.util.LinkedList, voir en annexe
quelques m thodes publiques de cette classe).
, Si vous ne connaissez pas encore les interfaces, vous pouvez remplacer cette interface
IPile par une classe abstraite APile dont toutes les m thodes sont publiques et abstraites.
La classe CPile h rite alors de la classe abstraite APile (au lieu d'impl menter l'interface
IPile).
2. Ecrivez un petit programme qui cr e et manipule des piles en instanciant la classe
g n rique de diff rentes fa ons (par exemple pile de String, pile de Integer, &).
Exercice 2 : une autre classe g n rique
La classe suivante Tableau encapsule un tableau d'entiers et comporte deux m thodes
permettant de trier le tableau et d'afficher son contenu. La m thode main de cette classe
fournit un exemple d'utilisation. On voudrait disposer d'une m thode de tri pour n'importe
quel type de tableau. Proposez une solution bas e sur la g n ricit .
public class Tableau
{
private int T [];
public Tableau (int T [])
{this.T = T;} // on fait ici une recopie "superficielle"
Java
TD4
Publicité
page 1/4
public void triBulles ()
{
}
int i = T.length -2;
boolean ech = true;
while (i >=2 && ech)
{
ech = false;
for (int j = 0; j <= i; j ++)
if (T > T )
{
int aux = T ;
T = T ;
T = aux;
ech = true;
}
i--;
}
public void affiche () {
for(int i = 0; i < T.length; i++)
System.out.print(T +" ");
System.out.println();
}
public static void main(String[] args)
{
int T[] = {10,2,6,11, 7, 2, -1, 0, 9};
Tableau obj = new Tableau(T);
obj.trieBulles();
obj.affiche();
}
}
Exercice 3 (extrait examen 2007/2008)
Question 1. On consid re une classe Personne (qui sera d finie plus loin, sa d finition n'a pas
d'importance ici). Soit la classe suivante repr sentant une file dattente de personnes :
public class FileAttente
{
Publicité
protected ArrayList<Personne> contenu;
public FileAttente(){contenu=new ArrayList<Personne>();}
public void entre(Personne p)
{contenu.add(p);}
public Personne sort()
{
Personne p=null;
if (!contenu.isEmpty())
{p=contenu.get(contenu.size()-1);
contenu.remove(contenu.size()-1);}
return p;
}
public boolean estVide(){return contenu.isEmpty();}
public String toString(){return ""+contenu;}
}
Proposez une classe g n rique repr sentant les files dattente contenant des objets de
nimporte quel type (personnes, voitures, etc.).
Java
TD4
page 2/4
Question 2. Nous consid rons pr sent linterface d crivant les objets munis dune priorit .
public interface ElementAvecPriorite
{ int priorite(); }
Ecrivez une classe g n rique repr sentant les files dattente avec priorit contenant des objets
de nimporte quel type condition quils soient munis dune priorit .
Les l ments sortent de la file en favorisant ceux qui ont la plus petite priorit .
Question 3. La classe Personne est d finie de la fa on suivante :
public class Personne
{
private String nom;
private int age;
public Personne(){}
public Personne(String n, int a){nom=n;age=a;}
public String getNom(){return nom;}
public void setNom(String n){nom=n;}
public int getAge(){return age;}
public void setAge(int a){age=a;}
Publicité
public String toString(){return nom+" "+age;}
}
Modifier la classe Personne pour pouvoir stocker des personnes dans une file dattente avec
priorit . Vous pouvez utiliser l ge pour d terminer trois niveaux de priorit (priorit 1 pour
un ge entre 0 et 12, priorit 2 pour un ge de 60 et plus, priorit 3 pour les autres valeurs).
Ne recopiez pas la classe Personne : il vous suffit d'indiquer les modifications apport es.
Question 4. Ecrivez un programme dans lequel on d clare une file dattente (avec priorit )
de personnes et rangez-y quelques personnes.
Exercice 4* : param trage contraint (Des couples de toutes sortes)
Question 1.
D finissez une interface M le et Femelle vides. D finissez des classes d'animaux m les et
femelles impl mentant l'interface appropri e (par exemple, Taureau, Vache, Dauphin,
Dauphine, &). Munissez ces classes d'une m thode toString(), retournant par exemple un
nom correspondant la classe.
D finissez, en d rivant la classe Paire vue en cours, la classe g n rique
CoupleConventionnel qui repr sente les couples constitu s d'un m le et d'une femelle.
Instanciez-la pour cr er des couples d'animaux (taureau et vache, dauphin et dauphine etc&).
Remarquez que l'on peut ainsi cr er des couples d'esp ces diff rentes (par exemple, constitu s
d'un dauphin et d'une vache).
Question 2.
Proposez, en d rivant la classe Paire vue en cours, une classe g n rique CoupleEsp ce pour
repr senter les couples constitu s de deux membres de la m me esp ce, mais pas forc ment
de sexes oppos s. R fl chissez la fa on de repr senter la notion de membre d'une esp ce.
Java
TD4
page 3/4
Instanciez-la. Vous ne devez plus pouvoir cr er des couples constitu s d'animaux d'esp ce
diff rente (un dauphin et une vache).
Question 3. Proposez une classe CoupleFertile pour repr senter les couples constitu s d'un
m le et d'une femelle de la m me esp ce. R fl chissez aux diff rentes solutions
envisageables.
Instanciez la classe CoupleFertile. Vous ne devez plus pouvoir cr er des couples constitu s de
deux m les ou deux femelles, m me s'ils sont de la m me esp ce, ni des couples constitu s
d'animaux d'esp ces diff rentes, m me s'ils sont de sexe diff rent.
Annexe : la classe LinkedList
java.util
Class LinkedList<E>
Publicité
java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
java.util.AbstractSequentialList<E>
java.util.LinkedList<E>
Type Parameters:
E - the type of elements held in this collection
Quelques m thodes publiques :
LinkedList()
Constructs an empty list.
void addFirst(E o)
Inserts the given element at the beginning of this list.
E element()
Retrieves, but does not remove, the head (first element) of this list.
Throws:
NoSuchElementException - if this queue is empty.
E getFirst()
Returns the first element in this list.
Throws:
NoSuchElementException - if this list is empty.
E peek()
Retrieves, but does not remove, the head (first element) of this list.
Returns null if this queue is empty.
E removeFirst()
Removes and returns the first element from this list.
Throws:
NoSuchElementException - if this list is empty.
int size()
Returns the number of elements in this list.
Java
TD4
page 4/4