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