Qual è la differenza tra un'istanza e un oggetto? C'è differenza o no?
Qual è la differenza tra un'istanza e un oggetto? C'è differenza o no?
Risposte:
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/
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.
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?
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.
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.
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
Oggetti e istanze sono per lo più gli stessi; ma c'è una differenza molto piccola. Se Car
è una classe, 3 Car
s sono 3 oggetti diversi. Tutti questi oggetti sono istanze. Quindi queste 3 auto sono oggetti provenienti da istanze della Car
classe.
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.
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
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
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.
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.
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).
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' new
operatore, 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.
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
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.
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
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 .
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
Risposta rapida e semplice
Per quanto riguarda la differenza tra an object
e 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 Object
classe 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 object
ma associato a un tipo, come in this method accepts Foo instances
o you can not put Animal instances in an instance of
a List of Vehicles
.
object
s ad esempio sono locks
associati a loro, non instance
s, mentre instance
s hanno metodi. objects
sono spazzatura raccolta, non instance
s.
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) .
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
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.
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.