Diferencia entre objeto e instancia

82

Sé que este tipo de pregunta se ha hecho antes , pero todavía siento que la respuesta es demasiado ambigua para mí (y, por extensión, para algunos / la mayoría de los principiantes) para comprender.

He estado tratando de enseñarme a mí mismo conceptos más amplios de programación que OOP procedimental y básico. Entiendo los conceptos concretos de la programación orientada a objetos (crea una clase que tiene datos (miembros) y funciones (métodos) y luego crea una instancia de esa clase en tiempo de ejecución para hacer cosas, ese tipo de cosas).

Creo que tengo una idea de lo que es una clase (una especie de plano de diseño para una instancia que se creará a su semejanza en el momento de la compilación ). Pero si ese es el caso, ¿qué es un objeto? También sé que en los lenguajes basados ​​en prototipos, esto puede estropear las cosas aún más, pero quizás por eso es necesario que haya una clara distinción entre objeto e instancia en mi mente.

Más allá de eso, lucho con los conceptos de "objeto" e "instancia". Muchos de los recursos que leí (incluidas las respuestas en SO) dicen que son en gran parte iguales y que la diferencia está en la semántica. Otras personas dicen que existe una verdadera diferencia conceptual entre los dos.

¿Pueden los expertos de SO ayudar a un principiante a tener ese momento "ajá" para avanzar en el mundo de OOP?

Nota: esto no es tarea, no voy a la escuela; sin embargo, creo que ayudaría a las personas que buscan ayuda con la tarea.

TCCV
fuente
1
Me pregunto si le gustaría agregar algunas preguntas adicionales como, "¿son todas las instancias objetos?" y, "¿son todos los objetos instancias?" Si ambos "sí", entonces podemos confirmar que son iguales.
WesternGun
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'
p_champ

Respuestas:

129

Un plano para el diseño de una casa es como una descripción de clase. Todas las casas construidas a partir de ese plano son objetos de esa clase. Una casa determinada es un ejemplo.

joe snyder
fuente
6
Además, hay una calle de mi ciudad natal que tiene un poco de fama local porque hay 8 casas de ladrillo construidas de manera idéntica en una fila (antes de que surgiera el concepto de "desarrollo de viviendas"). Entonces puedo visualizar eso muy bien. "Clase" es lo que elaboró ​​el arquitecto. Las casas terminadas son "objetos" porque todas están construidas de manera idéntica. Cada casa es una "instancia" porque han sido (y pueden seguir siendo) todas tratadas de manera diferente desde entonces [ahora uno tiene revestimiento: o (].
TCCV
16
Y los métodos estáticos son como las utilidades que comparten todas las casas.
WOPR
2
¿Pero no es una casa construida a partir del plano una instancia?
Hot Licks
1
Es decir, la primera memoria ocupada por la definición de clase es instancia. mientras que todos los objetos que se crean se llaman objetos.
Hafiz Shehbaz Ali
6
¿No es el objeto y la instancia exactamente lo mismo?
Praveen Kumar
42

La verdad es que la programación orientada a objetos a menudo crea confusión al crear una desconexión entre el lado filosófico del desarrollo y el funcionamiento mecánico real de la computadora. Intentaré contrastar los dos para ti:

El concepto básico de OOP es este: Clase >> Objeto >> Instancia.

La clase = el anteproyecto. El Objeto es una cosa real que se construye sobre la base del 'plano' (como la casa). Una instancia es una copia virtual (pero no una copia real) del objeto.

La explicación más técnica de una 'instancia' es que es una 'referencia de memoria' o una variable de referencia. Esto significa que una 'instancia' es una variable en la memoria que solotiene una dirección de memoria de un objeto. El objeto al que se dirige es el mismo objeto del que se dice que la instancia es 'una instancia de'. Si tiene muchas instancias de un objeto, en realidad solo tiene muchas variables en lugares diferentes en su memoria que tienen la misma dirección de memoria exacta, que son todas la dirección del mismo objeto exacto. Nunca puede 'cambiar' una instancia, aunque parece que puede hacerlo en su código. Lo que realmente hace cuando 'cambia' una instancia es cambiar el objeto original directamente. Electrónicamente, el procesador pasa por un lugar adicional en la memoria (la variable / instancia de referencia) antes de cambiar los datos del objeto original.

El proceso es: procesador >> ubicación de memoria de la instancia >> ubicación de memoria del objeto original.

Tenga en cuenta que no importa qué instancia utilice, el resultado final siempre será el mismo. TODAS las instancias continuarán manteniendo la misma información exacta en sus ubicaciones de memoria, la dirección de memoria del objeto, y solo el objeto cambiará.

La relación entre clase y objeto es un poco más confusa, aunque filosóficamente es la más fácil de entender (plano >> casa). Si el objeto son datos reales que se encuentran en algún lugar de la memoria, ¿qué es 'clase'? Resulta que mecánicamente el objeto es una copia exacta de la clase. Entonces, la clase es solo otra variable en algún otro lugar de la memoria que contiene exactamente la misma información que el objeto. Note la diferencia entre las relaciones:

El objeto es una copia de la clase. La instancia es una variable que contiene la dirección de memoria del objeto.

También puede tener varios objetos de la misma clase y luego varias instancias de cada uno de esos objetos. En estos casos, el conjunto de instancias de cada objeto tiene un valor equivalente, pero las instancias entre objetos no lo son. Por ejemplo:

Deje que la clase A de la clase A sea Object1, Object2 y Object3.

// Object1 tiene exactamente el mismo valor que object2 y object3, pero están en diferentes lugares de la memoria.

de Object1 >> deje obj1_Instance1, obj1_Instace2, obj1_Instance3

// todas estas instancias también son equivalentes en valor y en diferentes lugares de la memoria. Sus valores = Object1.MemoryAddress.

etc.

Las cosas se complican cuando empiezas a introducir tipos. A continuación, se muestra un ejemplo con tipos de c #:

// asumimos que la clase Person existe Person john = new Person ();

En realidad, este código es más fácil de analizar si lo divide en dos partes:

Person john;
john = new Person();

En términos técnicos, la primera línea 'declara una variable de tipoPersona. ¿¿Pero qué significa eso?? La explicación general es que ahora tengo una variable vacía que solo puede contener un objeto Person. Pero espere un minuto, ¡es una variable vacía! No hay nada en esa ubicación de memoria de variables. Resulta que los "tipos" carecen mecánicamente de significado. Los tipos se inventaron originalmente como una forma de administrar datos y nada más. Incluso cuando declara tipos primitivos como int, str, chr (sin inicializarlo), no sucede nada dentro de la computadora. Este extraño aspecto sintáctico de la programación es parte de donde la gente tiene la idea de que las clases son el modelo de los objetos. Los POO se han vuelto aún más confusos con tipos con tipos de delegados, controladores de eventos, etc. Intentaría no centrarme demasiado en ellos y recordar que todos son un nombre inapropiado.

La segunda línea también es un poco confusa porque hace dos cosas a la vez:

Primero se evalúa la "nueva Persona ()" del lado derecho. Crea una nueva copia de la clase Person, es decir, crea un nuevo objeto.

El lado izquierdo "john =", se evalúa después de eso. Convierte a john en una variable de referencia dándole la dirección de memoria del objeto que se acaba de crear en el lado derecho de la misma línea.

Si desea convertirse en un buen desarrollador, es importante comprender que ningún entorno informático funciona según los ideales filosóficos. Las computadoras ni siquiera son tan lógicas, en realidad son solo una gran colección de cables que están pegados entre sí mediante circuitos booleanos básicos (principalmente NAND y OR).

John Rambly
fuente
32

La palabra Clase proviene de Clasificación ( una categoría en la que se coloca algo ). Ahora todos hemos escuchado que una clase es como un plano, pero ¿qué significa esto exactamente? Significa que la Clase contiene una Descripción de una Categoría en particular ( me gustaría mostrar la diferencia entre Clase, Objeto e Instancia con un ejemplo usando Java y pediría a los lectores que la visualicen como una Historia mientras la leen, y si no están familiarizados con Java, no importa ) Así que comencemos con crear una Categoría llamada HumanBeing , para que el programa Java lo exprese de la siguiente manera

class HumanBeing{ 
   /*We will slowly build this category*/ 
}

Ahora, ¿qué atributos tiene un Ser Humano en general Nombre , Edad , Altura , Peso? Por ahora limitemos nuestro ser a estos cuatro atributos, agreguemos a nuestra Categoría.

class HumanBeing{
    private String Name;
    private int Age;
    private float Height;
    private float Weight; 

   /*We still need to add methods*/

}

Ahora cada categoría tiene un comportamiento, por ejemplo, la categoría Perro tiene un comportamiento para ladrar, buscar, rodar, etc., de manera similar, nuestra categoría HumanBeing también puede tener cierto comportamiento, por ejemplo, cuando le preguntamos a nuestro HumanBeing cuál es su nombre / edad / peso / ¿altura? Debería darnos su nombre / edad / peso / altura, así que en java lo hacemos de la siguiente manera

class HumanBeing{
    private String Name;
    private int Age;
    private float Height;
    private float Weight;  

    public HumanBeing(String Name,int Age,float Height,float Weight){
       this.Name = Name;
       this.Age  = Age;
       this.Height = Height;
       this.Weight = Weight;
    }

    public String getName(){
      return this.Name;
    }

    public int getAge(){
      return this.age;
    }

    public float getHeight(){
      return this.Height;
    }

    public float getWeight(){
      return this.Weight;
    }
}

Ahora hemos agregado comportamiento a nuestra categoría HumanBeing , por lo que podemos preguntar su nombre, edad, altura, peso, pero a quién le pedirá estos detalles, porque class HumanBeinges solo una categoría, es un plano, por ejemplo, un arquitecto hace un plano en un papel del edificio que quiere construir, ahora no podemos seguir viviendo en el plano ( su descripción del edificio ) solo podemos vivir en el edificio una vez que esté construido Así que aquí tenemos que hacer un ser humano de nuestra categoría que hemos descrito anteriormente, entonces, ¿cómo hacemos eso en Java

class Birth{
  public static void main(String [] args){
    HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);    
  }
}

Ahora, en el ejemplo anterior, hemos creado nuestro primer ser humano con nombre edad altura peso, entonces, ¿qué está sucediendo exactamente en el código anterior? . Estamos creando una instancia de nuestra categoría Ser humano, es decir, se crea un objeto de nuestra clase

Nota: Objeto e Instancia no son sinónimos En algunos casos parece que Objeto e Instancia son Sinónimos pero no lo son, daré ambos casos

Caso 1: Objeto e Instancia parecen ser sinónimos
Permítanme desarrollar un poco, cuando decimos que HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90); un objeto de nuestra categoría se crea en la memoria del montón y se le asigna una dirección, y firstHumantiene una referencia a esa dirección, ahora este objeto es Un Objeto del Ser Humano y también una Instancia del Ser Humano . Aquí parece que Objetos e Instancia son sinónimos, me repito que no son sinónimos

Reanudamos nuestra historia, hemos creado nuestro primer humano, ahora podemos preguntarle su nombre, edad, estatura, peso, así es como lo hacemos en Java

class Birth{
  public static void main(String [] args){
    HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);
    System.out.println(firstHuman.getName());
    System.out.println(firstHuman.getAge());
    ...
    ...  
  }
}

así que tenemos el primer ser humano y vamos a mover la pluma al darle a nuestro primer ser humano alguna calificación, vamos a convertirlo en Doctor, entonces necesitamos una categoría llamada Doctor y darle a nuestro Doctor un comportamiento, así que en Java hacemos lo siguiente

class Doctor extends HumanBeing{
   public Doctor(String Name,int Age,float Height,float Weight){
      super(Name,Age,Height,Weight);
   }
   public void doOperation(){
    /* Do some Operation*/ 
   }

   public void doConsultation(){
    /* Do so Consultation*/
   }
}  

Aquí hemos usado el concepto de Herencia que trae cierta reutilización en el código, Cada Doctor siempre será un HumanBeing primero, por lo que un Doctor tendrá Nombre, Edad, Peso, Altura que se heredará de HumanBeing en lugar de escribirlo de nuevo. tenga en cuenta que acabamos de escribir una descripción de un médico, aún no hemos creado una, así que creemos un Doctor en nuestroclass Birth

class Birth{
  public static void main(String [] args){
    Doctor firstDoctor = new Doctor("Strange",40,6,80);
    .......
    .......
    /*Assume some method calls , use of behaviour*/
    .......
    .......    
  }
}

Caso 2: Objeto e Instancia no son Sinónimos
En el código anterior podemos visualizar que estamos instanciando nuestra categoría Doctor y dándole vida, es decir, simplemente estamos creando un Objeto de la categoría Doctor , Como ya sabemos, los Objetos se crean en la Memoria Heap y firstDoctorcontiene una referencia a ese Objeto en el montón;

Este objeto en particular firstDoctores el siguiente (tenga en cuenta que firstDoctorcontiene una referencia al objeto, no es el objeto en sí)

  1. firstDoctores un objetoclass Doctor y una instancia de Aclass Doctor
  2. firstDoctornoclass HumanBeing es un objeto de sino una instancia declass HumanBeing

Entonces, un objeto en particular puede ser una instancia de una clase en particular, pero no necesita ser un objeto de esa clase dada

Conclusión:

Se dice que un objeto es una instancia de una categoría particular si satisface todas las características de esa categoría en particular

El ejemplo del mundo real será el siguiente, nacemos como seres humanos, así que imagínenos como un objeto humano, ahora, cuando crecemos, asumimos responsabilidades y aprendemos nuevas habilidades y desempeñamos diferentes roles en la vida. , madre ahora ¿Qué somos en realidad? Podemos decir que somos Objetos de Humanos, Pero Instancias de Hermano, hija, ..., etc.

espero que esto ayude

Gracias

Pushkarraj Pujari
fuente
5
... y ¿por qué solo tenemos 3 votos a favor en esta respuesta?
Pratik Ambani
13

ingrese la descripción de la imagen aquí

Los objetos son cosas en la memoria, mientras que las instancias son cosas que hacen referencia a ellos. En la foto de arriba:

  • std (instancia) -> Objeto de estudiante (derecha)
  • std1 (instancia) -> Objeto de estudiante (izquierda)
  • std2 (instancia) -> Objeto de estudiante (izquierda)
  • std3 (instancia) -> sin objeto (nulo)
Truong Ha
fuente
4
Eso es grandioso. Realmente me gusta el hecho de que sea de bajo nivel. Voy y vengo sobre si me gusta más esto que la analogía. Creo que conocer los dos juntos es lo que realmente necesitaba. voto a favor, pero no estoy seguro de poder darte la respuesta porque ya se la han dado a Joe. Gracias de cualquier forma. Esto se aclara mucho.
TCCV
Bueno, ¿una instancia es un puntero a un objeto? (instancia == variable con dirección de memoria?)
Stano
6
Truong, tu respuesta es incorrecta y confusa. De hecho, una instancia es un objeto derivado de un objeto de clase base. Instancia == objeto. Esta terminología se explica bien, por ejemplo, en esta o esta respuesta.
Stano
@jww: La imagen es un enlace a math.hws.edu/javanotes/c5/objectsInHeap.png que ahora es 404. Presumiblemente era visible en el momento en que se publicó.
Matt Burland
6

Un objeto es una instancia de una clase (para lenguajes basados ​​en clases).

Creo que esta es la explicación más simple que se me ocurre.

sukru
fuente
1
Estoy de acuerdo en que su explicación es correcta con la forma en que he estado leyendo, pero hay muchas entradas en línea que hacen una distinción entre las dos. No sé si este tipo de pregunta no se puede responder sin un idioma en mente (wow, una metapregunta, esta pregunta es una clase que no se puede usar sin instanciarla con un idioma, jaja).
TCCV
6

Una clase define un objeto. Puede ir aún más lejos en muchos idiomas y decir que una interfaz define atributos y métodos comunes entre objetos.

Un objeto es algo que puede representar algo en el mundo real. Cuando desee que el objeto represente realmente algo en el mundo real, se debe crear una instancia de ese objeto. La instanciación significa que debe definir las características (atributos) de este objeto específico, generalmente a través de un constructor.

Una vez que haya definido estas características, ahora tiene una instancia de un objeto.

Espero que esto aclare las cosas.

Derek Litz
fuente
Creo que básicamente es decir lo que dijo Joe. Corrígeme si me equivoco.
TCCV
3
Arriba, Joe dice que todas las casas construidas a partir del plano son objetos. Cierto. Y dice que una casa determinada es un ejemplo. Cierto. Pero todas las casas son instancias y una casa determinada también es un objeto. Estaba haciendo una diferencia donde no la había. En código es necesario diferenciar entre un objeto y una instancia en el momento en que lo construimos. Decimos que se crea una instancia cuando en realidad se ha construido. Una pregunta común podría ser: ¿Se acordó de crear una instancia del objeto? es decir. si olvidó llamar al constructor después de haber declarado un objeto.
Derek Litz
1
ah, esa es una buena distinción. Por decirlo de otra manera, una instancia es un objeto que se ha construido (es decir, se ha llamado al constructor).
TCCV
3

"Una clase describe un conjunto de objetos llamados sus instancias". - Grupo de investigación de aprendizaje de Xerox, "El sistema Smalltalk-80", Revista Byte Volumen 06 Número 08, p39, 1981.

miguel.negrao
fuente
2

¿Qué es un objeto?

Un objeto es una instancia de una clase. El objeto se puede entender mejor al encontrar ejemplos del mundo real a tu alrededor. Su escritorio, su computadora portátil, su automóvil son buenos ejemplos del mundo real de un objeto.

Los objetos del mundo real comparten dos características, todos tienen estado y comportamiento. Los seres humanos también son un buen ejemplo de un objeto. Los seres humanos tenemos un estado / atributos - nombre, altura, peso y comportamiento - caminar, correr, hablar, dormir, codificar: P.

¿Qué es una clase?

Una clase es un plano o una plantilla que describe los detalles de un objeto. Estos detalles son a saber

atributos de nombre / operaciones de estado / métodos

class Car 
{
    int speed = 0;
    int gear = 1;

    void changeGear(int newGear)
    {
        gear = newGear;
    }

    void speedUp(int increment) 
    {
        speed = speed + increment;
    }

    void applyBrakes(int decrement) 
    {
        speed = speed - decrement;
    }
}

Considere el ejemplo anterior, los campos speedy gearrepresentarán el estado del objeto y los métodos changeGear, speedUpyapplyBrakes definirán el comportamiento del objeto Car con el mundo exterior.

Referencias:

Yasser Shaikh
fuente
1

Creo que es importante señalar que generalmente hay dos cosas. El plano y las copias. La gente tiende a nombrar estas cosas diferentes; clases, objetos, instancias son solo algunos de los nombres que la gente usa para ellos. Lo importante es que existe el plano y las copias del mismo, independientemente de sus nombres. Si ya comprende estos dos, simplemente evite las otras cosas que lo confunden.

Simón
fuente
0

Comparemos manzanas con manzanas. Todos sabemos lo que es una manzana. Qué aspecto tiene. A qué sabe. Eso es una clase. Es la definición de una cosa. Es lo que sabemos sobre una cosa.

Ahora ve a buscar una manzana. Esa es una instancia. Lo podemos ver. Podemos saborearlo. Podemos hacer cosas con él. Es lo que tenemos.

Clase = Lo que sabemos sobre algo. Una definicion.

Objeto / Instancia = Algo que se ajuste a esa definición que tenemos y con lo que podemos hacer cosas.

Jack
fuente
0

En algunos casos, el término "objeto" puede usarse para describir una instancia, pero en otros casos se usa para describir una referencia a una instancia. El término "instancia" solo se refiere a la instancia real.

Por ejemplo, una lista puede describirse como una colección de objetos, pero lo que realmente contiene son referencias a instancias de objetos.

Super gato
fuente
Entonces, en este caso, ¿una referencia es solo un marcador de posición que contiene un enlace a la instancia? ¿Dónde un enlace podría ser algo así como una dirección de memoria?
TCCV
0

Siempre me ha gustado la idea de que la definición de una clase sea igual a la de un "Tipo de datos abstracto" . Es decir, cuando definiste una clase, estás definiendo un nuevo tipo de "algo", su representación del tipo de datos, en términos de primitivas y otros "algo", y su comportamiento en términos de funciones y / o métodos. (Perdón por la generalidad y el formalismo)

Cada vez que definió una clase, abre una nueva posibilidad para definir ciertas entidades con sus propiedades y comportamiento, cuando crea una instancia y / o crea un objeto en particular a partir de ella, en realidad está materializando esa posibilidad.

A veces, los términos objeto e instancias son intercambiables. Algunos puristas de OOP mantendrán que todo es un objeto, no me quejaré, pero en el mundo real de OOP, los desarrolladores usamos dos conceptos:

  1. Clase: muestra de tipo de datos abstracto de la que puede derivar otros ADT y crear objetos.
  2. Objetos: también llamados instancias, representan ejemplos particulares de las estructuras de datos y funciones representadas por un tipo de datos abstracto determinado.
Jose diaz
fuente
0

La programación orientada a objetos es una metáfora del sistema que le ayuda a organizar el conocimiento que su programa necesita manejar, de una manera que le facilitará el desarrollo de su programa. Cuando elige programar usando OOP, toma sus OOP-Googles y decide que verá el problema del mundo real como muchos objetos colaborando entre ellos, enviando mensajes. En lugar de ver a un chico conduciendo un coche, ves a un chico enviando un mensaje al coche indicando lo que quiere que haga. El automóvil es un objeto grande y responderá a ese mensaje enviando un mensaje a su motor o rueda para poder responder correctamente a lo que el conductor le dijo que hiciera en el mensaje, etc.

Una vez que ha creado la metáfora de su sistema y está viendo toda la realidad como objetos que envían mensajes, decide poner todas las cosas que está viendo que son relevantes para el dominio de su problema en la PC. Ahí te das cuenta de que hay muchos Guys manejando diferentes tarjetas, y no tiene sentido programar el comportamiento de cada uno de ellos por separado porque todos se comportan de la misma manera ... Entonces puedes decir dos cosas:

  • Todos esos tipos se comportan de la misma manera, así que crearé una clase llamada Driver que especificará quiénes se comportan todos los Drivers del mundo, porque todos se comportan de la misma manera. (Y estás usando OOP basado en clases)
  • O puedes decir ¡Oye! El segundo conductor se comporta de la misma manera que el primer conductor, excepto que le gusta ir un poco más rápido. Y el tercer conductor se comporta de la misma manera que el primer conductor, excepto que le gusta zigzaguear cuando conduce. (Y usa OOP basado en prototipos).

Luego comienza a poner en la computadora la información de cómo se comportan todos los controladores (o cómo se comporta el primer controlador, y cómo el segundo y el tercero difieren de ese), y después de un tiempo tiene su programa y usa el código para cree tres controladores que sean el modelo que está utilizando dentro de esa PC para hacer referencia a los controladores que vio en el mundo real. Esos 3 controladores que creó dentro de la PC son instancias del prototipo (en realidad, el primero es el prototipo, el primero podría ser el prototipo en sí, dependiendo de cómo modele las cosas) o la clase que creó. La diferencia entre instancia y objeto es que el objeto es la metáfora que usas en el mundo real. Eliges ver al chico y al coche como objetos (sería incorrecto decir que los ves como instancias) colaborando entre sí. Y luego lo usa como inspiración para crear su código. La instancia solo existe en su programa, después de haber creado el prototipo o la clase. Los "objetos" existen fuera de la PC porque es el mapeo que usa para unir el mundo real con el programa. Une a Guy con la instancia de Driver que creaste en la PC. Por tanto, el objeto y la instancia están extremadamente relacionados, pero no son exactamente lo mismo (una instancia es un "tramo" de un objeto en el programa, y ​​el otro "tramo" está en el mundo real).

usuario1494736
fuente
0

Supongo que ya se ha dado la mejor respuesta.

Las clases son planos y los objetos son edificios o ejemplos de ese plano también me sirvieron.

A veces, me gustaría pensar que las clases son plantillas (como en MS Word), mientras que los objetos son los documentos que usan la plantilla.

Geosfera
fuente
0

Ampliando uno de los ejemplos dados anteriormente en este hilo ...

Considere un escenario: existe el requisito de que se deben construir 5 casas en un vecindario con fines residenciales. Las 5 casas comparten una arquitectura de construcción común. La arquitectura de la construcción es una clase . La casa es un objeto . Cada casa con gente alojada en ella es un ejemplo .

GeekSpecs
fuente