On 20 May 2010, at 14:29, Matt Emson wrote:

In Objective-C, the Category often seems a lot like the Partial class in a superficial way. It is the same kind of idea - a breaking up of a class in to sections. Sections can be added and removed in a similar way. However the category goes further (as Objective-C always seems to) and allows functionality to be plumbed in to an existing class, without the need to alter the original source code - indeed you actually do not need the source at all. This is what I envisioned when I stated the above "class extension". It could also be seen as a mechanism to overcome the issues often encountered with an OO system lacking multiple inheritance. One of the more interesting features of Categories in Objective-C is the ability to replace methods in the base class, but using the same signature.

Having implemented support for Objective-C/Pascal categories in the compiler, I don't think that this concept can be translated to the (Delphi-compatible) Object Pascal model/implementation. It only works in Objective-C/Pascal because there all dispatching is based on the name of the method/selector (instead of based on VMT offsets or static binding).

It may be doable with a separate class hierarchy (like TInterfacedObject for COM) and compiler/RTL magic (that would probably duplicate large parts of the Objective-C run time's functionality to get everything running at a reasonable speed), but in that case it might be more worthwhile to add support for GNUStep and extend the Objective-Pascal support to all platforms (since it wouldn't work with the regular Object Pascal classes in the RTL anyway). Objective-Pascal and Object Pascal can be mixed in the same file, so you can use delegation and other ways to bridge the two kinds of classes.


Jonas
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to