Programmation par objets en Java (GLIN 505)

Programming, Java, Generics, Data Structures · course

Voir tous les documents en programmation

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