Next: Définir une classe Up: Classes Previous: Les variables de classe

Nom de classes dans le source

Dans le source le nom des classes peux être utilisé dans deux contextes différents qui reflètent le rôle dual des classes en temps qu'objet et en temps que type de données.

Placé en receveur le nom de classe désigne l'objet classe, utilisation que nous venons de décrire dans les deux exemples précédents. Il est possible d'utiliser le nom de classe pour désigne l'objet class en position de receveur dans un message. Dans les autres contextes il faudras utiliser la méthode class pour obtenir l'identifiant de la classe, ainsi dans le test suivant on cherche à savoir si un objet est une Matrix pour cela on le teste avec la méthode isKindOf: qui prend en paramètre une class, il faut pour cella demander à l'objet class Matrix de nous dévoilé sont identifiant de classe:
if ( [anObject isKindOf:[Matrix class]] )
. . .
Il aurait été illégal d'utiliser simplement Matrix comme argument. Le nom de classe ne peuvent être qu'un receveur.

Le nom de classe peut aussi servir de type, comme dans l'exemple:
Matrix *unObjet;
unObjet = [[Matrix alloc] init];
Ici les deux usages du nom de classe sont utilisés, l'objet unObjet est typé statiquement en tant que Matrix, le compilateur suppose qu'il a la structure d'une matrix et qu'il réagit aux méthodes définies dans la classe Matrix (et sa généalogie). Le typage statique permet au compilateur de faire de meilleur vérifications de type et permet de réaliser certaines optimisations (recherche de la méthode), voir "Options Statiques" pour des détails.

Seules les instances peuvent être typées statiquement, les objet classe sont automatiquement de type Class!



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