“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 273 — #283
i
i
i
i
i
i
i
i
6.2 Les classes comme abstractions complètes
273
valeurs effectives aux paramètres génériques. Cela peut être fait en ce qui concerne
l’héritage avec les classes génériques ou les classes abstraites.
6.2 LES CLASSES COMME ABSTRACTIONS COMPLÈTES
Le cœur du concept d’objet est l’accès contrôlé aux données encapsulées. Le comportement d’un objet est spécifié par une classe. Dans le cas général, une classe est
une définition incrémentale d’une abstraction de données, qui définit l’abstraction
comme une modification d’autres abstractions. Il existe un grand nombre de concepts
pour aider à définir des classes. Nous les classifions en deux groupes, selon qu’ils
permettent la définition complète ou incrémentale d’une abstraction de données :
– Abstraction de données complète. Ce sont tous les concepts qui permettent à
une classe de définir une abstraction de données par elle-même. Il y a deux
sous-groupes :
• Les membres de la classe (voir sections 6.2.3 et 6.2.4), à savoir les méthodes,
attributs et propriétés. Il y a plusieurs manières d’initialiser les attributs, par
objet ou par classe (voir section 6.2.5).
• Les concepts qui exploitent le typage. Dans ce chapitre, nous nous limitons au
typage dynamique. Il y a les messages et les attributs de première classe. Ces
concepts permettent des formes puissantes de polymorphisme qui sont difficiles ou impossibles à faire dans les langages à typage statique. Cette liberté
augmente la responsabilité du programmeur qui doit l’utiliser correctement.
– Abstraction de données incrémentale. Ce sont tous les concepts relatifs à l’héritage : ils définissent comment une classe utilise les autres. Ils sont expliqués
dans la section 6.3.
Pour expliquer les classes, nous commençons par un exemple qui montre comment
définir une classe et un objet. La section 6.2.1 montre en exemple la syntaxe de classe
et ensuite la section 6.2.2 donne sa sémantique rigoureuse par une définition dans le
modèle avec état.
6.2.1 Un exemple
Nous définissons un exemple de classe et nous l’utilisons pour créer un objet. Nous
supposons que notre langage a une abstraction linguistique, class, pour définir les
classes. Nous supposons que les classes sont des valeurs dans le langage. Cela nous
permet d’utiliser une déclaration class comme une instruction ou une expression,
comme une déclaration proc.
La figure 6.1 définit une classe référencée par la variable Counter. Cette classe a
un attribut, val, qui contient la valeur actuelle d’un compteur, et trois méthodes, init,
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
6.2 Les classes comme abstractions complètes
273
valeurs effectives aux paramètres génériques. Cela peut être fait en ce qui concerne
l’héritage avec les classes génériques ou les classes abstraites.
6.2 LES CLASSES COMME ABSTRACTIONS COMPLÈTES
Le cœur du concept d’objet est l’accès contrôlé aux données encapsulées. Le comportement d’un objet est spécifié par une classe. Dans le cas général, une classe est
une définition incrémentale d’une abstraction de données, qui définit l’abstraction
comme une modification d’autres abstractions. Il existe un grand nombre de concepts
pour aider à définir des classes. Nous les classifions en deux groupes, selon qu’ils
permettent la définition complète ou incrémentale d’une abstraction de données :
– Abstraction de données complète. Ce sont tous les concepts qui permettent à
une classe de définir une abstraction de données par elle-même. Il y a deux
sous-groupes :
• Les membres de la classe (voir sections 6.2.3 et 6.2.4), à savoir les méthodes,
attributs et propriétés. Il y a plusieurs manières d’initialiser les attributs, par
objet ou par classe (voir section 6.2.5).
• Les concepts qui exploitent le typage. Dans ce chapitre, nous nous limitons au
typage dynamique. Il y a les messages et les attributs de première classe. Ces
concepts permettent des formes puissantes de polymorphisme qui sont difficiles ou impossibles à faire dans les langages à typage statique. Cette liberté
augmente la responsabilité du programmeur qui doit l’utiliser correctement.
– Abstraction de données incrémentale. Ce sont tous les concepts relatifs à l’héritage : ils définissent comment une classe utilise les autres. Ils sont expliqués
dans la section 6.3.
Pour expliquer les classes, nous commençons par un exemple qui montre comment
définir une classe et un objet. La section 6.2.1 montre en exemple la syntaxe de classe
et ensuite la section 6.2.2 donne sa sémantique rigoureuse par une définition dans le
modèle avec état.
6.2.1 Un exemple
Nous définissons un exemple de classe et nous l’utilisons pour créer un objet. Nous
supposons que notre langage a une abstraction linguistique, class, pour définir les
classes. Nous supposons que les classes sont des valeurs dans le langage. Cela nous
permet d’utiliser une déclaration class comme une instruction ou une expression,
comme une déclaration proc.
La figure 6.1 définit une classe référencée par la variable Counter. Cette classe a
un attribut, val, qui contient la valeur actuelle d’un compteur, et trois méthodes, init,
© Dunod – La photocopie non autorisée est un délit
