“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 289 — #299
i
i
i
i
i
i
i
i
6.3 Les classes comme abstractions incrémentales
289
Les méthodes protégées (dans le sens de C++)
Par défaut, les méthodes dans le système à objets sont publiques. Avec les noms, nous
pouvons construire le concept de méthode protégée, y compris la version C++ et la
version Java. En C++, une méthode sera protégée si elle est accessible seulement
dans la classe qui la définit et dans les sous-classes (et tous les objets instances de
ces classes). Ce concept de protection est une combinaison du concept de privé dans
Smalltalk avec le concept de privé dans C++/Java : il y a des composantes horizontale
et verticale. Nous montrons comment exprimer le concept de protection de C++. Le
concept de protection en Java est un peu différent ; nous le laissons pour un exercice.
Dans la classe suivante, la méthode A est protégée :
class C
attr pa:A
meth A(X) skip end
meth foo(...) {self A(5)} end
end
Elle est protégée parce que l’attribut pa garde une référence vers A. Maintenant créez
une sous-classe C1 de C. Nous pouvons accéder à la méthode A dans la sous-classe
avec le code suivant :
class C1 from C
meth b(...) A=@pa in {self A(5)} end
end
La méthode b accède à la méthode A en utilisant l’attribut pa, qui existe dans la
sous-classe. L’étiquette A est stockée dans l’attribut pa.
Les portées des attributs
Les attributs sont toujours privés. La seule manière de les rendre publics consiste à
utiliser des méthodes. À cause du typage dynamique, il est possible de définir des
méthodes génériques qui permettent de lire et d’écrire tous les attributs. Les attributs
qui sont des atomes ne sont pas sécurisés parce qu’ils peuvent être devinés. Les
attributs qui sont des noms sont sécurisés.
Les atomes ou les noms comme étiquettes des méthodes ?
Quand faut-il utiliser un atome ou un nom comme étiquette d’une méthode ? Par
défaut, les atomes sont visibles partout dans le programme et les noms ne sont visibles
que dans la portée lexicale de leur création. Il y a donc une règle simple pour les
classes : pour les méthodes internes utilisez des noms et pour les méthodes externes
utilisez des atomes.
© Dunod – La photocopie non autorisée est un délit
Précédent

- 304/370

Suivant