visibility" of class object in favour of a global context
Stephane Ducasse
ducasse at iam.unibe.ch
Sat May 24 15:02:40 UTC 2003
I see thanks for your explanation. I have the impression that your
context looks like
a bit as a classBox extension where you would only to see the extension
of Objects the classBox in which you are
and its parents did.
I think that what is interesting with all new ideas is to see how they
scale because there are a lot
of stuff in Object or systemDictionary (that I know much better now)
that are simply not at their place.
What is clear is that sometimes we need a kind of utility class.
Stef
On Saturday, May 24, 2003, at 01:42 PM, Andreas Raab wrote:
> > >> BTW, I am very seriously considering doing exactly that -
> > >> get rid of the "visibility" of class object in favour
> > >> of a global context.
> >
> > Can you explain? I do not understand but I'm intrigued.
>
> Below is an excerpt of some of my notes on this issue. Note: these
> were not intended for publication, they're really just some private
> thoughts.
>
> The Problem
>
>
> Let's try to state the problem first. In many cases, we need some
> 'generic action' to be available for any kind of object. Examples
> include #printOn: methods like #isFoo and similar. I'm calling these
> methods 'generic actions' since I don't want to imply any meaning with
> it for now. The 'problem' with defining any of these is two-fold. For
> one thing, adding them directly to class Object exposes these methods
> to a naive user browsing for information about "what this system can
> do". That's problematic because it is overwhelming and yet not really
> telling us something - if we look in class Object then, really, we are
> looking at "naked objectness" which effectively constitutes identity.
> Whether or not 'all objects can do X' is quite a different question in
> this respect.
>
> Most people are being terribly overwhelmed if they ever look at class
> Object in this way. This leads to situation which we see in Squeak
> today where people anxiously 'refactor' (in quotes for a reason) these
> methods to a different place. They do this because they claim that 'an
> object should represent objectness' (identity) and be 'minimal'.
>
> Looking at it differently
>
>
> If we look at the problem in a slightly different way, we can say that
> there is only a SINGLE reason for wanting to add something to class
> Object - namely to extend the ENVIRONMENT.
>
> I think this is an important conceptual difference. I can't say for
> certain why this is the case but it seems that there's a general
> hesitation to add some method to a 'class outside of your scope' but
> there is much less hesitation to extend the environment, as long as it
> stays within the local scope.
>
> But what defines the 'locality' of scope here? Let's take an example
> which I believe is representative for most of what is said here. If we
> make a project consisting of two classes Foo and Bar then we typically
> have no hesitation to add Foo and Bar to the environment. However,
> adding a method like #isFoo to class Object is quite a different
> matter. What appears to be different in the two cases is that when we
> make Foo and Bar they have a common scope (most likely a system
> category in which we can find them) whereas #isFoo - living in 'class
> Object' - is too far away to be considered 'local' and therefore
> easily forgotten.
>
> If we would have a way to increase the 'locality' of these methods, I
> think we could solve many problems at the same time. 'Pollution' of
> class Object would no longer be a problem as the methods added to it
> might not even be visible there. Understanding the system would be
> simpler as one can observe the context in which a method is defined
> (if #isFoo were close to Foo and Bar I could guess that it must be
> related to the two and see what they do). Modularization and
> dependency tracking would be improved as well since it were much less
> likely that I'd be using #isFoo if I haven't looked at the place where
> Foo and Bar are defined.
>
> So then, why do we need Object?
>
>
> Considering the above, it almost seems as if every method in class
> Object could be part of one scope or another, in fact that it should
> be part of one scope or another. Which effectively means that Object
> really gets down to 'objectness', namely being purely defined by
> identity.
>
> And, if that's the case what the hell do we need class Object for? If
> it is merely an environmental context in which some methods are stored
> for the sake of faster lookups, then should we really expose it to the
> user???
>
> In addition, what do we teach people by exposing them to class Object?
> We teach them about subclassing, namely that 'all objects have to be a
> subclass of some other object' which means that we enforce the notion
> to use subclasses for everything. Which most of us (I think ;) agree
> is a bad idea.
>
> Getting rid of Object in favour of a context
>
>
> What I want to do here, is to effectively change the POV when people
> look at the environment. Right now, most people think that the
> (programming) environment is made up exclusively of classes and to a
> lesser extent of objects. If we remove class Object from the user's
> perspective then we end up with an environment which consists of
> classes, objects, and functions, the latter being implemented as
> methods on what is now known as class Object.
>
> Class Object should never appear to the user, in fact there should be
> no such thing. A user should be perfectly free to define her own class
> object if she wishes to. And, in addition, this user should be able to
> define 'functions' in the environment which are available for all
> objects.
>
> [Much more snipped away since I don't want it on a public list]
>
> Cheers,
>
> - Andreas
>
>
More information about the Squeak-dev
mailing list
|