Evilness object oriented approach in Morph

Andreas Raab andreas.raab at gmx.de
Tue Jan 24 09:18:55 UTC 2006


Michael Rueger wrote:
> Hilaire Fernandes wrote:
>>> I hear this argument over and over again, but I tend to disagree about
>>> its "evilness". After all, OO is all about *encapsulation* therefore you
>>> shouldn't really care about whether a class accesses its *own* iVars via
>>> messages or directly. It is only when subclassing comes into play that
>>> this causes problems, and perhaps, just perhaps, subclassing is at the
>>> root of that evilness? After all it's the subclasses that try to
>>> "extend" (some might say "violate") the well-defined behavior of its
>>> superclass.
>>
>> Yes, you are right this cause trouble only when I need to extend some of
>> the behavior of some attributes. For example, I need a polygon border to
>> behvave a bit differently depending on the context of the application.
>> But as usual there are workaround and different way to do one think.
> 
> I actually disagree. Encapsulation to me also means that you shouldn't 
> know if a value is in an iVar or computed. Refactoring to change the use 
> from an iVar to something computed or delegated is a hell of a lot 
> easier when using message sends. And the almost done jitter will inline 
> the return inst vars anyway, won't it? ;-)

Actually, I don't buy the "you shouldn't know" argument one bit :-)
Must be because I've been dealing with security stuff too much lately. 
In security the answer is "no, you shouldn't know - you MUST know" 
precisely what is an iVar and how it is exposed where. So clearly "you 
shouldn't know" is not a universal principle but rather comes from a 
certain design point of view - namely what I would call "design for 
extensibility" in which one tries to make the classes so that it is easy 
to reuse and extend them. Which is a very worthwhile goal, but even from 
this point of view it's not really "you shouldn't know" - it's really 
"you should use accessors so that it's easy to extend by subclasses" and 
that therefore, again, in your own code you really *should* know that 
you are using accessors for the sake of later extensibility.

Cheers,
   - Andreas




More information about the Squeak-dev mailing list