【絶対に覚えよう】現実に例えて理解するクラス・オブジェクトの概要【図解あり】

2024/08/26に公開

はじめに

皆さんこんにちは。
今回は抽象的なデータを表現できるオブジェクトという仕組みをご紹介します。

多くのプログラミング言語がオブジェクト指向に則っており、オブジェクトの理解は必須と言えるレベルです。オブジェクトは、必須の知識でありながら、概念的で理解しづらく、腑に落ちる解説が見つからない、というように学習難易度が高い分野だと思います。

今回の内容は次のような方にオススメです。

こんな人にオススメ

  • オブジェクトを初めて学習する
  • オブジェクトを現実に例えて理解したい

初めて学習する方にも分かるように、丁寧に解説していきます。
プログラミングに慣れてきた方も、是非一度目を通していただけると嬉しいです。

😋 オブジェクトを活用するプログラムをオブジェクト指向と言います♪

オブジェクト

まずポイントをチェック

  • 1つのモノを表すデータ形式
  • 複数のデータをまとめて、抽象化する表現

オブジェクトとは、1つのモノを表すデータ形式です。

🍕 例えば、スマホや商品、人物など、あらゆるものを表現可能です。どれも複数のデータを内包する抽象的なデータであることがポイントです。

😋 オブジェクトは抽象的なモノを表現できます♪

オブジェクトは複数の項目とその値を内包しています。

🍕 例えば、スマホオブジェクトであれば、機種名・色・OSなど、スマホに関する項目を内包します。各項目に設定する値によって、様々なスマホを表現することができます。

商品や人物オブジェクトも同様です。商品オブジェクトであれば、商品名・値段など、商品に関するデータを内包します。

人物オブジェクトであれば、名前・年齢・趣味など、人物に関するデータを内包します。

😋 オブジェクトは複数のデータをまとめて、抽象化する表現と言えます♪

この、オブジェクトを組み合わせて処理を組み立てるプログラミングを、オブジェクト指向と呼びます。

オブジェクトが内包する要素

まずポイントをチェック

  • オブジェクトはプロパティとメソッドを持つ
  • プロパティは項目
  • メソッドは機能

オブジェクトには、プロパティとメソッドが内包されています。
それぞれの呼び方については、参考書や人によって異なる可能性があるので注意してください。

😋 プロパティをフィールドと呼ぶこともあります♪

現時点では「プロパティは項目」「メソッドは機能」とだけイメージしてください。

🍕 例えば、スマホには機種名プロパティと通話メソッドがあります。

それぞれ順番に解説していきます。

プロパティ

まずポイントをチェック

  • そのオブジェクトに関する値を保持する項目
  • プロパティは複数用意できる

プロパティは、オブジェクトが内部に持つ項目です。プロパティには、そのオブジェクトに関する値を入れておきます。そして、オブジェクトはプロパティを複数持つことができます。

🍕 例えば、スマホオブジェクトであれば、機種名プロパティやOSプロパティが考えられます。

プロパティはそのオブジェクトを表現する項目なので、考えればいくらでも作れます。しかし実際のプログラミングでは、処理に不必要なプロパティまで用意する必要はありません。

😋 プロパティを用意する基準は、処理に必要なものであるかです♪

プロパティは、コード上では単なる文字列型や数値型のようなデータに過ぎません。もしデータをオブジェクトにまとめていない場合、それぞれのデータの関連性が分かりません。つまり独立したデータを意味のあるまとまりにしたものがオブジェクトです。

🍕 例えば、独立した変数に”iPhone13Pro”や”iOS”と入っているだけでは、値の関連性が見えてきません。そこで、値をスマホオブジェクトとしてまとめることで、これらの値が示しているものがiPhoneであると分かります。

😋 オブジェクトは複数のデータを束ねて抽象化したもの、と言えます♪

メソッド

まずポイントをチェック

  • オブジェクトが持つ機能
  • メソッドは複数用意できる

メソッドは、オブジェクトが内部に持つ機能です。メソッドには、そのオブジェクトができることを処理として定義しておきます。そして、オブジェクトはメソッドを複数持つことができます。

🍕 例えば、スマホオブジェクトであれば、通話メソッドやカメラメソッドが考えられます。

😋 メソッドはそのモノができることです♪

プロパティはオブジェクトごとに異なる値を持たせますが、メソッドは同じであることが多いです。

🍕 例えば、AスマホとBスマホがあり、どちらもスマホオブジェクトです。Aスマホのプロパティは、機種名に“iPhone13Pro”、OSに”iOS”と入っています。Bスマホのプロパティは、機種名に“Pixel6Pro”、OSに”Android”と入っています。

どちらも異なるスマホを表していますが、機能としては共通して、通話メソッドとカメラメソッドを持ちます。このように、スマホとしてできること(つまり機能)は同じであるため、持つメソッドは共通しています。

😋 スマホであれば機種問わず同じことができます♪

また、個別のオブジェクトに独自のメソッドを追加することもできます。

🍕 例えば、iPhoneにあってPixelにない機能も、独自のメソッドとしてiPhoneにだけ追加で定義することもできます。iPhoneにはAirDropという機能がありますが、Pixelにはありません。その場合は、iPhoneのオブジェクトにだけAirDropメソッドを定義するということもできます。

😋 iPhoneにしかない機能は独自のメソッドと言えます♪

以上のように、メソッドはオブジェクトが持つ機能と言えます。

クラス

まずポイントをチェック

  • オブジェクトを作るための設計図
  • 同じ構造のオブジェクトを複数用意する際に便利
  • クラスから作ったオブジェクトをインスタンスと呼ぶ

クラスとは、オブジェクトを作るための設計図です。
クラスには、生成したオブジェクトに持たせたいプロパティやメソッドを定義します。

同じ形式のオブジェクトを何個も用意したい時に、設計図があると便利です。クラスを使えば、プロパティに具体的な値を渡すだけで、同じ形式のオブジェクトが作れます。

|🍕 例えば、ゲームのアバターを作る際は、髪色や性別など決められた項目に値を設定しています。

これはクラスとオブジェクトの関係に似ています。アバターの設定項目がクラスで定義したプロパティで、具体的な値を指定してできたアバターがオブジェクトです。

😋 クラスは「どんな項目」「どんな機能」を持たせるかを決めます♪

クラスからオブジェクトを生成する際は、クラスに定義されてるコンストラクタと呼ばれる処理を実行します。コンストラクタはプロパティに具体的な値を運ぶ役割を持っています。そして実際にオブジェクトを生成してくれます。

🍕 例えば、ゲームのアバターを作成する際も「アバター作成」ボタンのようなもの押して、アバターが作成されます。アバターはオブジェクトに該当し、オブジェクトを作成してくれるのはコンストラクタという機能です。

😋 コンストラクタは、実際にオブジェクトを生成する処理を実行してくれます♪

ここまで見てきたように、クラスはオブジェクトを作るための設計図のような位置付けです。また、クラスから作ったオブジェクトをインスタンスと呼ぶこともありますので、覚えておきましょう。

おわりに

皆さん、お疲れ様でした。
ここまでご覧いただき、ありがとうございました。

オブジェクトは抽象的な表現であるため、最初は難しいかと思います。ですが、実はオブジェクトは現実のものに例えやすいデータ構造です。目の前のコップさえも、オブジェクトとして定義することができます。コップオブジェクトには、形状プロパティや色プロパティがあると考えられます。身の回りから徐々にオブジェクトという考え方に慣れてみましょう。

😋 これからもプログラミング学習頑張りましょう♪

Discussion