オブジェクト指向ってなんだ?

こんにちは。新人のPと申します。
このブログでは、トランプのカードを例に「オブジェクト指向」について解説しています。

対象 : プログラミング言語を少しやったけど、オブジェクト指向をやっていないという方
※今回はサンプルコードとしてJavaScriptを挙げていますが、JavaScriptの経験がなくても読み進めていけるよう工夫しています。

トランプを作ってオブジェクト指向を学ぼう

では早速、トランプのカードを作っていきましょう!

カードを一枚作ってみよう

カードが持っている情報はどんなゲームでも決まっていると思います。トランプのカード一枚一枚を想像してみてください。どんな情報を持っていますか?

おそらくこの二つは出てくると思います。

  • 番号

さて、これを使ってカードをまず一枚、作ってみましょう。オブジェクトをやっていない段階だと、

  • 柄 = ♠
  • 番号 = 1

というのはできるかもしれませんが、これではただ柄と番号が別々にあるだけで、実は結びついていません。さて、こういう時のためにオブジェクトがあります。オブジェクトというのはまとめるためのもの。二つの要素(柄、番号)を、ひとつのオブジェクトとして扱います。

オブジェクト

上記のようにすれば、二つの要素に関係性ができますね。例えばJavaScriptなら、このように定義できます。

サンプルコード1

オブジェクト指向とは :
複数の情報をオブジェクトとしてまとめることができる

カードのひな型をつくろう

さて、カード一枚はクリアしました!でも、これをカードの枚数分…

13枚 × 4柄 = 52枚

これだけつくるのはちょっと大変です。こういうときオブジェクト指向型の言語は、あとから情報を入れるための箱「ひな型」を作ることができます。カードに共通した設計書のようなものですね。

オブジェクト指向では、この「ひな型」をクラスと呼んでいます。例えばJavaScriptなら、クラスは次のように定義できます。

サンプルコード2

上記はCardという名前のクラスを作っています。2行目のconstructorとは、製造者、建設者のことです。constructorの()内にsuit, numberとありますが、ここでどういう情報を受け取って、設定するのか決めています。ここでは、もらった柄(suit)と番号(number)をそのまま設定します。このクラスを作ってしまえば、あとは各々のカードが個別に持っている情報を持たせればいいことになるわけです。

オブジェクト指向とは:
カードのひな型のようなもの「クラス」を作ることができる

クラスを使って、カードを作成しよう

さぁ、これでクラスが作れました。あとはクラスを使って枚数分カードを作るだけです。コードを理解しやすくするために、今回は♠のカードのみ(13枚)を作成したいと思います。

サンプルコード3

ここで見ていただきたいのは、3行目の部分です。new Card(“spade”, i)と書かれていますね。この部分が、カードの個々が持つ情報を渡して、カードを作る部分になっています。先ほどクラスを作成するとき、以下のconstructorを定義しました。

サンプルコード2

2行目のconstructorで「どのような情報をもらってくるか」を()内で設定しましたね。ここで設定したconstractorに必要な情報を、newから始まる一文の()内で渡しています。そこで、新しいカードが生成されるわけです。このnewを使って新しいカードを生成することをインスタンス化といい、生成された新しいカードのことをインスタンスといいます。ちなみに、インスタンスの中身を確認すると次のようになります。

サンプルコード4

オブジェクト指向とは:
クラスをつかってインスタンスを生成することができる

まとめ

オブジェクトのキソのキソとして覚えていただきたいのは、以下の三つです。

  1. 複数の情報をオブジェクトとしてまとめる。
  2. 情報を入れるためのひな型「クラス」を作成する。
  3. クラスを使ってインスタンスを作成する。

これを理解したら、やりたいことをよりイメージしやすくなりますし、できることも増えるはずです。キソのキソですがとても大事な部分です。プログラミングをするのであれば、しっかりやっておくと良いのではないでしょうか。

このサイトをフォローする!