前回関数について学びました。ユーザー定義関数を利用することによって、何回も同じ処理を行う部分をまとめることができます。関数を利用することによって、プログラムを構造的に作成することができるようになりました。今回はさらにプログラムを構造化することができるオブジェクト指向とクラスについて学んで行きます。

オブジェクト指向とクラス

3年以内に更新されました。情報が古い可能性があります。
更新日 : 2019年03月26日

前回関数について学びました。
ユーザー定義関数を利用することによって、何回も同じ処理を行う部分をまとめることができます。関数を利用することによって、プログラムを構造的に作成することができるようになりました。今回はさらにプログラムを構造化することができるオブジェクト指向とクラスについて学んで行きます。

オブジェクト指向とは

オブジェクト指向という言葉は難しそうに捉えられてしまうことがありますが、そこまで難しく考える必要はありません。

「オブジェクト」は「もの」という意味があります。オブジェクト指向では、ある機能やデータの塊をオブジェクト(もの)として捉え、コードの可読性の向上や構造化を進めるのに役立ちます。

物には特定の特徴(データ)や特定の動作(処理)が存在します。特徴や機能をデータや処理として作成することで、コード量が多くなっても混乱することがなくなっていきます。

クラスとは

オブジェクト指向を学ぶ上で、クラスは切り離せないものになります。

クラスを簡単に説明すると、「設計図」です。

ゲームでよく出てくるモンスターを例に取り説明していきます。

ゲームで出てくるモンスターは様々な種類がいます。これらのモンスターの主なデータや動作をいくつか挙げてみます。

  • モンスターの名前(データ)
  • ヒットポイント(データ)
  • 攻撃力(データ)
  • 防御力(データ)
  • 攻撃する(動作)
  • 攻撃をうける、または防御する(動作)

基本的な機能はこんな感じでしょうか。これをクラスとしてコード(設計図)を書いていきます。

クラスの基本

物にはいくつかの情報(データ)といくつかの動作(処理)が存在します。先ほどのモンスターには、名前やHP、攻撃力、防御力などの基本となる特徴や情報が存在します。これらをそのモンスターが持っているデータと捉えます。
さらにモンスターは他のモンスターを攻撃することや相手の攻撃を防御することなど、いくつかの動作(処理)を行うことができます。これらのデータと、動作(処理の振る舞い)をクラスで作っていくことになります。

大まかにクラスの基本的な機能を分けると先程のデータと処理に分けることができますが、データと処理というと、今までのプログラミングで学んだある機能と似ていませんか?

データは変数、処理は関数と似ていますよね。変数にはデータを保存する機能がありました。関数には繰り返し処理や条件分岐処理をまとめる機能がありました。

先程のモンスターを簡単に上の画像のようにイメージしていきましょう。モンスターの名前やHP、攻撃力、防御力を変数として保存しておきます。
攻撃するなどの処理部分では、相手のHPを自分の攻撃力分だけ減らすという計算で実現できますね。

このようにクラスには、まとまったデータや処理を1つの塊(オブジェクト)として捉え、それらの設計図を今まで学んだ変数や関数としてまとめる機能があると理解しておいてください。

ちなみにクラスで使用する変数をフィールドプロパティメンバーなどと言います。
さらにクラスで使用する関数をメソッドメンバー関数などと言います。各プログラミング言語によって呼び方が変わったりしますが、基本的にはどれも一緒です。

インスタンスとは

クラスで設計図をコードとして書いた後は、実際に設計図を元に作成したり使ったりする必要があります。

クラスを作ったままでは設計図が完成しただけで、実際のモンスターは作成されていません。クラスからオブジェクトを作る作業をプログラミングでは「インスタンスを作成する」と言います。上の画像では実際のモンスターをインスタンスのイメージとして表現しています。

つまり、クラスで作成した設計図を元にインスタンス生成を行ってはじめてモンスターという実物が出来上がります。また、出来上がった実物をインスタンスと言います。

難しい言葉で説明すると、抽象的な設計図を作成後、具体的な実物を作成していくことをインスタンスを作成すると言います。

まとめ

今回の記事では、オブジェクト指向、クラス、インスタンスについての概念を説明していきました。実際にコードを学ぶまでは、イメージが湧きづらいかと思いますが、以下の言葉とイメージだけをしっかり結びつけて置いてください。

  • オブジェクト指向
    まとまった機能やデータを塊として捉え、動作(処理)や特徴(データ)をひとまとまりにして構造化していくこと
  • クラス
    オブジェクト指向を行う上で必須のプログラミングとしての機能。
    オブジェクト(もの)を作成する前の設計図をコードで表現し、プログラムを扱いやすくする機能がある
  • インスタンス
    クラス(設計図)からできた実物。クラスからインスタンス生成を行うことで初めて実体となるインスタンスができる。