Qué enredo.

- Eso estaba desde Smalltalk-80? Estaba explicado en el libro "clasico" de
Smalltalk-80, The language? O solo nombrado?

Sí. Existe desde 1980.

- Como se declara que Beta es una class or shared variable? Por lo que
entendi, simplemente se le asigna un valor en un metodo de una clase. Es
asi?

Cuando se declara una clase se pone la lista de instaceVariables y de
classVariables.

http://stephane.ducasse.free.fr/FreeBooks/ByExample/31%20-%20Chapter%2029%20-%20Meta-Programm.pdf

- Necesita estar en primera letra mayuscula? Me imagino:
-- Si, el compilador de metodos asi determina que es Shared
-- No, el compilador de metodos determina que es Shared si no es Instance,
Local, Argument, etc....

En Smalltalk 80 el lugar para definir las instaceVariables no es el mismo
que para definir las classVariables:

http://esug.org/data/Articles/Columns/EwingPapers/class_variables.pdf
http://esug.org/data/Articles/Columns/EwingPapers/cvars&cinst_vars.pdf

Smalltalk es una instancia de SystemDictionary y es donde están definidas
las constantes de la aplicación, en particular las clases están definidas
en Smalltalk como "nombre" -> la clase propiamente tal, con la salvedad de
que en el lenguaje Smalltalk no hay diferencia entre tiempo de edición,
compilación y ejecución, y por lo tanto tan constantes no son, o si
quieres, son constantes hasta que las cambias y por lo tanto son variables
globales (podrías guardarlo en cualquier otro dictionary, pero el
compilador de Smalltalk tiene la tendencia a usar Smalltalk como su
dictionary).

La única diferencia entre instanceVariables y classVariables es que unas
están asociadas a las intancias (son un dictionary que están asociado a
cada instancia), mientras que classVariables están asociadas a la clase
propiamente tal y como tal, todas las instancias pueden acceder a ellas (si
utilizan un classMethod en vez de un instanceMethod para acceder a ellas).
Para invocar un class method debes hacer self class <<métdodo>>. ¿Se
entiende?

De todas maneras es una trivialidad porque las clases son objetos. En
particular son instancias de la clase "class", de modo que self class class
debiera ser siempre Class (o MetaClass dependiendo de la variante de
Smalltalk que uses), pero no es así exactamente. Porque las
instanceVariables de Class son las classVariables de la clase en cuestión
(entonces todas las clases tendrían las mismas classVariables) y por eso
Smalltalk crea una metaclase heredada de Class o MetaClass para cada clase
que se crea, y esa clase si no me equivoco no está en Smalltalk (el
SystemDictionary) ya que de todas maneras está en MetaClass subclasses y en
cada self class class.

Si conoces C++ o Java, el instanceVariable y el classVariable es lo mismo
que la diferencia entre atributo normal y atributo estático, uno es propio
de la instancia y el otro es propio de la clase y por eso se considera
"compartido" (shared). Bueno y si no los conoces, es cosa de ver la
implementación que tiene SystemDictionary y Compiler si al fin y al cabo en
Smalltalk se puede ver todo el código.

"Alpha dosomething..." => Integer doesNotUnderstand: #doSomething

El compilador busca Alpha en Smalltalk y lo reemplaza por 1 (un Integer),
luego le envía el mensaje dosomething y si no lo entiende... no sé cómo ser
más claro...

Juanita Ewing dice que existen 3 casos:

1. instance variables.
2. Class variables.
3. Class instance variables.

La diferencia entre 2 y 3 es que en el caso 2, se comparten con las
subclases y en el caso 3 no, por lo tanto argumenta Juanita que es mejor 3.

Saludos,
Guillermo.


2012/12/17 Angel Java Lopez <[email protected]>

> Hola gente!
>
> No recuerdo si ya lo pregunte en la lista... bueno, encuentro en el libro
> Fundamentals of Smalltalk Programming Technique (que adquiri en Smalltalks
> 2010), del bueno de Andres Valloud, la seccion 4.2.6, el titulo
>
> Class (or shared) variables
>
> con la aclaracion al pie, de Note that in some Smalltalks (e.g:
> VisualWorks) class variables are referred to as shared variables instead.
>
> Preguntas:
>
> - Eso estaba desde Smalltalk-80? Estaba explicado en el libro "clasico" de
> Smalltalk-80, The language? O solo nombrado?
> - Como se declara que Beta es una class or shared variable? Por lo que
> entendi, simplemente se le asigna un valor en un metodo de una clase. Es
> asi?
> - Necesita estar en primera letra mayuscula? Me imagino:
> -- Si, el compilador de metodos asi determina que es Shared
> -- No, el compilador de metodos determina que es Shared si no es Instance,
> Local, Argument, etc....
> - Por lo que vi, no puedo hacer en el workspace
>
> Alpha := 1
>
> pero puedo hacer
>
> Smalltalk at: #Alpha put: 1
>
> y de ahi en mas referenciar a Alpha
>
> Como se llama a Alpha? Una global variable?
>
> - Como sabe el compilador de metodos, que si encuentra algo como
>
> Alpha dosomething...
>
> se refiere a una global variable definida en Smalltalk, vs. una Shared
> variable de la clase actual donde va el metodo que se va a compilar?
>
>
> Nos leemos!
>
> Angel "Java" Lopez
> @ajlopez
> gh:ajlopez
>
>  --
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
>
> http://www.clubSmalltalk.org




-- 
Saludos cordiales,

Guillermo Schwarz
Sun Certified Enterprise Architect

-- 
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]

http://www.clubSmalltalk.org

Responder a