2010-02-18 20 views
5

Me gustaría saber la diferencia entre el objeto y la instancia de la clase. Siento que ambos son iguales, pero ¿por qué llamamos con dos nombres? ¿Alguien puede explicar con el ejemplo de la vida real?¿Cuál es la diferencia entre objeto e instancia?

+1

Desafortunadamente, la mayoría de estas respuestas son incorrectas. Entonces léelos todos. –

+1

@Evan Carroll - Creo que veo su punto, pero dependerá del idioma, ¿no es así? ¿Es justo decir que 'instancia' es un subconjunto de' objeto'? –

+0

@Pascal reemplazando la etiqueta "java" con "idioma-agnóstico" agregó un nuevo nivel de complejidad a esta pregunta. Desafortunadamente, la mayoría de las respuestas no cumplen con esa complejidad. Ver comentarios a la respuesta de Bill, por ejemplo. – sfussenegger

Respuesta

2

Son prácticamente lo mismo en este contexto. "Objeto" puede usarse como un término un poco más general/vago, "instancia" se usa típicamente más específicamente como "instancia de una clase".

1

Lo mismo: un "objeto" es realmente "una instancia de una clase".

9

Son lo mismo en la mayoría de los lenguajes orientados a objetos. "Instancia de una clase" es cómo se define el término "objeto".

+2

No, no lo es. De lo contrario, javascript y todos los demás idiomas sin clase (lua, etc.) no tendrían objetos. Y lo hacen. Vea la respuesta de Dario para la respuesta más correcta aquí. –

+3

@Evan Carroll: compruebe el historial de edición de la pregunta. Tenía la etiqueta 'java' cuando respondí. –

2

Son lo mismo. En contexto, "instancia" enfatiza el hecho de que es una instanciación de la definición de clase; "objeto" enfatiza el hecho de que es una entidad única.

4

(Edit:. Esta pregunta tenía originalmente la etiqueta "java" Así, el lenguaje sin clases estaban fuera de su alcance.)

objeto

Un patrón (modelo) de una clase . La clase define a todos los perros posibles por enumerando las características y los comportamientos que pueden tener; el objeto Lassie es un perro particular, con versiones particulares de las características . Un perro tiene pelo; Lassie tiene pelaje marrón y blanco.

Instancia

Uno puede tener una instancia de una clase; la instancia es el objeto real creado en tiempo de ejecución. En la jerga del programador , el objeto Lassie es una instancia de la clase Dog. El conjunto de valores de los atributos de un objeto particular se llama su estado. El objeto consiste en el estado y el comportamiento que se define en la clase del objeto .

(Wikipedia, Object-oriented programming)

1

Puedo ilustrar esto mejor con Python, así que aquí va: En Python se puede crear una clase. Vamos a llamarlo la clase Person. A continuación, cree una instancia de la clase Person. Vamos a llamarlo Bob. Entonces, bob = Person(). El caso es que tanto bob como Person son objetos. Cuando lo hace Person(), en realidad está llamando al constructor en el objeto Personclase, que le da un objeto instancia - es decir, bob.

+1

Y para agregar a la diversión - Persona, la clase también es un objeto. :) –

1

Utiliza instancia cuando desea resaltar que un objeto se crea a partir de un tipo o clase determinados.

ver este párrafo sobre Wikipedia:

En un lenguaje donde se crea cada objeto de una clase, un objeto se llama una instancia de esa clase. Si cada objeto tiene un tipo, dos objetos con la misma clase tendrían el mismo tipo de datos. Crear una instancia de una clase a veces se denomina instanciar la clase.

Un ejemplo del mundo real de un objeto sería "mi perro", que es una instancia de un tipo (una clase) llamado "perro", que es una subclase de una clase "animal".

+1

+1. Todos los demás dicen "un objeto es una instancia de una clase", lo cual es cierto; pero también están diciendo, "entonces son lo mismo". No exactamente. * de una clase * nos dice que "instancia" tiene connotaciones de relación que están ausentes de "objeto", aunque cada objeto * es * una instanciación de una (o, en algunos idiomas, más) clase (s). –

+0

En realidad eso no es verdad. Algunos lenguajes implementan objetos sin clases. –

+0

@evan "en un idioma en el que cada objeto se crea a partir de una clase" – sfussenegger

2

Un objeto es un término más general. C usa el término objeto, aunque no tiene clases en absoluto; desde su punto de vista, cualquier variable (por ejemplo) es un objeto.

Algunos lenguajes orientados a objetos tampoco tienen clases. Una clase es una forma de especificar las propiedades de los objetos; todos los objetos de una clase determinada comparten esas propiedades. En algunos idiomas (por ejemplo, Javascript, Self), sin embargo, no tiene que especificar esas propiedades en una clase. Más bien, comience con un objeto (el "ejemplar") desde el que clona un objeto nuevo y modifíquelo como mejor le parezca. Cuando/si usted crea una cantidad de objetos sin modificarlos, puede terminar con una "clase" en una manera de hablar (objetos con las mismas propiedades), pero eso es más o menos un accidente.

5

Para completar: En prototype-based programming languages, no se distinguen entre clases e instancias/objetos.

Retrocedamos si hace esta pregunta, es probable que solo conozca la orientación de objetos basada en clases. Funciona de esta manera.

  1. Class te dice lo que usted quiere tener (esquema de datos), y la forma en que desea operar en él (métodos).
  2. Crear un Object completarlo con lo que necesita (datos) y utilizar las operaciones definidas con él.

Sin embargo, no es necesario un Class tener un objeto si se puede encontrar una manera diferente de responder a la pregunta ¿qué quieres a mi objeto hacer y cómo. En un modelo alternativo llamado , las instancias de orientación del objeto prototipo se crean clonando las existentes (prototipos) y replicando y extendiendo el comportamiento del clon. Los objetos no tienen esquema a seguir en este formato. Son solo una agrupación de datos y cosas que actúan sobre los datos.

+0

Esto es esencial para comprender la pregunta y se excluyó de las otras respuestas. Creo que si tu respuesta creció en sustancia un poco más, serías el ganador obvio. La mayoría de estas respuestas son incorrectas o están muy equivocadas. Estuve a punto de publicar esta referencia también. Solo puedes crear una instancia de un objeto no. No tendría sentido decir que A es una instancia de A y A es un objeto; sin embargo, decimos que A es una instancia de B y B es una clase. –

+0

Siéntase libre de editar – Dario

4

términos "objeto", "objeto de clase" y "instancia" solo tiene distinciones históricas. Actualmente no existe ni un solo artículo en Wiki para todo esto :)

Aquí pruebas adicionales, que los términos "objeto" y "ejemplo" son Quals (de "Orientada a Objetos de construcción de software" por Bertran Meyer):

Un objeto que pertenece al conjunto de objetos descrito por una especificación ADT se denomina instancia de ADT. Por ejemplo, una pila específica que satisface las propiedades del tipo de datos abstractos APILAMIENTO será una instancia de PILA.

Como un ADT, una clase es un tipo: describe un conjunto de posibles estructuras de datos, llamado las instancias de la clase. Los tipos de datos abstractos también tienen instancias; la diferencia es que una instancia de un ADT es un elemento puramente matemático (un miembro de algún conjunto matemático ), mientras que una instancia de una clase es una estructura de datos que se puede representar en la memoria de una computadora y manipulada por un sistema de software.

La definición de "clase" produce como subproducto una definición de "objeto". Un objeto es simplemente una instancia de alguna clase. Por ejemplo, una instancia de la clase PILA - una estructura de datos que representa una pila particular - es un objeto; también lo es una instancia de la clase POINT, que representa un punto particular en el espacio bidimensional.

Cuestiones relacionadas