Tancrède Fourmaintraux a écrit:
Les classes de MyClockMorph et MyMorph ne redefinissent pas la methode new . Donc je devrais obtenir le meme comportement. Non?
Mais LineMorph (qui est superclasse de MyMorph) redéfini une méthode de classe new et c'est celle-ci qui est utilisée quand tu envoies le message new à MyMorph. Ta trace ci-dessous le montre bien.
Si je decompose la recherche de la methode lors du code suivant : MyMorph new class 1 -> recherche de la methode dans la classe MyMorph 2 -> recherche de la methode dans la classe LineMorph 3 -> execution de new dans la classe LineMorph 4 -> retour de PolygonMorph vertices:color:borderWidth:borderColor 5 -> j'obtiens une instance de PolygonMorph. OK
Si je decompose la meme recherche dans MyClockMorph 1 -> recherche de la methode dans la classe MyClockMorph 2 -> recherche de la methode dans la classe ClockMorph 3 -> recherche de la methode dans la classe StringMorph 4 -> recherche de la methode dans la classe Morph 5 -> execution de ^ super new initialize 6 -> j'obtiens une instance de quoi? Object ou Morph? Pas MyClockMorph?
super référence l'objet courant (comme self) qui est donc MyClockMorph mais la recherche commence au niveau de la superclasse de la classe courante. La classe courante étant 'Morph class' la recherche se poursuit dans sa superclasse qui est 'Object class'... Au final, c'est la méthode new 'de base' qui est exécutée...
Au fait dans la methode new de classe LineMorph Pourquoi executer ^PolygonMorph vertices:color:borderWidth:borderColor et non pas ^super vertices:color:borderWidth:borderColor puisque LineMorph est enfant de PolygonMorph
C'est effectivement bizarre... En regardant la classe LineMorph on voit qu'elle n'introduit ni variable d'instance ni méthodes d'instances... Elle est là juste comme "interface" de création... Cela ne m'a pas l'air terrible en terme de conception...
Noury
Tancrède
----- Original Message ----- From: "Noury Bouraqadi" bouraqadi@ensm-douai.fr To: squeak-fr@lists.squeakfoundation.org Sent: Thursday, January 16, 2003 2:47 PM Subject: Re: [Squeak-fr] Classe d'une instance
Normal, la classe LineMorph redéfini le new pour créer une instance de PolygoneMorph...
Noury
Tancrède Fourmaintraux a écrit:
Bonjour,
Ceci est mon premier post sur cette liste, j'ai decouvert squeak il y qqs semaines.
Mon problème est le suivant : Je crée la classe MyClockMorph : ClockMorph subclass: #MyClockMorph J'execute le code suivant dans le workspace : Transcript show: MyClockMorph new class et j'obtiens : MyClockMorph OK je comprends.
Je refaire ce test avec la classe MyMorph : LineMorph subclass: #MyMorph et le code Transcript show: MyMorph new class donne PolygonMorph Probleme : pourquoi j'obtiens la classe parent parent de MyMorph? (Je n'ai pas surcharge la methode de classe new) Pourquoi j'ai un comportement different dans les deux cas?
Je viens du monde java et j'ai l'habitude de travailler avec des objets typés.
Merci de votre aide.
Tancrède
--
Noury Bouraqadi - Enseignant/Chercheur Ecole des Mines de Douai - Dept. G.I.P http://csl.ensm-douai.fr/noury
Squeak-fr mailing list Squeak-fr@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/squeak-fr
Squeak-fr mailing list Squeak-fr@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/squeak-fr