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.