5

Últimamente me he quedado estancado en Java, puesto que no tengo un concepto claro de que es una instancia y un objeto. Por favor den una explicación concisa y que sea fácil de entender.

Consiguientemente dejo algunos conceptos y dudas que tengo sobre los objetos e instancias.

  • Objeto: ¿Es toda sentencia que tenga la palabra "new"? ¿Es todo aquello que tenga atributos y comportamiento?

En tal caso una variable sería un objeto con estos argumentos:

byte a = 6;

Como podemos observar tiene atributos, en este caso es el valor y comportamiento al poder realizar distintas operaciones sobre este valor.

  • ¿O simplemente es este enunciado "Animal zebra = new Animal();" ? ¿También es valido este enunciado "Scanner sc = new Scanner (System.in);" ?

Enlaces: Objeto concepto de que es todo aquello que tenga atributos y comportamiento.

Página 6: https://www.lawebdelprogramador.com/pdf/15135-Fundamentos-de-Programacion-Orientada-a-Objetos.html

Tercer párrafo: https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=411:conceptos-de-objetos-y-clases-en-java-definicion-de-instancia-ejemplos-basicos-y-practicos-cu00619b&catid=68&Itemid=188

Minuto 1:29: https://www.youtube.com/watch?v=-6BYa_x_QA0

Minuto 1:49: https://www.youtube.com/watch?v=y7eyMeEZswg&t=230s

  • Instancia: Ni siquiera tengo claro el panorama, dicen que es casi un sinónimo de un objeto y lo que me interesa es comprender la diferencia. Yo entendí que instancia se refiere a que algo va a necesitar la creación de un objeto para acceder a una variable. ¿Se puede acceder a algo más que no sea una variable?

  • Y por último, una pregunta que me surgió mientras reflexionaba ¿Si una variable estática pertenece a una clase a que pertenece una variable de instancia?

Página que contiene lo que es static, objeto e instancia: https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=650:concepto-de-metodos-de-clase-o-static-y-metodos-de-instancia-diferencias-metodo-main-de-java-cu00683b&catid=68&Itemid=188

Steve
  • 115
  • 1
  • 10
  • 1
    La pregunta tiene respuestas, no la puedes eliminar. Puedes editarla y mejorarla. Creo que esta pregunta debió ser formulada de otra manera, o en pedazos. Si la editas preguntando ¿Qué es una Clase y en qué se diferencia de una Instancia? y además colocas el código de algo que estés haciendo con una Clase y con una Instancia, y muestres la duda exacta sobre ¿porqué usar un método estático y uno no estático funciona en una u otra manera?, eso sería una muy buena pregunta. O al menos yo la vería como una buena pregunta. – Mauricio Contreras Feb 09 '19 at 22:47
  • Ya lo edite antes estaba más chafo :v Eras así: ¿Qué esa instancia en Java? Últimamente me he quedado estancado en Java, puesto que no tengo un concepto claro de que es una instancia y un objeto. Por favor den una explicación concisa y que sea fácil de entender. – Steve Feb 10 '19 at 01:41
  • Entonces ayúdame a desbloquear la pregunta, notificando a los que la suspendieron que remuevan su acción. Plox sería de mucha ayuda. – Steve Feb 10 '19 at 01:43
  • Yo no puedo (debo) editarla. Pudiera darle un voto positivo. Primero quita las referencias o links que pusiste, ya que no aportan mucho. Una buena referencia es aquella en la cual tu explicas con tus propias palabras y mencionas la fuente. O bien citas textualmente y mencionas la fuente. Así como lo has puesto tu no es bien visto. Luego, has lo que te comenté. Sube un código de ejemplo, tienes muchos ejemplos en la web. En tu código debe haber una Clase y además debe tener al menos 1 método estático y 1 no estático, además un par de atributos no estaría mal. – Mauricio Contreras Feb 10 '19 at 10:27
  • Luego crea un Objeto (instancia) a partir de esa Clase. Una vez que tengas eso, sube el código. No es necesario que sea algo de otro planeta. Y entonces puedes reformular la pregunta a algo como: ¿Qué diferencia hay entre Clase e Instancia? O ¿Porqué no puedo usar este atributo en una instancia pero si directamente en una Clase? ¿Cuál es la diferencia semántica entre Clase y Objeto (Instancia de Clase)? Así podría yo votarla en positivo y entonces tu pregunta tendría más y mejores respuestas. Además es un ejercicio práctico ya que estarías escribiendo tu propio código. – Mauricio Contreras Feb 10 '19 at 10:31
  • Ste men se supone que lo que quiero saber es la definición, de ahí yo si se usarles. Solo dime que está mal con los enlaces; yo los puse para que las personas puedan ver que informacíón investigue y según yo está bien porque arriba de los enlaces hay una descripción acertada de que son. – Steve Feb 10 '19 at 21:13
  • Diles a los que me bloquearon que me desbloqueen en todo caso yo no tengo el rango suficiente para chatear con ellos. – Steve Feb 10 '19 at 21:15
  • Además no hay buenas respuestas aquí excepto la de Cristina pero aun así tengo más dudas que están planteadas en la pregunta. – Steve Feb 10 '19 at 21:16
  • Si no puedes pedir que desbloqueen a la pregunta simplemente reportala, tengo copiada la respuesta de cristina así que su información valiosa no se va a perder. – Steve Feb 10 '19 at 21:21
  • @Steve no es necesaria esa actitud, hiciste bien en llevar tu caso a meta donde podemos discutirlo, por lo general los fines de semana hay poco tráfico por lo que deberás tener paciencia en que la comunidad llegue a un consenso –  Feb 10 '19 at 21:23
  • Gracias amigo, eso mismo vi en el sitio de como preguntar y por eso mejoré mi pregunta – Steve Feb 10 '19 at 21:23
  • @Steve, tu pregunta no está tan mal. Lamentablemente desbloquearla o pedir que la desbloqueen está fuera de mi alcance. Te voté positivo, es lo único que puedo hacer. En cuanto a los enlaces, me refiero a que debes argumentar mejor lo que dicen en los enlaces que colocas. Es todo. – Mauricio Contreras Feb 10 '19 at 21:43
  • 1
    @Steve puedes ver esta pregunta [Clausuras Javascript](https://es.stackoverflow.com/questions/607/cómo-funcionan-las-clausuras-en-javascript). Es un ejemplo de una pregunta bien recibida. Creo que pudieras reformular tu pregunta para que sea bien recibida también. Es solo una idea. Solo trato de ayudarte. – Mauricio Contreras Feb 10 '19 at 21:48
  • Gracias, perdón por la actitud que asumi frente a la situación. – Steve Feb 11 '19 at 02:42
  • 1
    @Steve vote por reabrir tu pregunta, y tambien le puse un comentario a cristina, porque aunque explica el concepto, no se si esta del todo claro. Lo ideal seria que explicaras en tu pregunta que entendiste vos que es la diferencia entre clase e instancia, y ademas de los links, trabajar desde ahi. Por ahi la diferencia es mas complicada de ver si no viste que es un algoritmo u otras formas de programar, programar con objetos no es el primer paso ideal, porque esconde muchas cosas que estan pasando dentro del sistema y son importantes... – gbianchi Feb 11 '19 at 02:57
  • Gracias, me podrías explicar como es eso de reabrir la pregunta. – Steve Feb 11 '19 at 18:31
  • Para [entrar al chat](https://chat.stackexchange.com/rooms/30872/stack-overflow-en-espanol) necesitas una reputación de 50, intenta hacer más preguntas o respuestas buenas. La sección de comentarios se usa solo para referirse a la publicación, en este caso es la pregunta que tiene 4 votos. Aquí puedes ver [el historial de revisiones de tu pregunta](https://es.stackoverflow.com/posts/236373/revisions), en qué momento se cerró y se reabrió. Puedes ver el siguiente enlace de ayuda: [¿Qué significa si una pregunta está "cerrada" o "en espera"?](https://es.stackoverflow.com/help/closed-questions) –  Feb 13 '19 at 16:15

4 Answers4

13

Creo que en todos los lenguajes la instancia es el objeto de la clase, o al reves el objeto de una clase es creado cuando haces una instancia de la clase.

Clase.- Es el blueprint o el diseño (atributos y métodos) del objeto de la vida real.

Objeto.- Se crea en base a la clase y es cuando llenas de datos la clase (normalmente con la palabra NEW), cuando le das vida a 1 objeto de la vida real representado en esa clase.

Ejemplo:

Clase carro

Atributos

Color

Marca

Métodos

Encender()

Crear un objeto es darle vida a la CLASE para eso se utiliza la palabra new NombreDeLaClase() <-- a esta acción se le llama CREAR LA INSTANCIA y por ende el objeto es la instancia

Objeto HondaCivic

Atributos

Color : Rojo

Marca : Honda

Métodos

Encender()

Así tendrias un objeto o una instancia de carro, la cual representa un Honda Civic

Algo así mas o menos para que te des una idea.

HondaCivic = {color: Rojo, marca: Honda}
Cristina Carrasco
  • 5,152
  • 1
  • 15
  • 35
  • Excelente, un placer poder ayudarte – Cristina Carrasco Feb 09 '19 at 16:08
  • Vote para reabrir esta pregunta cristina.. me gustaria añadirle a tu respuesta algunos conceptos mas genericos respecto de que es una instancia, donde vive una instancia, y porque puede haber multiples instancias de una clase. Y sobre todo definir que una clase es una implementacion programatica de algo dentro de un programa, y un objeto es la implementacion dentro del sistema mismo. Esto, entre otro detalles... – gbianchi Feb 11 '19 at 02:53
  • Me parece una muy buena idea :D – Cristina Carrasco Feb 12 '19 at 15:32
  • ya puse otra respuesta mas teorica Cristina.. para no andar tocando mucho la tuya... y porque no aparecias :p – gbianchi Feb 12 '19 at 15:38
  • sorry... :( me parece perfecto gracias – Cristina Carrasco Feb 12 '19 at 15:39
4

Para comenzar, tenemos que definir algo:

Al programar existen dos momentos, algo que llamamos Tiempo de diseño, y otro caso que llamamos Tiempo de ejecución.

Tiempo de diseño: Es el momento en el cual nosotros estamos programando (o codificando) el programa. Tiempo de ejecución: Es cuando nuestro programa se está ejecutando.

Esto nos lleva a la definición en sí. Una clase es la definición en tiempo de diseño de un objeto dentro de nuestro programa. O sea, es la forma de describir un pedazo de nuestro programa en forma de clase.

Un objeto o instancia es la materialización de la clase, en tiempo de ejecución. O sea, es cuando nuestro programa crea un objeto en base a la clase que se declaró antes.

Tengamos en cuenta que nada tiene que ver las palabras que usemos dentro de nuestro lenguaje, ya que eso es solamente una semántica (la forma de escribir las cosas) del lenguaje que estemos usando.

Una clase, cuando nuestro programa se está ejecutando, puede tener varias instancias, o sea que puede ser muchos objetos o ser representado por más de un objeto.

Pongamos como ejemplo la clase auto, que va a tener dos propiedades: la cantidad de ruedas y la cantidad de asientos, y un método, que es tocar bocina.

En nuestro programa, un simulador de autos que pasan por la calle, generamos objetos (o hacemos instancias) de la clase auto. Cada uno de ellos, tiene sus propias caracteristicas.

Tenemos una instacia de auto con 4 ruedas y dos asientos. Tenemos otra instancia de auto con 3 ruedas y 1 asiento, y otra instancia de auto con 3 asientos y 2 ruedas. La clase, es la misma, es la clase auto, y todos ellos pueden tocar bocina. Pero son instancias diferentes de lo mismo.

Mira a la instancia como a cada persona. Todos somos seres humanos y compartimos la clase ser humano. Pero cada uno, somos una instancia distinta de ser humano.

¿Son sinonimos Objeto e instancia?

Depende del momento en el cual estes hablando. En tiempo de ejecución, objeto e instancia serian la mismo.

Sin embargo, cuando uno diseña sistemas, un Objeto es un elemento que se utiliza en el diseño, y que despues sera implementado en el sistema por una o mas clases.

No conviene marearse con la terminología. Ante la duda, es mejor explicar de que se esta hablando.

gbianchi
  • 19,675
  • 11
  • 38
  • 58
  • Otro ejemplo sencillo: una clase es como un molde para hacer pasteles, vas a tener uno o muchos con la misma base y el estilo de decoración de cada pastel depende de sus propias características (instancias distintas) :D – fredyfx Feb 11 '19 at 20:19
  • Son totalmente sinónimos la palabra instancia y objeto o son parciales. Esa es la mayor duda que tengo actualmente. – Steve Feb 11 '19 at 21:14
  • @Steve en un rato te edito la respuesta. Pero no te mezcles con la semantica de las palabras. Hay objetos por todos lados. Y no son siempre lo mismo – gbianchi Feb 11 '19 at 21:30
  • Sí una variable estática pertence a una clase a que pertenece a una variable de instancia. – Steve Feb 11 '19 at 22:29
  • Eso es otra pregunta muy diferente @Steve, ya que las clases estaticas tienen otro comportamiento. Tal vez deberias leer que es una clase estatica, y podemos construir otra respuesta en otra pregunta respecto de eso. – gbianchi Feb 11 '19 at 22:40
  • 2
    Me gusto mucho tu definición y la explicación sencilla, cuando inicias con al programación es difícil que algún maestro sea tan bueno como para explicar una definición diferente a la de un libro. Y muchas veces cuando vamos a las fuentes oficiales vienen unos conceptos muy amplios y complejos donde no sabes por donde empezar. – Cristina Carrasco Feb 12 '19 at 15:41
  • 3
    gracias @CristinaCarrascoAngulo. Tu explicacion es muy buena tambien, pero por ahi para alguien que recien inicia, tiene "demasiado" de sistemas. Por eso queria aclarar esto a un nivel mas alto.. sin meter nada de codigo.. – gbianchi Feb 12 '19 at 15:44
-2

Trato de explicarte: 'Objeto' e 'instancia' puedes considerarlos como sinónimos a grandes rasgos, pero es bueno que sepas que la palabra 'instancia' indica la relación de un objeto con su clase, trato de ponerte un ejemplo: supongamos que existe una clase House. Tu propia casa es un objeto y es una instancia de la clase House.

Sermar
  • 1
  • 1
-5

En general tiene este significado no solo en Java.

Se llama instancia a todo objeto que derive de algún otro. De esta forma, todos los objetos son instancias de algún otro, menos la clase Object que es la madre de todas.

introducir la descripción de la imagen aquí