Thanks again for the answers. The only thing i am a bit bothered about
is the following paragraph i am reading.

"Instance variables can be accessed by name in any of the instance methods
of the class that defines them, and also in the methods defined in its
subclasses.
This means that Smalltalk instance variables are similar to protected variables
in C++ and Java. However, we prefer to say that they are private, because
it is considered bad style in Smalltalk to access an instance variable directly
from a subclass."

So this paragraph states that accessing ivars from a subclass is bad style. So
the previous code example on page 32 are bad style ;).

Regards,



On Wed, Oct 21, 2009 at 10:01 PM,  <[email protected]> wrote:
> There are two subjects here. Let me start with Oscar's query first.
>
> Since protocols in  Smalltalk are a suggestion but not enforceable, I
> tend  to avoid (ii) as much  as possible and  use  instance  variable
> methods with  lazy initialization as  much as  possible to have short
> initialize methods.
>
> Pertaining to Gerben's question, I think an authoritative answer will
> be still needing:
>
> Looking at the class hierarchy  from SimpleButtonMorph up, you'll see
> that  bounds ivar is  defined in Morph  class  and indeed  there is a
> method Morph>>bounds:, but it is in geometry protocol (meaning is not
> in accessing protocol).  Notice that  Morph>>bounds:  does not update
> bounds ivar directly, but rather indirectly via Morph>>extent:!
>
> So in  this particular case  using the accessor method would not work
> the same way as the code in the book (caveat emptor, I did not test
> this assertion!)
>
> Em 21/10/2009 10:12, Oscar Nierstrasz < [email protected] > escreveu:
>
>>
>>  Hi Gerben,
>>  It is  really a question of  style. Some people promote  the use of
>> accessors aggressively  for all  instance variable access.  The down
>> sides are  (i) proliferation of accessor methods,  and (ii) exposure
>> of  private  state  to  other  objects.  If you  do  decide  to  use
>> accessors,  you should  be sure  to put  them in  a  protocol called
>> "private" to make  clear that they are only intended  for use by the
>> object itself.
>>  I am curious  what other people tend to do --  do you use accessors
>> for inherited ivars, or access them directly?
>>  - on
>>
>>
>>  On 21 Oct 2009, at 11:45, Gerben van de Wiel wrote:
>>
>> > Hi,
>> > I  am very new  to Pharo  and Smalltalk  in general.  When reading
>> > through the excellent PBE book  i was wondering about something on
>> > page 32.   In that piece  of code the  LOCell class is  using some
>> > instance variables from it's super classes, and i was wondering if
>> > it isn't best practice to  use message to self using the accessing
>> > methods so instead of.
>> > bounds  := 0...@0  corner: �...@16. using  self  bounds: (0...@0  corner:
>> > 1...@16).
>> > or is good  to use both or is there something  i don't know (maybe
>> > it is faster  to use instance vars then sending  a new message and
>> > traverse the inheritance tree).
>> > regards,
>> > Gerben van de Wiel
>
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to