next up previous
Next: Méthodes privées Up: Autres constructions Previous: Initialisation

Méthodes abstraites

Grâce au mot-clé virtual, il est possible de déclarer des méthodes de manière abstraite ou virtuelle, c'est-à-dire, sans fournir leur implantation, qu'on pourra donner plus tard dans une sous-classe. La classe qui contient une méthode virtuelle doit être déclarée elle aussi virtuelle, et ne peut être instanciée (aucun objet de cette classe ne peut être crée). Les classes virtuelles sont utiles pour abstraire sous une même classe parente (et donc, sous un même type), plusieurs classes dont l'implantation des méthodes change dans chacune d'entre-elles.

class virtual abstract_point xinit =
 object(self)
  val mutable x = xinit
  method virtual getx : int
  method get_offset = self#getx - xinit
  method virtual move : int -> unit
end;;

class virtual abstract_point :
  int ->
  object
    val mutable x : int
    method get_offset : int
    method virtual getx : int
    method virtual move : int -> unit
  end

# let ap = new abstract_point 2;;
One cannot create instances of the virtual class abstract_point

Dans la classe point on hérite de abstrac_point, et l'on définit enfin le code des deux méthodes abstraites get et move. La nouvelle classe point n'est plus abstraite (si elle n'avait pas défini toutes les méthodes indéfinies dans abstrait_point, le résultaut aurait été une classe point abstraite).

class point xinit =
 object
  inherit abstract_point xinit
  method getx = x
  method move d = x <- x + d
end;;

class point :
  int ->
  object
    val mutable x : int
    method get_offset : int
    method getx : int
    method move : int -> unit
  end

# let p = new point 2;;
val p : point = <obj>
# p#getx;;
- : int = 2
# p#get_offset;;
- : int = 0



Maria-Viginia Aponte
2001-03-28