ume

Ruby オブジェクト指向(カプセル化)

カプセル化とは

⇨クラス外部から不用意にメソッドが実行されるのを防ぐこと

例 メソッドのカプセル化なし

def greet
  puts "こんにちは"
end

greet 出力結果 こんにちは

このようにメソッド名だけで処理を「どこからでも」呼ぶことができる このようなメソッドだと例えば"greet"という英単語を使いたかっただけなのに間違ってgreetメソッドが呼ばれ実行される可能性がある. それの何がいけないかというと例えばgreetメソッドの中身が「給料の支払いに関しての処理」を行なっていたとしたら間違った使われ方をすると給料の金額が誤って計算されることになる.
そういうミスをしないためにカプセル化は使われる.
実はクラスの中に定義されたメソッドは全てカプセル化されている。

class Aisatu

def greet
  puts "こんにちは"
end

end 

このようにクラス内にメソッドを定義すると先ほどのように下記のようにメソッドを呼び出そうとすると

greet
出力結果 undefined local variable or method `greet' for main:Object (NameError)

のようにgreetメソッドは定義されいていないよというエラーになりどこでもメソッドが呼べないように守ることができる。

まとめ.

  • カプセル化はクラス外部から間違ってメソッドが呼ばれることを防ぐ役割

  • クラス内に定義したメソッドは全てカプセル化が行われている。