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
|