[SMALLTALK] spécialisation d'une instance d'une classe

spécialisation d'une instance d'une classe [SMALLTALK] - Divers - Programmation

Marsh Posté le 01-12-2005 à 18:16:45    

Je dispose d'un objet 'o := A new' qui évolue dans le système et devient à un moment de sa vie de type B.  
La classe B étant une classe fille de A. J'ai donc trouvé l'astuce suivante : créer une fonction 'asB' dans la classe A.
Mais j'ai le problème suivant, par exemple :
 
o1 := A new.    "o1 est du type A"
o2 := o1.
o1 var: 'val'
Ici 'o1' et 'o2' sont modifié ensemble, c'est ce que je veux.
(c'est à dire que en modifiant 'o1', je modifie également 'o2')
 
Par contre, dès que je spécialise l'un des deux objet, je perd cette propriété.
 
o2 := o1 asB.     "o2 se spécialise et devient du type B"
o1 var: 'autreval'
 
Ici la variable d'instance 'var' de o2 n'est pas mise-à-jour. En fait, 'o1' contient une ancienne version de 'o2'. Je voudrais que toute les références à cet objet se spécialisent ensemble, sans devoir les synchroniser toutes.
 
Le problème doit certainement venir de ma fonction 'asB' qui crée une nouvelle instance de B et copie les variables d'instances communes, puis renvoit cette instance.
 
Comment feriez-vous une fonction 'asB' qui 'fonctionne' ou bien auriez vous une autre façon de procéder ?


Message édité par mexx20 le 01-12-2005 à 18:19:38
Reply

Marsh Posté le 01-12-2005 à 18:16:45   

Reply

Marsh Posté le 02-12-2005 à 14:17:54    

up

Reply

Marsh Posté le 02-12-2005 à 15:38:26    

Bonjour,
Je pense que plutot qu'une methode d'instance il te faudrait une methode de classe. Dans laquelle la classe redefinirait ces instances
De me souvenirs de smalltalk je verais plus ca de cette facon.


Message édité par marsu_381 le 02-12-2005 à 15:39:48
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed