[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Cryptic OOP syntax
- From: PA <petite.abeille@...>
- Date: Wed, 2 Feb 2005 09:40:56 +0100
On Feb 02, 2005, at 03:06, Mark Hamburg wrote:
Unless you do really grotesque things with proxies and potentially
incur
complexities at a number of other places, this doesn't work or becomes
very
inefficient. Super is a property of the method in which it is being
called
as much or more than it is a property of the target of the method.
Hmmm... either I don't understand what you mean or we are not talking
about the same thing. Or perhaps both :)
For example, in LU, a so called object is merely a packaged table of
functions. 'super' is a method as well, as anything else worth
mentioning. It could be argued that an object is entirely defined by
its set of public methods.
Beside providing the raw mechanisms for OOP (inheritance,
encapsulation, etc) an object oriented system should take great care in
specifying its root class. That root class will effectively define the
behavior of your system. Or, as John Skaller put it, "the semantics of
a programming language are often best understood in terms of what is
not allowed". The base class, much more than any other supporting cast,
will spell out what is practically possible in your system.
It's perhaps worthwhile to take a look at existing root class in other
languages and see what functionalities they deemed was critical to
define at the base of their class hierarchy.
java.lang.Object defines 11 methods. Roughly half of them deal with
multithreading. Things like 'this' and 'super' are not method, but
rather language constructs. There is no class method in Java. Only
statics.
Perhaps a more interesting base class is Cocoa's NSObject:
http://developer.apple.com/documentation/Cocoa/Reference/Foundation/
ObjC_classic/Protocols/NSObject.html
It defines around 20 methods. 5 of them solely to deal with memory
management (Cocoa uses reference counting). One notable aspect of
NSObject is that class methods are symmetric to instance methods. In
other words, as far as the root of the hierarchy goes, both the class
and its instance provides the same set of methods. This is a very
useful property in practice.
LU's base class defines 7 core methods with mostly deal with
introspection: class(), equals(), hashCode(), isKindOf(), self(),
super() and toString().
http://dev.alt.textdrive.com/file/lu/LUObject.lua
Like in NSObject, those methods are available both at the class and
instance level: a class is an object, an object has a class.
But enough ramblings :P
Cheers
--
PA, Onnay Equitursay
http://alt.textdrive.com/