Next: Optenir l'adresse d'une méthode Up: Options Statiques Previous: Type des arguments et

Le typage statique avec une classe héritée

Une instance peut être statiquement typé avec sa propre classe ou par une des classes dont elle hérite. Toutes les instances peuvent être typé comme Object. Le compilateur ne fait de vérification de typage que sur le nom de class et fait ces vérifications en fonction de cela. Typer une instance dans une classe héritée peut donc aboutir à des différences entre ce que le compilateur pense sur se qui va arriver à l'exécution et ce qui se passera réelement.

Par exemple, si vous typez statiquement une instance de Matrix en View,

View *maMatrix = [[Matrix alloc] init];

le compilateur va traiter cette instance comme une View. Si vous envoyez à cette Matrix un message spécifique aux Matrix,

id cell = [maMatrix selectedCell];

le compilateur va emettre un message comme quoi cet objet ne peut répondre à ce sélecteur ce qui est faux! Ce qui est vrai c'est que le sélecteur selectedCell est défini dans la classe Matrix mais pas dans la classe View.

Par contre, si vous envoyer un message avec un sélecteur défini dans View il n'y aura pas de message bien que Matrix a sa propre méthode.

[maMatrix display]; et à l'exécution c'est la méthode de Matrix qui seras réalisée.

Similairement, suspposons que notre classe Haut définisse une méthode inquiet qui retourne un float,

- (float)inquiet;

et que la classe Milieu sous classe de Haut redéfinisse la méthode avec un nouveau type de valeur de retour:

- (int) inquiet;

Si une instance est typé statiquement comme instance de la classe Haut, le compilateur va supposer que la méthode inquiet retourne une float, si l'instance est de type Milieu il pensera que inquiet retourne un int. Des erreurs vont évidemment apparaître si une instance de Milieu est typé en Haut. Le compilateur va informer le noyau d'exécution que la valeur retournée est un float, mais à l'exécution se sera un int et une erreur.

Le typage statique peut lever cette contraite sur les méthodes homonymes uniquement si elle sont définie dans des branches diférente de la hiérarchie de classes.

Next: Optenir l'adresse d'une méthode Up: Options Statiques Previous: Type des arguments et

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