convert "class of" in pascal to D.
Paulo Pinto
pjmlp at progtools.org
Wed Jan 30 10:58:45 PST 2013
Am 30.01.2013 18:18, schrieb dennis luehring:
> Am 30.01.2013 17:16, schrieb Eko Wahyudin:
>> thanks all,
>>
>> I think i am understand, if the closest solution is template,
>> there is no solution in D for my code like this.
>>
>> type
>> TMyObjectClass = class of TMyObjectA;
>>
>> var
>> ClassArray : array of TMyObjectClass; //the content
>> initialized
>> randomly
>> ObjectArray : array of TMyObjectA;
>> i, j : Integer;
>>
>> procedure CreateAllObject;
>> begin
>> J:= length(ClassArray);
>> for I:= 0 to J do begin
>> ObjectArray[I]:= ClassArray[I].Create({some argument});
>> end;
>> end;
>>
>> if D unable to do this, I think we must do something with D.
>>
>> I'm still thinking, why constructor in D adopt C++ style rather
>> than pascal style, while pascal style is better :-?
>
> sorry but the pascal "class of"-type and the ctor-derivation isn't that
> super-mighty at all
> as long as the ctors of your object are the same everything is fine
> else -> the feature isn't useable anymore, then you need a real object
> factory
>
> in real OOP objects are specialized through its virtual method
> implementations AND its ctor-parameters (which are similar in very very
> few rare cases)
>
> for example pseudo code
>
> class Stream
> virtual read_bytes()...
>
> class FileStream: Stream
> this(filename)
>
> class NetworkStream: Stream
> this(tcp_ip,timeout)
>
> Stream[] streams
>
> streams ~= FileStream("c:/temp/test.txt");
> streams ~= NetworkStream("123.112.2.1", 1000);
>
> stream[n].read_bytes()
>
> this is a much more common OOP/ctor situation then yours
> i think its part of pascal/object delphi to ease the VCL development
>
> but this can be easily reached with an internal CreateInstance routine like
>
> Stream
> virtual Stream CreateInstance()
>
> and
> FileStream implements CreateInstance() with with return new FileStream
> NetworkStream "" with new NetworkStream etc.
>
> so whats the realy big deal/feature of this "class of"-type except for
> very trivial OOP case
>
>
Actually there are many definitions what real OOP means.
As for Delphi's case, if I am not mistaken it tries to follow the
metaclass concept that Smalltalk has, and Java/.NET have to a certain
extent.
You can do lots of cool tricks with metaclass programming, specially in
Smalltalk.
--
Paulo
More information about the Digitalmars-d
mailing list