昨日までとは変わって、概念的なものを学んでいきます。
オブジェクト指向言語には必ずついて回るらしい「クラス」について、やっていきましょう。
クラスとは
データと処理の塊を作る。
データのことをプロパティ
処理のことをメソッド
と呼びます。
複数のプロパティ、複数のメソッドを1つの塊として管理するのがクラス。
わかったような、わからないような…。
引き続き見ていきましょう。
クラスのまま使うことは稀
クラス自体は実はそのまま使うことは少なくて、
インスタンスという実体をクラスから生成して
インスタンスを使うというのが基本のようです。
調べていてよく目にする説明が、
クラスは設計図、インスタンスは設計図から作られた物
わかったような、わからないような…。
どんなメリットがあるのか?
ゲームのアイテムを例にしてみましょう。
今までの知識で複数のゲームのアイテム(武器)を作る場合を考えてみます。
まず、武器にはいろいろなパラメータがありますよね。
武器名、攻撃力、属性、種類、特殊効果
これらのパラメータを持った武器を作る場合、連想配列などを使うことになると思います。
例えば、
["武器名"=>"テストの剣",”攻撃力”=>10,”属性”=>"火",”種類”=>"剣",”特殊効果”=>1]
こんな感じの連想配列を作って、特殊効果は数値を引数にとって処理する関数を作って…。
さらに武器を作りたい場合は同じ様式で、連想配列を作って…。
["武器名"=>"テストの斧",”攻撃力”=>15,”属性”=>"水",”種類”=>"斧",”特殊効果”=>2]
武器のリストにするから、さらにこの武器の連想配列を連想配列にして…。
["テストの剣"=>
["武器名"=>"テストの剣",”攻撃力”=>10,”属性”=>"火",”種類”=>"剣",”特殊効果”=>1],
"テストの斧"=>
["武器名"=>"テストの斧",”攻撃力”=>15,”属性”=>"水",”種類”=>"斧",”特殊効果”=>2]]
…。
キリがないですよね。
これがクラスを使うと楽になるということなのです。
なぜなら、データと処理をまとめて、そこからインスタンスという実体を作れるから。
???
先程の例の武器で考えると
「武器のパラメータのテンプレートを作って、用意された箇所に必要な値いれるだけ」
こんなイメージです。
クラスとインスタンスのざっくりとした理解
自分は以下のようにイメージしています
ーーーー武器クラスーーーー
武器名:X
攻撃力:X
属性:X
種類:X
特殊効果:Y
ーーーーーーーーーーーーー
青色・・・データ
橙色・・・処理
こんな感じのテンプレート的なものを定義したのがクラス
データや処理に対して個別に値を設定して、1つの個体化したものがインスタンス
おそらくこういうことが言いたいのでは無いかと…。
今日のまとめ
- クラスはデータと処理をまとめたテンプレートのようなもの
- インスタンスはテンプレートを使って作った1つのもの
抽象的な説明が多くてイマイチですが、ゲームを例にしたらなんだか掴めた気がします。
実際に使ってみて、どうか。
ですね。
では、また。