Matt Emson wrote:
Joao Morais wrote:
Damien Gerard wrote:
On Jan 21, 2008, at 2:52 PM, Joao Morais wrote:
Damien Gerard wrote:
I have (it would seem) a stupid question :)
We have TStringList vars. User can do what he want with it.
Which one is the stupid or the better way to do it ?
TMyClass = class(TObject)
public
<snip>
List1: TStringList;
List2: TStringList;
end;
or
TMyClass = class
private
FList1: TStringList;
FList2: TStringList;
public
property List1: TStringList read FList1;
property List2: TStringList read FList2;
end;
The later, *much* better. You should never use class members outside
the private area.
Thanks ! What is the reason ? I am happy I was right but I need some
reason :)
Encapsulation, on behalf of the integrity of the instance.
Implementation detail is also a good example. Then:
TMyClass = class
private
FList1: array of string; //convoluted, but uses a different storage
mechanism
FList2: array of string;
protected
function GetList1: TStringList; virtual;
function GetList1: TStringList; virtual;
public
property List1: TStringList read GetList1;
property List2: TStringList read GetList2;
end;
You can implement the storage for GetList1 and GetList 2 any way that
you wish internally, but give a uniform external interface.
Exact, polymorphism is also a reason. You can have abstract methods and
no class members if the design requires. The interface continues the same.
--
Joao Morais
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal