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.




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

Reply via email to