Qual è la differenza tra un'istanza e un oggetto?


92

Qual è la differenza tra un'istanza e un oggetto? C'è differenza o no?


10
Forse si può dedurre dal noto messaggio di errore "Riferimento oggetto non impostato su un'istanza di un oggetto ". : ->
herzmeister

Dalle specifiche JVM: "Un oggetto è un'istanza di classe allocata dinamicamente o un array." Docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html
yfklon

StackOverFlow Ho appena fornito una breve descrizione sulla differenza tra oggetto e istanza, spero che aiuti
Pushkarraj Pujari

1
Un oggetto è un'istanza di una classe. È tutto quello che c'è da fare.
Marchese di Lorne

Risposte:


49

Un'istanza è un oggetto in memoria. Fondamentalmente crei oggetti e li installi quando li usi.

Ecco una bella recensione su Classes Vs Objects Vs Instances, parla di Java ma si applica a tutti gli OO.

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


27
Questo post sul blog non spiega nulla.
Koray Tugay

quindi intendi oggetto == classe? o intendi la classe caricata e diventa oggetto e oggetto istanziato per diventare istanza? non rispondi confuso?
p_champ

Pensa alla classe come a una definizione. Quando si istanzia la classe, si ha l'oggetto che può essere utilizzato. Quell'oggetto è rappresentato fisicamente nella memoria.
Dustin Laine

@Dustin Laine la differenza non è ancora chiara. Puoi aiutarmi per favore?
Torta

@DustinLaine La domanda chiede la differenza tra "istanza" e "oggetto". Tuttavia, in questa risposta, ciò che è stato spiegato è il processo di "istanziazione" di una classe per ottenere "oggetto". Il tuo post e il tuo commento non corrispondono. Nel post si dice che un '"istanza" è un oggetto in memoria. Tuttavia, nel commento, si dice che dopo aver istanziato la classe, si ottiene l '"oggetto", che è rappresentato in memoria. Questo è un po 'ambiguo.
Srishti

56

L'istanza e l'oggetto provengono dalla programmazione orientata agli oggetti .

Per alcuni linguaggi di programmazione come Java, C ++ e Smalltalk, è importante descrivere e comprendere il codice. In altri linguaggi utilizzati nella programmazione strutturata questo concetto non esiste.

Questa è vista dalla programmazione strutturale. Non c'è alcuna differenza significativa che dovrebbe consumare troppo tempo. Potrebbe esserci un linguaggio elaborato di cui alcune persone potrebbero occupare molto spazio per scrivere, ma alla fine della giornata, per quanto riguarda un programmatore, sviluppatore, programmatore, architetto, un'istanza di una classe e un oggetto significa la stessa cosa e spesso può essere usato in modo intercambiabile. Non ho mai incontrato nessuno nella mia carriera che fosse pignolo e passassi mezz'ora a cercare di evidenziare le differenze, perché in realtà non ce n'è. Il tempo può essere impiegato meglio in altri sforzi di sviluppo.

AGGIORNAMENTO Per quanto riguarda Swift, questo è ciò che Apple che ha inventato Swift preferisce:

Un'istanza di una classe è tradizionalmente nota come oggetto. Tuttavia, le classi e le strutture di Swift sono molto più simili in termini di funzionalità rispetto ad altri linguaggi e gran parte di questo capitolo descrive le funzionalità che possono essere applicate alle istanze di una classe o di un tipo di struttura. Per questo motivo, viene utilizzato il termine più generico istanza.


20

Ottima domanda.

Lo spiegherò nel modo più semplice possibile: supponiamo di avere 5 mele nel cestino. Ognuna di queste mele è un oggetto di tipo Mela, che ha alcune caratteristiche (cioè grande, tonda, cresce sugli alberi).

In termini di programmazione, puoi avere una classe chiamata Apple, che ha variabili taglia: grande, forma: rotonda, habitat: cresce sugli alberi. Per avere 5 mele nel tuo carrello, devi istanziare 5 mele. Apple apple1, Apple apple2, Apple apple3 etc....

In alternativa: gli oggetti sono le definizioni di qualcosa, le istanze sono le cose fisiche.

Questo ha senso?


60
Non è così. :) "Gli oggetti sono le definizioni di qualcosa" Quelli che chiamate oggetti qui sono classi.
T-Gergely

11

Istanza: istanza significa semplicemente creare un riferimento (copia).

oggetto: significa quando la posizione di memoria è associata all'oggetto (è un'entità di runtime della classe) utilizzando l'operatore new.

In parole semplici, Instance si riferisce alla copia dell'oggetto in un determinato momento mentre object si riferisce all'indirizzo di memoria della classe.


1
dire che un'istanza è un riferimento a un oggetto mi ha davvero chiarito le cose.
John C

2
@ JohnC Non dovrebbe, perché non è corretto. Un oggetto è un'istanza di una classe. È tutto quello che c'è da fare.
Marchese di Lorne

8

Diciamo che stai costruendo delle sedie.

Il diagramma che mostra come costruire una sedia e metterla insieme corrisponde a una classe di software.

Supponiamo che tu costruisca cinque sedie secondo lo schema in quel diagramma. Allo stesso modo, è possibile costruire cinque oggetti software in base al modello in una classe.

Ogni sedia ha un numero univoco inciso nella parte inferiore del sedile per identificare ogni sedia specifica. La sedia 3 è un'istanza di un modello di sedia. Allo stesso modo, la posizione di memoria 3 può contenere un'istanza di un modello software.

Quindi, un'istanza (sedia 3) è una singola manifestazione specifica e unica di un modello di sedia.


2
Un oggetto è un'istanza di una classe. Un'istanza non è un'istanza di un oggetto. La risposta è priva di significato.
Marchese di Lorne

1
Wow, dopo nove anni qualcuno ha finalmente sottolineato il difetto nella mia spiegazione. Grazie! Meglio ora?
Brian Showalter

7

Oggetto :

È un termine generico fondamentalmente è un pacchetto software che ha stato (variabili) e comportamento (metodi)

Classe :

Una stampa blu (modello) per un'istanza di un oggetto: è un oggetto unico, ad esempio se crei un oggetto due volte ciò significa che hai creato due istanze

Faccio un esempio

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

Esempio di oggetto :

Studente s1 = nuovo studente ("Martin"); Studente s2 = nuovo studente ("Kumar");

Gli s1, s2 hanno oggetto della classe Student

Istanza :

s1 e s2 sono istanze dell'oggetto student, i due sono unici .

può essere chiamato anche come riferimento .

fondamentalmente s1 e s2 sono variabili a cui viene assegnato un oggetto


1
Un oggetto è un'istanza di una classe.
Marchese di Lorne

7

Oggetti e istanze sono per lo più gli stessi; ma c'è una differenza molto piccola. Se Carè una classe, 3 Cars sono 3 oggetti diversi. Tutti questi oggetti sono istanze. Quindi queste 3 auto sono oggetti provenienti da istanze della Carclasse.

Ma la parola "istanza" può significare anche "istanza di struttura". Ma l'oggetto è solo per le classi.

Tutti gli oggetti sono istanze. Non tutte le istanze devono essere oggetti. Le istanze possono essere "istanze di struttura" o "oggetti". Spero che questo ti renda chiara la differenza.


3

Un oggetto è un costrutto, qualcosa di statico che ha determinate caratteristiche e tratti, come proprietà e metodi, può essere qualsiasi cosa (una stringa, un controllo utente, ecc.)

Un'istanza è una copia univoca di quell'oggetto che puoi usare e con cui puoi fare cose.

Immagina un prodotto come un computer.

LA workstation xw6400 è un oggetto

LA TUA workstation xw6400, (o la workstation xw6400 di TUA MOGLIE) è un'istanza dell'oggetto workstation xw6400


1
Il primo e il secondo paragrafo descrivono classi, non oggetti.
Marchese di Lorne

2

Questa risposta può essere vista come banale, ma preoccuparsi delle differenze tra un'istanza e un oggetto è già banale.

Penso che sia meglio rappresentato in javascript:

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

versi

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

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

1

Un'istanza è una rappresentazione specifica di un oggetto. Un oggetto è una cosa generica mentre un'istanza è un singolo oggetto che è stato creato in memoria. Di solito un'istanza avrà valori assegnati alle sue proprietà che la differenziano dalle altre istanze del tipo di oggetto.


1

Se vediamo la definizione di oggetto e l'oggetto istanza -

La memoria allocata per il membro della classe in fase di esecuzione è chiamata oggetto o oggetto è l'istanza di Class.

Vediamo la definizione di istanza -

La memoria allocata per qualsiasi in fase di esecuzione viene chiamata come variabile di istanza.

Ora comprendi il significato di qualsiasi allocazione di memoria in fase di esecuzione in C anche tramite Malloc, Calloc, Realloc come:

struct p
{

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

Quindi anche qui stiamo allocando l'allocazione della memoria in fase di esecuzione, ma qui chiamiamo come istanza quindi t1 è istanza qui non possiamo dire t1 come oggetto quindi ogni oggetto è l'istanza di Classe ma ogni istanza non è Oggetto.


C'è una risposta corretta in agguato qui da qualche parte, ma la lingua deve essere pulita e semplificata.
Marchese di Lorne

1

Object - Un'istanza di una classe che ha il proprio stato e l'accesso a tutto il comportamento definito dalla sua classe.

Istanza: riferimento a un'area di memoria per quella particolare classe.


1

Non posso crederci, tranne che per un ragazzo nessuno ha usato il codice per spiegare questo, lasciami provare anche io!

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

var humanClassObject1 = HumanClass(name: "Rehan") 

Ora il lato sinistro, cioè: "humanClassObject1" è l'oggetto e il lato destro, cioè: HumanClass (nome: "Rehan") è l'istanza di questo oggetto.

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

Quindi, fondamentalmente, l'istanza contiene i valori specifici per quell'oggetto e gli oggetti contengono la posizione di memoria (in fase di esecuzione).

Ricorda la famosa affermazione "riferimento a un oggetto non impostato su un'istanza di un oggetto", questo significa che gli oggetti non inizializzati non hanno alcuna istanza. In alcuni linguaggi di programmazione come swift il compilatore non ti consentirà nemmeno di progettare una classe che non ha alcun modo per inizializzare tutti i suoi membri (variabile ad esempio: nome, età ecc.), Ma in alcuni linguaggi puoi farlo:

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

E l'errore verrà mostrato solo in fase di esecuzione quando provi a fare qualcosa del genere:

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

Questo errore indica che i valori specifici (per le variabili \ proprietà) è l ' "ISTANZA" come ho cercato di spiegare sopra! E l'oggetto cioè: "myClass" contiene la posizione di memoria (in fase di esecuzione).


1

Quando una variabile viene dichiarata di un tipo personalizzato (classe), viene creato solo un riferimento, chiamato oggetto. In questa fase, nessuna memoria viene allocata a questo oggetto . Funziona proprio come un puntatore (alla posizione in cui l'oggetto verrà archiviato in futuro). Questo processo è chiamato "Dichiarazione".

Employee e; // e is an object

D'altra parte, quando una variabile di tipo personalizzato viene dichiarata utilizzando l' newoperatore, che alloca memoria in heap a questo oggetto e restituisce il riferimento alla memoria allocata. Questo oggetto che ora viene definito come istanza . Questo processo è chiamato "Instantiation".

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

D'altra parte, in alcuni linguaggi come Java, un oggetto è equivalente a un'istanza, come evidente dalla riga scritta nella documentazione di Oracle su Java :

Nota: la frase "creazione di un'istanza di una classe" ha lo stesso significato di "creazione di un oggetto". Quando crei un oggetto, stai creando una "istanza" di una classe, quindi "istanziando" una classe.


0

ogni oggetto si dice che sia un'istanza della sua classe ma ogni istanza della classe ha il suo valore per ogni attributo intances condivide il nome dell'attributo e l'operazione con le loro intenze di classe ma un oggetto contiene un riferimento implicito alla sua classe on


0

Classe: una classe è stampata in blu. Oggetto: è la copia della classe. Istanza: è una variabile che viene utilizzata per contenere l'indirizzo di memoria dell'oggetto.

Un esempio analitico molto semplice

Class House -> Progetto della casa. Ma non puoi vivere nella stampa blu. Hai bisogno di una casa fisica che sia l'istanza della classe in cui vivere. Ad esempio, l'indirizzo effettivo dell'oggetto è istanza. Le istanze rappresentano gli oggetti.


L'istanza si riferisce all'oggetto, non a una variabile.
Marchese di Lorne

0

Una volta istanziata una classe (usando new), quella cosa istanziata diventa un oggetto. Un oggetto è qualcosa che può aderire all'incapsulamento, al polimorfismo, ai principi di astrazione della programmazione orientata agli oggetti e alla cosa reale con cui un programma interagisce per consumare i membri dell'istanza definiti nella classe. L'oggetto contiene membri dell'istanza (membri non statici).

Quindi l'istanza di una classe è un oggetto. La parola "istanza" viene utilizzata quando ci si riferisce all'origine da cui è nata, è più chiaro se si dice "istanza di una classe" rispetto a "oggetto di una classe" (anche se quest'ultima può essere usata).

Può anche leggere la sezione "Classi interne" di questo documento java sulle classi nidificate - https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html


0

Java è un linguaggio di programmazione orientato agli oggetti (OOP). Ciò significa che tutto in Java, tranne i tipi primitivi, è un oggetto.

Ora, gli oggetti Java sono simili agli oggetti del mondo reale. Ad esempio, possiamo creare un oggetto auto in Java, che avrà proprietà come velocità e colore correnti; e comportamenti come: accelerare e parcheggiare.

Questo è Object .

inserisci qui la descrizione dell'immagine

Instance , dall'altro lato, è una copia inizializzata in modo univoco di quell'oggetto che assomiglia Car car = new Car().

Dai un'occhiata per saperne di più sulle classi e sugli oggetti Java


Un oggetto è un'istanza di una classe.
Marchese di Lorne

0

Risposta rapida e semplice

  • Classe : una specifica, progetto per un oggetto
  • Oggetto : presenza fisica della classe in memoria
  • Istanza : una copia univoca dell'oggetto (stessa struttura, dati diversi)

-1

Per quanto riguarda la differenza tra an objecte an instance, non credo ci sia consenso.

Mi sembra che le persone lo cambino praticamente in modo intercambiabile, in giornali, post di blog, libri o conversazioni.

Per quanto mi riguarda, per come la vedo io, un oggetto è un'entità generica e viva nella memoria, specificata dal linguaggio in cui è usata. Proprio come la Objectclasse in Java. Non ci interessa molto il suo tipo, o qualsiasi altra cosa ad esso associata, sia che sia gestita da un container o meno.

An instanceè un objectma associato a un tipo, come in this method accepts Foo instanceso you can not put Animal instances in an instance of a List of Vehicles.

objects ad esempio sono locksassociati a loro, non instances, mentre instances hanno metodi. objectssono spazzatura raccolta, non instances.

Ma come ho detto, questo è solo come lo vedo io, e non penso che ci sia alcuna organizzazione a cui possiamo fare riferimento per una definizione standard tra di loro e ognuno avrà praticamente la loro comprensione / definizioni leggermente diverse (ovviamente entro dei limiti) .


-1

Un oggetto è una cosa generica, ad esempio, prende una funzione lineare in matematica

ax + b è un oggetto, mentre 3x + 2 è un'istanza di quell'oggetto

Oggetto <<< Istanza

Generale <<< Specifico

Non c'è niente di più in questo


-2

Un oggetto può essere una classe, supponiamo che tu abbia una classe chiamata basket.

ma vuoi avere più palloni da basket quindi nel tuo codice crei più di 1 pallacanestro

diciamo basket1 e basket2. Quindi esegui la tua applicazione. Ora hai 2 istanze dell'oggetto basket.


Ciò significherebbe che un oggetto è un'istanza di un costruttore di classi?
streetparade

pensa all'oggetto come a un progetto. diciamo che abbiamo un progetto per il basket, che è la classe. quando il basket viene creato e realizzato, ora esiste, quindi ciò significherebbe che abbiamo 1 istanza dell'oggetto basket. se costruiamo un altro pallone da basket dall'oggetto (progetto). ora abbiamo 2 istanze del basket. C'è sempre un solo oggetto, ma possiamo creare molte istanze di quell'oggetto.
Darxval

@ Darxval allora cos'è una classe
Chyanit Singh

-3

L'oggetto si riferisce alla classe e l'istanza si riferisce a un oggetto.In altre parole, l'istanza è una copia di un oggetto con valori particolari in esso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.