インスタンスとオブジェクトの違いは何ですか?違いはありますか?
インスタンスとオブジェクトの違いは何ですか?違いはありますか?
回答:
インスタンスはメモリ内のオブジェクトです。基本的には、オブジェクトを作成し、使用時にインスタンス化します。
ここでは、クラスとオブジェクト、そしてインスタンスについての素晴らしい記事があります。彼はJavaについて話していますが、すべてのオブジェクト指向に当てはまります。
http://alfredjava.wordpress.com/2008/07/08/class-vs-object-vs-instance/
インスタンスとオブジェクトはオブジェクト指向プログラミングからのものです。
Java、C ++、Smalltalkなどの一部のプログラミング言語では、コードを記述して理解することが重要です。構造化プログラミングで使用されている他の言語では、この概念は存在しません。
これは構造プログラミングからのビューです。時間を使いすぎてしまうほどの大きな違いはありません。一部の人々が書くために多くのスペースを取るかもしれないいくつかの派手な言語があるかもしれませんが、結局のところ、コーダー、開発者、プログラマー、アーキテクトに関する限り、クラスのインスタンスとオブジェクトは同じことを意味し、しばしば同じ意味で使用できます。私のキャリアの中で、うるさくて、違いを指摘しようとする30時間を費やした人に会ったことはありません。時間は、他の開発作業に費やすほうがよいでしょう。
更新 Swiftに関して、これはSwiftを発明したAppleが好むものです:
クラスのインスタンスは、伝統的にオブジェクトとして知られています。ただし、Swiftのクラスと構造は、他の言語よりも機能がはるかに近く、この章の多くは、クラスまたは構造タイプのインスタンスに適用できる機能について説明しています。このため、より一般的なインスタンスが使用されます。
すばらしい質問です。
できるだけ簡単に説明します。バスケットにリンゴが5個入っているとします。これらのリンゴはそれぞれ、タイプAppleのオブジェクトであり、いくつかの特性があります(つまり、大きく、丸く、木で育つ)。
プログラミング用語では、変数size:big、shape:round、habitat:grows on treesを持つAppleと呼ばれるクラスを持つことができます。バスケットに5つのリンゴを入れるには、5つのリンゴをインスタンス化する必要があります。Apple apple1, Apple apple2, Apple apple3 etc...
。
あるいは、オブジェクトは何かの定義であり、インスタンスは物理的なものです。
これは理にかなっていますか?
いくつかの椅子を作成しているとしましょう。
椅子を作成して組み立てる方法を示す図は、ソフトウェアクラスに対応しています。
その図のパターンに従って5つの椅子を作成するとします。同様に、クラスのパターンに従って5つのソフトウェアオブジェクトを作成できます。
各椅子には、特定の椅子を識別するために、座席の下部に焼き付けられた一意の番号が付いています。椅子3は、椅子パターンの1つのインスタンスです。同様に、メモリロケーション3には、ソフトウェアパターンの1つのインスタンスを含めることができます。
したがって、インスタンス(椅子3)は、椅子パターンの1つの一意で特定の症状です。
オブジェクト:
これは一般的な用語であり、基本的には状態(変数)と動作(メソッド)を持つソフトウェアバンドルです。
クラス:
オブジェクトインスタンスのブループリント(テンプレート)-一意のオブジェクトです。たとえば、オブジェクトを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はオブジェクトが割り当てられた変数です
オブジェクトとインスタンスはほとんど同じです。しかし、非常に小さな違いがあります。Car
がクラスの場合、3 Car
は3つの異なるオブジェクトです。これらのオブジェクトはすべてインスタンスです。したがって、これらの3台の車はCar
クラスのインスタンスからのオブジェクトです。
ただし、「インスタンス」という言葉は「構造体インスタンス」も意味します。ただし、オブジェクトはクラス専用です。
すべてのオブジェクトはインスタンスです。すべてのインスタンスがオブジェクトである必要はありません。インスタンスは、「構造インスタンス」または「オブジェクト」の場合があります。これにより、違いが明確になることを願っています。
オブジェクトは構成体であり、プロパティやメソッドなどの特定の機能と特性を持つ静的なものであり、何でもかまいません(文字列、ユーザーコントロールなど)。
インスタンスは、そのオブジェクトの一意のコピーであり、使用して操作できます。
コンピュータのような製品を想像してみてください。
xw6400ワークステーションはオブジェクトです
あなたのxw6400ワークステーション(またはあなたの妻のxw6400ワークステーション)はxw6400ワークステーションオブジェクトのインスタンスです
オブジェクトの定義とインスタンスオブジェクトが表示された場合-
実行時にクラスのメンバーに割り当てられたメモリはオブジェクトと呼ばれるか、オブジェクトはクラスのインスタンスです。
インスタンスの定義を見てみましょう-
実行時にFor Anyに割り当てられたメモリは、インスタンス変数として呼び出されます。
今の意味を理解する任意の実行時のメモリ割り当ては、mallocの、のcalloc、済み再割り当てなどからもCで行われます。
struct p
{
}
p *t1
t1=(p) malloc(sizeof(p))
したがって、ここでも実行時のメモリ割り当てを割り当てていますが、ここではインスタンスとして呼び出します。t1がインスタンスであり、オブジェクトとしてt1とは言えないため、すべてのオブジェクトはクラスのインスタンスですが、すべてのインスタンスはオブジェクトではありません。
誰もコードを使用してこれを説明したことがない人を除いて、私も信じられません、私も試してみましょう!
// 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」には、(実行時の)メモリ位置が含まれています。
変数がカスタムタイプ(クラス)で宣言されると、オブジェクトと呼ばれる参照のみが作成されます。この段階では、このオブジェクトにメモリは割り当てられていません。これは、(オブジェクトが将来格納される場所への)ポインタとして機能します。このプロセスは「宣言」と呼ばれます。
Employee e; // e is an object
一方、カスタムタイプの変数がnew
演算子を使用して宣言されている場合、このオブジェクトにヒープ内のメモリが割り当てられ、割り当てられたメモリへの参照が返されます。このオブジェクトは、現在インスタンスと呼ばれています。このプロセスは「インスタンス化」と呼ばれます。
Employee e = new Employee(); // e is an instance
一方、Javaなどの一部の言語では、Java に関するOracleのドキュメントに記述されている行から明らかなように、オブジェクトはインスタンスに相当します。
注:「クラスのインスタンス化」という語句は、「オブジェクトの作成」と同じ意味です。オブジェクトを作成すると、クラスの「インスタンス」を作成することになるため、クラスを「インスタンス化」します。
各オブジェクトはそのクラスのインスタンスであると言われていますが、クラスの各インスタンスは各属性に独自の値を持っています
(newを使用して)クラスをインスタンス化すると、そのインスタンス化されたものがオブジェクトになります。オブジェクトとは、オブジェクト指向プログラミングのカプセル化、ポリモーフィズム、抽象化の原則、およびクラスで定義されたインスタンスメンバーを消費するためにプログラムが対話する本物に準拠できるものです。オブジェクトにインスタンスメンバー(非静的メンバー)が含まれています。
したがって、クラスのインスタンスはオブジェクトです。「インスタンス」という言葉は、それが生まれた場所の起源を指す場合に使用されます。「クラスのオブジェクト」と比較して「クラスのインスタンス」と言った方が明確です(後者は使用できます)。
ネストされたクラスに関するこのJavaドキュメントの「内部クラス」セクションを読むこともできます-https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
Javaはオブジェクト指向プログラミング言語(OOP)です。これは、プリミティブ型を除くJavaのすべてがオブジェクトであることを意味します。
現在、Javaオブジェクトは実際のオブジェクトに似ています。たとえば、現在の速度や色などのプロパティを持つ車のオブジェクトをJavaで作成できます。とのような行動:加速して駐車。
それがオブジェクトです。
反対に、インスタンスは、そのオブジェクトの一意に初期化されたコピーですCar car = new Car()
。
Javaクラスとオブジェクトの詳細については、こちらをご覧ください。
すばやく簡単な答え
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
たとえばlocks
、instance
sにはsではなくそれらが関連付けられていますが、instance
sにはメソッドがあります。objects
ガベージコレクションであり、instance
s ではありません。
しかし、私が言ったように、これは私がそれを見る方法だけであり、私たちはそれらの間の標準的な定義のために参照できる組織はないと思います、そして誰もが彼らのわずかに異なる理解/定義を持っています(もちろん範囲内) 。
オブジェクトはクラスにすることができます。たとえば、バスケットボールというクラスがあるとします。
しかし、あなたは複数のバスケットボールを持ちたいので、あなたのコードであなたは複数のバスケットボールを作成します
バスケットボール1とバスケットボール2と言います。次に、アプリケーションを実行します。オブジェクトバスケットボールの2つのインスタンスができました。
オブジェクトはクラスを参照し、インスタンスはオブジェクトを参照します。つまり、インスタンスは特定の値を持つオブジェクトのコピーです。