Programmation par les Objets en Java (TD7-bis)
Les interfaces Interfaces comme API.
Najib Tounsi
(Lien permanent: http://www.mescours.ma/Java/TD/tdJava7-bis.html
(.pdf))
Soit l'interface:
interface MonApi {
// Interface avec des outils pour
// - imprimer un objet
// - convertir un objet vers format imprimable (cf. toString)
// - comparer deux objets (inférieur, égal, supérieur)
public void print();
// Affiche sur l'unité standard de sortie
public String convTexte();
// Formate un objet vers un texte imprimable
public int compare (object o);
// compare this avec o. retourne -1, 0 ou 1
}
1) Réaliser cette interface avec la classe Article (cf. Cours, reprendre uniquement les champs et les constructeurs.).
Rajouter à cette classe Article les méthodes :
Methode print()
public void print(){
System.out.println(convTexte());
}
Methode convTexte()
public String convTexte() {
String s ="{" + numero + ","
+ designation + ","
+ prixHT + ","
+ qte + "}" ;
return s;
}
Methode compare()
public int compare (Object o){
// on compare les numéros par exemple
Article w = (Article) o; // ! important
if (numero > w.numero)
return 1;
else if (numero < w.numero)
return -1;
else
return 0;
}
Tester la classe, par exemple : Article a = new Article(...);
System.out.println(article.convTexte());))
et aussi la méthode compare() avec des valeurs à vous.
2) Faire de même avec la classe Point (voir TD3) et lui rajouter la programmatio des méthodes selon le même principe.
public void print(){
System.out.printf("(%d, %d)\n",x,y);
}
etc.
NB. Pour un point de coordonnées (1, 2), la méthode convTexte()
donne le format "{x:1, y:2}"
3) Tester ensuite comme suit :
MonAPI point = new Point(1,2);
MonAPI article = new Article (2,"chemise",15.5, 45);
point.print();
article.print();
String s = point.convTexte();
String t = article.convTexte();
...
Commenter.
(Autre aspect du polymorphisme, non lié à l'héritage: deux objets
indépendants (point et article)
déclarés néanmoins de même type
(interface MonAPI ici), à qui on applique donc les
opérations de l'interface
et qui les exécutent chacun à sa façon selon son implémentation.)
4) Tester aussi avec la séquence suivante :
Point point = new Point(1,2);
Article article = new Article (2,"chemise",15.5, 45);
MonAPI [] p = {point, article};
for (int i=0; i<2; i++)
p[i].print();
C'est aussi un intérêt du polymorphisme.
5) Tester ensuite la séquence d'instructions (ne pas imiter !):
MonAPI point = new Point(1,2);
MonAPI article = new Article (2,"chemise",15.5, 45);
point = article; //
point.print(); // print de Article exécutée bien sûr!
Constater la différence entre point.print() de 3).
La chose à noter ici, c'est qu'on a deux objets (point et article) sans aucun lien conceptuel qui sont "interchangeables" ici car de "même type".
6) Exercice : Peut-on écrire point.compare(article);
par exemple? Vérifier la compilation et l'exécution de cette instruction.
Discuter.
... et bravo à vous si vous avez réalisé toute cette série de TD.