インスタンスとオブジェクトの違いは何ですか?


92

インスタンスとオブジェクトの違いは何ですか?違いはありますか?


10
よく知られているエラーメッセージ「オブジェクト参照がオブジェクトのインスタンスに設定されていません」から推測できるかもしれません。:->
ヘルツマイスター、

JVM仕様から:「オブジェクトは動的に割り当てられたクラスインスタンスまたは配列のいずれかです。」docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html
yfklon

StackOverFlowオブジェクトとインスタンスの違いについて簡単に説明しました
Pushkarraj Pujari 2017年

1
オブジェクトはクラスのインスタンスです。これですべてです。
ローン侯爵

回答:


49

インスタンスはメモリ内のオブジェクトです。基本的には、オブジェクトを作成し、使用時にインスタンス化します。

ここでは、クラスとオブジェクト、そしてインスタンスについての素晴らしい記事があります。彼はJavaについて話していますが、すべてのオブジェクト指向に当てはまります。

http://alfredjava.wordpress.com/2008/07/08/class-vs-object-vs-instance/


27
このブログ投稿では何も説明されていません。
Koray Tugay

つまり、オブジェクト==クラスを意味しますか?または、クラスがロードされ、オブジェクトになり、インスタンス化されてインスタンスになるオブジェクトですか?混乱して答えませんか?
p_champ

クラスを定義のように考えてください。クラスをインスタンス化すると、使用できるオブジェクトができます。そのオブジェクトはメモリ内で物理的に表現されます。
ダスティンレイン

@Dustin Laineの違いはまだはっきりしていません。手伝ってくれませんか?
Pie

@DustinLaineこの質問は、「インスタンス」と「オブジェクト」の違いを尋ねます。しかし、この答えでは、説明されているのは、「オブジェクト」を取得するためのクラスの「インスタンス化」のプロセスです。投稿とコメントが一致しません。記事では、「インスタンス」はメモリ内のオブジェクトであると述べられています。ただし、コメントでは、クラスをインスタンス化した後、メモリで表される「オブジェクト」を取得することが述べられています。これは少しあいまいです。
Srishti

56

インスタンスとオブジェクトはオブジェクト指向プログラミングからのものです。

Java、C ++、Smalltalkなどの一部のプログラミング言語では、コードを記述して理解することが重要です。構造化プログラミングで使用されている他の言語では、この概念は存在しません。

これは構造プログラミングからのビューです。時間を使いすぎてしまうほどの大きな違いはありません。一部の人々が書くために多くのスペースを取るかもしれないいくつかの派手な言語があるかもしれませんが、結局のところ、コーダー、開発者、プログラマー、アーキテクトに関する限り、クラスのインスタンスとオブジェクトは同じことを意味し、しばしば同じ意味で使用できます。私のキャリアの中で、うるさくて、違いを指摘しようとする30時間を費やした人に会ったことはありません。時間は、他の開発作業に費やすほうがよいでしょう。

更新 Swiftに関して、これはSwiftを発明したAppleが好むものです:

クラスのインスタンスは、伝統的にオブジェクトとして知られています。ただし、Swiftのクラスと構造は、他の言語よりも機能がはるかに近く、この章の多くは、クラスまたは構造タイプのインスタンスに適用できる機能について説明しています。このため、より一般的なインスタンスが使用されます。


20

すばらしい質問です。

できるだけ簡単に説明します。バスケットにリンゴが5個入っているとします。これらのリンゴはそれぞれ、タイプAppleのオブジェクトであり、いくつかの特性があります(つまり、大きく、丸く、木で育つ)。

プログラミング用語では、変数size:big、shape:round、habitat:grows on treesを持つAppleと呼ばれるクラスを持つことができます。バスケットに5つのリンゴを入れるには、5つのリンゴをインスタンス化する必要がありますApple apple1, Apple apple2, Apple apple3 etc...

あるいは、オブジェクトは何かの定義であり、インスタンスは物理的なものです。

これは理にかなっていますか?


60
そうではありません。:)「オブジェクトは何かの定義です」ここでオブジェクトと呼ぶのはクラスです。
T-Gergely、2016

11

インスタンス:インスタンスは、参照(コピー)を作成するだけです。

オブジェクト:メモリ位置がnew演算子を使用してオブジェクト(クラスのランタイムエンティティ)に関連付けられている場合を意味します。

簡単に言うと、インスタンスは特定の時点でのオブジェクトのコピーを指し、オブジェクトはクラスのメモリアドレスを指します。


1
インスタンスはオブジェクトへの参照であると言って、本当に私にとっては物事を片付けました。
ジョンC

2
@JohnC正しくないため、すべきではありません。オブジェクトはクラスのインスタンスです。これですべてです。
ローン侯爵

8

いくつかの椅子を作成しているとしましょう。

椅子を作成して組み立てる方法を示す図は、ソフトウェアクラスに対応しています。

その図のパターンに従って5つの椅子を作成するとします。同様に、クラスのパターンに従って5つのソフトウェアオブジェクトを作成できます。

各椅子には、特定の椅子を識別するために、座席の下部に焼き付けられた一意の番号が付いています。椅子3は、椅子パターンの1つのインスタンスです。同様に、メモリロケーション3には、ソフトウェアパターンの1つのインスタンスを含めることができます。

したがって、インスタンス(椅子3)は、椅子パターンの1つの一意で特定の症状です。


2
オブジェクトはクラスのインスタンスです。インスタンスはオブジェクトのインスタンスではありません。答えは無意味です。
ローン侯爵

1
うわー、9年後、誰かがついに私の説明の欠陥を指摘しました。ありがとう!今はまし?
Brian Showalter

7

オブジェクト

これは一般的な用語であり、基本的には状態(変数)と動作(メソッド)を持つソフトウェアバンドルです。

クラス

オブジェクトインスタンスのブループリント(テンプレート)-一意のオブジェクトです。たとえば、オブジェクトを2回作成すると、2つのインスタンスが作成されたことになります。

例を挙げましょう

Class student()
{
   private string firstName;
  public student(string fname)
  {
    firstName=fname;
  }
  Public string GetFirstName()
  {
    return firstName;
  }
}

オブジェクトの例

学生s1 = new student( "Martin"); Student s2 = new student( "Kumar");

s1、s2にはクラスStudentのオブジェクトがあります

インスタンス

s1とs2は、2つが一意のオブジェクトstudentのインスタンスです。

参照として呼び出すこともできます。

基本的にs1とs2はオブジェクトが割り当てられた変数です


1
オブジェクトはクラスのインスタンスです。
ローンの侯爵

7

オブジェクトとインスタンスはほとんど同じです。しかし、非常に小さな違いがあります。Carがクラスの場合、3 Carは3つの異なるオブジェクトです。これらのオブジェクトはすべてインスタンスです。したがって、これらの3台の車はCarクラスのインスタンスからのオブジェクトです。

ただし、「インスタンス」という言葉は「構造体インスタンス」も意味します。ただし、オブジェクトはクラス専用です。

すべてのオブジェクトはインスタンスです。すべてのインスタンスがオブジェクトである必要はありません。インスタンスは、「構造インスタンス」または「オブジェクト」の場合があります。これにより、違いが明確になることを願っています。


3

オブジェクトは構成体であり、プロパティやメソッドなどの特定の機能と特性を持つ静的なものであり、何でもかまいません(文字列、ユーザーコントロールなど)。

インスタンスは、そのオブジェクトの一意のコピーであり、使用して操作できます。

コンピュータのような製品を想像してみてください。

xw6400ワークステーションはオブジェクトです

あなたのxw6400ワークステーション(またはあなたの妻のxw6400ワークステーション)はxw6400ワークステーションオブジェクトのインスタンスです


1
最初と2番目の段落は、オブジェクトではなくクラスを記述しています。
ローンの侯爵

2

この答えはささいなことのように見えるかもしれませんが、インスタンスとオブジェクトの違いを心配することは、すでにささいなことです。

私はそれがjavascriptで最もよく描かれていると思います:

let obj= {"poo":1} 
// "obj" is an object

Class Trash {
    constructor(){this.poo = 1;}
}

let i = new Trash();
// "i" is an instance

1

インスタンスは、オブジェクトの特定の表現です。オブジェクトは一般的なものであり、インスタンスはメモリ内に作成された単一のオブジェクトです。通常、インスタンスには、そのタイプのオブジェクトの他のインスタンスと区別するプロパティが割り当てられています。


1

オブジェクトの定義とインスタンスオブジェクトが表示された場合-

実行時にクラスのメンバーに割り当てられたメモリはオブジェクトと呼ばれるか、オブジェクトはクラスのインスタンスです。

インスタンスの定義を見てみましょう-

実行時にFor Anyに割り当てられたメモリは、インスタンス変数として呼び出されます。

今の意味を理解する任意の実行時のメモリ割り当ては、mallocの、のcalloc、済み再割り当てなどからもCで行われます。

struct p
{

}
p *t1
t1=(p) malloc(sizeof(p))

したがって、ここでも実行時のメモリ割り当てを割り当てていますが、ここではインスタンスとして呼び出します。t1がインスタンスであり、オブジェクトとしてt1とは言えないため、すべてのオブジェクトはクラスのインスタンスですが、すべてのインスタンスはオブジェクトではありません。


どこかに正しい答えが潜んでいますが、言語をクリーンアップして単純化する必要があります。
ローンの侯爵

1

オブジェクト-独自の状態を持ち、クラスによって定義されたすべての動作にアクセスできるクラスのインスタンス。

インスタンス-特定のクラスのメモリ領域への参照。


1

誰もコードを使用してこれを説明したことがない人を除いて、私も信じられません、私も試してみましょう!

// Design Class
class HumanClass {
    var name:String
    init(name:String) {
        self.name = name
    }
}

var humanClassObject1 = HumanClass(name: "Rehan") 

これで、左側のie: "humanClassObject1"がオブジェクトになり、右側のie:HumanClass(name: "Rehan")がこのオブジェクトのインスタンスになります。

var humanClassObject2 = HumanClass(name: "Ahmad") // again object on left and it's instance on the right.

つまり、基本的に、インスタンスにはそのオブジェクトの特定の値が含まれ、オブジェクトには(実行時の)メモリ位置が含まれます。

「オブジェクト参照がオブジェクトのインスタンスに設定されていません」という有名なステートメントを思い出してください。これは、初期化されていないオブジェクトにはインスタンスがないことを意味します。swiftのような一部のプログラミング言語では、コンパイラーは、そのすべてのメンバー(変数:名前、年齢など)を初期化する方法がないクラスを設計することさえできませんが、一部の言語ではこれを行うことができます。

// Design Class
class HumanClass {
    var name:String // See we don't have any way to initialise name property.
}

そして、このようなことを実行しようとすると、実行時にのみエラーが表示されます。

var myClass = HumanClass()
print(myClass.name) // will give, object reference not set to an instance of the object.

このエラーは、上記で説明しようとしたように、特定の値(変数\プロパティ)がインスタンス」であることを示しています。また、オブジェクト「myClass」には、(実行時の)メモリ位置が含まれています。


1

変数がカスタムタイプ(クラス)で宣言されると、オブジェクトと呼ばれる参照のみが作成されます。この段階では、このオブジェクトにメモリは割り当てられていません。これは、(オブジェクトが将来格納される場所への)ポインタとして機能します。このプロセスは「宣言」と呼ばれます。

Employee e; // e is an object

一方、カスタムタイプの変数がnew演算子を使用して宣言されている場合、このオブジェクトにヒープ内のメモリが割り当てられ、割り当てられたメモリへの参照が返されます。このオブジェクトは、現在インスタンスと呼ばれています。このプロセスは「インスタンス化」と呼ばれます。

Employee e = new Employee(); // e is an instance

一方、Javaなどの一部の言語では、Java に関するOracleのドキュメントに記述されている行から明らかなように、オブジェクトはインスタンスに相当します

注:「クラスのインスタンス化」という語句は、「オブジェクトの作成」と同じ意味です。オブジェクトを作成すると、クラスの「インスタンス」を作成することになるため、クラスを「インスタンス化」します。


0

各オブジェクトはそのクラスのインスタンスであると言われていますが、クラスの各インスタンスは各属性に独自の値を持っています


0

クラス:クラスは設計図です。オブジェクト:クラスのコピーです。インスタンス:オブジェクトのメモリアドレスを保持するために使用される変数。

非常に基本的な分析例

クラスハウス->家の青写真。しかし、青写真に住むことはできません。住むクラスのインスタンスである物理的なHouseが必要です。つまり、オブジェクトの実際のアドレスはインスタンスです。インスタンスはオブジェクトを表します。


インスタンスは変数ではなくオブジェクトを参照します。
ローンの侯爵

0

(newを使用して)クラスをインスタンス化すると、そのインスタンス化されたものがオブジェクトになります。オブジェクトとは、オブジェクト指向プログラミングのカプセル化、ポリモーフィズム、抽象化の原則、およびクラスで定義されたインスタンスメンバーを消費するためにプログラムが対話する本物に準拠できるものです。オブジェクトにインスタンスメンバー(非静的メンバー)が含まれています。

したがって、クラスのインスタンスはオブジェクトです。「インスタンス」という言葉は、それが生まれた場所の起源を指す場合に使用されます。「クラスのオブジェクト」と比較して「クラスのインスタンス」と言った方が明確です(後者は使用できます)。

ネストされたクラスに関するこのJavaドキュメントの「内部クラス」セクションを読むこともできます-https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html


0

Javaはオブジェクト指向プログラミング言語(OOP)です。これは、プリミティブ型を除くJavaのすべてがオブジェクトであることを意味します。

現在、Javaオブジェクトは実際のオブジェクトに似ています。たとえば、現在の速度や色などのプロパティを持つ車のオブジェクトをJavaで作成できます。とのような行動:加速して駐車。

それがオブジェクトです。

ここに画像の説明を入力してください

反対に、インスタンスは、そのオブジェクトの一意に初期化されたコピーですCar car = new Car()

Javaクラスとオブジェクトの詳細については、こちらをご覧ください。


オブジェクトはクラスのインスタンスです。
ローンの侯爵

0

すばやく簡単な答え

  • クラスオブジェクトの仕様、設計図
  • オブジェクトメモリ内のクラスの物理的存在
  • インスタンスオブジェクトの一意のコピー(同じ構造、異なるデータ)

-1

an objectとの違いについてinstanceは、コンセンサスがあるとは思いません。

紙、ブログの投稿、本、会話の中で、人々がそれをほとんど同じように変更しているように見えます。

私と同じように、オブジェクトはメモリ内の一般的で生きているエンティティであり、使用されている言語によって指定されます。ちょうどのObjectクラスと同じJavaです。コンテナーで管理されているかどうかに関係なく、そのタイプやそれに関連する他のことはあまり気にしません。

ANはinstanceあるobjectが、同様に、タイプに関連付けられたthis method accepts Foo instances、またはyou can not put Animal instances in an instance of a List of Vehicles

objectたとえばlocksinstancesにはsではなくそれらが関連付けられていますが、instancesにはメソッドがあります。objectsガベージコレクションであり、instances ではありません。

しかし、私が言ったように、これは私がそれを見る方法だけであり、私たちはそれらの間の標準的な定義のために参照できる組織はないと思います、そして誰もが彼らのわずかに異なる理解/定義を持っています(もちろん範囲内) 。


-1

オブジェクトは一般的なものです。たとえば、数学で線形関数をとります

ax + bはオブジェクトですが、3x + 2はそのオブジェクトのインスタンスです

オブジェクト<<<インスタンス

一般<<<特定

これにはこれ以上何もありません


-2

オブジェクトはクラスにすることができます。たとえば、バスケットボールというクラスがあるとします。

しかし、あなたは複数のバスケットボールを持ちたいので、あなたのコードであなたは複数のバスケットボールを作成します

バスケットボール1とバスケットボール2と言います。次に、アプリケーションを実行します。オブジェクトバスケットボールの2つのインスタンスができました。


つまり、オブジェクトはクラスコンストラクタのインスタンスですか?
10

オブジェクトを青写真のように考えます。バスケットボールの設計図があるとしましょう。それがクラスです。バスケットボールが作成されて存在するようになると、オブジェクトバスケットボールのインスタンスが1つあることになります。オブジェクト(ブループリント)から別のバスケットボールを構築した場合。これで、バスケットボールの2つのインスタンスができました。オブジェクトは常に1つしかありませんが、そのオブジェクトのインスタンスを多数作成できます。
Darxval

@Darxval次にクラスとは何か
Chyanit Singh

-3

オブジェクトはクラスを参照し、インスタンスはオブジェクトを参照します。つまり、インスタンスは特定の値を持つオブジェクトのコピーです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.