Was ist der Unterschied zwischen einer Instanz und einem Objekt?

92

Was ist der Unterschied zwischen einer Instanz und einem Objekt? Gibt es einen Unterschied oder nicht?

Straßenparade
quelle
10
Möglicherweise können Sie aus der bekannten Fehlermeldung " Objektreferenz nicht auf eine Instanz eines Objekts festgelegt " schließen. : ->
herzmeister
Von JVM spec: „Ein Objekt ist entweder eine dynamisch zugewiesene Klasseninstanz oder ein Array.“ Docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html
yfklon
StackOverFlow Ich habe gerade eine kurze Beschreibung des Unterschieds zwischen Objekt und Instanz gegeben. Ich hoffe, es hilft
Pushkarraj Pujari
1
Ein Objekt ist eine Instanz einer Klasse. Das ist alles dazu.
Marquis von Lorne

Antworten:

48

Eine Instanz ist ein Objekt im Speicher. Grundsätzlich erstellen Sie Objekte und instanziieren sie, wenn Sie sie verwenden.

Hier ist eine nette Zusammenfassung über Klassen gegen Objekte gegen Instanzen, er spricht Java, aber es gilt für alle OO.

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

Dustin Laine
quelle
26
Dieser Blog-Beitrag erklärt nichts.
Koray Tugay
Du meinst also Objekt == Klasse? oder meinst du Klasse geladen und wird Objekt und Objekt instanziiert, um Instanz zu werden? Antwortest du nicht verwirrend?
p_champ
Stellen Sie sich Klasse wie eine Definition vor. Wenn Sie die Klasse instanziieren, haben Sie das Objekt, das dann verwendet werden kann. Dieses Objekt wird physisch im Speicher dargestellt.
Dustin Laine
@Dustin Laine der Unterschied ist noch nicht klar. Können Sie mir bitte helfen?
Pie
@DustinLaine Die Frage stellt den Unterschied zwischen 'Instanz' und 'Objekt'. In dieser Antwort wurde jedoch der Prozess der "Instanziierung" einer Klasse erklärt, um "Objekt" zu erhalten. Ihr Beitrag und Kommentar stimmen nicht überein. In dem Beitrag wird erwähnt, dass eine 'Instanz' ein Objekt im Speicher ist. In dem Kommentar wird jedoch erwähnt, dass Sie nach dem Instanziieren der Klasse das 'Objekt' erhalten, das im Speicher dargestellt wird. Das ist etwas mehrdeutig.
Srishti
56

Die Instanz und das Objekt stammen aus der objektorientierten Programmierung .

Für einige Programmiersprachen wie Java, C ++ und Smalltalk ist es wichtig, Code zu beschreiben und zu verstehen. In anderen Sprachen, die in der strukturierten Programmierung verwendet werden, existiert dieses Konzept nicht.

Dies ist eine Ansicht aus der Strukturprogrammierung. Es gibt keinen wirklich signifikanten Unterschied, der zu viel Zeit in Anspruch nehmen sollte. Es mag eine ausgefallene Sprache geben, über die manche Leute viel Platz zum Schreiben einnehmen, aber am Ende des Tages, was einen Programmierer, Entwickler, Programmierer, Architekten betrifft, eine Instanz einer Klasse und eine Objekt bedeuten dasselbe und können oft synonym verwendet werden. Ich habe in meiner Karriere noch nie jemanden getroffen, der wählerisch wäre und eine halbe Stunde damit verbringen würde, auf die Unterschiede hinzuweisen, weil es wirklich keine gibt. Zeit kann besser für andere Entwicklungsbemühungen aufgewendet werden.

UPDATE In Bezug auf Swift bevorzugt Apple, der Swift erfunden hat, Folgendes:

Eine Instanz einer Klasse wird traditionell als Objekt bezeichnet. Swift-Klassen und -Strukturen sind jedoch in ihrer Funktionalität viel näher als in anderen Sprachen, und ein Großteil dieses Kapitels beschreibt Funktionen, die für Instanzen einer Klasse oder eines Strukturtyps gelten können. Aus diesem Grund wird der allgemeinere Begriff Instanz verwendet.

Kevin Le - Khnle
quelle
20

Ausgezeichnete Frage.

Ich erkläre es so einfach wie möglich: Angenommen, Sie haben 5 Äpfel in Ihrem Korb. Jeder dieser Äpfel ist ein Objekt vom Typ Apple, das einige Eigenschaften aufweist (dh groß, rund, wächst auf Bäumen).

In Bezug auf die Programmierung können Sie eine Klasse namens Apple haben, deren Variablen Größe: groß, Form: rund, Lebensraum: wächst auf Bäumen. Um 5 Äpfel in Ihrem Warenkorb zu haben, müssen Sie 5 Äpfel instanziieren . Apple apple1, Apple apple2, Apple apple3 etc....

Alternativ: Objekte sind die Definitionen von etwas, Instanzen sind die physischen Dinge.

Macht das Sinn?

Yuval Karmi
quelle
60
Das tut es nicht. :) "Objekte sind die Definitionen von etwas" Was Sie hier Objekte nennen, sind Klassen.
T-Gergely
11

Instanz: Instanz bedeutet nur das Erstellen einer Referenz (Kopie).

Objekt: bedeutet, dass der Speicherort dem Objekt zugeordnet ist (eine Laufzeitentität der Klasse ist), indem der neue Operator verwendet wird.

In einfachen Worten bezieht sich Instanz auf die Kopie des Objekts zu einem bestimmten Zeitpunkt, während sich Objekt auf die Speicheradresse der Klasse bezieht.

karthik reddy
quelle
1
Zu sagen, dass eine Instanz ein Verweis auf ein Objekt ist, hat die Dinge für mich wirklich geklärt.
John C
1
@ JohnC Es sollte nicht, weil es nicht korrekt ist. Ein Objekt ist eine Instanz einer Klasse. Das ist alles dazu.
Marquis von Lorne
8

Nehmen wir an, Sie bauen Stühle.

Das Diagramm, das zeigt, wie ein Stuhl gebaut und zusammengesetzt wird, entspricht einer Softwareklasse.

Angenommen, Sie bauen fünf Stühle nach dem Muster in diesem Diagramm. Ebenso können Sie fünf Softwareobjekte gemäß dem Muster in einer Klasse erstellen.

Jeder Stuhl hat eine eindeutige Nummer, die in die Unterseite des Sitzes eingebrannt ist, um jeden bestimmten Stuhl zu identifizieren. Stuhl 3 ist eine Instanz eines Stuhlmusters. Ebenso kann Speicherplatz 3 eine Instanz eines Softwaremusters enthalten.

Eine Instanz (Stuhl 3) ist also eine einzelne, spezifische Manifestation eines Stuhlmusters.

Brian Showalter
quelle
2
Ein Objekt ist eine Instanz einer Klasse. Eine Instanz ist keine Instanz eines Objekts. Die Antwort ist bedeutungslos.
Marquis von Lorne
1
Wow, nach neun Jahren hat endlich jemand auf den Fehler in meiner Erklärung hingewiesen. Vielen Dank! Besser jetzt?
Brian Showalter
7

Objekt :

Es ist ein allgemeiner Begriff, im Grunde ist es ein Softwarepaket, das Status (Variablen) und Verhalten (Methoden) hat.

Klasse :

Eine Blaupause (Vorlage) für eine Objektinstanz - es ist eine einzigartige Objektsache, zum Beispiel, dass Sie ein Objekt zweimal erstellen. Das bedeutet, dass Sie zwei Instanzen erstellt haben

Lassen Sie mich ein Beispiel geben

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

Objektbeispiel :

Student s1 = neuer Student ("Martin"); Student s2 = neuer Student ("Kumar");

Die s1, s2 haben Objekte der Klasse Student

Instanz :

s1 und s2 sind Instanzen von Objektschülern, die beiden sind eindeutig .

es kann auch als Referenz bezeichnet werden .

Grundsätzlich sind s1 und s2 Variablen, denen ein Objekt zugewiesen ist

Durai Amuthan.H
quelle
1
Ein Objekt ist eine Instanz einer Klasse.
Marquis von Lorne
7

Objekte und Instanzen sind meistens gleich; aber es gibt einen sehr kleinen Unterschied. Wenn Cares sich um eine Klasse handelt, sind 3 Cars 3 verschiedene Objekte. Alle diese Objekte sind Instanzen. Diese 3 Autos sind also Objekte aus Instanzen der CarKlasse.

Das Wort "Instanz" kann aber auch "Strukturinstanz" bedeuten. Objekt ist aber nur für Klassen.

Alle Objekte sind Instanzen. Nicht alle Instanzen müssen Objekte sein. Instanzen können "Strukturinstanzen" oder "Objekte" sein. Ich hoffe, das macht Ihnen den Unterschied klar.

DotNet Harsha Vardhan
quelle
3

Ein Objekt ist ein Konstrukt, etwas Statisches, das bestimmte Merkmale und Eigenschaften wie Eigenschaften und Methoden aufweist. Es kann alles sein (eine Zeichenfolge, eine Benutzersteuerung usw.).

Eine Instanz ist eine eindeutige Kopie dieses Objekts, mit der Sie Dinge ausführen können.

Stellen Sie sich ein Produkt wie einen Computer vor.

Die xw6400-Workstation ist ein Objekt

IHRE xw6400-Workstation (oder die xw6400-Workstation IHRER FRAU) ist eine Instanz des xw6400-Workstation-Objekts

Greg Olmstead
quelle
1
Ihr erster und zweiter Absatz beschreiben Klassen, keine Objekte.
Marquis von Lorne
2

Diese Antwort kann als banal angesehen werden, aber die Sorge um die Unterschiede zwischen einer Instanz und einem Objekt ist bereits eine banale Stadt.

Ich denke, es ist am besten in Javascript dargestellt:

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

Verse

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

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

Eine Instanz ist eine bestimmte Darstellung eines Objekts. Ein Objekt ist eine generische Sache, während eine Instanz ein einzelnes Objekt ist, das im Speicher erstellt wurde. Normalerweise werden einer Instanz Werte zugewiesen, die sie von anderen Instanzen des Objekttyps unterscheiden.

TLiebe
quelle
1

Wenn wir die Definition von Objekt und Instanzobjekt sehen -

Der zur Laufzeit für das Klassenmitglied zugewiesene Speicher wird als Objekt bezeichnet, oder Objekt ist die Instanz der Klasse.

Lassen Sie uns die Definition der Instanz sehen -

Der zur Laufzeit für Any zugewiesene Speicher wird als Instanzvariable aufgerufen.

Verstehen Sie nun die Bedeutung jeder Laufzeitspeicherzuweisung, die in C auch über Malloc, Calloc, Realloc erfolgt, wie z.

struct p
{

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

Auch hier weisen wir die Laufzeitspeicherzuweisung zu, aber hier rufen wir als Instanz auf, sodass t1 eine Instanz ist. Hier können wir t1 nicht als Objekt bezeichnen. Jedes Objekt ist die Instanz der Klasse, aber jede Instanz ist kein Objekt.

Vivek Kumar
quelle
Irgendwo lauert hier eine richtige Antwort, aber die Sprache muss aufgeräumt und vereinfacht werden.
Marquis von Lorne
1

Objekt - Eine Instanz einer Klasse, die über einen eigenen Status und Zugriff auf das gesamte von ihrer Klasse definierte Verhalten verfügt.

Instanz - Verweis auf einen Speicherbereich für diese bestimmte Klasse.

Prathipati s
quelle
1

Ich kann es nicht glauben, außer einem Mann, der den Code nicht benutzt hat, um das zu erklären, lass es mich auch versuchen!

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

var humanClassObject1 = HumanClass(name: "Rehan") 

Jetzt ist die linke Seite, dh: "humanClassObject1", das Objekt und die rechte Seite, dh: HumanClass (Name: "Rehan") ist die Instanz dieses Objekts.

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

Die Instanz enthält also im Grunde genommen die spezifischen Werte für dieses Objekt und die Objekte enthalten den Speicherort (zur Laufzeit).

Denken Sie an die berühmte Aussage "Objektreferenz nicht auf eine Instanz eines Objekts festgelegt". Dies bedeutet, dass nicht initialisierte Objekte keine Instanz haben. In einigen Programmiersprachen wie swift erlaubt Ihnen der Compiler nicht einmal, eine Klasse zu entwerfen, die nicht alle Mitglieder initialisieren kann (Variable, z. B. Name, Alter usw.), aber in einigen Sprachen dürfen Sie dies tun:

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

Und der Fehler wird nur zur Laufzeit angezeigt, wenn Sie versuchen, Folgendes zu tun:

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

Dieser Fehler zeigt an, dass die spezifischen Werte (für Variablen \ Eigenschaft) "INSTANZ" sind, wie ich oben versucht habe, dies zu erklären! Und das Objekt dh: "myClass" enthält den Speicherort (zur Laufzeit).

Rehan Ali Khan
quelle
1

Wenn eine Variable von einem benutzerdefinierten Typ (Klasse) deklariert wird, wird nur eine Referenz erstellt, die als Objekt bezeichnet wird. Zu diesem Zeitpunkt ist diesem Objekt kein Speicher zugeordnet . Es fungiert nur als Zeiger (auf den Ort, an dem das Objekt in Zukunft gespeichert wird). Dieser Vorgang wird als "Erklärung" bezeichnet.

Employee e; // e is an object

Wenn andererseits eine Variable vom Typ "Benutzerdefiniert" mit dem newOperator deklariert wird, der diesem Objekt Speicher im Heap zuweist und den Verweis auf den zugewiesenen Speicher zurückgibt. Dieses Objekt, das jetzt als Instanz bezeichnet wird . Dieser Vorgang wird als "Instanziierung" bezeichnet.

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

Andererseits entspricht ein Objekt in einigen Sprachen wie Java einer Instanz, wie aus der Zeile in der Oracle-Dokumentation zu Java hervorgeht :

Hinweis: Der Ausdruck "Instanziieren einer Klasse" bedeutet dasselbe wie "Erstellen eines Objekts". Wenn Sie ein Objekt erstellen, erstellen Sie eine "Instanz" einer Klasse und "instanziieren" daher eine Klasse.

Srishti
quelle
0

Jedes Objekt, das als Instanz seiner Klasse bezeichnet wird, aber jede Instanz der Klasse hat einen eigenen Wert für jedes Attribut. intances teilt den Attributnamen und die Operation mit ihren Intanzen der Klasse, aber ein Objekt enthält einen impliziten Verweis auf seine on-Klasse

user2750565
quelle
0

Klasse: Eine Klasse ist eine Blaupause. Objekt: Es ist die Kopie der Klasse. Instanz: Dies ist eine Variable, die verwendet wird, um die Speicheradresse des Objekts zu speichern.

Ein sehr einfaches analytisches Beispiel

Klassenhaus -> Blaupause des Hauses. Aber Sie können nicht in der Blaupause leben. Sie benötigen ein physisches Haus, das die Instanz der Klasse ist, in der Sie leben möchten. Die tatsächliche Adresse des Objekts ist also die Instanz. Instanzen repräsentieren Objekte.

Sindhu
quelle
Instanz bezieht sich auf das Objekt, nicht auf eine Variable.
Marquis von Lorne
0

Sobald Sie eine Klasse instanziieren (mit new), wird dieses instanziierte Objekt zu einem Objekt. Ein Objekt kann sich an Kapselung, Polymorphismus, Abstraktionsprinzipien der objektorientierten Programmierung und der Realität halten, mit der ein Programm interagiert, um die in der Klasse definierten Instanzmitglieder zu verbrauchen. Das Objekt enthält Instanzmitglieder (nicht statische Mitglieder).

Die Instanz einer Klasse ist also ein Objekt. Das Wort "Instanz" wird verwendet, wenn Sie sich auf den Ursprung beziehen, von dem es stammt. Es ist klarer, wenn Sie "Instanz einer Klasse" sagen, als "Objekt einer Klasse" (obwohl letzteres verwendet werden kann).

Sie können auch den Abschnitt "Innere Klassen" dieses Java-Dokuments zu verschachtelten Klassen lesen - https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

p_champ
quelle
0

Java ist eine objektorientierte Programmiersprache (OOP). Dies bedeutet, dass alles in Java außer den primitiven Typen ein Objekt ist.

Jetzt ähneln Java-Objekte realen Objekten. Zum Beispiel können wir ein Autoobjekt in Java erstellen, das Eigenschaften wie die aktuelle Geschwindigkeit und Farbe hat. und Verhalten wie: beschleunigen und parken.

Das ist Objekt .

Geben Sie hier die Bildbeschreibung ein

Die Instanz auf der anderen Seite ist eine eindeutig initialisierte Kopie dieses Objekts, die aussieht Car car = new Car().

Probieren Sie es aus, um mehr über Java-Klassen und -Objekte zu erfahren

Johnny
quelle
Ein Objekt ist eine Instanz einer Klasse.
Marquis von Lorne
0

Schnelle und einfache Antwort

  • Klasse : eine Spezifikation, Blaupause für ein Objekt
  • Objekt : physische Präsenz der Klasse im Speicher
  • Instanz : Eine eindeutige Kopie des Objekts (gleiche Struktur, unterschiedliche Daten)
Syed Ekram Uddin
quelle
-1

In Bezug auf den Unterschied zwischen einem objectund einem instanceglaube ich nicht, dass es einen Konsens gibt.

Es sieht für mich so aus, als würden die Leute es ziemlich austauschbar ändern, in Zeitungen, Blog-Posts, Büchern oder Gesprächen.

So wie ich es sehe, ist ein Objekt eine generische und lebendige Entität im Speicher, die durch die Sprache angegeben wird, in der es verwendet wird. Genau wie die ObjectKlasse in Java. Wir kümmern uns nicht viel um seinen Typ oder irgendetwas anderes, das damit verbunden ist, ob er von einem Container verwaltet wird oder nicht.

An instanceist ein objectaber einem Typ zugeordnet, wie in this method accepts Foo instancesoder you can not put Animal instances in an instance of a List of Vehicles.

objects haben zum Beispiel locksmit ihnen verbunden, nicht instances, während instances Methoden haben. objectswerden Müll gesammelt, nicht instances.

Aber wie gesagt, so sehe ich das nur, und ich glaube nicht, dass es eine Organisation gibt, auf die wir uns für eine Standarddefinition zwischen ihnen beziehen können, und jeder wird so ziemlich sein leicht unterschiedliches Verständnis / seine Definitionen haben (natürlich in Grenzen). .

Koray Tugay
quelle
-1

Ein Objekt ist eine generische Sache, zum Beispiel eine lineare Funktion in der Mathematik

ax + b ist ein Objekt, während 3x + 2 eine Instanz dieses Objekts ist

Objekt <<< Instanz

Allgemein <<< Spezifisch

Da ist nichts mehr dran

Chyanit Singh
quelle
-2

Ein Objekt kann eine Klasse sein, beispielsweise eine Klasse namens Basketball.

Sie möchten jedoch mehrere Basketbälle haben, sodass Sie in Ihrem Code mehr als einen Basketball erstellen

Sagen Sie Basketball1 und Basketball2. Dann führen Sie Ihre Anwendung aus. Sie haben jetzt 2 Instanzen des Objektbasketballs.

Darxval
quelle
Das würde bedeuten, dass ein Objekt eine Instanz eines Klassenkonstruktors ist?
Straßenparade
Stellen Sie sich das Objekt wie eine Blaupause vor. Sagen wir, wir haben eine Blaupause für den Basketball, das ist die Klasse. Wenn der Basketball erstellt und erstellt wurde, ist er jetzt vorhanden. Das bedeutet, dass wir eine Instanz des Objekts Basketball haben. wenn wir aus dem Objekt einen weiteren Basketball bauen (Blaupause). Wir haben jetzt 2 Instanzen des Basketballs. Es gibt immer nur ein Objekt, aber wir können viele Instanzen dieses Objekts erstellen.
Darxval
@ Darxval dann, was ist eine Klasse
Chyanit Singh
-3

Objekt bezieht sich auf Klasse und Instanz bezieht sich auf ein Objekt. Mit anderen Worten, Instanz ist eine Kopie eines Objekts mit bestimmten Werten.

Karamjit Singh Sehdev
quelle