「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

インスタンス

pointこの用語のポイント

pointクラス(設計図)を具現化したもの(実体)だよ

pointオブジェクト指向の話で出てくるよ

スポンサーリンク

簡単に書くよ

インスタンス(英:instance)とは

オブジェクト指向(「モノ」に注目した考え方)で出てくる概念のひとつ
であり

設計図(クラス)を具現化した「実体」のこと
です。


image piyo

詳しく書くよ

※このページで説明しているのはオブジェクト指向の話で出てくるインスタンスです。その他の分野で出てくる「インスタンス」については、他のところで勉強してください。

順番に見ていきましょう。
まずは予備知識として「オブジェクト指向」について結構ガッツリ説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。

オブジェクト指向は「『モノ』に注目した考え方」です。
「どんなやつで、どう動く」に注目した考え方です。

インスタンス

例えば、そうですね。
あなたがシューティングゲーム(射撃ゲーム)を作ろうとしているとしましょう。

シューティングゲームの基本的な登場人物は

1.自分
2.敵
3.弾


です。

インスタンス2

そして、それぞれの登場人物には「どんなやつ属性」と「どう動く(操作)」が設定されます。
例えば

・「自分」は3回「弾」に当たると爆発する(どんなやつ)
・「敵」は左に動ける(どう動く)
・「弾」の色は威力と対応している(どんなやつ)


などが「どんなやつ」と「どう動く」です。

インスタンス3

あとは、用意した

1.自分
2.敵
3.弾


を組み合わせて、あれやこれやする処理を たくさん作ればゲームは完成します。
例えば

「1」の「3」が「2」に当たったら「2」が消える
(「自分」の「弾」が「敵」に当たったら「敵」が消える)


のような処理を必要な分だけ作り込めば良いでしょう。

インスタンス4

ここまでを振り返ってみてください。
「自分」「敵」「弾」といったモノオブジェクトに注目して、あれこれ考えていますよね。
このような考え方がオブジェクト指向です。

インスタンス5

誤解を恐れずに言えば、オブジェクト指向のイメージは人形劇です。

人形劇をやるときは、まず人形を用意します。

インスタンス6

そして、人形同士を関わらせることで1つの物語を作り上げます。

インスタンス7

人形劇の中心は人形です。
物語は「人形に何をするか(どう動かすか)」によって決まります。

インスタンス8

オブジェクト指向では、まずモノ(オブジェクト)を用意します。

インスタンス9

そして、オブジェクト同士を関わらせることで1つの処理を作り上げます。

インスタンス10

オブジェクト指向の中心はオブジェクトです。
処理は「オブジェクトに何をするか」によって決まります。

インスタンス11

人形劇は、人形を用意して、その人形同士をあれこれすることで物語を作ります。
オブジェクト指向は、モノ(オブジェクト)を用意して、オブジェクト同士をあれこれすることで処理を作ります。
似ていますよね?

まずはオブジェクトを用意して、そのオブジェクトをあれこれしちゃうぜ!

なのがオブジェクト指向です。

以上を踏まえて、オブジェクト指向の話で出てくる用語のひとつで

「実際に作ったもの」に相当するもの

が「インスタンス」です。
プログラミング的な話をすると「クラスnewしたもの」を指します。

……と、いきなり言われても「なんのこっちゃ?」ですかね。

おそらく、インスタンス単体で考えるよりもクラスとインスタンスとオブジェクトの関係性で考えた方が理解しやすいと思います。
本ページでも、クラスとインスタンスとオブジェクトをまとめて説明します。

専門家の人からは怒られそうですが、ものすごい大雑把に説明すると

クラス:設計図
インスタンス:実際に作った物
オブジェクト:モノ(クラスとかインスタンスとかを、ふんわりと表現したもの)


です。

例えば、そうですね。

ピヨ太君がオリジナルのピヨピヨ時計を作ることにしました。

インスタンス12

まずは、どんな時計にするか考えます。
ピヨ太君は頭の中でピヨピヨ時計の設計図を作りました。

インスタンス13

次に、頭の中の設計図をもとにして実際のピヨピヨ時計を作りました。

インスタンス14

この話における「設計図」が「クラス」です。
「ピヨピヨ時計」が「インスタンス」に相当します。
「設計図」と「ピヨピヨ時計」(と「ピヨ太君」もかな?)が「オブジェクト」です。

インスタンス15

クラスは設計図です。
「そいつは、どんなモノだよ」が書いてあります。

インスタンスは設計図をもとにして実際に作った物です。
クラスを現実世界に召喚するとインスタンスになります。

オブジェクトは、クラスとかインスタンスとかの「モノ」をまとめてふんわりと表現したものです。
設計図は「モノ」です。
実際に作った物も「モノ」です。
ということは、設計図も実際に作った物も「モノ」です。
クラス(設計図)もインスタンス(実際に作った物)もオブジェクト(モノ)です。

あるいは

クラス:概念
インスタンス:物体
オブジェクト:概念や物体をふんわりと表現したもの


と捉えるのもアリかもしれません。

こちらは例えば

クラス:スマートフォン
インスタンス:iPhoneAndroidの実機
オブジェクト:ケータイ


のイメージでしょうか。

クラス「スマートフォン」は「それがどんなものかって概念」です。
インスタンス「iPhoneやAndroidの実機」は「実際に使える物体」です。
オブジェクト「ケータイ」は「それらを、ふんわりと表現したもの」です。

クラスとインスタンスは何となくイメージできると思いますが、オブジェクトが分かりにくいですかね。

例えば、ピヨ子さんがピヨ太君に「あなたの『ケータイ』何?」と聞いたとします。

インスタンス16

ピヨ太君は「iPhoneだよー」と答えるかもしれません。

インスタンス17

「へっへっへ、この前、ガラケーからスマホに変えたんだー」と答える可能性もあります。

インスタンス18

この会話で登場した「ケータイ」に相当するものがオブジェクトです。
クラスを指していることもあれば、インスタンスを指していることもあります。
文脈によっては、それ以外を指している場合も あります。
ふんわりとしたやつなのです。

せっかくなので、もう少しプログラミングちっくな説明もしておきましょう。

クラス:属性プロパティと操作メソッドを定義したもの
インスタンス:クラスをnewしたもの
オブジェクト:クラスとかインスタンスとかのこと


です。

例えば、Javaで書いた以下のソースコード(人間語で書いたプログラムの元ネタ)が あったとしましょう。

//ピヨピヨ族クラス
class PiyoPiyoZoku{
    //---------------------
    //属性(プロパティ)
    //---------------------
    // 年齢
    private int age;

    //---------------------
    //操作(メソッド)
    //---------------------
    // 年齢設定
    void setAge(int age){
        this.age = age;
    }

    // 年齢取得
    int getAge(){
        return this.age;
    }
}

//主処理
public class test{
    public static void main(String[] args){
        //PiyoPiyoZokuクラスのインスタンス「piyota」を生成
        PiyoPiyoZoku piyota = new PiyoPiyoZoku();

        //年齢を設定
        piyota.setAge(18);

        //年齢を表示
        System.out.println("ピヨ太の年齢:" + piyota.getAge());
    }
}


このソースコード内の

//ピヨピヨ族クラス
class PiyoPiyoZoku{
    //---------------------
    //属性(プロパティ)
    //---------------------
    // 年齢
    private int age;

    //---------------------
    //操作(メソッド)
    //---------------------
    // 年齢設定
    void setAge(int age){
        this.age = age;
    }

    // 年齢取得
    int getAge(){
        return this.age;
    }
}


の部分がクラスです。
「PiyoPiyoZoku」という種類の何かの設計図です。

この設計図を見ると、PiyoPiyoZokuは

1.「age(年齢)」がある
2.「age(年齢)」を設定できる
3.設定されている「age(年齢)」を取得できる


ということが分かります。

ただし、これはあくまで設計図です。
実際の「PiyoPiyoZoku」という種類の何かは、この世のどこにも存在しません。
「PiyoPiyoZoku」という種類の何かを実際に見て、触って、動かしたければ、実際に作ってあげる必要があります。

それなら作ってあげましょう。

        //PiyoPiyoZokuクラスのインスタンス「piyota」を生成
        PiyoPiyoZoku piyota = new PiyoPiyoZoku();


の部分で「PiyoPiyoZoku」という種類の何かを実際に作って、それに「piyota」という名前を付けています。
いわゆる「newする」というやつです。

この「piyota」がインスタンスです。

あとは

        //年齢を設定
        piyota.setAge(18);


で「piyota」の「age(年齢)」として「18」を設定して

        //年齢を表示
        System.out.println("ピヨ太の年齢:" + piyota.getAge());


で「piyota」に設定されている「age(年齢)」を表示しています。

ポイントは、これらの操作は実際に作った物(インスタンス)である「piyota」に対してやっていることです。
設計図(クラス)である「PiyoPiyoZoku」に対してやっているわけでは ありません。

何となく分かりますかね?

クラス(設計図、概念)とインスタンス(実際に作った物、物体)は何となくイメージできるのではないでしょうか。

オブジェクト(モノ)は、あまり気にしなくても大丈夫です。
ベテランの人たちも感覚的な理解で何となく使っています。
「クラスとかインスタンスとかのこと」くらいの理解でも困ることは少ないと思います。


image piyo2

一言でまとめるよ

まぁ「インスタンス」って単語が出てきたら「設計図をもとにして実際に作った物なんだな~」と お考えください。

一番上に戻るよ
スポンサーリンク
書籍画像031
書籍画像060

おまけ

■訳してみるよ

「instance(インスタンス)」の意味は

・事実
・実例
・実態


とかです。
実在しそうなイメージですかね。


■検索してみる?




書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本
「技術書」の読書術 達人が教える選び方・読み方・情報発信&共有のコツとテクニック
サイバーセキュリティお嬢様と学ぶ 情報セキュリティの基本