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
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
Les classes de MyClockMorph et MyMorph ne redefinissent pas la methode new . Donc je devrais obtenir le meme comportement. Non?
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?
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
Je ne vois pas quelle est mon erreur.
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
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
On Thursday, January 16, 2003, at 03:19 PM, Tancrède Fourmaintraux wrote:
Les classes de MyClockMorph et MyMorph ne redefinissent pas la methode new . Donc je devrais obtenir le meme comportement. Non?
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?
Non de MyClockMorph si tu as fait MyClockMorph new pourquoi cela serait-il autrement.
tu dois continuer super new remonte plus haut disons jusqu'a behavior, new rend une instance de la class MyClockMorph.
Rappelle toi, le lookup cherche une methodes ***ET*** lie le self et super de cette methode au receiver de la methode recherchee.
qd on envoie aMyClockMorph printString, prinString est trouvee sur Object le self et super dans printString et alors lie a aMyClockMorph. (en fait super modifie juste le lookup des methodes pour demarrer un etage plus haut par rapport ou elles sont definies)
self represente *******TOUJOURS********* le receveur du message meme dans une methode trouvee 10 km plus haut. TOUJOURS TOUJOURS c'est ca le late-binding.
Je te conseille de lire mon cours sur OOP a http://scgwiki.iam.unibe.ch:8080/StephaneDucasseWiki
j'ai des tonnes de dessins qui explique ca. Je ne sais plus dans quel fichier.
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
Ca je crois que tu as raison, je n'ai pas le temps de regarder dans le code maintenant mais coder en dur un nom de class est toujours suspicieux.
Je ne vois pas quelle est mon erreur.
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
Dr. Stéphane DUCASSE (ducasse@iam.unibe.ch) http://www.iam.unibe.ch/~ducasse/ "if you knew today was your last day on earth, what would you do different? ... especially if, by doing something different, today might not be your last day on earth" Calvin&Hobbes
squeak-fr@lists.squeakfoundation.org