“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 276 — #286
i
i
i
i
i
i
i
i
276
6
• La programmation orientée objet
c’est-à-dire un atome ou un nom. Une méthode est une procédure avec deux arguments, le message et l’état de l’objet. Dans chaque méthode, l’affectation à un attribut
(« val:= ») est faite par une affectation de cellule et l’accès à un attribut (« @val »)
est fait par un accès de cellule.
La figure 6.3 définit la fonction New pour créer des objets à partir des classes. Cette
fonction crée l’état S de objet, définit une procédure d’un argument Obj qui sera
l’objet et enfin initialise l’objet avant de le renvoyer. L’état est un enregistrement qui
a un champ pour chaque attribut et le champ contient une cellule. L’état est caché à
l’intérieur de Obj par la portée lexicale.
fun {New Class Init}
Fs={Map Class.attrs fun {$ X} X#{NewCell _} end}
S={List.toRecord state Fs}
proc {Obj M}
{Class.methods.{Label M} M S}
end
in
{Obj Init}
Obj
end
Figure 6.3 La création d’un objet Counter.
6.2.3 La définition des classes et objets
Une classe est une structure de données qui définit l’état interne d’un objet (les
attributs), son comportement (les méthodes), les classes dont il hérite et plusieurs
autres propriétés et opérations que nous verrons plus loin. De façon plus générale, on
peut voir une classe comme une structure de données qui définit une abstraction de
données et qui lui donne son implémentation partielle ou complète. Le tableau 6.1
définit la syntaxe des classes.
Une classe peut donner lieu à un nombre arbitraire d’instances, appelées des objets.
Chaque objet a une identité différente et peut avoir des valeurs différentes pour son
état interne. Sinon, tous les objets de la même classe se comportent selon la définition
de la classe. Un objet est créé avec l’opération New :
MyObj={New MyClass Init}
Cet appel crée un nouvel objet MyObj de la classe MyClass et invoque l’objet
avec le message Init. Ce message est utilisé pour initialiser l’objet. L’objet MyObj
est appelé avec la syntaxe {MyObj M}. Il se comporte comme une procédure à un
argument, où l’argument est le message. Les messages Init et M sont représentés
i
i
i
i
i
i
i
i
276
6
• La programmation orientée objet
c’est-à-dire un atome ou un nom. Une méthode est une procédure avec deux arguments, le message et l’état de l’objet. Dans chaque méthode, l’affectation à un attribut
(« val:= ») est faite par une affectation de cellule et l’accès à un attribut (« @val »)
est fait par un accès de cellule.
La figure 6.3 définit la fonction New pour créer des objets à partir des classes. Cette
fonction crée l’état S de objet, définit une procédure d’un argument Obj qui sera
l’objet et enfin initialise l’objet avant de le renvoyer. L’état est un enregistrement qui
a un champ pour chaque attribut et le champ contient une cellule. L’état est caché à
l’intérieur de Obj par la portée lexicale.
fun {New Class Init}
Fs={Map Class.attrs fun {$ X} X#{NewCell _} end}
S={List.toRecord state Fs}
proc {Obj M}
{Class.methods.{Label M} M S}
end
in
{Obj Init}
Obj
end
Figure 6.3 La création d’un objet Counter.
6.2.3 La définition des classes et objets
Une classe est une structure de données qui définit l’état interne d’un objet (les
attributs), son comportement (les méthodes), les classes dont il hérite et plusieurs
autres propriétés et opérations que nous verrons plus loin. De façon plus générale, on
peut voir une classe comme une structure de données qui définit une abstraction de
données et qui lui donne son implémentation partielle ou complète. Le tableau 6.1
définit la syntaxe des classes.
Une classe peut donner lieu à un nombre arbitraire d’instances, appelées des objets.
Chaque objet a une identité différente et peut avoir des valeurs différentes pour son
état interne. Sinon, tous les objets de la même classe se comportent selon la définition
de la classe. Un objet est créé avec l’opération New :
MyObj={New MyClass Init}
Cet appel crée un nouvel objet MyObj de la classe MyClass et invoque l’objet
avec le message Init. Ce message est utilisé pour initialiser l’objet. L’objet MyObj
est appelé avec la syntaxe {MyObj M}. Il se comporte comme une procédure à un
argument, où l’argument est le message. Les messages Init et M sont représentés
