<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">&gt;&gt;For example, Object understands so many methods that I doubt it still <br>
&gt;&gt;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">&gt;&gt;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">&gt;&gt;In network environment, what is the sense for 'myString' inspect</font>
<br><font size=2 face="Arial">&gt;&gt;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 &quot;implementors of...&quot;.</font>
<br><font size=2 face="Arial">It is instructive to analyse these seven definitions.</font>
<br>
<br><font size=2 face="Arial">&gt;&gt;Also, what is &quot;indexable receiver&quot; mentioned in Object&gt;&gt;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) &nbsp;#at: &nbsp;(and &nbsp;#at:put:) &nbsp;will</font>
<br><font size=2 face="Arial">raise an error for ordinary classes</font>
<br><font size=2 face="Arial">Example: &nbsp; Color red at: 1</font>
<br><font size=2 face="Arial">raises the error &nbsp;&quot;COlors are not indexable&quot;</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">&nbsp;Object</font>
<br><font size=2 face="Arial">&nbsp; &nbsp;FixedSizeObject</font>
<br><font size=2 face="Arial">&nbsp; &nbsp; &nbsp;&lt;classes like Color, Boolean, View&gt;</font>
<br><font size=2 face="Arial">&nbsp; &nbsp;VariableSizeObject</font>
<br><font size=2 face="Arial">&nbsp; &nbsp; &nbsp;&lt;classes like Array, String, Float&gt;</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>
&gt;&gt;Or - LargeNegativeInteger is subclass of &nbsp;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>
&gt;&gt;Or - message Date&gt;&gt;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. &nbsp;Date&gt;&gt;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>
&gt;&gt;I like the syntax for passing arguments to message but then to have <br>
&gt;&gt;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">&nbsp; setNameOfCallback: aSymbol</font>
<br><font size=2 face="Arial">&nbsp; &nbsp; name := aSymbol</font>
<br>
<br><font size=2 face="Arial">and than, in an other method:</font>
<br>
<br><font size=2 face="Arial">&nbsp; cooperatingPartner perform: name</font>
<br><font size=2 face="Arial">&nbsp; &nbsp; &nbsp; &nbsp;with: arg1</font>
<br><font size=2 face="Arial">&nbsp; &nbsp; &nbsp; &nbsp;with: arg2</font>
<br>
<br><font size=2 face="Arial">This works when &nbsp;the symbol is a selector than can be</font>
<br><font size=2 face="Arial">used with two elements, like &nbsp;#acceptText:controller:</font>
<br><font size=2 face="Arial">&nbsp;</font>
<br><font size=2 face="Arial">The use of &nbsp;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">&gt;&gt;Would it be possible to extend language so it could be </font>
<br><font size=2 face="Arial">&gt;&gt;written as something like #perform:*with:?</font>
<br>
<br><font size=2 face="Arial">I failed to fully understand this question.<br>
<br>
&gt;&gt;Maybe I am expecting something else from &quot;the thing&quot; that</font>
<br><font size=2 face="Arial">&gt;is purposed as a toy for education. Maybe I'm balancing</font>
<br><font size=2 face="Arial">&gt;&gt;between chaos and order. Maybe I just don't get the </font>
<br><font size=2 face="Arial">&gt;&gt;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 &nbsp;systems ag<br>
Fraunhoferstraße 9<br>
85737 Ismaning<br>
<br>
Tel.: (+89) 96 101 546<br>
mailto: Boris_Gaertner@msg.de</font>