オブジェクト指向とは、**データ(状態)と処理(振る舞い)**をひとまとまりの「モノ(オブジェクト)」として扱う考え方です。現実の世界のモノになぞらえて、プログラムを構築しやすくするための考え方ともいえます。
クラスは、ひとまとまりの**データ(メンバ変数)と処理(メンバメソッド)**を定義するための設計図です。クラスそのものは形だけで、メモリ上に実態は存在しません。クラスを元に「インスタンスを生成する」ことで初めて、実際にメモリ上にオブジェクトが作られます。
構造体は、複数の値(データ)をひとまとめにする仕組みです。
struct Student {
int id;
char name[20];
};この定義は「Student型」を作っただけで、まだ実体は存在しません。
このidやnameは、この構造体のメンバ変数といいます。
struct Student s1;
s1.name = "ABC";
s1.id = 1001;このように生成したs1が実体(データ)です。.(ドット)演算子で中身にアクセスできます。
同様にして、同じStudent型を元に、同じ形で違うデータを量産できます。
struct Student s1;
struct Student s2;
struct Student s3;
s1.name = "ABC";
s1.id = 1001;
s2.name = "DEF";
s2.id = 1002;
s3.name = "GHI";
s3.id = 1003;構造体は「データのまとまり」だけですが、クラスはそこに関数も含めることができます。
クラス = 構造体 + 関数(メソッド)
インスタンスが持つデータ。構造体の各項目に相当します。
インスタンスが持つ関数。インスタンスのデータを処理したり、外部に動作を提供します。
インスタンス生成時に自動的に実行される関数で、初期化処理を行います。
(実際の基本情報技術者試験の問題では、クラスの定義そのものは省略されるのでここでは例です)
クラス: Student
整数型: id
文字列型: name
〇 show()
id を出力する
name を出力する
コンストラクタ()
id ← 0
name ← "名無し"
〇 main()
Student型: s1
s1.id ← 1001
s1.name ← "佐藤"
s1.show()
Studentは、idとnameを持つ設計図main()でs1というインスタンスを生成s1.id など
ドット演算子を用いてメンバにアクセスs1.show() のように
メソッド呼び出しもドット演算子| 概念 | 内容 |
|---|---|
| クラス | 設計図。データと処理をまとめて定義する |
| インスタンス | クラスを元に生成した「モノ」 |
| メンバ変数 | インスタンスが持つデータ |
| メンバメソッド | インスタンスが呼び出せる関数 |
| コンストラクタ | インスタンス生成時に自動実行される初期化処理 |
オブジェクト指向は、後のアルゴリズム問題や再利用性の高い設計につながります。関数・構造体の知識の延長として理解を深めていきましょう。