• [^] # Re: ObjectiveC

    Posté par . En réponse à la dépêche Le language de programmation ooc sorti en version 0.2. Évalué à 2.

    Je ne sais pas comment est implémenté le passage de messages en Objective-C, mais je sais que certains langages ont un algorithme de recherche de la méthode a appeler (en fonction des arguments et du type). En ce qui concerne ooc, l'appel d'une fonction membre implique seulement deux déréférencements de pointeurs, donc c'est relativement peu coûteux.

    Je dois manquer quelque chose. Dans l'exemple suivant:


    class Wheel {

    func roll {printf("Quelque-chose ne tourne pas rond.\n");}

    }

    class BetterWheel from Wheel {
    override roll {printf("Pierre qui roule n'amasse pas mousse\n");}
    }

    func main {

    BetterWheel bw = new;

    Wheel w2 = (Wheel) bw; // cast as in C/Java
    w2.roll; // prints "Pierre qui roule", etc.

    }


    Lors de la compilation de w2.roll, tu associes l'appel à roll à la méthode roll de Wheel (le type statique de w2). Lors de l'exécution, il te faut exécuter la méthode roll de BetterWheel et pas celle de Wheel.

    Le principe de base étant de partir de la classe dynamique de l'objet pour remonter la chaîne d'héritage jusqu'à tomber sur une implémentation de la méthode appelée.

    C'est pas ça que tu fais ?