Diferencia entre Clases y Objetos
Aunque los conceptos de clase y objetos son muy diferentes, el hecho de usarlos indistintamente en algunos contextos hace que se pueda generar alguna confusión al respecto. En las siguientes figuras se muestra, para el caso de la tienda, el correspondiente diagrama de clases y un ejemplo de un posible diagrama de objetos. Allí se puede apreciar que la clase Tienda describe todas las tiendas imaginables que vendan 4 productos.
Modelo de Clases
- Diagrama de clases para el caso de estudio de la tienda.
- El diagrama sólo dice, por ejemplo, que producto1 debe ser un producto.
Modelo de Objetos
- Fíjese como cada asociación del diagrama de clases debe tener su propio objeto en el momento de la ejecución.
Una clase no habla de un escenario particular, sino del caso general. Nunca dice cuál es el valor de un atributo, sino que se contenta con afirmar cuáles son los atributos (nombre y tipo) que deben tener los objetos que son instancias de esa clase. Los objetos, por su parte, siempre pertenecen a una clase, en el sentido de que cumplen con la estructura de atributos que la clase exige. Por ejemplo, puede haber miles de tiendas diferentes, cada una de las cuales vende distintos productos a distintos precios. Piense que cada vez que instalamos el programa del caso de estudio en una tienda distinta, el dueño va a querer que los objetos que se creen para representarla reflejen el estado de su propia tienda.
Los métodos de una clase, por su parte, siempre están en ella y no copiados en cada uno de sus objetos. Por esta razón cada objeto debe saber a qué clase pertenece, para poder buscar en ella los métodos que puede ejecutar. Los métodos están escritos de manera que se puedan utilizar desde todos los objetos de la clase. Cuando un método de la clase Tienda dice producto1.darNombre(), le está pidiendo a una tienda particular que busque en su propio escenario el objeto al cual se llega a través de la asociación producto1, y le pida a éste su nombre usando el método que todos los productos tienen para hacerlo. En este sentido se puede decir que los métodos son capaces de resolver los problemas en abstracto, y que cada objeto los aplica a su propio escenario para resolver su problema concreto.
Creación de Objetos de una Clase
Recordemos la creación de objetos visto en el nivel anterior. Un objeto se crea utilizando la instrucción new y dando el nombre de la clase de la cual va a ser una instancia. Todas las clases tienen un método constructor por defecto, sin necesidad de que el programador tenga que crearlo. Como no es responsabilidad del computador darle un valor inicial a los atributos, cuando se usa este constructor, éstos quedan en un valor que se puede considerar indefinido. En la figura 2.5 se muestra el resultado del llamado a este constructor.
Creación de un objeto usando la instrucción new
- El resultado de ejecutar la instrucción del ejemplo es un nuevo objeto, con sus atributos no inicializados.
- Dicho objeto está "referenciado" por p, que puede ser un atributo o una variable de tipo Producto.