【オブジェクト指向】オブジェクトの取り扱いについて

公開日: 2025/5/23

オブジェクト指向について学習する際に必ず、「オブジェクト」、「クラス」、「インスタンス」、「コンストラクタ」という言葉を耳にするとおもいます。

ただ、概念的なものなのでかなり分かりにくく理解しにくいものになってます。

今回は「オブジェクト」、「クラス」、「インスタンス」、「コンストラクタ」に特化して分かりやすく説明したいと思います。

1. クラス


まずはクラスについてです。クラスとはデータと処理をまとめたものになります。

またデータのことをフィールドと言い、処理のことをメソッドと言います。

また、フィールドはクラス内に定義された変数のことで、メンバ変数とも呼ばれています。

変数と同じように数値や文字列を代入したり、参照することが可能です。

メソッドとはどういった処理、挙動をするかを記述したものになります。


よく設計図に例えられています。

 ・クラス(フィールドの例、メソッドの例)

 ・たこ焼きのレシピ(小麦粉・たこ、たこ焼き機で焼く)

 ・家の設計図(コンクリート・木材、コンクリートで土台を作る)

 ・車の設計図(エンジン・タイヤ、組み立てる)

 ・たい焼きのレシピ(小麦粉・あんこ、たい焼き機で焼く)

上記の例がよくクラスを分かりやすく説明する際に比喩表現として用いられます。

今回はそれぞれの例を使い「オブジェクト、「インスタンス」、「コンストラクタ」について説明していきます。

2. オブジェクト


つづいてオブジェクトについてです。

オブジェクトは日本語に訳すと「物」、「物体」、「目的」、「対象となる物」という意味があります。

プログラミングで使う意味は最後の「対象となる物」が一番近い意味になり、かなり概念的な意味になります。

インスタンスとオブジェクトは同じ意味ですと表記されていたりと、よく似た意味で使用されていますが、別の言葉で表現されているということは二つの違いが明確に存在します。


次のインスタンスの説明で違いを述べます。

ここではクラスの例で示した4つの例でそれぞれオブジェクトがどういったものにあたるのか示してみます。

 ・たこ焼きのレシピ→たこ焼き

 ・家の設計図→家

 ・車の設計図→車

 ・たい焼きのレシピ→たい焼き

この様にそれぞれの設計図から出来上がったモノの総称をオブジェクトといいます。

3. インスタンス


インスタンスとはよくある説明として、クラスを元に作成したオブジェクトの実態の事という説明がよく書かれています。

正直自分自身もどう違うのか分かりませんでした。

このオブジェクトとインスタンスについて分かっておかないとオブジェクト指向の学習のその先にいくことができないと思ったので、くまなく調べて自分のなかに落とし込んで行った結果が、

 ・たこ焼きのレシピ→たこ焼き(Takoyaki t = new Takoyaki();)

 ・家の設計図→家(House h = new House();)

 ・車の設計図→車(Car c = new Car();)

 ・たい焼きのレシピ→たい焼き(Taiyaki ta = new Taiyaki();)


この結果になりました。

言葉で表すと、設計図からモノを作ったという一般的な考え方をオブジェクトと言い、それをプログラミングに落とし込んで実装したものがインスタンスになります。

ただ、中には「クラス」も「インスタンス」も全てオブジェクトに含まれるという風に認識している方もいらっしゃいます。

オラクル社のテキストではこの様に説明がしてあります。

「クラスから生成された個々のオブジェクトのことを特にインスタンスと呼ぶ」というように、インスタンスはオブジェクトに含まれるという考え方になっています。

そのため先ほど説明したオブジェクトを実装したものがインスタンス、クラスもインスタンスもオブジェクトという二つの考え方もあながち間違いではないということになります。

そのため、コミュニケーションを取る時には相手がオブジェクトに対してどう認識しているのかを把握しながら会話をすると良いかと思います。

4. コンストラクタ


コンストラクタとは日本語訳で「組み立てる」や「生成する」というような意味になっておりオブジェクト指向で出てくる言葉になります。

オブジェクト指向では、「クラス」の処理を実行するオブジェクトを初期化するための特殊なメソッドになります。

コンストラクタを作る際には3つのルールがあります。

 ①名前がクラス名と同じ

 ②戻り値を持たない

 ③new クラス名(コンストラクタの引数)

コンストラクタを使用すると、変数を初期化することができます。

コンストラクタを使用することで初期化用のメソッドが必要なくなるのでコードを簡素化することができます。


それでは最後に上記で解説したものを含めたコードの例をたこ焼きの調理を例にして下記に記述しています。

5. コードの例

package projava;

// Takoyakiクラスの定義
public class Takoyaki {
    private String batter;
    private String filling;

    // コンストラクタの定義
    public Takoyaki(String batter, String filling) {
        this.batter = batter;
        this.filling = filling;
    }

    // たこ焼きを調理するメソッド
    public void cook() {
        System.out.println("たこ焼きを焼く...");
    }

    // たこ焼きの情報を表示するメソッド
    public void displayInfo() {
        System.out.println("たこ焼きの詳細:");
        System.out.println("油: " + batter);
        System.out.println("中身: " + filling);
    }

    // メインメソッド(実行用)
    public static void main(String[] args) {
        // Takoyakiクラスのインスタンス化(たこ焼きの作成)
        Takoyaki myTakoyaki = new Takoyaki("サラダ油", "タコとネギと小麦粉");

        // たこ焼きを調理する
        myTakoyaki.cook();

        // たこ焼きの情報を表示する
        myTakoyaki.displayInfo();
    }
}

上記のコードを簡単に解説します。

まずは油(batter)と中身(filling)の定義をString型で行います。

続いて、batterとfillingを初期化したコンストラクタを定義します。

次にたこ焼きを焼くメソッドを記述します。

今回は簡単にたこ焼きを焼くという表示のみです。

次がたこ焼きの情報を表示するメソッドになります。たこ焼きを焼くメソッドと同じ方法です。


最後にTakoyakiクラスをnewしてインスタンス化してString型の引数を入力します。

今回は「サラダ油」と「タコとネギと小麦粉」です。

そして、その下でメインの処理でメソッドを呼び出して完了になります。

6. まとめ

今回はオブジェクト指向で大切な「クラス」、「オブジェクト」、「インスタンス」、「コンストラクタ」について例を交えながら解説しました。

論理的に説明が出来ず概念の説明になってしまったところが多かったのですが理解いただけたら嬉しいです。

ここがある程度理解できないとオブジェクト指向の理解が進みづらくなりますので、他の方の記事を読みながら理解していっていただければと思います。