TP N° 5 : Polymorphisme
Langage JAVA
Exercice 1 :
Ecrire les classes nécessaires au fonctionnement du programme suivant (en ne fournissant que les
méthodes nécessaires à ce fonctionnement). N'oubliez pas de commenter votre code :
public class TestFormes {
public static void main(String[] argv) {
Forme[ ] figures = new Forme[3] ;
figures [ 0 ] = new Carre( 2 ) ; // Création d'un carré de 2 cm de coté
figures [ 1 ] = new Cercle( 3 ) ; // Création d'un cercle de 3 cm de rayon
figures [ 2 ] = new Carre( 5.2 ) ; // Création d'un carré de 5,2 cm de coté
for( int i=0 ; i< figures.length ; i++ )
System.out.println( figures[i] +" : surface = "+ figures[i].getSurface() +"
cm2" ) ;
}
}
Sortie de ce programme :
Carré ( coté 2.0 cm ) : surface = 4.0 cm2
Cercle ( rayon 3.0 cm ) : surface = 28.26 cm2
Carré ( coté 5.2 cm ) : surface = 27,04 cm2
Rappel :
Surface d'un carré = coté*coté
Surface d'un cercle = Pirayonrayon
Exercice 2 :
Ecrire les classes nécessaires au fonctionnement du programme suivant (en ne fournissant que les
méthodes nécessaires à ce fonctionnement). N'oubliez pas de commenter votre code :
public class TestMetiers {
public static void main(String[] argv) {
Personne[ ] personnes = new Personne[3] ;
personnes [ 0 ] = new Menuisier( "Paul" ) ;
personnes [ 1 ] = new Plombier( "Jean" ) ;
personnes [ 2 ] = new Menuisier( "Adrien" ) ;
for( int i=0 ; i< personnes.length ; i++ ) personnes[i].affiche() ;
}
}
Sortie de ce programme :
Je suis Paul le Menuisier
Publicité
Je suis Jean le Plombier
Je suis Adrien le Menuisier
Page 1
M. LACHGAR Med
Correction :
Arborescence du projet :
Exercice 1 :
Solution 1 :
La classe Forme
package ex1;
public class Forme {
protected double surface;
public Forme(double surface) {
this.surface = surface;
}
public double getSurface() {
return surface;
}
}
La classe Carre
package ex1;
public class Carre extends Forme{
private double cote;
public Carre(double cote) {
super(cote * cote);
this.cote = cote;
}
public String toString(){
return "Carré (coté "+this.cote+" cm) ";
}
}
Page 2
M. LACHGAR Med
La classe Cercle
package ex1;
public class Cercle extends Forme{
private double rayon;
Publicité
public Cercle(double rayon) {
super(Math.PI * Math.pow(rayon, 2));
this.rayon = rayon;
}
public String toString(){
return "Cercle (rayon "+this.rayon+" cm) ";
}
}
Solution 2 :
La classe Forme
public abstract class Forme {
public abstract double getSurface();
}
La classe Carre
public class Carre extends Forme{
private double cote;
public Carre(double cote) {
this.cote = cote;
}
public double getSurface() {
return cote * cote;
}
public String toString(){
return "Carre ( coté "+this.cote +" cm ) :";
}
}
La classe Cercle
public class Cercle extends Forme{
private double rayon;
public Cercle(double rayon) {
this.rayon = rayon;
}
public double getSurface() {
return Math.pow(rayon, 2) * Math.PI;
}
public String toString(){
return "Cercle (rayon "+this.rayon +" cm ) :";
Publicité
}
}
Page 3
M. LACHGAR Med
Exercice 2 :
La classe Personne
package ex2;
public abstract class Personne {
protected String nom;
public Personne(String nom) {
this.nom = nom;
}
public abstract void affiche();
}
La classe Menuisier
package ex2;
public class Menuisier extends Personne {
public Menuisier(String nom) {
super(nom);
}
public void affiche() {
System.out.println("Je suis"+this.nom+" le Menuisier");
}
}
La classe Menuisier
package ex2;
public class Plombier extends Personne{
public Plombier(String nom) {
super(nom);
}
public void affiche() {
System.out.println("Je suis"+this.nom+" le Plombier");
}
}
Page 4
M. LACHGAR Med