Vous êtes sur la page 1sur 4

Prepa A2 Programmation Orientée Objet 2

TD n°4
Polymorphisme, Classe Abstraite, Interface,
Collections

Exercice 1 :
Soit le programme suivant qui calcule la surface d'un terrain composé de 3 rectangles et de 2 cercles.

class Surfaces {
public static void main (String[] args) {
// Construction d'un terrain:
Terrain t = new Terrain(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
t.afficherSurfaceTotale();
}
}
class Terrain {
private Rectangle r1;
private Rectangle r2;
private Rectangle r3;
private Cercle c1;
private Cercle c2;
public Terrain (double l1, double h1, double l2, double h2, double l3,
double h3, double rayon1, double rayon2) {
r1 = new Rectangle(l1, h1);
r2 = new Rectangle(l2, h2);
r3 = new Rectangle(l3, h3);
c1 = new Cercle(rayon1);
c2 = new Cercle(rayon2);
}
public double calculerSurfaceTotale () {
return r1.calculerSurface()+r2.calculerSurface()+r3.calculerSurface()
+c1.calculerSurface() + c2.calculerSurface() ;
}
public void afficherSurfaceTotale () {
double surfaceTotale = calculerSurfaceTotale();
System.out.println("La surface totale est " + surfaceTotale);
}
}
class Rectangle {
private double largeur;
private double hauteur;
public Rectangle (double largeur, double hauteur) {
this.largeur = largeur;
this.hauteur = hauteur;
}
public void setLargeur (double largeur) {this.largeur = largeur; }

Hajer Fradi ISSAT Sousse


Prepa A2 Programmation Orientée Objet 2

public double getLargeur () {return largeur ; }


public void setHauteur (double hauteur) {this.hauteur = hauteur;}
public double getHauteur () {return hauteur;}
public double calculerSurface () {return (largeur * hauteur);}
}
class Cercle {
private double rayon;
public Cercle (double rayon) { this.rayon = rayon;}
public void setRayon (double rayon) { this.rayon = rayon;}
public double getRayon () { return rayon; }
public double calculerSurface () { return (Math.PI * rayon * rayon); }
}

Dans la solution actuelle, un terrain contient trois instances de Rectangle et deux de Cercle, mais il
devrait être capable de contenir n'importe quelle combinaison de formes. Pour ce faire,

1. Créez une super-classe commune pour Cercle et Rectangle appelée Forme. Cette classe devra
déclarer la méthode calculerSurface() comme abstraite afin de forcer les sous-classes à
l’implémenter.
2. Remplacez les variables d'instance r1, r2, r3, c1 et c2 par un tableau de Forme (le constructeur
de la classe Terrain donnera à ce tableau une taille maximale de votre choix). Ajoutez une
nouvelle méthode ajouterForme() à Terrain afin de permettre à l'utilisateur d'étendre son
terrain.
3. N'oubliez pas de modifier la méthode calculerSurfaceTotale().

Le nouveau programme main devrait ressembler à ceci :

public static void main (String[] args) {


Terrain t = new Terrain();
t.ajouterForme(new Rectangle(100, 100));
t.ajouterForme(new Cercle(50));
t.afficherSurfaceTotale();
}
Exercice 2:
Un collectionneur veut gérer la liste des véhicules qu’il possède. Il collectionne différents types de
véhicules : des autos, des motos et des camions. Pour chaque véhicule, il veut conserver sa marque,
son modèle et sa couleur (exemple Renault Clio rouge…). Il désire :
a. afficher la liste des noms des véhicules qu’il possède,
b. afficher tous les véhicules d’une couleur donnée
c. rechercher s’il possède ou non un véhicule d’une certaine marque et d’un certain modèle.
d. vendre un véhicule
1. Proposer une solution orientée objet permettant de représenter tous les véhicules possibles en
utilisant l’héritage.
2. Tester les classes en instanciant différents objets de votre choix pour chacune de celles-ci.

Hajer Fradi ISSAT Sousse


Prepa A2 Programmation Orientée Objet 2

3. Le collectionneur ne connaît pas en avance le nombre de véhicules qu’il va posséder. Dans le


programme principal, utiliser les collections et notamment les ArrayList pour mettre des éléments
(véhicules) dans cette liste et pour l’afficher avec et sans itérateur.
4. Créer une classe qui hérite de ArrayList pour pouvoir efficacement répondre aux questions b, c et
d.

Exercice 3 :

Partie 1 :
Le directeur d'une entreprise souhaite gérer les salaires et les primes de ses employés au
moyen d'un programme Java.
Un employé est caractérisé par son nom, son prénom, son âge et sa date d'entrée en service
dans l'entreprise.
Dans un fichier nommé Salaires.java, définissez une classe Employe dotée des attributs
nécessaires, d'une méthode calculerSalaire (ce calcul dépendra du type de l'employé) et d'une
méthode getNom retournant une chaine de caractère concaténant le mot "L'employé " avec le
prénom et le nom.
Dotez également cette classe d'un constructeur prenant en paramètre l'ensemble des attributs.
Calcul du salaire
Le calcul du salaire mensuel dépend du type de l'employé. On distingue les types suivants :
• Les techniciens: leur salaire vaut le nombre d'unités produites mensuellement
multiplié par 5.
• Les manutentionnaires : leur salaire vaut leur nombre d'heures de travail mensuel
multiplié par 10.
• L’équipe commerciale dont le salaire dépond du chiffre d’affaire qu’ils réalisent.
Précisément :
▪ pour ceux affectés à la vente, leur salaire mensuel est le 10 % du chiffre
d'affaire qu'ils réalisent mensuellement, avec un bonus de 200 euros.
▪ pour ceux affectés à la représentation, leur salaire mensuel est le 20 % du
chiffre d'affaire qu'ils réalisent mensuellement, avec un bonus de 300 euros.

Codez dans le même fichier Salaires.java une hiérarchie de classes pour les employés en
respectant les conditions suivantes :
- La super-classe de la hiérarchie doit être la classe Employe.
- Les nouvelles classes doivent contenir la méthode getNom, en changeant le mot
"L’employé " par le type d’employé correspondant (par exemple "Le vendeur ").
- N'hésitez pas à introduire des classes intermédiaires pour éviter au maximum les
redondances d'attributs et de méthodes dans les sous-classes

Partie 2 :

Hajer Fradi ISSAT Sousse


Prepa A2 Programmation Orientée Objet 2

Certains techniciens et manutentionnaires sont appelés à manipuler des produits dangereux.


Après une négociation syndicale, ces derniers parviennent à obtenir une prime de risque
mensuelle.
Complétez le programme Salaires.java en introduisant deux nouvelles classes d'employés :
les techniciens et les manutentionnaires à risque travaillant avec des produits dangereux.
Ajouter également au programme une interface pour les employés à risque permettant de leur
associer une prime mensuelle fixe de 200 euros.

Partie 3 :
A ce stade, le directeur de l’entreprise souhaite afficher les salaires de tous ses employés ainsi
que le salaire moyen de l’entreprise.
Ajoutez une classe Personnel contenant un ArrayList d'employés en tant qu’une collection
polymorphique d'employés.
Définissez ensuite les méthodes nécessaires de la classe Personnel pour que le programme
main suivant fonctionne correctement :

class Salaires {
public static void main(String[] args) {
Personnel p = new Personnel();
p.ajouterEmploye(new Vendeur("Pierre", "Roques", 45, "1995", 30000));
p.ajouterEmploye(new Representant("Léon", "Bremond", 25, "2001",
20000));
p.ajouterEmploye(new Technicien("Yves", "Melle", 28, "1998", 500));
p.ajouterEmploye(new Manutentionnaire("Jeanne", "Rocher", 32, "1998",
45));
p.ajouterEmploye(new TechnARisque("Jean", "LeStir", 28, "2000",
500));
p.ajouterEmploye(new ManutARisque("Alain", "Gagnon", 30, "2001",
45));
p.afficherSalaires();
System.out.println("Le salaire moyen dans l'entreprise est de "
+ p.salaireMoyen() + " euros.");
}
}

Affichage du programme :
Le vendeur Pierre Roques gagne 3200.0 euros.
Le représentant Léon Bremond gagne 4300.0 euros.
Le technicien Yves Melle gagne 2500.0 euros.
Le manut. Jeanne Rocher gagne 450.0 euros.
Le technicien Jean LeStir gagne 2700.0 euros.
Le manut. Alain Gagnon gagne 650.0 euros.
Le salaire moyen dans l'entreprise est de 2300.0 euros

Hajer Fradi ISSAT Sousse

Vous aimerez peut-être aussi