next up previous contents index
suivant: Interfaces monter: Composition, abstraction, extension précédent: Arbres   Table des matières   Index


Abstraction et sous-typage

Les points, les cercles et les rectangles peuvent être translatés, ils ont tous une surface, mais les instructions à exécuter pour les translater ou pour calculer leur surface dépend de la classe de l'objet considéré.

package geometrie;

class TestSurface {
  public static void main(String[] args) {
    Point o1 = new Point(), 
          o2 = new Point(),
          p = new Point(1, 1);
    Cercle c = new Cercle(o1, 2);              
    Rectangle r = new Rectangle(o2, p);       
    double sp = p.surface();
    double sc = c.surface();
    double sr = r.surface();
  }
}

Supposons maintenant que l'on veuille tirer un objet de l'un de ces types au hasard, à pile ou face, puis calculer sa surface. Il semble naturel de former l'expression suivante :

  (Math.random()>0.5 ? c : r).surface();

Cependant l'expression

Math.random()>0.5 ? c : r
n'est pas typée correctement parce que c et r ne sont pas du même type et aucun n'est un sous-type de l'autre. Il en est d'ailleurs de même de l'expression
Math.random()>0.5 ? true : 3
car boolean n'est pas un sous-type de int et vice-versa. La solution est d'introduire un nouveau type, Forme, dont Cercle et Rectangle seront des sous-types, de sorte que Math.random()>0.5 ? c : r soit une expression de type Forme, si l'on déclare c et r de ce type :

    Forme c = new Cercle(o1, 2);              
    Forme r = new Rectangle(o2, p);

Le type Forme n'est pas une classe, mais une « interface » ; il ne définit pas la méthode surface, mais il la déclare, puisque toute forme a une surface, mais que le calcul de la surface ne peut être fait que pour une forme particulière. La méthode surface de l'interface Forme ne peut pas avoir de corps ; on dit que c'est une méthode abstraite et on la déclare en remplaçant le corps par un «;».

interface Forme {
  double surface();
}



Sous-sections
next up previous contents index
suivant: Interfaces monter: Composition, abstraction, extension précédent: Arbres   Table des matières   Index
Rene' LALEMENT 2002-11-07