ポケモンを例に考えるオブジェクト指向~クラスとインスタンス~

現在のプログラミングは、オブジェクト指向と呼ばれる概念を実装しているものがほとんどです。

ここでは、ポケモンを例に、クラスとインスタンスを説明していきたいと思います。

実際にゲームのデータを解析したわけではないので、ここで紹介しているのはあくまでも一例です。

スポンサーリンク

オブジェクト指向とは

オブジェクト指向は、データとその処理を行う手続きをまとめたオブジェクトを中心に据えた考え方のことです。

手元の書籍には次のように書かれています。

大きなプログラムを作成する場合には、複数のデータをひとまとめにして、それをさらにまとめて、というふうにしてデータを整理しなければ、プログラムの処理自体もまとまりがなくなってしまいます。オブジェクト指向プログラミングでは、このひとまとまりにしたデータをそれぞれオブジェクトとして扱います。オブジェクトには、データとデータを処理するためのメソッドもセットになっていて、処理の内容に対して責任を持たせます。

たのしいRuby第5版

クラスとインスタンス

オブジェクト指向の出発点となるのは、クラスインスタンスです。

クラスはあるデータ(群)の特徴を抽出したもので、設計図のようなものです。

クラスという設計図をもとに実際に作られたデータ(群)がインスタンスです。

例えば、ピカチュウというクラスがあったとします。

ピカチュウには次のような情報が存在します。

  • ポケモン図鑑番号
  • 名前
  • レベル

他にも様々な情報があります。

ポケモン図鑑番号は、どのピカチュウでも変わらない内容です。

一方、名前やレベルは、個体ごとに異なるはずです。

ポケモン図鑑番号名前レベル
25サトシのピカ100
1匹目
ポケモン図鑑番号名前レベル
25レオン   50
2匹目

1匹目、2匹目のように、具体的な値を決めて技などを使えるようなものがインスタンスです。

プログラミング言語Rubyで書いてみる

プログラミング言語のRubyを使って、Pikachuというクラスと2つのインスタンスを生成するコードを書いてみます。

# クラス定義
class Pikachu
  # pokedex は「ポケモン図鑑番号」、name は「名前」、level は「レベル」に対応
  attr_accessor :pokedex, :name, :level

  # 初期化するためのメソッドを定義
  def initialize(name, level)
    self.pokedex = 25
    self.name = name
    self.level = level
  end
end

# インスタンス生成
ash_pika = Pikachu.new('サトシのピカ', 100)
leon = Pikachu.new('レオン', 50)

# インスタンスの情報を出力
p ash_pika.inspect
p leon.inspect

出力例

"#<Pikachu:0x000055e0085c5ce0 @pokedex=25, @name=\"サトシのピカ\", @level=100>"
"#<Pikachu:0x000055e0085c5c90 @pokedex=25, @name=\"レオン\", @level=50>"

コメント