Replying to myself...

Here is example package with tests of behavior I expect:
http://www.mediafire.com/download/bjmt7p20ndcgddf/Something-bliznjan.6.mcz

Only way to aquire it seems to create initialize method in every subclass
class, and write just "super initialize" there, but for about 30 subclasses
(and many more in the future), it does not seem like fine solution.

Jan


Jan Blizničenko wrote
> Thank you both for reply. Unfortunately, it seems I didn't describe my
> goal well.
> 
> I want both (all) classes to have separate variables, not shared among
> subclasses, but still initialized on class side, not instance side. So I
> want those variables to be class-side variables, my problem is with their
> initialization. I have a tree of classes, top class (superclass of the
> rest) should have class-side variable initialized as empty collection, and
> almost all it's subclasses to have, by default, also an empty colletion.
> But there will be few classes in this tree, whose collections should
> contain something.
> 
> So to return to my previous example... I want SomeClass class-side
> variable "SomeCollection" to contain OrderedCollection()... SubClass along
> with many more subclasses to also contain OrderedCollection... but also to
> have a SpecificSubClass, whose class-side variable "SomeCollection" will
> contain OrderedCollection(something, somethingElse...).
> 
> Jan
> Sean P. DeNigris wrote
>> What you created is a class-side instance variable, which is private to
>> just that class. What you want is a class variable, which is shared by
>> all subclasses and instances. You declare it in the class definition with
>> #classVariableNames:. There is a very nice explanation of these basic
>> (but confusing!) concepts in the "Pharo By Example" book.
> 
> Andrei Chis wrote
>> Hi,
>> 
>> SomeClass and SubClass are two different objects.
>> Based on your setup, if you do not call any initialize method, initially
>> calling both  "SomeClass isOk" and  "SubClass isOk" should return nil.
>> 
>> Running "SomeClass initialize" initializes only the SomeClass object. So
>> now "SomeClass isOk"  returns true and "SubClass isOk" returns nil, as
>> its
>> another object that has not been initialized.
>> You get the same behaviour if you first call "SubClass initialize".
>> Now "SomeClass
>> isOk"  returns nil because you did not initialize the SomeClass object,
>> but
>> the SubClass.
>> 
>> Even if you add initialize in the SubClass class and call it first
>> "SomeClass
>> isOk" will still return false.
>> SomeClass and SubClass are just two different objects of types SomeClass
>> class and  SubClass class. It's the same behaviour that you get when you
>> create two instances of these classes. Just because you create an
>> instance
>> of the type SubClass and call super initialize,
>> it doesn't mean that another instance of SomeClass will be initialized.
>> 
>> Hope this makes sense/answers your question.
>> 
>> Cheers,
>> Andrei





--
View this message in context: 
http://forum.world.st/class-initialization-and-class-side-variables-tp4822869p4822902.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.

Reply via email to