ポケモンを例に考えるオブジェクト指向~カプセル化~

以前の記事では、ポリモーフィズムについて、ポケモンを例に説明しました。

今回はカプセル化について考えていきます。

スポンサーリンク

カプセル化

オブジェクト指向におけるカプセル化とは、中身を隠ぺいすることを言います。

外側からそれがどんなものかはわかるけれど、具体的な値や処理内容はわかりません。

例えば、野生のピカチュウが現れたとき、通常は”でんきだま”という道具を持っているかどうかわかりません。

“おみとおし”という特性を持っているポケモンを自分が出したときだけ、道具を持っているかどうか知ることができます。

プログラミング言語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%とよく一致します。

コメント