Si chiama istanza di classe o oggetto?

7

Ho una domanda di parole / precisione. A volte scrivo "istanza di oggetto" a volte "istanza di classe" .

Non è che un oggetto è sempre un istanza di una classe ? Pertanto "istanza dell'oggetto" non è la dicitura corretta, giusto?

È comune dirlo comunque, o solo un "errore" mio? Ho l'impressione che "istanza di oggetto" sia superflua (raddoppiata) perché un oggetto è sempre un'istanza e vorrebbe saperne di più per chiarire i termini.

    
posta hakre 07.08.2011 - 16:17
fonte

6 risposte

15

No, non è giusto che un "oggetto" sia sempre un'istanza di una classe. Per esempio, lo standard per C (che non ha affatto classi) definisce un oggetto come (§3.14 / 1): "regione di memorizzazione dei dati nell'ambiente di esecuzione, il cui contenuto può rappresentare valori."

Ora, è vero che usare "oggetto" per riferirsi a un'istanza di una classe è abbastanza comune. In alcune lingue (ad es. Smalltalk) gli oggetti tutti sono istanze di classi. In altri (ad esempio, C ++) il termine è un po 'ambiguo, perché c'è un uso simile al termine di C e un uso simile a Smalltalk del termine, quindi non è necessariamente chiaro se "oggetto" sia usato per riferirsi specificamente a un'istanza di una classe, o solo per qualche area di memorizzazione dei dati nell'ambiente di esecuzione, che può essere un'istanza di un tipo primitivo piuttosto che una classe, o può essere (per esempio) una memoria dinamica che non è stata inizializzata, quindi non è realmente un'istanza di alcun tipo.

Per quanto riguarda "l'istanza dell'oggetto" ha senso, posso vedere una situazione dove potrebbe. Tornando a Smalltalk: tutto in Smalltalk è un'istanza di una classe - anche una classe è un'istanza di una classe (chiamata metaclasse). In un caso come questo, posso vedere dove potrebbe (in qualche modo) avere senso parlare di "istanza di un oggetto", quando si parlava specificamente di un'istanza di una classe rispetto alla classe della classe.

In tutta onestà, tuttavia, l'uso è indubbiamente piuttosto raro (al massimo). La maggior parte delle volte, "istanza di oggetto" è probabilmente solo un testo sciatto.

    
risposta data 07.08.2011 - 17:57
fonte
7

Un oggetto, spesso chiamato un'istanza, è un'istanza specifica di una classe. Se instanziati (fai un'istanza di) una classe dieci volte, ottieni dieci oggetti, ma c'è ancora solo una classe.

    
risposta data 07.08.2011 - 17:25
fonte
5

Il termine oggetto può fare riferimento a (almeno) tre diversi concetti indipendenti:

  1. Un'istanza di una classe. Questo è il caso di linguaggi orientati agli oggetti, strongmente tipizzati, tipizzati staticamente come Java e C #. In questi linguaggi, la "classe" è la definizione e "oggetto" è una singola manifestazione ("istanza") di quello.

  2. Un'area non tipizzata in memoria contenente funzioni e dati / stato. Questo è ciò che troverai in molti linguaggi tipizzati dinamicamente ma ancora orientati agli oggetti, in particolare linguaggi di scripting come JavaScript. In questo caso, non esiste una "classe" e non c'è nemmeno "istanza", ci sono solo oggetti , punto.

  3. Qualsiasi memoria o dati indirizzabili in un programma. Questa era la definizione comunemente accettata prima che esistesse OOP, e fa ancora parte delle specifiche C, come Jerry Coffin spiega.

Quindi questa è essenzialmente una domanda in due parti, le risposte sono:

  • Il termine "oggetto" è sempre corretto nei linguaggi orientati agli oggetti. Il termine "istanza di classe" è a volte un sinonimo, ma ciò dipende dalla lingua specifica.

  • Il termine "istanza dell'oggetto" non è mai corretto. Nelle lingue che definiscono gli oggetti, ma non le classi, il termine "istanza" non ha senso perché ogni oggetto è per definizione un'istanza di qualcosa.

Se vuoi essere sicuro, evita semplicemente di usare il termine "istanza" a meno che tu non abbia specificamente bisogno di distinguere tra la definizione del tipo (classe) e un'istanza di quel tipo, ad es. quando si fa riferimento a un membro di istanza a una classe o a un membro statico .

    
risposta data 07.08.2011 - 18:26
fonte
2

La classe è la specifica in fase di compilazione dell'oggetto. L'oggetto è la realizzazione runtime di tale specifica.

Quindi quando crei un oggetto stai creando una "istanza di una classe", o "istanza di classe".

    
risposta data 07.08.2011 - 16:28
fonte
2

Un'istanza di oggetto sarebbe qualcosa che corrisponde a quell'oggetto nello stesso modo in cui un'istanza di classe corrisponde a una classe. Non sono a conoscenza di concetti tradizionali che corrispondono a quella definizione ...

Inoltre, mentre è vero che un'istanza di classe è sempre un oggetto, gli oggetti non sono sempre istanze di classe: alcune lingue supportano la creazione di oggetti come valori letterali. Si consideri, ad esempio, l'oggetto JavaScript definito come:

var bob = { name : "Bob", age : 31, birthday : function() { this.age++ } } ;

O l'equivalente OCaml:

let bob = object
  val name = "Bob"
  val age  = 31
  method birthday = {< age <- age + 1 >}
end
    
risposta data 07.08.2011 - 18:11
fonte
0

Isn't it that an object is always an instance of a class? Therefore "object instance" is not the correct wording, right?

int i;

Dispersione per controesempio.

D'altro canto, "istanza dell'oggetto" non è buona, e nemmeno "istanza di classe", perché non ogni oggetto è un'istanza di una classe. Di solito dicevo semplicemente "istanza" o "oggetto".

    
risposta data 07.08.2011 - 17:08
fonte

Leggi altre domande sui tag