Unterschied zwischen Objekt und Instanz

82

Ich weiß , dass diese Art von Frage wurde gefragt , bevor , aber ich fühle mich immer noch , dass die Antwort für mich auch nicht eindeutig ist (und durch Erweiterung, einige / die meisten Anfänger) zu erreichen.

Ich habe versucht, mir umfassendere Konzepte der Programmierung beizubringen als prozedurale und grundlegende OOP. Ich verstehe die konkreten Konzepte von OOP (Sie erstellen eine Klasse, die Daten (Mitglieder) und Funktionen (Methoden) enthält, und instanziieren diese Klasse dann zur Laufzeit, um tatsächlich Dinge zu tun, so etwas).

Ich glaube, ich habe einen Überblick darüber, was eine Klasse ist (eine Art Entwurfsentwurf für eine Instanz, die zur Kompilierungszeit in ihrer Ähnlichkeit erstellt werden soll ). Aber wenn das der Fall ist, was ist ein Objekt? Ich weiß auch, dass dies in prototypbasierten Sprachen die Dinge noch mehr durcheinander bringen kann, aber vielleicht muss deshalb in meinem Kopf eine klare Unterscheidung zwischen Objekt und Instanz getroffen werden.

Darüber hinaus kämpfe ich mit den Konzepten "Objekt" und "Instanz". Viele Ressourcen, die ich lese (einschließlich Antworten bei SO), sagen, dass sie weitgehend gleich sind und dass der Unterschied in der Semantik liegt. Andere Leute sagen, dass es einen echten konzeptuellen Unterschied zwischen den beiden gibt.

Können die Experten hier bei SO einem Anfänger helfen, diesen "Aha" -Moment zu haben, um in der Welt von OOP voranzukommen?

Hinweis: Dies sind keine Hausaufgaben, ich gehe nicht zur Schule - ich denke jedoch, es würde Menschen helfen, die nach Hausaufgabenhilfe suchen.

TCCV
quelle
1
Ich frage mich, ob Sie einige zusätzliche Fragen hinzufügen möchten, wie "Sind alle Instanzen Objekte?" , und "Sind alle Objekte Instanzen?" Wenn beide "Ja" sind, können wir bestätigen, dass sie gleich sind.
WesternGun
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 geboren wurde. Es ist klarer, wenn Sie "Instanz einer Klasse" sagen als "Objekt einer Klasse"
p_champ

Antworten:

129

Eine Blaupause für ein Hausdesign ist wie eine Klassenbeschreibung. Alle Häuser, die aus dieser Blaupause gebaut wurden, sind Objekte dieser Klasse. Ein bestimmtes Haus ist eine Instanz.

Joe Snyder
quelle
6
Es gibt auch eine Straße von meiner Heimatstadt, die ein wenig lokal bekannt ist, weil es 8 identisch gebaute Backsteinhäuser hintereinander gibt (bevor das Konzept der "Wohnsiedlung" ins Leben gerufen wurde). Das kann ich mir also sehr gut vorstellen. "Klasse" hat der Architekt entworfen. Die fertigen Häuser sind "Objekte", weil sie alle identisch gebaut sind. Jedes Haus ist eine "Instanz", weil sie seitdem alle unterschiedlich behandelt wurden (und werden können) [jetzt hat man Abstellgleis: o (].
TCCV
16
Und statische Methoden sind wie die Dienstprogramme, die alle Häuser gemeinsam nutzen.
WOPR
2
Aber ist ein Haus, das aus der Blaupause gebaut wurde, keine Instanz?
Hot Licks
1
Dies bedeutet, dass die ersten Speicher, die von der Klassendefinition belegt werden, eine Instanz sind. Alle erstellten Objekte werden als Objekte bezeichnet.
Hafiz Shehbaz Ali
6
Sind Objekt und Instanz nicht genau gleich?
Praveen Kumar
42

Die Wahrheit ist, dass objektorientierte Programmierung oft Verwirrung stiftet, indem sie eine Trennung zwischen der philosophischen Seite der Entwicklung und der tatsächlichen mechanischen Funktionsweise des Computers herstellt. Ich werde versuchen, die beiden für Sie gegenüberzustellen:

Das Grundkonzept von OOP lautet: Klasse >> Objekt >> Instanz.

Die Klasse = die Blaupause. Das Objekt ist eine tatsächliche Sache, die auf der Grundlage der 'Blaupause' (wie das Haus) erstellt wird. Eine Instanz ist eine virtuelle Kopie (aber keine reale Kopie) des Objekts.

Die technischere Erklärung einer 'Instanz' ist, dass es sich um eine 'Speicherreferenz' oder eine Referenzvariable handelt. Dies bedeutet, dass eine 'Instanz' eine Variable im Speicher ist, die nurenthält eine Speicheradresse eines Objekts. Das Objekt, das angesprochen wird, ist dasselbe Objekt, von dem die Instanz als "Instanz" bezeichnet wird. Wenn Sie viele Instanzen eines Objekts haben, haben Sie wirklich nur viele Variablen an verschiedenen Stellen in Ihrem Speicher, die alle dieselbe exakte Speicheradresse enthalten - die alle die Adresse desselben exakten Objekts sind. Sie können eine Instanz niemals "ändern", obwohl dies in Ihrem Code so aussieht. Was Sie wirklich tun, wenn Sie eine Instanz "ändern", ist, dass Sie das ursprüngliche Objekt direkt ändern. Elektronisch durchläuft der Prozessor eine zusätzliche Stelle im Speicher (die Referenzvariable / Instanz), bevor er die Daten des ursprünglichen Objekts ändert.

Der Prozess ist: Prozessor >> Speicherort der Instanz >> Speicherort des ursprünglichen Objekts.

Beachten Sie, dass es keine Rolle spielt, welche Instanz Sie verwenden - das Endergebnis ist immer das gleiche. ALLE Instanzen behalten weiterhin die gleichen genauen Informationen an ihren Speicherorten bei - der Speicheradresse des Objekts - und nur das Objekt ändert sich.

Die Beziehung zwischen Klasse und Objekt ist etwas verwirrender, obwohl sie philosophisch am einfachsten zu verstehen ist (Blaupause >> Haus). Wenn es sich bei dem Objekt um tatsächliche Daten handelt, die irgendwo im Speicher gespeichert sind, was ist dann "Klasse"? Es stellt sich heraus, dass das Objekt mechanisch eine exakte Kopie der Klasse ist. Die Klasse ist also nur eine andere Variable an einer anderen Stelle im Speicher, die genau die gleichen Informationen enthält wie das Objekt. Beachten Sie den Unterschied zwischen den Beziehungen:

Objekt ist eine Kopie der Klasse. Instanz ist eine Variable, die die Speicheradresse des Objekts enthält.

Sie können auch mehrere Objekte derselben Klasse und dann mehrere Instanzen jedes dieser Objekte haben. In diesen Fällen haben die Instanzen jedes Objekts einen äquivalenten Wert, die Instanzen zwischen Objekten jedoch nicht. Beispielsweise:

Lassen Sie Klasse A Von Klasse A lassen Sie Objekt1, Objekt2 und Objekt3.

// Objekt1 hat genau den gleichen Wert wie Objekt2 und Objekt3, befindet sich jedoch an verschiedenen Stellen im Speicher.

von Objekt1 >> obj1_Instance1, obj1_Instace2, obj1_Instance3 lassen

// Alle diese Instanzen sind auch im Wert und an verschiedenen Stellen im Speicher gleichwertig. Ihre Werte = Object1.MemoryAddress.

etc.

Die Dinge werden unordentlicher, wenn Sie anfangen, Typen einzuführen. Hier ist ein Beispiel mit Typen aus c #:

// Klasse annehmen Person existiert Person john = new Person ();

Tatsächlich ist dieser Code einfacher zu analysieren, wenn Sie ihn in zwei Teile aufteilen:

Person john;
john = new Person();

In der technischen Sprache deklariert die erste Zeile eine Variable von TypPerson. Aber was heißt das? Die allgemeine Erklärung ist, dass ich jetzt eine leere Variable habe, die nur ein Personenobjekt enthalten kann. Aber warte mal - es ist eine leere Variable! Es gibt nichts in diesem Variablenspeicherort. Es stellt sich heraus, dass "Typen" mechanisch bedeutungslos sind. Typen wurden ursprünglich erfunden, um Daten und nichts anderes zu verwalten. Selbst wenn Sie primitive Typen wie int, str, chr deklarieren (ohne sie zu initialisieren), geschieht im Computer nichts. Dieser seltsame syntaktische Aspekt der Programmierung ist Teil dessen, wo Menschen auf die Idee kommen, dass Klassen die Blaupause von Objekten sind. OOPs sind mit Typen mit Delegatentypen, Ereignishandlern usw. noch verwirrender geworden. Ich würde versuchen, mich nicht zu sehr auf sie zu konzentrieren und mich nur daran zu erinnern, dass sie alle eine falsche Bezeichnung sind.

Die zweite Zeile ist ebenfalls etwas verwirrend, da sie zwei Dinge gleichzeitig erledigt:

Die rechte Seite "neue Person ()" wird zuerst ausgewertet. Es wird eine neue Kopie der Person-Klasse erstellt, dh es wird ein neues Objekt erstellt.

Die linke Seite "john =" wird danach ausgewertet. Es verwandelt John in eine Referenzvariable, die ihm die Speicheradresse des Objekts gibt, das gerade auf der rechten Seite derselben Zeile erstellt wurde.

Wenn Sie ein guter Entwickler werden möchten, ist es wichtig zu verstehen, dass keine Computerumgebung jemals auf der Grundlage philosophischer Ideale funktioniert. Computer sind nicht einmal so logisch - sie sind wirklich nur eine große Sammlung von Drähten, die mit einfachen booleschen Schaltkreisen (meistens NAND und OR) zusammengeklebt werden.

Rambly John
quelle
31

Das Wort Klasse kommt aus der Klassifikation ( Eine Kategorie, in die etwas eingeordnet wird ). Jetzt haben wir alle gehört, dass eine Klasse wie eine Blaupause ist, aber was bedeutet das genau? Dies bedeutet, dass die Klasse eine Beschreibung einer bestimmten Kategorie enthält ( ich möchte den Unterschied zwischen Klasse, Objekt und Instanz anhand eines Beispiels unter Verwendung von Java zeigen und die Leser bitten, sie beim Lesen wie eine Geschichte zu visualisieren, und wenn Sie dies tun sind nicht mit Java vertraut spielt keine Rolle ) Beginnen wir also damit, eine Kategorie namens HumanBeing zu erstellen , damit das Java-Programm sie wie folgt ausdrückt

class HumanBeing{ 
   /*We will slowly build this category*/ 
}

Welche Eigenschaften hat ein HumanBeing im Allgemeinen ? Namen , Alter , Körpergröße , Gewicht für jetzt lassen Sie uns begrenzen unser Selbst auf diese vier Attribute, lassen wir es zu unserer Kategorie hinzufügen

class HumanBeing{
    private String Name;
    private int Age;
    private float Height;
    private float Weight; 

   /*We still need to add methods*/

}

Jetzt hat jede Kategorie ein Verhalten, zum Beispiel eine Kategorie Hund hat ein Verhalten zu bellen, zu holen, zu rollen usw. Ebenso kann unsere Kategorie HumanBeing auch ein bestimmtes Verhalten haben, zum Beispiel wenn wir unseren HumanBeing fragen, wie Sie heißen / Alter / Gewicht / Höhe? Es sollte uns seinen Namen / Alter / Gewicht / Größe geben, also machen wir es in Java wie folgt

class HumanBeing{
    private String Name;
    private int Age;
    private float Height;
    private float Weight;  

    public HumanBeing(String Name,int Age,float Height,float Weight){
       this.Name = Name;
       this.Age  = Age;
       this.Height = Height;
       this.Weight = Weight;
    }

    public String getName(){
      return this.Name;
    }

    public int getAge(){
      return this.age;
    }

    public float getHeight(){
      return this.Height;
    }

    public float getWeight(){
      return this.Weight;
    }
}

Jetzt haben wir unserer Kategorie HumanBeing Verhalten hinzugefügt , sodass wir nach Name, Alter, Größe und Gewicht fragen können. Von wem werden Sie diese Details erfragen, da class HumanBeinges sich nur um eine Kategorie handelt, bei der es sich beispielsweise um eine Blaupause handelt, für die ein Architekt eine Blaupause erstellt Ein Papier des Gebäudes, das er bauen möchte. Jetzt können wir nicht mehr in der Blaupause ( der Beschreibung des Gebäudes ) leben. Wir können nur dann in dem Gebäude leben, wenn es gebaut ist. Also müssen wir hier aus unserer Kategorie ein menschliches Wesen machen, das wir sind wie oben beschrieben, wie machen wir das in Java?

class Birth{
  public static void main(String [] args){
    HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);    
  }
}

Im obigen Beispiel haben wir unseren ersten Menschen mit dem Namen Alter Größe Gewicht erstellt. Was genau passiert also im obigen Code? . Wir sind Instanziierungsanwendung unserer Kategorie humanbeing dh ein Objekt unserer Klasse erstellt wird

Hinweis : Objekt und Instanz sind keine Synonyme In einigen Fällen scheinen Objekt und Instanz Synonyme zu sein, aber sie sind es nicht. Ich werde beide Fälle angeben

Fall 1: Objekt und Instanz scheinen Synonyme zu sein
Lassen Sie mich etwas näher darauf eingehen, wenn wir sagen, dass HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90); ein Objekt unserer Kategorie im Heapspeicher erstellt wird und ihm eine Adresse zugewiesen ist, firstHumandie einen Verweis auf diese Adresse enthält, jetzt ist dieses Objekt Ein Objekt von HumanBeing und auch eine Instanz von HumanBeing . Hier scheinen Objekte und Instanzen Synonyme zu sein, ich werde mich wiederholen, sie sind keine Synonyme

Lassen Sie uns unsere Geschichte fortsetzen. Wir haben unseren ersten Menschen erstellt. Jetzt können wir ihn nach seinem Namen, Alter, Größe und Gewicht fragen. So machen wir das in Java

class Birth{
  public static void main(String [] args){
    HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);
    System.out.println(firstHuman.getName());
    System.out.println(firstHuman.getAge());
    ...
    ...  
  }
}

Also haben wir den ersten Menschen und lassen uns die Feder bewegen, indem wir unserem ersten Menschen eine Qualifikation geben. Machen wir ihn zum Arzt, also brauchen wir eine Kategorie namens Doktor und geben unserem Doktor ein Verhalten. In Java machen wir also Folgendes

class Doctor extends HumanBeing{
   public Doctor(String Name,int Age,float Height,float Weight){
      super(Name,Age,Height,Weight);
   }
   public void doOperation(){
    /* Do some Operation*/ 
   }

   public void doConsultation(){
    /* Do so Consultation*/
   }
}  

Hier haben wir das Konzept der Vererbung verwendet das eine gewisse Wiederverwendbarkeit in den Code bringt. Jeder Arzt wird immer zuerst ein HumanBeing sein, also wird ein Arzt Name, Alter, Gewicht, Größe haben, die von HumanBeing geerbt wird, anstatt es erneut zu schreiben. Beachten Sie, dass wir gerade eine Beschreibung eines Arztes geschrieben haben, den wir noch nicht erstellt haben. Lassen Sie uns also einen Arzt in unserem erstellenclass Birth

class Birth{
  public static void main(String [] args){
    Doctor firstDoctor = new Doctor("Strange",40,6,80);
    .......
    .......
    /*Assume some method calls , use of behaviour*/
    .......
    .......    
  }
}

Fall 2: Objekt und Instanz sind keine Synonyme
Im obigen Code können wir uns vorstellen, dass wir unsere Kategorie Doktor instanziieren und zum Leben erwecken, dh wir erstellen einfach ein Objekt der Kategorie Doktor , wie wir bereits wissen Objekte im Heapspeicher erstellt werden und firstDoctorenthält einen Verweis auf dieses Objekt auf dem Heap;

Dieses spezielle Objekt firstDoctorist wie folgt (bitte beachten SiefirstDoctor einen Verweis auf das Objekt enthält, es ist nicht das Objekt selbst)

  1. firstDoctorist ein Objekt vonclass Doctor Und eine Instanz von A.class Doctor
  2. firstDoctorist kein Objekt von,class HumanBeing sondern eine Instanz vonclass HumanBeing

Ein bestimmtes Objekt kann also eine Instanz für eine bestimmte Klasse sein, muss jedoch kein Objekt dieser bestimmten Klasse sein

Fazit:

Ein Objekt wird als Instanz einer bestimmten Kategorie bezeichnet, wenn es alle Merkmale dieser bestimmten Kategorie erfüllt

Das Beispiel der realen Welt lautet wie folgt: Wir werden zuerst als Menschen geboren. Stellen Sie sich uns also als Objekt des Menschen vor. Wenn wir erwachsen werden, übernehmen wir Verantwortung, lernen neue Fähigkeiten und spielen verschiedene Rollen im Lebensbeispiel. Sohn, Bruder, Tochter, Vater , Mutter jetzt Was sind wir eigentlich? Wir können sagen, dass wir Objekte des Menschen sind, aber Instanzen von Bruder, Tochter, ... usw.

ich hoffe das hilft

Danke

Pushkarraj Pujari
quelle
5
... und warum haben wir nur 3 positive Stimmen zu dieser Antwort?
Pratik Ambani
13

Geben Sie hier die Bildbeschreibung ein

Objekte sind Dinge im Speicher, während Instanzen Dinge sind, die auf sie verweisen. Im obigen Bild:

  • std (Instanz) -> Schülerobjekt (rechts)
  • std1 (Instanz) -> Schülerobjekt (links)
  • std2 (Instanz) -> Schülerobjekt (links)
  • std3 (Instanz) -> kein Objekt (null)
Truong Ha
quelle
4
Das ist großartig. Ich mag die Tatsache sehr, dass es niedrig wird. Ich gehe hin und her, ob mir das besser gefällt als die Analogie. Ich denke, die 2 zusammen zu kennen, ist das, was ich wirklich brauchte. upvote, aber nicht sicher, ob ich dir die Antwort geben kann, weil sie Joe bereits gegeben wurde. Trotzdem danke. Das klärt viel auf.
TCCV
Nun, eine Instanz ist also ein Zeiger auf ein Objekt? (Instanz == Variable mit Speicheradresse?)
Stano
6
Truong, deine Antwort ist falsch und verwirrend. Tatsächlich ist eine Instanz ein Objekt, das von einem Basisklassenobjekt abgeleitet ist. Instanz == Objekt. Diese Terminologie wird zum Beispiel in dieser oder dieser Antwort gut erklärt .
Stano
@jww: Das Bild ist ein Link zu math.hws.edu/javanotes/c5/objectsInHeap.png, der jetzt 404 ist. Vermutlich war es zum Zeitpunkt der Veröffentlichung sichtbar.
Matt Burland
6

Ein Objekt ist eine Instanz einer Klasse (für klassenbasierte Sprachen).

Ich denke, das ist die einfachste Erklärung, die ich finden kann.

sukru
quelle
1
Ich bin damit einverstanden, dass Ihre Erklärung in etwa mit der Art und Weise übereinstimmt, wie ich gelesen habe, aber es gibt viele Online-Einträge, die zwischen beiden unterscheiden. Ich weiß nicht, ob diese Art von Frage nicht ohne eine Sprache beantwortet werden kann (wow, eine Meta-Frage, diese Frage ist eine Klasse, die nicht verwendet werden kann, ohne sie mit einer Sprache zu instanziieren, lol).
TCCV
5

Eine Klasse definiert ein Objekt. Sie können in vielen Sprachen noch weiter gehen und sagen, dass eine Schnittstelle gemeinsame Attribute und Methoden zwischen Objekten definiert.

Ein Objekt ist etwas , das kann etwas in der realen Welt repräsentieren. Wenn Sie möchten, dass das Objekt tatsächlich funktioniert etwas in der realen Welt darstellt, muss dieses Objekt instanziiert werden. Instanziierung bedeutet, dass Sie die Merkmale (Attribute) dieses bestimmten Objekts definieren müssen, normalerweise über einen Konstruktor.

Nachdem Sie diese Merkmale definiert haben, haben Sie jetzt eine Instanz eines Objekts.

Hoffe das klärt die Dinge auf.

Derek Litz
quelle
Ich denke, das sagt im Grunde, was Joe gesagt hat. Korrigiere mich, wenn ich falsch liege.
TCCV
3
Oben sagt Joe, dass alle Häuser, die nach der Blaupause gebaut wurden, Objekte sind. Wahr. Und er sagt, ein bestimmtes Haus sei eine Instanz. Wahr. Aber alle Häuser sind Instanzen und ein bestimmtes Haus ist auch ein Objekt. Er machte einen Unterschied, wo es keinen gab. Im Code muss zum Zeitpunkt der Erstellung zwischen einem Objekt und einer Instanz unterschieden werden. Wir sagen, es wird instanziiert, wenn es tatsächlich gebaut wurde. Eine häufig gestellte Frage könnte sein: Haben Sie daran gedacht, das Objekt zu instanziieren? dh. Wenn Sie vergessen haben, den Konstruktor aufzurufen, nachdem Sie ein Objekt deklariert haben.
Derek Litz
1
Ah, das ist eine gute Unterscheidung. Anders ausgedrückt, eine Instanz ist ein Objekt, das konstruiert wurde (dh der Konstruktor wurde aufgerufen).
TCCV
3

"Eine Klasse beschreibt eine Reihe von Objekten, die als Instanzen bezeichnet werden." - Die Xerox-Lernforschungsgruppe "The Smalltalk-80 System", Byte Magazine, Band 06, Nummer 08, S. 39, 1981.

miguel.negrao
quelle
2

Was ist ein Objekt?

Ein Objekt ist eine Instanz einer Klasse. Das Objekt kann am besten verstanden werden, indem Sie Beispiele aus der Praxis um sich herum finden. Ihr Schreibtisch, Ihr Laptop und Ihr Auto sind gute Beispiele für ein Objekt in der realen Welt.

Objekte der realen Welt haben zwei Eigenschaften gemeinsam: Sie haben alle Zustand und Verhalten. Menschen sind auch ein gutes Beispiel für ein Objekt. Wir Menschen haben Zustand / Attribute - Name, Größe, Gewicht und Verhalten - Gehen, Laufen, Sprechen, Schlafen, Code: P.

Was ist eine Klasse?

Eine Klasse ist eine Blaupause oder eine Vorlage, die die Details eines Objekts beschreibt. Diese Details sind nämlich

Namensattribute / Zustandsoperationen / Methoden

class Car 
{
    int speed = 0;
    int gear = 1;

    void changeGear(int newGear)
    {
        gear = newGear;
    }

    void speedUp(int increment) 
    {
        speed = speed + increment;
    }

    void applyBrakes(int decrement) 
    {
        speed = speed - decrement;
    }
}

Man betrachte das obige Beispiel, die Felder speedund gearden Zustand des Objekts repräsentieren, und Verfahren changeGear, speedUpundapplyBrakes definieren das Verhalten des Car - Objekt mit der Außenwelt.

Verweise:

Yasser Shaikh
quelle
1

Ich denke, es ist wichtig darauf hinzuweisen, dass es im Allgemeinen zwei Dinge gibt. Die Blaupause und die Kopien. Die Leute neigen dazu, diese verschiedenen Dinge zu benennen; Klassen, Objekte, Instanzen sind nur einige der Namen, die Benutzer für sie verwenden. Wichtig ist, dass es die Blaupause und Kopien davon gibt - unabhängig von den Namen für sie. Wenn Sie bereits das Verständnis für diese beiden haben, vermeiden Sie einfach die anderen Dinge, die Sie verwirren.

Simon
quelle
0

Vergleichen wir Äpfel mit Äpfeln. Wir alle wissen, was ein Apfel ist. Wie es aussieht. Wie es schmeckt. Das ist eine Klasse. Es ist die Definition einer Sache. Es ist das, was wir über eine Sache wissen.

Jetzt geh und finde einen Apfel. Das ist eine Instanz. Wir können es sehen. Wir können es schmecken. Wir können Dinge damit machen. Es ist was wir haben.

Klasse = Was wir über etwas wissen. Eine Definition.

Objekt / Instanz = Etwas, das zu der Definition passt, die wir haben und mit der wir Dinge tun können.

Jack
quelle
0

In einigen Fällen kann der Begriff "Objekt" verwendet werden, um eine Instanz zu beschreiben, in anderen Fällen wird er verwendet, um einen Verweis auf zu beschreiben eine Instanz . Der Begriff "Instanz" bezieht sich nur auf die tatsächliche Instanz.

Zum Beispiel kann eine Liste als eine Sammlung von Objekten beschrieben werden, aber was sie tatsächlich enthält, sind Verweise auf Objektinstanzen.

Superkatze
quelle
In diesem Fall ist eine Referenz also nur ein Platzhalter, der einen Link zur Instanz enthält. Wo könnte ein Link so etwas wie eine Speicheradresse sein?
TCCV
0

Mir hat immer die Idee gefallen, dass die Definition einer Klasse der eines "abstrakten Datentyps" entspricht . Das heißt, wenn Sie eine Klasse definiert haben, definieren Sie einen neuen Typ von "etwas", seine Datentypdarstellung in Bezug auf Grundelemente und andere "Dinge" und sein Verhalten in Bezug auf Funktionen und / oder Methoden. (Entschuldigung für die Allgemeinheit und den Formalismus)

Wann immer Sie eine Klasse definiert haben, eröffnen Sie eine neue Möglichkeit , bestimmte Entitäten mit ihren Eigenschaften und ihrem Verhalten zu definieren. Wenn Sie ein bestimmtes Objekt daraus instanziieren und / oder erstellen, materialisieren Sie tatsächlich diese Möglichkeit .

Manchmal sind die Begriffe Objekt und Instanzen austauschbar. Einige OOP-Puristen werden behaupten, dass alles ein Objekt ist, ich werde mich nicht beschweren, aber in der realen OOP-Welt verwenden wir Entwickler zwei Konzepte:

  1. Klasse: Beispiel für einen abstrakten Datentyp, aus dem Sie andere ADT ableiten und Objekte erstellen können.
  2. Objekte: Auch Instanzen genannt, stellen bestimmte Beispiele für die Datenstrukturen und Funktionen dar, die durch einen bestimmten abstrakten Datentyp dargestellt werden.
Jose Diaz
quelle
0

Objektorientierte Programmierung ist eine Systemmetapher , mit der Sie das Wissen, mit dem Ihr Programm umgehen muss, so organisieren können, dass Sie Ihr Programm leichter entwickeln können. Wenn Sie sich für die Programmierung mit OOP entscheiden, nehmen Sie Ihre OOP-Googles in die Hand und entscheiden, dass Sie das Problem der realen Welt als viele Objekte sehen, die untereinander zusammenarbeiten, indem Sie Nachrichten senden. Anstatt einen Mann zu sehen, der ein Auto fährt, sieht man einen Mann, der eine Nachricht an das Auto sendet, in der angegeben wird, was das Auto tun soll. Das Auto ist ein großes Objekt und antwortet auf diese Nachricht, indem es eine Nachricht an den Motor oder das Rad sendet, um richtig auf das reagieren zu können, was der Fahrer ihm in der Nachricht usw. gesagt hat.

Nachdem Sie Ihre Systemmetapher erstellt haben und die gesamte Realität als Objekte sehen, die Nachrichten senden, entscheiden Sie sich, alle für Ihre Problemdomäne relevanten Dinge auf dem PC abzulegen. Dort merkt man, dass viele Leute unterschiedliche Karten fahren, und es ist sinnlos, das Verhalten jeder einzelnen Karte separat zu programmieren, da sie sich alle gleich verhalten ... Sie können also zwei Dinge sagen:

  • Alle diese Typen verhalten sich gleich, daher werde ich eine Klasse namens Driver erstellen, die angibt, wer sich alle Treiber auf der Welt verhalten, da sie sich alle gleich verhalten. (Und Sie verwenden klassenbasiertes OOP)
  • Oder du könntest sagen Hey! Der zweite Fahrer verhält sich genauso wie der erste Fahrer, nur dass er gerne etwas schneller fährt. Und der dritte Fahrer verhält sich genauso wie der erste Fahrer, außer dass er beim Fahren gerne im Zickzack fährt. (Und Sie verwenden prototypbasierte OOP).

Dann beginnen Sie, die Informationen darüber, wie sich alle Treiber verhalten (oder wie sich der erste Treiber verhält und wie sich der zweite und der dritte von diesem unterscheiden), in den Computer einzutragen. Nach einer Weile haben Sie Ihr Programm und verwenden den Code dazu Erstellen Sie drei Treiber, die das Modell sind, das Sie in diesem PC verwenden, um auf die Treiber zuzugreifen, die Sie in der realen Welt gesehen haben. Diese drei Treiber, die Sie im PC erstellt haben, sind entweder Instanzen des Prototyps (der erste ist der Prototyp, der erste kann der Prototyp selbst sein, je nachdem, wie Sie die Dinge modellieren) oder der von Ihnen erstellten Klasse. Der Unterschied zwischen Instanz und Objekt besteht darin, dass das Objekt die Metapher ist, die Sie in der realen Welt verwenden. Sie sehen den Kerl und das Auto als Objekte (es wäre falsch zu sagen, dass Sie sie als Instanzen sehen), die untereinander zusammenarbeiten. Und dann verwenden Sie es als Inspiration, um Ihren Code zu erstellen. Die Instanz ist in Ihrem Programm erst vorhanden, nachdem Sie den Prototyp oder die Klasse erstellt haben. Die "Objekte" existieren außerhalb des PCs, da es sich um das Mapping handelt, mit dem Sie die reale Welt mit dem Programm verbinden. Es verbindet den Kerl mit der Instanz des Treibers, die Sie auf dem PC erstellt haben. Objekt und Instanz sind also extrem verwandt, aber sie sind nicht genau gleich (eine Instanz ist ein "Bein" eines Objekts im Programm, und das andere "Bein" befindet sich in der realen Welt).

user1494736
quelle
0

Ich denke, die beste Antwort wurde bereits vergeben.

Klassen sind Blaupausen, und Objekte sind Gebäude oder Beispiele für diese Blaupause haben auch für mich den Trick getan.

Manchmal würde ich gerne denken, dass Klassen Vorlagen sind (wie in MS Word), während Objekte die Dokumente sind, die die Vorlage verwenden.

Geosphäre
quelle
0

Erweitern eines der zuvor angegebenen Beispiele in diesem Thread ...

Stellen Sie sich ein Szenario vor - Es besteht die Anforderung, dass 5 Häuser in einer Nachbarschaft für Wohnzwecke gebaut werden müssen. Alle 5 Häuser teilen eine gemeinsame Bauarchitektur. Die Bauarchitektur ist eine Klasse . Haus ist ein Objekt . Jedes Haus, in dem sich Menschen aufhalten, ist eine Instanz .

GeekSpecs
quelle