abstract variables proposalQQ
J J
azreal1977 at hotmail.com
Wed Nov 29 18:09:40 UTC 2006
First of all, the problem you describe isn't a smalltalk issue. It is an
object oriented issue. And as most OO people would probably do, I have to
ask: If classes deriving from some super don't need the instance variables
of their parent, then are you *sure* the inheritance hierarchy is right?
I certainly appreciate proposals for new ideas, and I don't want to sound
too negative. It's just that you propose to add complexity for a problem I
have never had in 10 (or so) years of OO development. :)
>From: "Ralph Boland" <rpboland at gmail.com>
>Reply-To: The general-purpose Squeak developers
>list<squeak-dev at lists.squeakfoundation.org>
>To: squeak-dev at lists.squeakfoundation.org
>Subject: abstract variables proposalQQ
>Date: Wed, 29 Nov 2006 09:18:51 -0500
>
>One of my fustrations in using Smalltalk is that I may have a subclass B
>with a number
>of subclasses, say C,D,E,F and such that some of the subclasses, say C
>and D,
>need to access an instance variable, say b, but the remainding classes,
>say E and F,
>do not need to access variable b. In this situation I have two basic
>options:
>
>1) Declare variable b in class B.
> The problem then is space is allocated for variable b in classes D
>and E as well.
>
>2) Declare variable b in classes C and D.
> A minor problem here is that I need to declare b for each class
> which uses b rather than just once.
> The major problem is that methods that access b must be written in
>each class
> that uses b, while if option 1) is used, the methods need be
>declared
>only in class B.
> (Admitted this causes the methods to be accessible by classes D and E
>as well
> which is not desirable but is usually acceptable.)
>
>I propose that Smalltalk (Squeak) allow the declaration of abstract
>variables as follows:
>
>A line of the form abstractInstanceVariableNames: 'b c' in the definition
>of the
>variables of the class B would declare b (and c) as abstract instance
>variables.
>(The same approach would be applied for class variables.)
>No space is allocated for variable b so instances of B could not access
>them.
>Nevertheless it would then be possible to write methods of class B that
>accessed
>variable b. Let M be method of B that accesses b (but not c).
>Alas, instances of B cannot use method M since M is an abstract method.
>(Abstract methods are methods that access abstract instance variables)
>
>Now, in subclasses of B, it is allowable to define instance variable b.
>Once this is done method M becomes accessible
>to the instances of the subclasses of B for which b has been declared.
>For example if classes C and D declare instance variable b
>while classes E and F do not then instances of classes C and D
>can use method M but instances of classes E and F cannot use method M.
>
>In terms of implementation it should be noted that the byte codes for M
>are
>not connected to class B but instead two copies of the byte codes for M
>are created
>with one placed with class C and the other placed with class D.
>The bad side of this is obviously the duplication of code. This is no
>worse
>than
>Option 2) however, and is in fact better since only one copy of the source
>is created.
>Option 1) remains in circumstances where it is warranted.
>
>It is noteworthy, also, that access to method M is faster than with
>Option 1) because
>less searching of the inheritance chain is needed to find M. This
>presents
>a problem:
>Users wanting fast access to a method N of B that is not abstract by
>subclasses of B
>could artificially make N abstract by having it access b as in
> 'true ifFalse: [b <- b].'.
>This is ugly of course. What is needed is a way to define a method, say
>Q, of B
>as abstract even though it does not access any abstract variables.
>Subclasses of B that want to access Q would need to state that they want
>a concrete
>versions of Q installed in their list of methods. One approach would be
>to write
>the method Q in these subclasses as:
>
>'Q
> super Q'
>
>In order to make it clear that a method is abstract I think the abstract
>variables
>of the method would need to be made more visible such as by making them
>bold
>or red or both.
>
>Clearly I haven't worked out all of the syntax needed for my proposal but
>it seems not so difficult.
>More difficult of course is the determining the ramifications of
>implementing
>this proposal.
>
>I am interested in hearing comments on whether this proposal is good or bad
>and why.
>I would also like to have pointed out some of the more significant
>ramifications
>of implementing this proposal.
>
>Thanks for listening.
>
>Ralph
>
_________________________________________________________________
Get free, personalized commercial-free online radio with MSN Radio powered
by Pandora http://radio.msn.com/?icid=T002MSN03A07001
More information about the Squeak-dev
mailing list
|