next up previous
Next: Re-définition Up: Héritage Previous: Héritage

Héritage simple

La classe compte contient une variable avec le solde d'un compte, et des méthodes pour consulter le solde, pour virer et pour retirer de l'argent.

class compte s_init =
 object
   val mutable solde = s_init
   method depot n = solde <- solde + n
   method retrait n = solde <- solde - n
   method donne_solde = solde
   method affiche_solde = 
       begin print_string"Votre solde est: "; 
             print_int solde; print_newline ()
       end
  end;;
class compte :
  int ->
  object
    val mutable solde : int
    method affiche_solde : unit -> unit
    method depot : int -> unit
    method donne_solde : int
    method retrait : int -> unit
  end

La syntaxe de l'héritage est: inherit $nom_1 \; a_1 \ldots a_n$ [as nom2 ], où nom1 est le nom de la classe dont on veut hériter et $a_1 \ldots a_n$ sont ses arguments d'initialisation. L'annotation optionnelle as nom2 est détaillée dans les parties suivantes. La classe compteremunere est une sous-classe de compte. Elle hérite de tous les attributs de compte, et les étend par la définition de deux nouvelles variables taux et interets, et d'une nouvelle méthode ajoute_interets.

class compteremunere s_init =
  object
    inherit compte s_init
    val taux = 5   (* Donne en % *)
    val mutable interets = 0
    method ajout_interets = 
       begin interets <- (solde*taux)/100;
             solde <- solde + interets
       end
  end;;

compteremunere possède toutes les variables et méthodes de sa classe parente. Ceci se reflète dans l'interface inférée par le typeur:

class compteremunere :
  int ->
  object
    val mutable interets : int
    val mutable solde : int
    val taux : int
    method affiche_solde : unit
    method ajout_interets : unit
    method depot : int -> unit
    method donne_solde : int
    method retrait : int -> unit
  end

On peut utiliser toutes les méthodes, qu'elles soient nouvelles ou héritées:

# let dupont = new compteremunere 200;;
val dupont : compteremunere = <obj>

# dupont#depot(1000);;
- : unit = ()

# dupont#ajout_interets;;
- : unit = ()

# dupont#affiche_solde;;
Votre solde est: 1260
- : unit = ()



Maria-Viginia Aponte
2001-03-28