OOP_(re)
Wed, 28 May 1997 17:01:51 +0100 (BST)
On Wed, 28 May 1997 16:40:06 +0200 Frank Heckenbach
wrote:
[...]
>> At the moment, "Parent" and "Child" do nothing, [...]
>> "SelfID" is an integer which holds a unique numeric ID for each
>> living TObject descendant.
>
>AFAICS, they will hold the parent/child *objects*, not *classes*, and
>the ID of instances. Also useful, I think, but not to be confused with
>the parent/child classes, and "ObjID" (= class IDs) which should resonably
>be in the VMT, since they depend only on the class, not on the instance.
True.
>> Can we make TObject automatically become the ancestor of each
>> Object type (i.e., any object which is just defined as "Object")?;
>> if so, is this desirable?;
>
>No. There are applications of OOP that are quite different from the class
>libraries as TVL, OWL and so on. Sometimes I use objects as "convenient
>records" without any need for inheritance, virtual methods or streams.
I do too - fair enough ...
>AFAICS, objects that are stored in streams, must be descendants of TObject.
Correct.
>But not all types of objects need to be able to be used in streams at all.
Correct again.
>I think the programmer should be allowed to decide for himself if he wants
>his objects to be "streamable" (by making them descandants of TObject or
>its descendants) or not.
True.
[...]
>BTW: Would it be possible at all? Doesn't TObject refer to TStream?
No, it doesn't. In bpcompat, TObject has a "Load" constructor that takes
a TObject parameter.
>So if TObject was a part of the "core language", also TStream would have to be.
See above.
>> True for a Program, false for a Unit. While the GPC compiler is *much*
>> smarter than BP and would remove unused code and variables, the GNU linker
>> is not able to remove dead code, it only does so if a whole Unit is unused.
>
>I suppose there's not much hope of getting a smarter linker in the near
>future, is there?
I very much hope so.
>The African Chief wrote:
>
>> Yes (but Handle is present in Delphi as well). However, the main reason
>> for keeping it is because the OBJECTS unit exports a function which returns
>> a pObject, which can be used to locate an object instance by its Handle
>> (i.e., given any Handle, you would thereby be able to locate its owner).
>
>I don't know all the details here, but isn't it possible to have a
>TWindow(TObject) with Handle being a field of TWindow, and this function
>returning a PWindow? This would seem natural to me.
Yes, that is possible. But I don't think it does any harm to have the Handle
in TObject instead.
>> This is not an academic issue, because I have seen the utility of
>> this facility in other contexts (viz - my portable "CHIEFAPP" class
>> library, for BP 7.x, Delphi1 and Delphi2, from which project this
>> OBJECTS unit was borrowed and cannibalised). Thus, the fields
>> need to be in the ultimate "mother of all objects".
>
>Similar arguments might be applied to many kinds of fields, with the
>possible danger of blowing up the "mother of all objects" very much.
True.
>Then it could - at best - be the mother of all objects in a particular
>class library, but it wouldn't promote the goal of making it a widely
>used base class.
Perhaps. But there are many times when I have wished that certain
things existed in BP's TObject and TWindowsObject. Making a
descendant object is fair enough, but it would have been a lot easier
for me if the things were in the ancestor.
>> It has a present use - to be able to locate every object instance by its
>> own unique ID. See above.
>
>I'm probably missing something - but isn't the address of an object a
>"unique ID"? (One that makes it very easy to "locate" the object... ;-)
That assumes that you already know the object and its address. If you
already know it, there would be no point trying to locate it again. Also,
there are a whole load of things that you can do with integers that you
cannot do with addresses. And, suppose that, for some obscure reason,
I suddenly wanted to locate all currently active object instances and/or
their parents (if any), how would I do this using addresses? - but I could
do this with a loop through the SelfIDs.
Best regards, The Chief
Dr Abimbola A. Olowofoyeku (The African Chief, and the Great Elephant)
Author of: Chief's Installer Pro v3.50 for Win16 and Win32.
Homepage: http://ourworld.compuserve.com/homepages/African_Chief/
E-mail: laa12@cc.keele.ac.uk
The African Chief (laa12@cc.keele.ac.uk)
HTML conversion by Lluís de Yzaguirre i Maura
Institut de Lingüística Aplicada -
Universitat "Pompeu Fabra"
e-mail: de_yza@upf.es