La magia del Smalltalk: Capítulo 7 - ¿Quién soy?
Un objeto es idéntico sólo a si mismo.
Todos los entornos/lenguajes de OOP nos permiten diferenciar si un par de variables/referencias apuntan al mismo objeto.
Cualquier persona que programe en algún lenguaje de OOP experimentó con este concepto, sin embargo hay 2 cosas interesantes en cuanto a la identidad en Smalltalk.
La primera es que la identidad, en Smalltalk, es más "perdurable". Los objetos NO mueren entre sesiones asÌ que la identidad se mantiene mientras los objetos vivan, y eso es mucho más tiempo que lo que viven los objetos en lenguajes como C++/Java/etc (ver Capítulo 2).
La otra es que Smalltalk permite violar (con perdón de la palabra) la identidad con el mensaje #become:, veamos lo que dice el comentario del método:
"Swap the object pointers of the receiver and the argument. All variables in the entire system that used to point to the receiver now point to the argument, and vice-versa.
Pues si, lo que leen: La operación #become: intercambia todas las referencias a un objeto por referencias a otro objeto, y viceversa.
Es una operación muy poderosa, y a la vez peligrosa. Si quieren hacer trizas a su Smalltalk prueben algunas de las siguientes sentencias y traten de averiguar que fue lo que pasó:
nil become: 'Un string'. |
Object become: String. |
o mi favorita:
| s1 s2 | s1 := 'Un String'. s2 := 'Un String'. s1 become: 'Otro String'. Transcript show: s1; cr. Transcript show: s2; cr. |
¿Qué raro, no? Bueno, no es tan raro... pero tendrán que esperar hasta otro post para saber porque actúa así.
También tendrán que esperar a otro post para ver ejemplos útiles del uso de #become:.
¡Cuantos misterios! =o)
1 Comentarios:
Hola Diego... te quisiera preguntar si no sabes de algun tutorial en español que sea bien PRACTICO de Smalltalk porque el que he encontrado es muy basico y diria mas bien teorico... o sino sabes de algundo en español dime el que sepas en ingles. Gracias y saludos desde Argentina!
Publicar un comentario
<< Principal