以前の記事では、ポリモーフィズムについて、ポケモンを例に説明しました。
今回はカプセル化について考えていきます。
カプセル化
オブジェクト指向におけるカプセル化とは、中身を隠ぺいすることを言います。
外側からそれがどんなものかはわかるけれど、具体的な値や処理内容はわかりません。
例えば、野生のピカチュウが現れたとき、通常は”でんきだま”という道具を持っているかどうかわかりません。
“おみとおし”という特性を持っているポケモンを自分が出したときだけ、道具を持っているかどうか知ることができます。
プログラミング言語Rubyで書いてみる
ピカチュウクラス(Pikachu)を作成し、5%の確率で”でんきだま”を持っているようにします。
“おみとおし”メソッド(frisk)によって相手のポケモンが持ち物を持っている場合、それが分かるようにします。
また、本当に5%の確率になっているか、100匹の野生のピカチュウと出会って確かめます。
# ピカチュウクラスを定義
class Pikachu
attr_accessor :held_item
private
def initialize
self.held_item = 'でんきだま' if rand(100) < 5
end
end
# おみとおしメソッドを定義
def frisk(pokemon)
puts pokemon.held_item unless pokemon.held_item.nil?
end
# 100匹のピカチュウで検証
100.times do
pikachu = Pikachu.new
frisk(pikachu)
end
出力例
でんきだま でんきだま でんきだま でんきだま
100匹中4匹がでんきだまを持っていたので、道具を持っている確率は4±2%となり、設定した5%とよく一致します。
コメント