Précédent Index Suivant

Introduction

Comme son nom le laissait supposé, le langage Objective CAML possède une extension objet. À la différence de la programmation impérative qui est dirigée par les traitements ou de la programmation fonctionnelle qui est dirigée par les calculs, la programmation objet est une programmation dirigée par les données. L'utilisation des objets introduit une nouvelle structuration des programmes en classes, les objets étant des instances de celles-ci. Une classe regroupe des données et des traitements. Ces derniers, appelés méthodes, définissent les comportements de l'objet. Le déclenchement d'un comportement est effectué par une requête sur l'objet appelée un envoi de message. L'objet qui reçoit ce message effectue l'action ou le calcul correspondant à la méthode invoquée dans le message : ce n'est pas une fonction qui est appliqée à des arguments, mais un message (correspondant à un nom de méthode) qui est envoyé à un objet. C'est à l'objet lui-même que revient de déterminer quel est le code effectif à exécuter. Cette liaison retardée entre nom et code permet de faciliter la modifiabilité des comportements; c'est à dire d'accroître la réutilisabilité du code.

La programmation objet permet de spécifier les relations entre classes ainsi que la communication entre objets à travers les paramètres passés aux messages. Elle offre une nouvelle modélisation des applications par les relations d'agrégation et d'héritage entre classes. Une classe qui hérite d'une autre classe possède toutes les définitions de la classe ancêtre, elle peut donc étendre les données et les méthodes, et même redéfinir des comportements hérités. On utilise une notation graphique1 pour représenter les relations entre classes.

L'extension objet d'Objective CAML s'intègre dans le système de type du langage. Une déclaration d'une classe définit un type du nom de la classe. La construction d'une instance de cette classe retourne une valeur du type de la classe. Deux genres de polymorphisme coexistent. Le premier est le polymorphisme paramétrique, déjà rencontré avec les types paramétrés, représenté par les classes paramétrées. Le deuxième, appelé <<polymorphisme d'inclusion>>, utilise la relation de sous-typage entre objets et la liaison retardée. Si la classe sc est sous-type de la classe c, tout objet de sc peut être utilisé à la place d'un objet de c. Il faudra cependant que la coercion entre sous-type et type soit explicite. Le polymorphisme d'inclusion permet de construire des listes hétérogènes où chaque élément est sous-type du type des éléments de la liste. Comme la liaison est retardée, l'envoi du même message à tous les éléments d'une telle liste, peut activer des méthodes différentes, propres aux sous-classes.

Par contre Objective CAML n'intègre pas la notion de surcharge des méthodes qui autorise plusieurs définitions, différant par le nombre et le type de ses paramètres, d'une même méthode. Cette limitation est induite par l'inférence de types qui tomberait sur trop de cas d'ambiguïté et demanderait au programmeur d'avoir à fournir de trop nombreuses informations de type supplémentaires.

Il est à noter qu'Objective CAML est le seul langage muni d'une extension objet avec polymorphisme paramétrique et d'inclusion qui reste complètement typé statiquement avec une inférence de types.


Précédent Index Suivant