Duda basica de POO

Buenas gente!
Tras andar mucho por C, estoy empezando con la POO (C++ y Java) y tengo una duda MUY basica y es... ¿Qué es un objeto? ¿El equivalente a una variable? ¿que la diferencia de una variable? ¿Un objeto sería por ejemplo "printf"?
Más que una variable, yo lo veo más equivalente a una estructura.
Lo equivalente a un objeto en C es un TAD (tipo abstracto de datos)

Si no sabes lo que es un TAD, te explico lo que es un objeto. Un objeto es una estructura de datos que contiene los datos propiamente dicho así como las funciones asociadas a su uso.

En cualquier caso, antes de ponerte a programar en Java, búscate un manual o algo similar que te explique a fondo el concepto de objeto, si no, te será muy complicado.

Saludos!! [bye] [bye]
Objeto: Componente o código de software que contiene en sí mismo tanto sus características (variables) como sus comportamientos (métodos).

Básicamente como se suele decir, todo lo que ves en el mundo real es un objeto, porque todo lo que vemos tiene unas características determinadas llamadas Propiedades (variables): color, tamaño, etc..., y realiza alguna acción (método): correr, saltar, andar, botar, etc...

Si quieres una explicación algo más entendible, pero que básicamente explica lo mismo, aquí te dejo un enlace con alguna imagen y ejemplo real (aunque el blog parece que se empezó y ahí se quedó :-?):
http://csharpdoc.blogspot.com.es/2013/02/objetos.html
Los objetos suelen estar relacionados con las clases, por lo general son una instancia de una clase.

Una clase es una especie de "plano" para construir objetos. Por ejemplo para construir el objeto casa, primero necesitas el plano (clase) de la casa para saber como construirla. De esta manera tu puedes construir muchas casas a partir de un sólo plano. Las casas que construyas del mismo plano tendrán las mismas propiedades, pero no necesariamente los mismos valores en dichas propiedades. Por ejemplo todas tendrán la propiedad color, pero algunas quizás serán azules y otras rojas, todas tendrán puertas, pero algunas de madera y otras de metal, incluso si quisieras que una casa no tenga puerta, tendrá la propiedad puerta con el valor "nulo".

Además de propiedades tienen métodos, los métodos serían las acciones de la casa. Quizás abrir y cerrar las puertas por ejemplo, también habría métodos para obtener y asignar las propiedas de la casa, conocidos como getters y setters. Por ejemplo para cambiarle el color a una casa tendrás un método setter cambiar color, y para saber de que color es, tendrás un getter que de devulea el color. Muchos lenguajes hoy en día generan los getters y setters automáticamente para que no debas definirlos, muchos también te permiten usar el signo "=" para asignar propiedades en lugar de llamar explícitamente a un método setter, pero internamente siguen usando un método setter, pues de hecho uno normalmente puede querer que una propiedad no pueda ser cambiada, entonces esa propiedad no tendrá un setter.

Los métodos en su definición pueden parecerse mucho a las funciones, así como las propiedades a las variables, pero en uso práctico no son la misma cosa.

Tu confusión de objetos con variables quizás sea por que hayas visto cosas así:

var casa;
casa = new Casa();

En este caso "new Casa()" está creado una instancia, y esa instancia la almacenas en tu variable "casa". Dicha variable ahora será tratada como un objeto, de la misma manera que cundo en una variable guardas un número, la tratarás como un número.
dnL7up escribió:Los objetos suelen estar relacionados con las clases, por lo general son una instancia de una clase.

Una clase es una especie de "plano" para construir objetos. Por ejemplo para construir el objeto casa, primero necesitas el plano (clase) de la casa para saber como construirla. De esta manera tu puedes construir muchas casas a partir de un sólo plano. Las casas que construyas del mismo plano tendrán las mismas propiedades, pero no necesariamente los mismos valores en dichas propiedades. Por ejemplo todas tendrán la propiedad color, pero algunas quizás serán azules y otras rojas, todas tendrán puertas, pero algunas de madera y otras de metal, incluso si quisieras que una casa no tenga puerta, tendrá la propiedad puerta con el valor "nulo".

Además de propiedades tienen métodos, los métodos serían las acciones de la casa. Quizás abrir y cerrar las puertas por ejemplo, también habría métodos para obtener y asignar las propiedas de la casa, conocidos como getters y setters. Por ejemplo para cambiarle el color a una casa tendrás un método setter cambiar color, y para saber de que color es, tendrás un getter que de devulea el color. Muchos lenguajes hoy en día generan los getters y setters automáticamente para que no debas definirlos, muchos también te permiten usar el signo "=" para asignar propiedades en lugar de llamar explícitamente a un método setter, pero internamente siguen usando un método setter, pues de hecho uno normalmente puede querer que una propiedad no pueda ser cambiada, entonces esa propiedad no tendrá un setter.

Los métodos en su definición pueden parecerse mucho a las funciones, así como las propiedades a las variables, pero en uso práctico no son la misma cosa.

Tu confusión de objetos con variables quizás sea por que hayas visto cosas así:

var casa;
casa = new Casa();

En este caso "new Casa()" está creado una instancia, y esa instancia la almacenas en tu variable "casa". Dicha variable ahora será tratada como un objeto, de la misma manera que cundo en una variable guardas un número, la tratarás como un número.


Muchisimas gracias a todos y en especial a ti dnL7up, me has aclarado muchísimas cosas!
Un objeto no es más que una estructura con un array de punteros a funciones.
6 respuestas