[fpc-pascal] property or public
Joao Morais
post at joaomorais.com.br
Mon Jan 21 16:47:27 CET 2008
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
More information about the fpc-pascal
mailing list