Nahum

Yes it may be encapsulated but the fact that the state
of the encapsulated data cannot be reproduced by assigning
the revealed properties would indicate to me that the object
cannot be safely streamed, which is a basic tenant of Delphi OO

Neven

----- Original Message -----
From: "Nahum Wild" <[EMAIL PROTECTED]>
To: "Multiple recipients of list delphi" <[EMAIL PROTECTED]>
Sent: Friday, October 04, 2002 3:40 PM
Subject: RE: [DUG]: Copying an Object


> Nope, it means that its encapsulated (or whatever the word is and how its
> spelt) and only revealing stuff that needs to be revealed - and it might
> only be in the public section rather than the published section; data
hiding
> and all that.  One of the three corners to good OO design (hurrah) -
> inheritance and polymorphism being the others :o)
>
> A clone is an exact copy, not a partial one.  The assign concept works
well
> for me.
>
> Nahum.
>
> > [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
> > wrote on
> >
> > Nahum
> >
> > If you need to copy the internals of an object then it would
> > reflect badly on your objects design wouldn't it?
> >
> > Neven
> >
> > ----- Original Message -----
> > From: "Nahum Wild" <[EMAIL PROTECTED]>
> > To: "Multiple recipients of list delphi" <[EMAIL PROTECTED]>
> > Sent: Friday, October 04, 2002 2:02 PM
> > Subject: RE: [DUG]: Copying an Object
> >
> >
> >> The only problem here being that just the published properties will
> >> be cloned, no internal state variables.
> >>
> >> Nahum.
> >>
> >>> [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
> >>> wrote on
> >>>
> >>>> The term for this is "cloning" an object.
> >>>>
> >>>> There is no built in way of doing this in Delphi, and there are
> >>>> issues involved in any cloning operation; e.g. are you interested
> >>>> in a shallow clone (just the one object), or a deep clone (your one
> >>>> object, and all objects to which it refers)?
> >>>>
> >>>> Probably a google newsgroup search on Delphi+cloning+objects might
> >>>> give you a few ideas on how to progress...
> >>>
> >>> If your object inherits from TComponent the following code will
> >>> clone a component. I have used it to clone TButtons and few other
> >>> simple visual components successfully.
> >>>
> >>>
> >>> unit Cloner;
> >>>
> >>> interface
> >>>
> >>> uses
> >>>   SysUtils, Classes, Controls;
> >>>
> >>> function Replicate(C: TComponent): TComponent;
> >>>
> >>> implementation
> >>>
> >>> procedure CloneComponent(C1: TComponent; C2: TComponent); //
> >>> // This procedure clones the properties of C1 and writes them to C2.
> >>> // C1 and C2 must be of the same type.  Use it for components that
> >>> do // not have an Assign method. //
> >>> var
> >>>   theStream: TMemoryStream;
> >>>   tmpS:      string;
> >>> begin
> >>>   if C1.ClassType <> C2.ClassType then
> >>>     raise EComponentError.Create('Object types are incompatible');
> >>>
> >>>   if C1 is TControl then
> >>>     TControl(C2).Parent := TWinControl(C1).Parent;
> >>>
> >>>   theStream := TMemoryStream.Create; // Create the memory stream.
> >>>
> >>>   with theStream do try
> >>>     tmpS    := C1.Name;
> >>>     C1.Name := EmptyStr;
> >>>     WriteComponent(C1);        // Write C1 properties to stream
> >>>     C1.Name := tmpS; Seek(0, soFromBeginning);  // Position to
> >>>     beginning of stream. ReadComponent(C2);         // read
> >>>     properties from stream into C2   finally Free;
> >>> // IAC, free stream.   end; end;
> >>>
> >>> function Replicate(C: TComponent): TComponent;
> >>> //
> >>> // This function "replicates" component C and returns
> >>> // a new component whose type and properties match
> >>> // those of C.
> >>> //
> >>> begin
> >>>   Result := TComponentClass(C.ClassType).Create(C.Owner); // Create
> >>>   component } CloneComponent(C, Result);
> >>> // Clone it } end;
> >>>
> >>> end.
> >>>
> >>> --------------------------------------------------------------
> >>> -------------
> >>>     New Zealand Delphi Users group - Delphi List -
> >>> [EMAIL PROTECTED]
> >>>                   Website: http://www.delphi.org.nz
> >>> To UnSub, send email to: [EMAIL PROTECTED]
> >>> with body of "unsubscribe delphi"
> >>> Web Archive at:
> http://www.mail-archive.com/delphi%40delphi.org.nz/
> >
> >
>
> --------------------------------------------------------------------------
> >     - New Zealand Delphi Users group - Delphi List -
> >                   [EMAIL PROTECTED] Website:
> > http://www.delphi.org.nz To UnSub, send email to:
> > [EMAIL PROTECTED] with body of "unsubscribe delphi"
> > Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/
> >
>
> --------------------------------------------------------------------------
-
>     New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
>                   Website: http://www.delphi.org.nz
> To UnSub, send email to: [EMAIL PROTECTED]
> with body of "unsubscribe delphi"
> Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/
>
>
> --------------------------------------------------------------------------
-
>     New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
>                   Website: http://www.delphi.org.nz
> To UnSub, send email to: [EMAIL PROTECTED]
> with body of "unsubscribe delphi"
> Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/
>

---------------------------------------------------------------------------
    New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
                  Website: http://www.delphi.org.nz
To UnSub, send email to: [EMAIL PROTECTED] 
with body of "unsubscribe delphi"
Web Archive at: http://www.mail-archive.com/delphi%40delphi.org.nz/

Reply via email to