[ 通常表示 ]  [ 簡易表示 ]  [ シンプル表示 ]

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

オブジェクト (object)

pointこの用語のポイント

pointオブジェクト指向で登場するよ

pointクラスとかインスタンスとかだよ

point具体的に何を指すかは結構あいまいだよ

スポンサーリンク

簡単に書くよ

オブジェクト (object)とは

オブジェクト指向で出てくる概念のひとつで「なんと言うか……『物』なんだよね、うん」のこと
です。

image piyo

詳しく書くよ

順番に見ていきましょう。

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

オブジェクト

オブジェクト指向は、それをテーマにして本を一冊書けるくらい、ふんわりとして捉えどころのないやつです。
具体的なことが知りたい人は他のところで勉強してください。

それを踏まえて、オブジェクト指向で出てくる用語のひとつで「モノ」に相当するものが「オブジェクト」です。
プログラミング的な話をすると「クラスとかインスタンスとかのこと」を指します。

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

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

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

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


です。

例えば、そうですね。

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

オブジェクト2

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

オブジェクト3

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

オブジェクト4

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

オブジェクト5

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

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

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

あるいは

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


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

こちらは例えば

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


のイメージでしょうか。

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

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

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

オブジェクト6

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

オブジェクト7

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

オブジェクト8

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

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

クラス:属性(プロパティ)と操作(メソッド)を定義したもの
インスタンス:クラスを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

一言でまとめるよ

まぁ「オブジェクト」って単語が出てきたら「何というか……『物』なんだな~」と、お考えください。

一番上に戻るよ
スポンサーリンク