Académique Documents
Professionnel Documents
Culture Documents
: 2019/2020/Session d’Automne
Filière : LST Génie Logiciel, S5
Module : I511
Professeur : M.OUALLA
1/6
AU. : 2019/2020/Session d’Automne
Filière : LST Génie Logiciel, S5
Module : I511
Professeur : M.OUALLA
Exercice 2:
package exrecice2;
class Personne{
protected String nom;
2/6
AU. : 2019/2020/Session d’Automne
Filière : LST Génie Logiciel, S5
Module : I511
Professeur : M.OUALLA
Exercice 3:
Modification la classe de test de l’exercice 7 (TPN°4), en ajoutant une variable de type liste
(ArrayList) permettant de regrouper les différents objets Forme crées.
La classe modifiée :
package exrecice3;
import java.util.ArrayList;
import java.util.Arrays;
ArrayList<Forme> formes =
new ArrayList<>(Arrays.asList(r,c,el,cr));
for(Forme f : formes) {
System.out.println(f);
f.deplacerForme(1, 2);
System.out.println("Déplacement par (1,2) de " + f);
Exercice 4:
3/6
AU. : 2019/2020/Session d’Automne
Filière : LST Génie Logiciel, S5
Module : I511
Professeur : M.OUALLA
Que se passe-t-il si les deux interfaces I1 et I2 déclarent une même méthode f()? Une
même constante x ?
Solution :
Considérons le programme suivant :
interface I1{
public void f();
final int x =10;
}
interface I2{
public void f();
final int x =100;
}
class C implements I1,I2{
public void f() {
System.out.println(x);
}
}
La classe C implémente les deux interfaces I1 et I2, donc elle doit définir toutes les
méthodes fournies par ces deux interfaces, ce qui est le cas pour la méthode f(). Même si
les deux interfaces déclarent une même méthode, la classe C va la redéfinir et chaque
objet de cette classe utilisera donc une seule copie de cette méthode qui est celle définie
dans cette classe. En effet, il n’y aura pas d’ambiguïté.
En revanche, la définition d’une même constante par deux interfaces provoquera une
ambiguïté d’utilisation dans une classe qui implémente ces deux interfaces. Dans
l’instruction System.out.println(x), on ne pourra pas savoir quel x on va utiliser, est ce que
c’est celui de I1 ou bien celui de I2. Cette situation provoque une ambiguïté.
Exercice 5:
L’interface IOperation :
package exrecice5;
public interface IOperation {
public Object plus(Object o);
public Object moins(Object o);
}
4/6
AU. : 2019/2020/Session d’Automne
Filière : LST Génie Logiciel, S5
Module : I511
Professeur : M.OUALLA
La classe Nombre :
package exrecice5;
La classe Reel :
package exrecice5;
}
public Object moins(Object r) {
return new Reel("", this.x - ((Reel)r).x);
}
La classe Complexe :
package exrecice5;
5/6
AU. : 2019/2020/Session d’Automne
Filière : LST Génie Logiciel, S5
Module : I511
Professeur : M.OUALLA
}
public Object moins(Object c) {
return new Complexe("", this.im - ((Complexe)c).im ,
this.re - ((Complexe)c).re);
}
La classe Test :
package exrecice5;
for(Nombre a : nombres) {
a.afficheAvecNom();
}*/
for(IOperation a : nombres) {
((Nombre)a).afficheAvecNom();
}
System.out.println("===================");
Reel r = (Reel)(r1.plus(r2));
System.out.print("r1 + r2 = ");
r.afficheSansNom();
Complexe c = (Complexe)(c1.plus(c2));
System.out.print("c1 + c2 = ");
c.afficheSansNom();
}
}
6/6