<br><font size=2 face="sans-serif">Kamil wrote about his impressions and posed some questions.</font>
<br><font size=2 face="sans-serif">Here are remarks to some of his questions:</font>
<br><font size=2 face="Courier New"><br>
</font><font size=2 face="Arial">>>For example, Object understands so many methods that I doubt it still <br>
>>stands for basic building stone.</font>
<br>
<br><font size=2 face="Arial">I agree that the Object protocol became huge over time. Methods like</font>
<br><font size=2 face="Arial">#beep are not really necessary, but they are convenient.</font>
<br>
<br><font size=2 face="Arial">>>Should every object understand how to 'inspect itself'?</font>
<br>
<br><font size=2 face="Arial">Yes, I think it should. Inspection is a general concept and it</font>
<br><font size=2 face="Arial">is very helpful during debugging.</font>
<br>
<br><font size=2 face="Arial">>>In network environment, what is the sense for 'myString' inspect</font>
<br><font size=2 face="Arial">>>on some silent server? </font>
<br>
<br><font size=2 face="Arial">For some classes it may be necessary to redefine #inspect and</font>
<br><font size=2 face="Arial">that is waht you should do when you feel that the general inspection</font>
<br><font size=2 face="Arial">is inappropriate. By the way: Currently, we have seven implementors</font>
<br><font size=2 face="Arial">of inspect. You find them when you select the inspect method</font>
<br><font size=2 face="Arial">of Object and select the menue option "implementors of...".</font>
<br><font size=2 face="Arial">It is instructive to analyse these seven definitions.</font>
<br>
<br><font size=2 face="Arial">>>Also, what is "indexable receiver" mentioned in Object>>at: message?</font>
<br>
<br><font size=2 face="Arial">This is protocol for variable subclasses only. (Examples of variable</font>
<br><font size=2 face="Arial">subclasses are Array and String) #at: (and #at:put:) will</font>
<br><font size=2 face="Arial">raise an error for ordinary classes</font>
<br><font size=2 face="Arial">Example: Color red at: 1</font>
<br><font size=2 face="Arial">raises the error "COlors are not indexable"</font>
<br><font size=2 face="Arial">Variable subclasses are not often used. Look at Array for an</font>
<br><font size=2 face="Arial">example or try to define univariate polynomials.</font>
<br>
<br><font size=2 face="Arial">Of course it is strange that Object has these messages that can</font>
<br><font size=2 face="Arial">be sent to variable subclasses only, but the advantages is, that</font>
<br><font size=2 face="Arial">every ordinary class can be the superclass of a variable class.</font>
<br><font size=2 face="Arial">Had we defined a hierarchy like</font>
<br>
<br><font size=2 face="Arial"> Object</font>
<br><font size=2 face="Arial"> FixedSizeObject</font>
<br><font size=2 face="Arial"> <classes like Color, Boolean, View></font>
<br><font size=2 face="Arial"> VariableSizeObject</font>
<br><font size=2 face="Arial"> <classes like Array, String, Float></font>
<br>
<br><font size=2 face="Arial">we would have a very strict distinction between </font>
<br><font size=2 face="Arial">fixed size objects and variable size objects. We would then</font>
<br><font size=2 face="Arial">have to split the Collection hierarchy into two herarchies.<br>
<br>
>>Or - LargeNegativeInteger is subclass of LargePositiveInteger - well......</font>
<br>
<br><font size=2 face="Arial">Well, here the classes have the responsibility to represent the sign.</font>
<br><font size=2 face="Arial">This is an implementation trick. (By the way: IBM Smalltalk uses a</font>
<br><font size=2 face="Arial">class LargeInteger to represent both positive and negative large</font>
<br><font size=2 face="Arial">integers)<br>
<br>
>>Or - message Date>>printOn:format: - was that school assignment?</font>
<br>
<br><font size=2 face="Arial">Date formats are a point of endless conflicts. For my needs,</font>
<br><font size=2 face="Arial">'Jun 6, 2002' is sufficient, but a lot of persons are quite</font>
<br><font size=2 face="Arial">ideological about the date format. Date>>printOn:format:</font>
<br><font size=2 face="Arial">is an attempt to be helpful. You will find other such attempts</font>
<br><font size=2 face="Arial">elsewhere in the image.<br>
<br>
>>I like the syntax for passing arguments to message but then to have <br>
>>message like #perform:with:with:with:?</font>
<br>
<br><font size=2 face="Arial">The perform is needed to send a message whose name is not</font>
<br><font size=2 face="Arial">written down in the text of your method, but kept in a variable.</font>
<br>
<br><font size=2 face="Arial">This is a key element in callback mechanisms that are used</font>
<br><font size=2 face="Arial">in most windowing systems.</font>
<br>
<br><font size=2 face="Arial">You have for example</font>
<br>
<br><font size=2 face="Arial"> setNameOfCallback: aSymbol</font>
<br><font size=2 face="Arial"> name := aSymbol</font>
<br>
<br><font size=2 face="Arial">and than, in an other method:</font>
<br>
<br><font size=2 face="Arial"> cooperatingPartner perform: name</font>
<br><font size=2 face="Arial"> with: arg1</font>
<br><font size=2 face="Arial"> with: arg2</font>
<br>
<br><font size=2 face="Arial">This works when the symbol is a selector than can be</font>
<br><font size=2 face="Arial">used with two elements, like #acceptText:controller:</font>
<br><font size=2 face="Arial"> </font>
<br><font size=2 face="Arial">The use of variables to keep the method name and the</font>
<br><font size=2 face="Arial">identity of a cooperating object gives the</font>
<br><font size=2 face="Arial">flexibility to configure an instance to the specific needs of that</font>
<br><font size=2 face="Arial">partner. (This statement can be reworded into pattern</font>
<br><font size=2 face="Arial">terminology, but I think that is not really necessary.)</font>
<br>
<br><font size=2 face="Arial">>>Would it be possible to extend language so it could be </font>
<br><font size=2 face="Arial">>>written as something like #perform:*with:?</font>
<br>
<br><font size=2 face="Arial">I failed to fully understand this question.<br>
<br>
>>Maybe I am expecting something else from "the thing" that</font>
<br><font size=2 face="Arial">>is purposed as a toy for education. Maybe I'm balancing</font>
<br><font size=2 face="Arial">>>between chaos and order. Maybe I just don't get the </font>
<br><font size=2 face="Arial">>>rhythm in this music :)</font>
<br>
<br><font size=2 face="Arial">Really difficult to say. I am a bit surprised to see Squeak</font>
<br><font size=2 face="Arial">called a toy for education but I also strongly feel that at</font>
<br><font size=2 face="Arial">this very moment I am not in a position to convince you</font>
<br><font size=2 face="Arial">that Squeak is much more. Finally, Squeak can be used</font>
<br><font size=2 face="Arial">as a toy for education, so you are not completely wrong.<br>
</font>
<br><font size=2 face="Arial">All my interesting porjects are still unfinished, so I have</font>
<br><font size=2 face="Arial">nothing that I could give you. This may change in a few</font>
<br><font size=2 face="Arial">years, but for now I have nothing. (Until tomorrow, I will</font>
<br><font size=2 face="Arial">prepare the polynomials for you)</font>
<br>
<br><font size=2 face="Arial">Greetings<br>
</font>
<br><font size=2 face="Arial">Boris Gärtner</font><font size=2 face="sans-serif"><br>
<br>
msg systems ag<br>
Fraunhoferstraße 9<br>
85737 Ismaning<br>
<br>
Tel.: (+89) 96 101 546<br>
mailto: Boris_Gaertner@msg.de</font>