Agrego algo mas

http://en.wikipedia.org/wiki/Smalltalk
Variable declarations

The two kinds of variable commonly used in Smalltalk are instance variables
and temporary variables. Other variables and related terminology depend on
the particular implementation. For example,
VisualWorks<http://en.wikipedia.org/wiki/VisualWorks> has
class shared variables and namespace shared variables, while
Squeak<http://en.wikipedia.org/wiki/Squeak> and
many other implementations have class variables, pool variables and global
variables.

Bien, con eso no tiene problemas, pero no da ningun ejemplo de DEFINICION
de class variable (TODO LO QUE ENCONTRE es INICIALIZAR un nombre en
mayusculas dentro de un metodo de clase; una primer duda es: como sabe que
eso es una shared variable? Constrasta con todo lo demas, donde cada
variable se DEFINE de alguna forma antes, no es solo INICIALIZAR). Me gusta
que Visual Works le diga class SHARED variables en vez de class variables,
y que bueno que nombra namespaces (de hecho, gran parte de mi pregunta se
motiva porque implemente algo como namespaces en AjTalk, pero no se si se
choca con lo que describe Valloud en su libre).


Luego:
http://objectmix.com/smalltalk/311676-do-smalltalk-have-shared-variables.html
Re: Do Smalltalk have shared variables...?

It's a VW specific name for what other Smalltalk implementations call
Class Variables. It was changed when we added Namespaces

On Dec 6, 12:06 pm, Sree <[email protected]> wrote:
> Hi all,
> I am a newbie to Smalltalk and i have certain doubts regarding
> the " Shared Variable ". Depending on the dialects do the concept
> change..? In VW there is a tab itself to create Shared Variable. I had
> gone through certain sites and some says yES and some says No. So
> please share your knowledge.
>
> Thanks in Advance.
>
> Regards,
> Sree


Me da cierta esperanza entender eso ;-) De nuevo, alguien menciona
Namespaces

Alguien que inicializa PERO NO DEFINE:
http://smallissimo.blogspot.com.ar/2011/08/lazy-initialization-of-shared-variable.html

Parece como que la clase tiene un "pool dictionary" que no se declara,
implicito, para las shared variables.

Perdon por todo esto, pero es un tema que me interesa



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

> Hola gente!
>
> Gracias Guillermo por los enlaces, muy interesante.
>
> Segun esa nomenclatura "instance Variable" es lo que se define en los
> instanceVariableNames: en general.
> Y lo que es "class instance variable" es lo que se define en los
> classVariableNames: (y esto es lo que me confunde, lo que se llama "class
> instance variable" aparece como classVariableNames:)
>
> Entiendo instanceVariableNames, classVariableNames y toda la estructura
> interna. No diria que una "class instance variable" o lo que define
> classVariableNames: es algo similar a lo estatico en Java o en C++. Y me
> sigue pareciendo que lo que los papers (y Valloud) llama "class variables"
> (insisto, yo lo hubiera llamado shared variabels), tienen una
> implementacion distinta.
>
> PERO, aca viene la duda que persiste, y que en esos papers no esta
> dilucidada, hasta donde vi.
>
> En el
> http://esug.org/data/Articles/Columns/EwingPapers/class_variables.pdf
> pone "How to define Class Instance Variable" y eso lo entiendo desde
> principios de los ochenta.
>
> Pero en el
> http://esug.org/data/Articles/Columns/EwingPapers/cvars&cinst_vars.pdf
>
> Da como ejemplo de "class variable" a ListMenu. PERO NO DICE COMO SE
> DEFINE (no vi en ningun lado un ejemplo que defina una subclase y en el
> classVariableNames: venga ListMenu), simplemente la referencia en el metodo
> de clase y con Mayuscula.
>
> ListInterface class
> initialize
> “Create a menu. Create constants.”
> ListMenu := Menu labels: #(‘add’ ‘remove’)
> menu
> “Return the list menu.”
> ^ListMenu
> ListInterface
> hasMenu
> “Return true if a menu is defined.”
> ^self class menu notNil
> performMenuActivity
> “Perform the mouse-based activity for my view.”
> self hasMenu
> ifTrue: [^self class menu startUp].
>
> Como sabe que ListMenu es una shared variable, en vez de algo que esta en
> Smalltalk???
>
> Valloud habla de Shared Variables, como de algo nuevo (ya en las secciones
> anteriores menciono lo de que las clases tienen "instance variables"
> definidas en la metaclass). Y que se accede NO POR class methods, sino como
> variables compartidas, directamente accesibles desde cualquier lado de la
> jerarquia de ESA CLASE.
>
> Por ejemplo, escribe:
>
> "In addition to instances variables on the instance and class sides of the
> browser, there are hybrid entities calles class variables. Despite the
> slight difference in their names, their scope is quite different: a class
> variable is visible from the class the class that defines it and also from
> all the instances of the class. Moreover, it is also visible by subclasses
> of the class in which it is defined, and by instances of these subclasses
> as well. This means it is a global variable whose scope begins at the class
> that introduces it. In particular, class variables are accessible from
> class instances as well as from emtaclass instances. Clearly, these are not
> our everyday instance variables"
>
> Es decir, no veo que sea las que se definen en classVariableNames:
>
> No veo tampoco que sean las que esten definidas en una metaclase, de
> alguna forma especial. Porque dice que se pueden ver desde las instances,
> la clase original, y las subclases. No vi/no entendi que ninguna forma de
> instanceVariableNames:, o classVariableNames:, aplicadas a la clase o la
> metaclase, o a piruloclase ;-) CONSIGUIERA SEMEJANTE CONDUCTA de
> visibilidad.
>
> Como es?
>
> (si existen como se describe en ese texto, yo las hubiera llamado
> directamente Shared Variables, como creo recordar que estan en el libro
> Smalltalk-80, pero que nunca son usadas o ejemplificadas en ese libro,
> hasta donde recuerdo).
>
> Nos leemos!
>
> Angel "Java" Lopez
> @ajlopez
> gh:ajlopez
>
>
> 2012/12/17 Guillermo Schwarz <[email protected]>
>
>> 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
>
>
>

-- 
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