[fpc-pascal] property or public
Damien Gerard
milipili at shikami.org
Mon Jan 21 17:07:32 CET 2008
On Jan 21, 2008, at 4:47 PM, Joao Morais wrote:
> 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.
That is what I thought too. But I wanted external advice.
Thanks to all !
--
Damien Gerard
milipili at shikami.org
Le temps n'a pas d'importance. Seul le code est important
-- (f00ty)
More information about the fpc-pascal
mailing list