6. Clases y Objetos

6.1. 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 la figura 2.4a y figura 2.4b 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.

Fig. 2.4a 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.
Fig. 2.4b 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.

6.2. 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.

Fig. 2.5 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.

Para inicializar los valores de un objeto, se debe definir en la clase un constructor propio. En el siguiente ejemplo trabajaremos los conceptos vistos en el capítulo anterior, usando el caso de la tienda.

Ejemplo 10

Se hace la inicialización de los atributos de los objetos de la clase.

En este ejemplo mostramos los constructores de las clases Tienda y Producto, así como la manera de pedir la creación de un objeto de cualquiera de esos dos tipos.

public Producto(Tipo pTipo, String pNombre, double pValorUnitario, int pCantidadBodega, int pCantidadMinima)
{
    tipo = pTipo;
    nombre = pNombre;
    valorUnitario = pValorUnitario;
    cantidadBodega = pCantidadBodega;
    cantidadMinima = pCantidadMinima;
    cantidadUnidadesVendidas = 0;
}
  • El constructor exige 5 parámetros para poder inicializar los objetos de la clase Producto.
  • En el constructor se asignan los valores de los parámetros a los atributos.
Producto p=new Producto(Tipo.PAPELERIA, "lápiz", 500.0, 30, 9);
  • Este es un ejemplo de la manera de crear un objeto cuando el constructor tiene parámetros.

  • Este es el objeto que se crea con la llamada anterior.
  • El objeto creado se ubica en alguna parte de la memoria del computador. Dicho objeto es referenciado por el atributo o la variable llamada "p".
public Tienda(  )
{
    producto1 = new Producto( Tipo.PAPELERIA, "Lapiz", 550.0, 18, 5 );
    producto2 = new Producto( Tipo.DROGUERIA, "Aspirina", 109.5, 25, 8 );
    producto3 = new Producto( Tipo.PAPELERIA, "Borrador", 207.3, 30, 10 );
    producto4 = new Producto( Tipo.SUPERMERCADO, "Pan", 150.0, 15, 20 );
    dineroEnCaja = 0;
}
  • Puesto que es necesario que la tienda tenga 4 productos, su método constructor debe ser como el que se presenta. Supone que en la caja de la tienda no hay dinero al comenzar el programa.

Vamos a practicar la creación de escenarios usando los métodos constructores de las clases Tienda y Producto. En el programa del caso de estudio, la responsabilidad de crear el estado de la tienda sobre la cual se trabaja está en la clase principal del mundo (clase Tienda). En una situación real, dichos valores deberían leerse de un archivo o de una base de datos, pero en nuestro caso se utilizará un escenario predefinido. Si quiere modificar los datos de la tienda sobre los que trabaja el programa, puede darle otros valores en el momento de construir las instancias.

Tarea 4

Objetivo: Generar habilidad en el uso de los constructores de las clases para crear escenarios

Cree los escenarios que se describen a continuación, dando la secuencia de instrucciones que los construyen. Suponga que dicha construcción se hace desde una clase externa a las clases Tienda y Producto.

Escenario 1

Una nueva tienda acaba de abrir y quiere usar el programa del caso de estudio con los siguientes productos:

  1. Frasco de jarabe (para la gripe), producto de droguería, con un valor base de $7.200 pesos.
  2. Botella de alcohol, producto de droguería, a $2.800 pesos la unidad.
  3. Kilo de queso, producto de supermercado, a $4.100 la unidad.
  4. Resaltador, producto de papelería, a $3.500 la unidad.

La siguiente tabla resume el inventario inicial de la tienda y el tope mínimo que se debe alcanzar para poder hacer un nuevo pedido. Suponga que el valor inicial en caja es cero pesos.

Producto Cantidad en bodega Tope mínimo
jarabe 14 10
alcohol 12 8
queso 10 4
resaltador 20 10

Código

public Tienda( )
{
    producto1 = new Producto( Tipo.DROGUERIA, "jarabe", 7200.0, 14, 10 ); 
    producto2 = new Producto( Tipo.DROGUERIA, "alcohol", 2800.0, 12, 8 ); 
    producto3 = new Producto( Tipo.SUPERMERCADO, "queso", 4100.0, 10, 4 ); 
    producto4 = new Producto( Tipo.PAPELERIA, "resaltador", 3500.0, 20, 10 );
}

Escenario 2

Una nueva tienda acaba de abrir y quiere usar el programa del caso de estudio con los siguientes productos:

  1. Kilo de arroz, producto de supermercado, con valor base de $1.200 pesos.
  2. Caja de cereal, producto de supermercado, a $7.500 pesos.
  3. Resma de papel, producto de papelería, a $20.000 pesos la unidad.
  4. Bolsa de algodón, producto de droguería, a $4.800 pesos.

La siguiente tabla resume el inventario inicial de la tienda y el tope mínimo que se debe alcanzar para poder hacer un nuevo pedido. Suponga que el valor inicial en caja es cero pesos.

Producto Cantidad en bodega Tope mínimo
arroz 6 7
cereal 5 5
papel 50 2
algodón 12 6

Código

Escenario 3

Una nueva tienda acaba de abrir, y quiere usar el programa del caso de estudio con los siguientes productos:

  1. Litro de aceite, producto de supermercado, con un valor base de $6.500 pesos la unidad.
  2. Crema dental, producto de supermercado, a $5.100 pesos.
  3. Kilo de pollo, producto de supermercado, a $13.800 pesos la unidad.
  4. Protector solar, producto de droguería, a $16.000 la unidad.

La siguiente tabla resume el inventario inicial de la tienda y el tope mínimo que se debe alcanzar para poder hacer un nuevo pedido. Suponga que el valor inicial en caja es cero pesos.

Producto Cantidad disponible Tope mínimo
aceite 13 10
crema dental 20 15
pollo 6 5
protector solar 3 3

Código

results matching ""

    No results matching ""