Programmation par les Objets en Java (TD7-bis)
Les interfaces Interfaces comme API.

Najib Tounsi

Interfaces comme API.

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.



That's all folks

... et bravo à vous si vous avez réalisé toute cette série de TD.