Propertyとアクセサメソッド

解決


山下  2007-01-19 00:25:12  No: 24524

以下についてみなさんどう思われます?
1.【直接変数を読む場合】
type
Thoge = class
  private
   FX:Integer;
  public
   Property X:Intetger read FX write FX  //直接変数
end;

2.【アクセサメッソドを使用する場合】
Interface
type
Thoge = class
  private
   FX:Integer;
   procedure SetFX(FX:Integer);    
   function  GetFX:Integer;
  public
   Property X:Intetger read GetFX write SetFX  //直接変数
end;

Implementation
procedure SetFX(FX:Integer){
  self.FX = FX;
end;

function  GetFX:String{
  Result := self.FX;
end;

この2つに何か違いがあると思われますか?
私は、2の必要性がいまいちわかりません。


えーとね  2007-01-19 01:01:06  No: 24525

> この2つに何か違いがあると思われますか?

カプセル化の点で2.の方が、保守性・再利用性に優れています。
例えば内部処理がFX から FY に変わっても
公開されているProperty X には影響が出ません。

またSetFX で値のチェックなども、アクセサで出来ますし
読み取り専用にすれば、変数が外部で変更されてしまうリスクも軽減できます。

オブジェクト指向の基本の1つです。


山下  2007-01-19 01:19:56  No: 24526

ご返信有難うございます。
>カプセル化の点で2.の方が、保守性・再利用性に優れています。
>例えば内部処理がFX から FY に変わっても
>公開されているProperty X には影響が出ません。
あっ、そうか!
内部処理でもカプセル化が必要なのですね。
貴重な体験有難うございました。


山下  2007-01-19 01:48:37  No: 24527

有難うございました


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加