クラスの基礎:オブジェクト指向とは

オブジェクト指向とは

オブジェクト指向とは、**データ(状態)処理(振る舞い)**をひとまとまりの「モノ(オブジェクト)」として扱う考え方です。現実の世界のモノになぞらえて、プログラムを構築しやすくするための考え方ともいえます。


クラスとは/インスタンスとは

クラスは、ひとまとまりの**データ(メンバ変数)処理(メンバメソッド)**を定義するための設計図です。クラスそのものは形だけで、メモリ上に実態は存在しません。クラスを元に「インスタンスを生成する」ことで初めて、実際にメモリ上にオブジェクトが作られます。


構造体(C言語のおさらい)

構造体は、複数の値(データ)をひとまとめにする仕組みです。

struct Student {
    int id;
    char name[20];
};

この定義は「Student型」を作っただけで、まだ実体は存在しません。 このidnameは、この構造体のメンバ変数といいます。

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()

まとめ

概念 内容
クラス 設計図。データと処理をまとめて定義する
インスタンス クラスを元に生成した「モノ」
メンバ変数 インスタンスが持つデータ
メンバメソッド インスタンスが呼び出せる関数
コンストラクタ インスタンス生成時に自動実行される初期化処理

今後の理解のために

オブジェクト指向は、後のアルゴリズム問題や再利用性の高い設計につながります。関数・構造体の知識の延長として理解を深めていきましょう。