アクセス制御

クラスインタフェースを設計するときには、外部からクラスに対するアクセスをどの程度許すかを考慮することが重要です。Rubyは、次の3つのメソッド保護レベルがあります。

public:誰でも呼び出せるメソッドです。

protected:定義元クラス及びそのサブクラスのオブジェクトだけが呼び出せます。

private:呼び出し元オブジェクトのコンテキスト内でしか呼び出せません。 (レシーバは常に自分自身(self)です。)

class MyClass


def method1
end

protected


def method2
end

private


def method3
end

public


def method4
end
end

あるいは、3つのアクセス制御関数の引数としてメソッド(のリスト)を指定することで、それらのメソッドのアクセスレベルを設定することができます。

class MyClass
def method1
end
# ...以下同様に method2~method4 のメソッド定義
public :method1, :method4
protected :method2
private :method3
end

具体例:すべての借り方と貸し方の金額が一致している会計システムのモデルを作成しているとします。この規則は誰にも破らせたくないので、借り方と貸し方を計算するメソッドは private にして、取引という観点から外部インタフェースを定義します。

class Accounts
def initialize(checking, savings)
@checking = checking
@savings = savings
end
private
def debit(account, amount)
account.balance -= amount
end
def credit(account, amount)
account.balance += amount
end
public
#...
def transfer_to_savings(amount)
debit(@checking, amount)
credit(@savings, amount)
end
#...
end

コメント

(必須)

(必須)
(メールアドレスは公開されません)