AU.
: 2020/2021/Session d’Automne
Filière : LST Génie Logiciel, S5
Module : I511
Professeur : M.OUALLA
TP N°4 : Héritage
Exercice 1:
Pour la classe A définie comme suit :
public class A {int x ;}
Lequel des programmes suivants est faux ?
1) A a = new A() ; String s = a.toString() ;
2) A a = new A() ; boolean b = a.equals("bonjour") ;
3) A a = new A(3) ;
4) A a1 = new A() ; A a2 = new A() ; boolean b = a1.equals(a2) ;
Exercice 2:
Qu’affichera le code suivant ?
Exercice 3:
Etant donnée que la classe Triangle étend la classe Figure, trouvez une ligne correcte parmi
les suivantes :
1) Figure f1 =new Figure(); Triangle tr= (Triangle)f1; Figure f2=(Figure)tr;
2) Triangle tr1= new Triangle(); Figure f = tr1; Triangle tr2=(Triangle)f;
3) Triangle tr1= new Triangle(); Object o = (Object)tr1; Triangle tr2=o ;
4) Figure f1 =new Figure(); Triangle tr= (Triangle)f1; Figure f2=tr ;
Exercice 4:
Quelles sont les erreurs commises dans ce programme ?
public class A {
public static void g (int n) {…}
public void f (float x) {…}
public void f (int n) {…}
}
class B extends A {
private static double g () {return 0.0;}
private void f (float x) {…}
public float f (int n) {return 0.0f;}
}
1/3
AU. : 2020/2021/Session d’Automne
Filière : LST Génie Logiciel, S5
Module : I511
Professeur : M.OUALLA
Exercice 5:
Soit le programme suivant :
1. Déterminer les méthodes redéfinies et celles rechargées.
2. Pour chaque appel de méthode dans main(), déterminer la méthode qui sera appelée (si
c’est possible). Justifier votre réponse.
Exercice 6:
Donner le résultat du code suivant :
Exercice 7:
L’objectif de cet exercice est de créer une application Java permettant de gérer les formes
géométriques: (Rectangle, Carré, Ellipse et Cercle).
1. Chaque forme est définie par sa position dans le plan, cette position est un point
défini par son abscisse (x) et son ordonnée (y).
2. Chaque forme peut être déplacée (modification de sa position), peut calculer son
périmètre et sa surface.
3. Chaque forme peut afficher son type (getTypeForme()).
2/3
AU. : 2020/2021/Session d’Automne
Filière : LST Génie Logiciel, S5
Module : I511
Professeur : M.OUALLA
Le diagramme de classe de cette application est le suivant :
Point Forme
- abscisse : double # p : Point
- ordonnee : double
+ <<Forme>>(Point p)
+ <<Point>>() + deplacer(double dx, double dy): void
+ <<Point>>( double abscisse, double 1 n + surface() : double
ordonnee) + perimetre() : double
+ deplacerXY(double dx, double dy): void + getTypeForme(): String
+ distance(Point p) : double
Rectangle Ellipse
- longueur : double - grandRayon : double
- largeur : double - petitRayon : double
+ <<Rectangle>>(Point p, double + <<Ellipse>>(Point p, double
longueur, double largeur) grandRayon, double petitRayon)
+ surface(): double + surface(): double
+ perimetre(): double + perimetre(): double
+ getTypeForme(): String + perimetre(String): double
+ getTypeForme(): String
Cercle
Carre - rayon : double
- cote : double + <<Cercle>>(Point p, double rayon)
+ <<Carre>>(Point p, double cote) + getDiametre() : int
+ getTypeForme(): String + getTypeForme(): String
1. Ecrire le code de chaque classe.
NB. 1) Le périmètre d’une ellipse peut se calculer de deux façons :
double perimetre() : permet de calculer ce périmètre par la formule
𝒂𝟐+𝒃𝟐
suivante : 𝒑 = 𝟐𝝅√ .
𝟐
double perimetre(String methode) : cette méthode le calcule par la formule
n°1 de Ramanujan : 𝒑 = 𝝅 (𝟑(𝒂 + 𝒃) − √(𝟑𝒂 + 𝒃)(𝒂 + 𝟑𝒃)).
L’argument de cette méthode est la chaine : "Ramanujan" ou bien
n’importe quelle autre.
Tel que a est le grand rayon et b le petit rayon.
2) La surface d’une ellipse est : 𝑠 = 𝜋 × 𝑎 × 𝑏
2. Ecrire une classe qui permet de tester les classes décrites ci-dessus.
3/3