Delphiでクラスを設計する場合、通常、プライベートフィールド(メンバー)、プライベートセッターおよびゲッターメソッド、およびパブリックプロパティがあります。クラスの外部から、そのデータへのアクセスは公共の財産によってのみ行われます。クラスのユーザーは、getterメソッドが存在することすら知りません。
したがって、getterメソッドとsetterメソッドはインスタンスメンバーをカプセル化し、プロパティはgetterメソッドとsetterメソッドをカプセル化します。
ただし、インターフェイスを定義するときは、これらのメソッドを公開しています。
ICounter = interface
// I wouldn't want to specify these 2 methods in the interface, but I'm forced to
function GetCount: Integer;
procedure SetCount(Value: Integer);
property Count: Integer read GetCount write SetCount;
end;
具体的なクラスの実装:
TCounter = class(TInterfacedObject, ICounter)
private
function GetCount: Integer;
procedure SetCount(Value: Integer);
public
property Count: Integer read GetCount write SetCount;
end
それを使用する:
var
Counter: ICounter;
begin
Counter := TCounter.Create;
Counter.Count := 0; // Ok, that's my public property
// The access should me made by the property, not by these methods
Counter.SetCount(Counter.GetCount + 1);
end;
プロパティがgetter/setterプライベートメソッドをカプセル化する場合、これは違反ではありませんか?ゲッターとセッターは具象クラスの内部であり、公開されるべきではありません。