next up previous
Next: Création d'objets Up: Les objets en Ocaml: Previous: Introduction

Objets et classes

La notion d'objet en programmation est empruntée au monde de la simulation. ``L'approche de programmation orientée objet est basée dans l'analogie entre un programme qui simule un système physique et le système physique lui-même. Par analogie avec les composants du système physique, les composants du programme sont appelés objets1''.

La plupart des langages orientés objets sont basés dans la notion de classe. Une classe est un description ou spécification de tous les objets générés à partir d'elle. Elle regroupe les données des objets futurs (variables d'instance) avec les opérations de traitement de ces données (méthodes).

class one =
 object
    val x = 1
    method two = x+1
 end;;

La classe one contient une variable d'instance x (constante) et une méthode two (constante aussi) qui opère sur cette variable. Lorsqu'une variable est déclaré mutable, il est possible de modifier sa valeur. C'est le cas de la variable x dans la classe cell plus bas. Sans cette déclaration, la valeur d'une variable est celle calculée lors de la création de l'objet et reste constante. La classe cell décrit les données et les opérations pour manipuler des cellules modifiables contenant un entier. La variable modifiable x de type int est initialisée à zéro. Deux méthodes get et set traitent le contenu d'une cellule.

class cell =
 object
     val mutable cont = 0
     method get  = cont
     method set n = cont <- n
 end;;

Une classe a une interface ou type inféré par le compilateur. Il décrit les types des paramètres éventuels de la classe, et des variables et des méthodes qui la composent. L'interface inférée pour cell est:

class cell :
  object 
    val mutable cont : int 
    method get : int 
    method set : int -> unit
end

Une classe peut avoir des paramètres. La classe point prend en argument les coordonnées initiales du point. Les variables d'instance x et y correspondent aux coordonnées du point et sont initialisées aux valeurs des paramètres. Cette classe possède aussi deux methodes d'accèss aux coordonnées, une méthode de déplacement du point et une méthode d'affichage.

class point (xinit, yinit) =
 object
   val mutable x = xinit
   val mutable y = yinit

   method getx = x
   method gety = y
   method moveto (dx, dy) = begin x <- x + dx; y <- y + dy end
   method print () =
     begin
       print_string"( "; 
       print_int x;
       print_string", "; 
       print_int y;
       print_string" )"
     end
  end;;

L'interface inférée pour cette classe est fonctionnelle: elle est paramétrée par un couple d'entiers:

class point :
  int * int ->
  object
    val mutable x : int
    val mutable y : int
    method getx : int
    method gety : int
    method moveto : int * int -> unit
    method print : unit -> unit
  end



 
next up previous
Next: Création d'objets Up: Les objets en Ocaml: Previous: Introduction
Maria-Viginia Aponte
2001-03-28