Este articulo esta especialmente dirigido para programadores principiantes, que estan aprendiendo algún lenguaje de programación orientado a objetos, como por ejemplo: Java, C++ o C# y aspiran estar bien preparados para cualquier entrevista para un puesto como programador. Ahora bien, la diferencia entre Clases y Objetos es una de las las preguntas mas comunes dentro de la Programación Orientada a Objetos (POO), incluso podríamos preguntarle a personas recién graduadas de alguna universidad o instituto tecnologico y te sorprenderás al ver el conflicto que incluso para estas personas supone esta pregunta.
Clase ("Class") y
Objeto ("Object") son dos pilares de la POO y saber identificarlos y diferenciarlos bien es necesario, pero cuando buscas respuestas a esta preguntas desde lo teórico te encuentras con que
"una clase es una plantilla y los objetos son cosas reales creadas a partir de esa plantilla", difícilmente con ese concepto queda todo explicado. Aunque la respuesta es correcta y funciona perfectamente, no la entenderá de la misma forma un programador que acaba de hacer la pregunta a otro que realmente entiende la diferencia entre una Clase y un Objeto.
Por lo tanto, si recibo una respuesta así, les pido entonces que creen una clase y expliquen cómo se crean los objetos en el programa, digamos para representar a un "Empleado", "Estudiante" o simplemente un "Carro". Si el programador entiende verdaderamente
que es una clase y
que es un objeto, no tardará mucho tiempo en hacerlo, pero si aun tiene dudas al respecto probablemente tarde mas de lo esperado.
El punto es entender la diferencia entre una clase y un objeto, no para tomar una entrevista, ¿por qué?, porque si conoces la clase y el objeto será mucho mas sencillo para ti trabajar con un lenguaje de programación orientado a objetos como Java o C#.
Entonces para darte una idea mas clara de lo que es una clase y un objeto, te mostramos algunos ejemplos: si "Carro" es una clase entonces "Merc", "Audi" y "BMW" son objetos. Si "Televisión" es una clase entonces "Sony Bravia", "Samsung Smart TV" son objetos de esa clase.
Sí "Smartphone" es una clase entonces "iPhone", "Samsung Galaxy" y "Nokia" son objetos de esa clase. Pero en aplicaciones orientadas a objetos, generalmente los sustantivos representan las clases, por ejemplo en una aplicación financiera "Orden", "Transacción", "Instrumentos" son clases. De igual forma en temas de comercio electrónico "Pago", "Orden", Producto" son algunos ejemplos de clases.
Clase Vs. Objeto en JAVA.
Algunas diferencias entre Clases y Objetos , se basan totalmente en la práctica y la experiencia:
1.- Una Clase se crea mientras tu codificas, pero el objeto es creado al momento en el que el programa es ejecutado, por ejemplo: La máquina virtual de Java o JVM de sus siglas en inglés Java Virtual Machine. Aunque al escribir tu código, es necesario para crear un objeto, como:
new Student(); , el objeto no es creado en ese momento. Este se crea al momento en que el programa es ejecutado y cuando se ejecuta específicamente
esa línea
de código. Usualmente para crear dicho objeto en Java se llama a un
constructor de la clase, pero se pueden presentar algunas anomalías, como la Serialización (se llama "serializar un objeto" al proceso de convertir en bytes, para poder enviarlo por una red, y reconstruirlo luego a partir de esos bytes.)
2.- Las diferencia mas importante entre una Clase y un Objeto es que este ultimo normalmente tiene un estado (aunque el objeto sin estado tambien es posible). Este se utiliza para diferenciarse de otros objetos. Por ejemplo, si tienen una clase para representar "Estudiantes", entonces "Johan" y "Mohan" son dos objetos de la clase, los cuales tienen nombres diferentes, un atributo que los diferencia. Una imagen vale mas que mil palabras, y la diferencia entre una Clase y un Objeto puede entenderse mejor a través de esta imagen:
En este ejemplo, "Jugador" es una clase, la cual actualmente es como la plantilla de creación de jugadores y los dos jugadores: "Scooby" y "Tabby" son los objetos que se crearon en el entorno de ejecución, en este caso la máquina virtual de Java (JVM). Cada jugador tiene valores diferentes para sus atributos, tambien conocido como estado del objeto. Por ejemplo la posición de Scooby es la 5° y tiene $341, mientras que la posición de Tabby es la 18° y tienen $87. Si aún no entiendes por completo la diferencia entre una Clase y un Objeto, te mostramos otro ejemplo un poco mas interesante que el anterior.
En este caso el "Cortador de galletas" es una clase que es una plantilla o modelo para crear objetos: las galletas. Puedes ver que hay tres galletas, una para ti y dos para mi obviamente xD.
3.- Aunque
Java no es un Lenguaje orientado a objetos puro, la mayoría de las cosas son objetos en Java, por ejemplo las variables primitivas y operadores no son objetos. En Java, los objetos son creados en un espacio de memoria especial conocida como "Memoria Heap" (conoce mas
aquí). No importa en que amito los crees, localmente o globalmente siempre se crearán en el espacio "heap". Por otro lado, las clases son cargadas dentro de otra area especial de la memoria de la máquina virtual de Java (JVM), conocida como "permgen space". Para Java 8 en adelante, ese espacio es tambien conocido como "Metaspace". Tu puedes crear tantos objetos de una clase como desees, sujeto al límite de tu memoria heap, ya que cada objeto toma una parte de la memoria. Una vez que la memoria se llena por completo, no puedes seguir creando mas objetos y la maquina virtual de Java (JVM) lanzará el error
java.lang.OutOfMemoryError: Java Heap Space : si sigues tratando de crear mas objetos.
4.- Los objetos tambien son conocidos como instancias en el lenguaje de programación de JAVA, y en la clase JVM tambien se representa por una instancia de
java.lang.class. Por otro lado la Clase tambien es conocida como un tipo de dato. Un variable de referencia que guarda la referencia de un objeto tiene un tipo de dato, que denota a qué
tipo de objeto puede hacer referencia. Por ejemplo, en el siguiente código
ConstructorDemo es el nombre de la clase, conocido tambien como un tipo de dato, cd es una variable de referencia de tipo
ConstructorDemo, lo que significa que este puede apuntar a un Objeto de la clase
ConstructorDemo o a sus clases hijas. Cuando se crea un objeto usando el operador
new(), tambien clasifica automáticamente al constructor de esa clase.
5.- La Clase es una abstracción que contiene código, principalmente atributos y métodos que operan sobre ellos. Por otro lado el objeto es una cosa real que operan sobre ellos, pero ahí viene el
método estático, el cual pertenece a la clase.
Eso es todo en esta pregunta sobre la diferencia entre las Clases y los Objetos en Java. Como ya se ha dicho, respuestas como: una clase es una plantilla y los objetos son cosas reales creadas a partir de esa plantilla, es completamente correcto, sin embargo, es recomendable examinar mas a fondo el aspecto práctico de la clase y el objeto. Si un programador puede diferenciar una clase de un objeto en código, puede dar un par de ejemplos de lo que las Clases y los Objetos son entonces su comprensión sobre este importante concepto es lo suficiente bueno para ser considerada.
***El Artículo fue obtenido de
Java67 y fue modificado ligeramente para su traducción. Para revisar el contenido original dar clic
aquí.