¿Cuál es la diferencia entre una instancia y un objeto?

92

¿Cuál es la diferencia entre una instancia y un objeto? ¿Hay alguna diferencia o no?

desfile de calle
fuente
10
Tal vez pueda deducir del conocido mensaje de error "Referencia de objeto no configurada para una instancia de un objeto ". : ->
herzmeister
De la especificación de JVM: "Un objeto es una instancia de clase asignada dinámicamente o una matriz". Docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html
yfklon
StackOverFlow Acabo de dar una breve descripción sobre la diferencia entre el objeto y la instancia Espero que ayude
Pushkarraj Pujari
1
Un objeto es una instancia de una clase. Eso es todo al respecto.
Marqués de Lorne

Respuestas:

49

Una instancia es un objeto en la memoria. Básicamente, creas objetos y los instancias cuando los estás usando.

Aquí hay un buen artículo sobre Clases Vs Objetos Vs Instancias, está hablando de Java pero se aplica a todas las OO.

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

Dustin Laine
fuente
27
Esta publicación de blog no explica nada.
Koray Tugay
entonces te refieres a objeto == clase? ¿O te refieres a la clase cargada y se convierte en objeto y el objeto instanciado para convertirse en instancia? ¿No es confusa la respuesta?
p_champ
Piense en la clase como una definición. Cuando crea una instancia de la clase, tiene el objeto que luego puede usarse. Ese objeto está representado físicamente en la memoria.
Dustin Laine
@Dustin Laine la diferencia aún no está clara. ¿Me puedes ayudar?
Pie
@DustinLaine La pregunta plantea la diferencia entre 'instancia' y 'objeto'. Sin embargo, en esta respuesta, lo que se ha explicado es el proceso de 'instanciación' de una clase para obtener 'objeto'. Tu publicación y comentario no coinciden. En la publicación, se menciona que una 'instancia' es un objeto en la memoria. Sin embargo, en el comentario, se menciona que después de crear una instancia de la clase, obtiene el 'objeto', que está representado en la memoria. Esto es un poco ambiguo.
Srishti
56

La instancia y el objeto son de programación orientada a objetos .

Para algunos lenguajes de programación como Java, C ++ y Smalltalk, es importante describir y comprender el código. En otros lenguajes que se utilizan en Programación Estructurada este concepto no existe.

Esta es la vista de la programación estructural. No existe una diferencia significativa real que deba consumir demasiado tiempo. Puede haber algún lenguaje elegante sobre el que algunas personas pueden ocupar muchos espacios para escribir, pero al final del día, en lo que respecta a un codificador, desarrollador, programador, arquitecto, una instancia de una clase y un objeto significa lo mismo y, a menudo, se puede usar indistintamente. Nunca he conocido a nadie en mi carrera que sea quisquilloso y pase media hora tratando de señalar las diferencias, porque realmente no hay ninguna. Es mejor invertir el tiempo en otros esfuerzos de desarrollo.

ACTUALIZACIÓN Con respecto a Swift, esto es lo que prefiere Apple, que inventó Swift:

Una instancia de una clase se conoce tradicionalmente como objeto. Sin embargo, las clases y estructuras de Swift tienen una funcionalidad mucho más cercana que en otros lenguajes, y gran parte de este capítulo describe la funcionalidad que se puede aplicar a instancias de una clase o de un tipo de estructura. Debido a esto, se utiliza el término instancia más general.

Kevin Le - Khnle
fuente
20

Excelente pregunta.

Lo explicaré de la manera más simple posible: digamos que tiene 5 manzanas en su canasta. Cada una de esas manzanas es un objeto de tipo Apple, que tiene algunas características (es decir, grande, redonda, crece en los árboles).

En términos de programación, puede tener una clase llamada Apple, que tiene variables tamaño: grande, forma: redonda, hábitat: crece en árboles. Para tener 5 manzanas en su canasta, necesita instanciar 5 manzanas. Apple apple1, Apple apple2, Apple apple3 etc....

Alternativamente: los objetos son las definiciones de algo, las instancias son las cosas físicas.

¿Esto tiene sentido?

Yuval Karmi
fuente
60
No es así. :) "Los objetos son las definiciones de algo" Lo que llamas objetos aquí son clases.
T-Gergely
11

Instancia: instancia significa simplemente crear una referencia (copia).

objeto: significa cuando la ubicación de la memoria está asociada con el objeto (es una entidad en tiempo de ejecución de la clase) mediante el uso del nuevo operador.

En palabras simples, Instance se refiere a la copia del objeto en un momento particular, mientras que objeto se refiere a la dirección de memoria de la clase.

karthik reddy
fuente
1
decir que una instancia es una referencia a un objeto realmente me aclara las cosas.
John C
2
@JohnC No debería, porque no es correcto. Un objeto es una instancia de una clase. Eso es todo al respecto.
Marqués de Lorne
8

Digamos que estás construyendo algunas sillas.

El diagrama que muestra cómo construir una silla y armarla corresponde a una clase de software.

Digamos que construye cinco sillas de acuerdo con el patrón de ese diagrama. Del mismo modo, puede construir cinco objetos de software de acuerdo con el patrón en una clase.

Cada silla tiene un número único grabado en la parte inferior del asiento para identificar cada silla específica. La silla 3 es un ejemplo de un patrón de silla. Asimismo, la ubicación de memoria 3 puede contener una instancia de un patrón de software.

Entonces, una instancia (silla 3) es una única manifestación única y específica de un patrón de silla.

Brian Showalter
fuente
2
Un objeto es una instancia de una clase. Una instancia no es una instancia de un objeto. La respuesta no tiene sentido.
Marqués de Lorne
1
Vaya, después de nueve años alguien finalmente señaló la falla en mi explicación. ¡Gracias! ¿Mejor ahora?
Brian Showalter
7

Objeto :

Es un término genérico básicamente es un paquete de software que tiene estado (variables) y comportamiento (métodos)

Clase :

Un plano (plantilla) para una instancia de objeto: es una cosa de objeto único, por ejemplo, crea un objeto dos veces, ¿qué significa eso si ha creado dos instancias?

Déjame dar un ejemplo

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

Ejemplo de objeto :

Estudiante s1 = nuevo estudiante ("Martín"); Estudiante s2 = nuevo estudiante ("Kumar");

Los s1, s2 tienen objeto de clase Student

Ejemplo :

s1 y s2 son instancias de objeto student los dos son únicos .

se puede llamar como referencia .

Básicamente, s1 y s2 son variables a las que se les asigna un objeto.

Durai Amuthan.H
fuente
1
Un objeto es una instancia de una clase.
Marqués de Lorne
7

Los objetos y las instancias son en su mayoría iguales; pero hay una diferencia muy pequeña. Si Cares una clase, 3 Cars son 3 objetos diferentes. Todos estos objetos son instancias. Entonces estos 3 autos son objetos de instancias de la Carclase.

Pero la palabra "instancia" también puede significar "instancia de estructura". Pero el objeto es solo para clases.

Todos los objetos son instancias. No todas las instancias deben ser objetos. Las instancias pueden ser "instancias de estructura" u "objetos". Espero que esto le aclare la diferencia.

DotNet Harsha Vardhan
fuente
3

Un objeto es una construcción, algo estático que tiene ciertas características y rasgos, como propiedades y métodos, puede ser cualquier cosa (una cadena, un control de usuario, etc.)

Una instancia es una copia única de ese objeto que puede usar y hacer cosas.

Imagina un producto como una computadora.

LA estación de trabajo xw6400 es un objeto

SU estación de trabajo xw6400 (o la estación de trabajo xw6400 de SU ESPOSA) es una instancia del objeto de estación de trabajo xw6400

Greg Olmstead
fuente
1
Su primer y segundo párrafo describen clases, no objetos.
Marqués de Lorne
2

Esta respuesta puede parecer trillada, pero preocuparse por las diferencias entre una instancia y un objeto ya es trivial.

Creo que está mejor representado en javascript:

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

versos

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

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

Una instancia es una representación específica de un objeto. Un objeto es algo genérico, mientras que una instancia es un objeto único que se ha creado en la memoria. Por lo general, una instancia tendrá valores asignados a sus propiedades que la diferencian de otras instancias del tipo de objeto.

TLiebe
fuente
1

Si vemos la definición de objeto y objeto de instancia -

La memoria asignada para el miembro de la clase en tiempo de ejecución se llama objeto o el objeto es la instancia de Class.

Veamos la Definición de instancia -

Memoria asignada para cualquier en tiempo de ejecución se llama como variable de instancia.

Ahora comprenda el significado de cualquier asignación de memoria en tiempo de ejecución que ocurre en C también a través de Malloc, Calloc, Realloc como:

struct p
{

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

Así que aquí también estamos asignando la asignación de memoria en tiempo de ejecución, pero aquí llamamos como instancia, por lo que t1 es una instancia, aquí no podemos decir t1 como objeto, por lo que cada objeto es la instancia de la clase, pero cada instancia no es un objeto.

Vivek Kumar
fuente
Hay una respuesta correcta acechando aquí en alguna parte, pero el lenguaje necesita limpieza y simplificación.
Marqués de Lorne
1

Objeto: una instancia de una clase que tiene su propio estado y acceso a todo el comportamiento definido por su clase.

Instancia: referencia a un área de memoria para esa clase en particular.

prathipati s
fuente
1

No puedo creerlo, excepto por un tipo que nadie ha usado el código para explicar esto, ¡déjame intentarlo también!

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

var humanClassObject1 = HumanClass(name: "Rehan") 

Ahora el lado izquierdo es decir: "humanClassObject1" es el objeto y el lado derecho es decir: HumanClass (nombre: "Rehan") es la instancia de este objeto.

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

Entonces, básicamente, la instancia contiene los valores específicos para ese objeto y los objetos contienen la ubicación de la memoria (en tiempo de ejecución).

Recuerde la famosa declaración "referencia de objeto no establecida en una instancia de un objeto", esto significa que los objetos no inicializados no tienen ninguna instancia. En algunos lenguajes de programación como Swift, el compilador no le permitirá ni siquiera diseñar una clase que no tenga ninguna forma de inicializar todos sus miembros (variable, por ejemplo: nombre, edad, etc.), pero en algunos lenguajes se le permite hacer esto:

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

Y el error solo se mostrará en tiempo de ejecución cuando intente hacer algo como esto:

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

¡Este error indica que los valores específicos (para variables \ propiedad) es la "INSTANCIA" como intenté explicar esto arriba! Y el objeto, es decir, "myClass" contiene la ubicación de la memoria (en tiempo de ejecución).

Rehan Ali Khan
fuente
1

Cuando se declara una variable de un tipo personalizado (clase), solo se crea una referencia, que se denomina objeto. En esta etapa, no se asigna memoria a este objeto . Actúa simplemente como un puntero (a la ubicación donde se almacenará el objeto en el futuro). Este proceso se llama "Declaración".

Employee e; // e is an object

Por otro lado, cuando se declara una variable de tipo personalizado utilizando el newoperador, el cual asigna memoria en montón a este objeto y devuelve la referencia a la memoria asignada. Este objeto que ahora se denomina instancia . Este proceso se llama 'Creación de instancias'.

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

Por otro lado, en algunos lenguajes como Java, un objeto es equivalente a una instancia, como se evidencia en la línea escrita en la documentación de Oracle sobre Java :

Nota: La frase "instanciar una clase" significa lo mismo que "crear un objeto". Cuando crea un objeto, está creando una "instancia" de una clase, por lo tanto "instanciando" una clase.

Srishti
fuente
0

cada objeto se dice que es una instancia de su clase, pero cada instancia de la clase tiene su propio valor para cada atributo intances comparte el nombre del atributo y la operación con sus intances de clase, pero un objeto contiene una referencia implícita a su clase on

usuario2750565
fuente
0

Clase: Una clase es un modelo. Objeto: Es la copia de la clase. Instancia: Es una variable que se utiliza para contener la dirección de memoria del objeto.

Un ejemplo analítico muy básico

Class House -> Plano de la casa. Pero no puedes vivir en el plano azul. Necesita una Casa física que sea la instancia de la clase en la que vivir. Es decir, la dirección real del objeto es la instancia. Las instancias representan objetos.

Sindhu
fuente
La instancia se refiere al objeto, no a una variable.
Marqués de Lorne
0

Una vez que crea una instancia de una clase (usando new), esa cosa instanciada se convierte en un objeto. Un objeto es algo que puede adherirse a los principios de encapsulación, polimorfismo, abstracción de la programación orientada a objetos y la cosa real con la que un programa interactúa para consumir los miembros de instancia definidos en la clase. El objeto contiene miembros de instancia (miembros no estáticos).

Por tanto, la instancia de una clase es un objeto. La palabra 'instancia' se usa cuando te refieres al origen de donde nació, es más claro si dices 'instancia de una clase' en comparación con 'objeto de una clase' (aunque este último puede usarse).

También puede leer la sección 'Clases internas' de este documento java sobre clases anidadas: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

p_champ
fuente
0

Java es un lenguaje de programación orientado a objetos (OOP). Esto significa que todo en Java, excepto los tipos primitivos, es un objeto.

Ahora, los objetos Java son similares a los objetos del mundo real. Por ejemplo, podemos crear un objeto de automóvil en Java, que tendrá propiedades como la velocidad y el color actuales; y comportamientos como: acelerar y estacionar.

Eso es Object .

ingrese la descripción de la imagen aquí

La instancia , por otro lado, es una copia inicializada de forma única de ese objeto que se parece a Car car = new Car().

Échale un vistazo para obtener más información sobre las clases y los objetos de Java

Johnny
fuente
Un objeto es una instancia de una clase.
Marqués de Lorne
0

Respuesta rápida y sencilla

  • Clase : una especificación, plano para un objeto
  • Objeto : presencia física de la clase en la memoria.
  • Instancia : una copia única del objeto (misma estructura, datos diferentes)
Syed Ekram Uddin
fuente
-1

Respecto a la diferencia entre an objecty aninstance , no creo que haya consenso.

Me parece que la gente lo cambia casi indistintamente, en artículos, publicaciones de blogs, libros o conversaciones.

En cuanto a mí, a mi modo de ver, un objeto es una entidad genérica y viva en la memoria, especificada por el lenguaje en el que se usa. Al igual que la Objectclase en Java. No nos importa mucho su tipo, o cualquier otra cosa asociada a él, si está gestionado por un contenedor o no.

An instancees un objectpero asociado con un tipo, como en this method accepts Foo instanceso you can not put Animal instances in an instance of a List of Vehicles.

objects, por ejemplo, se han locksasociado con ellos, no instances, mientras que instances tienen métodos. objectsson basura recolectada, no instances.

Pero como dije, así es solo como lo veo, y no creo que haya ninguna organización a la que podamos referirnos para una definición estándar entre ellos y todos tendrán su comprensión / definiciones ligeramente diferentes (por supuesto, dentro de los límites) .

Koray Tugay
fuente
-1

Un objeto es una cosa genérica, por ejemplo, tome una función lineal en matemáticas

ax + b es un objeto, mientras que 3x + 2 es una instancia de ese objeto

Objeto <<< Instancia

General <<< Específico

No hay nada más en esto

Chyanit Singh
fuente
-2

Un objeto puede ser una clase, digamos que tienes una clase llamada baloncesto.

pero quieres tener varias pelotas de baloncesto, por lo que en tu código creas más de una

digamos basketball1 y basketball2. Luego ejecuta su aplicación. Ahora tienes 2 instancias del objeto baloncesto.

Darxval
fuente
¿Eso significaría que un objeto es una instancia de un constructor de clase?
Streetparade
Piense en el objeto como en un plano. digamos que tenemos un plan para el baloncesto, esa es la clase. cuando se crea la pelota de baloncesto y se hace, ahora existe, lo que significa que tenemos 1 instancia del objeto baloncesto. si construimos otra pelota de baloncesto a partir del objeto (plano). ahora tenemos 2 instancias de baloncesto. Siempre hay un solo objeto, pero podemos crear muchas instancias de ese objeto.
Darxval
@Darxval entonces, ¿qué es una clase?
Chyanit Singh
-3

El objeto se refiere a la clase y la instancia se refiere a un objeto. En otras palabras, instancia es una copia de un objeto con valores particulares en él.

Karamjit Singh Sehdev
fuente