Next: Redéfinir self Up: La gestion des messages Previous: Un exemple

Utilisation de super

Les messages à super permettent aux implémentations de méthodes d'être distribuées sur plusieurs classes. Vous pouvez aussi cours circuiter une méthode existante, la modifier, ou y ajouter des fonctionalités tout en gardant la méthode originale :

- négocier . . . return [super négocier];

Pour certaines taches, chaque classe dans la hiérarchie implémente une méthode qui fait une partie du travail et passe le message à sa super classe grâce à super pour que la méthode de la super classe réalise le reste. La méthode init, qui initialise les nouveaux objets d'une classe et la méthode write: qui permet de préparer les objets pour archivage sur un canal de sortie (stream), sont construits pour fonctionner de cette façon. Toutes les méthodes write: ont pour tache de réaliser l'écriture des variables d'instance définies dans la classe. Avant de réaliser cette écriture elle envoie à sa super classe un message write: pour que celle-ci archive ces variables d'instance et ainsi de suite jusqu'a la classe racine (Object). Comme chaque version de write est écriture de la même façons les variables d'instance sont écrites sur le canal de sortie dans l'ordre d'héritage: - write:(type_stream *)stream [super write:stream]; . . . return self;

Il est aussi possible de concentrer l'algorithmique d'une méthode dans une superclasse et que les autres classes incorpore la méthode à travers des appels à super. Par exemple, toutes les méthodes de classe qui créé de nouvelles instances doivent allouer de la place pour le nouvel Objet et initialiser sont pointeurs isa (qui type l'objet) vers la classe de l'objet (structure de classe contenant la classe de l'objet). Ceci est typiquement laissé à la méthode alloc définie sur la classe Object. Si par un hasard (rare) vous voulez modifier cette méthode il est encore possible de conserver la fonctionnalité de base en réalisant un message à super.

Next: Redéfinir self Up: La gestion des messages Previous: Un exemple

Dominique REVUZ
Vendredi 21 février 1997 17:27:12
Une Bug Un mail Merci