Next: Séparer l'interface de l'implémentation Up: Définir une classe Previous: Importer une interface

Faire référence à d'autres classes

Un fichier d'interface déclare une classe et en important sa super classe contient implicitement la déclarations de toutes les classes de sa généalogie. Si une interface mentionne une classe qui n'est pas dans sa généalogie elle doit alors être déclarée explicitement avec la directive @class:

@class Matrix, List;
Ceci informe le compilateur que Matrix et List sont des noms de classes, sans importer leur déclarations.

Un fichier d'interface mentionne des noms de classes quand il type statiquement les variables d'instance ou les arguments ou les valeurs de retour des méthodes . Par exemple:

- (Matrix *)matrixFromList:(List *)aList;

Comme ces déclarations utilisent simplement le nom des classes comme un type sans dépendre de l'interface de ces classes (méthodes et variables), la directive @class est suffisante. Par contre si la class est effectivement utilisée, (création d'instances, envoi de messages), alors l'interface de la class doit être importé. Typiquement, dans un fichier interface on utilise la directive @class, dans un fichier d'implémentation, on importe l'interface de la classe utilisée (comme en général on va envoyer des messages aux objets et que l'on doit créer ceux-ci¼). La directive @class est le moyen le plus simple pour déclarer l'existence d'une classe sans risquer des problèmes avec l'inclusion de fichiers qui eux même importent d'autres fichiers, en particulier si la classe UneClasse a des variables de classes statiques, et si elle importe l'interface d'une autre classe UneAutreClasse qui elle même importe l'interface de UneClasse aucunes des deux classes ne pourra compiler correctement.



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