5. Expresiones

5.1. Algunas Definiciones

Una expresión es la manera en que expresamos en un lenguaje de programación algo sobre el estado de un objeto. Es el medio que tenemos para decir en un programa algo sobre el mundo del problema. En el nivel anterior vimos las expresiones aritméticas, que permitían definir la manera en que debía ser modificado el estado de un elemento del mundo, usando sumas y restas.

Las expresiones aparecen dentro del cuerpo de los métodos y están formadas por operandos y operadores. Los operandos pueden ser atributos, parámetros, literales, constantes o llamadas de métodos, mientras que los operadores son los que indican la manera de calcular el valor de la expresión. Los operadores que se pueden utilizar en una expresión dependen del tipo de los datos de los operandos que allí aparezcan.

En algunos casos es indispensable utilizar paréntesis para evitar la ambigüedad en las expresiones. Por ejemplo, la expresión 10 – 4 – 2 puede ser interpretada de dos maneras, cada una con un resultado distinto: 10 – ( 4 – 2 ) = 8, o también ( 10 – 4 ) – 2 = 4. Es buena idea usar siempre paréntesis en las expresiones, para estar seguros de que la interpretación del computador es la que nosotros necesitamos.

Ejemplo 7

Objetivo: Ilustrar la manera de usar expresiones aritméticas para hablar del estado de un objeto.

Suponga que estamos en un objeto de la clase Producto. Vamos a escribir e interpretar algunas expresiones aritméticas simples.

La expresión... Se interpreta como...
valorUnitario * 2 El doble del valor unitario del producto.
cantidadBodega - cantidadMinima La cantidad del producto que hay que vender antes de poder hacer un pedido.
valorUnitario * ( 1 + ( IVA_PAPELERIA / 2 ) ) El precio final al consumidor si el producto debe pagar el IVA de los productos de papelería (16%) y sólo paga la mitad de éste.
cantidadUnidadesVendidas * 1.1 La cantidad de unidades vendidas del producto, inflado en un 10%.

5.2. Operadores Relacionales

Los lenguajes de programación cuentan siempre con operadores relacionales, los cuales permiten determinar un valor de verdad (verdadero o falso) para una situación del mundo. Si queremos determinar, por ejemplo, si el valor unitario antes de impuestos de un producto es menor que $10.000, podemos utilizar (dentro de la clase Producto) la expresión:

valorUnitario < 10000

Los operadores relacionales son seis, que se resumen en la siguiente tabla:

Significado Símbolo Ejemplo
Es igual que == valorUnitario == 55.75
Es diferente de != tipo != Tipo.PAPELERIA
Es menor que < cantidadBodega < 120
Es mayor que > cantidadBodega > cantidadMinima
Es menor o igual que <= valorUnitario <= 100.0
Es mayor o igual que >= valorUnitario >= 100.0

Ejemplo 8

Objetivo: Ilustrar la manera de usar operadores relacionales para describir situaciones de un objeto (algo que es verdadero o falso).

Suponga que estamos en un objeto de la clase Producto. Vamos a escribir e interpretar algunas expresiones que usan operadores relacionales.

La expresión... Se interpreta como..
tipo == Tipo.DROGUERIA ¿El producto es de droguería?
cantidadBodega > 0 ¿Hay disponibilidad del producto en la bodega?
totalProductosVendidos > 0 ¿Se ha vendido alguna unidad del producto?
cantidadBodega <= cantidadMinima ¿Ya es posible hacer un nuevo pedido del producto?

5.3. Operadores Lógicos

Los operadores lógicos nos permiten describir situaciones más complejas, a partir de la composición de varias expresiones relacionales o de atributos de tipo boolean. Los operadores lógicos son tres: && (y), || (o), ! (no), y el resultado de aplicarlos se resume de la siguiente manera:

  • operando1 && operando2 es cierto, si ambos operandos son verdaderos.
  • operando1 || operando2 es cierto, si cualquiera de los dos operandos es verdadero.
  • !operando es cierto, si el operando es falso.

Los operadores && y || se comportan de manera un poco diferente a todos los demás. La expresión en la que estén sólo se evalúa de izquierda a derecha hasta que se establezca si es verdadera o falsa. El computador no pierde tiempo evaluando el resto de la expresión si ya sabe cual será su resultado.

Ejemplo 9

Objetivo: Ilustrar la manera de usar operadores lógicos para describir situaciones de un objeto (algo que es cierto o falso).

Suponga que estamos en un objeto de la clase Producto. Vamos a escribir e interpretar algunas expresiones que usan operadores lógicos.x=yx = y

La expresión... Se interpreta como...
tipo == Tipo.SUPERMERCADO && cantidadUniadesVendidas== 0 ¿El producto es de supermercado y no se ha vendido ninguna unidad? En este caso, si el producto no es de supermercado o ya se ha vendido alguna unidad, la expresión es falsa.
valorUnitario >= 10000 && valorUnitario <= 20000 && tipo == Tipo.DROGUERIA ¿El producto vale entre $10.000 y $20.000 y, además, es un producto de droguería?
!( tipo == Tipo.PAPELERIA ) ¿El producto no es de papelería? Note que esta expresión es equivalente a la expresión que va en la siguiente línea. Y también es equivalente a (tipo != Tipo.PAPELERIA).
tipo == Tipo.SUPERMERCADOǀǀ tipo == Tipo.DROGUERIA ¿El producto es de supermercado o de droguería?

Operadores sobre Cadenas de Caracteres

El tipo String nos sirve para representar cadenas de caracteres. A diferencia de los demás tipos de datos vistos hasta ahora, este tipo no es simple, sino que se implementa mediante una clase especial en Java. Esto implica que, en algunos casos, para invocar sus operaciones debemos utilizar la sintaxis de llamada de métodos.

Existen muchas operaciones sobre cadenas de caracteres, pero en este nivel sólo nos vamos a interesar en el operador de concatenación (+), en el de comparación (equals) y en el de extracción de un carácter (charAt).

El primer operador (+) sirve para pegar dos cadenas de caracteres, una después de la otra. Por ejemplo, si quisiéramos tener un método en la clase Producto que calculara el mensaje que se debe mostrar en la publicidad de la tienda, tendría la siguiente forma:

public String darPublicidad( )
{
    return "Compre el producto " + nombre + " por solo $" + valorUnitario;
}
  • Si alguno de los operandos no es una cadena de caracteres (como es el caso del atributo de tipo real valorUnitario) el compilador se encarga de convertirlo a cadena. No es necesario hacer una conversión explícita porque el compilador lo hace automáticamente por nosotros, para todos los tipos simples de datos.
  • Al ejecutar este método, retornará una cadena con algo del siguiente estilo: Compre el producto cuaderno por solo $100.50.

La segunda operación que nos interesa en este momento es la comparación de cadenas de caracteres. A diferencia de los tipos simples, en donde se utiliza el operador ==, para poder comparar dos cadenas de caracteres es necesario llamar el método equals de la clase String. Por ejemplo, si queremos tener un método en la clase Producto que reciba como parámetro una cadena de caracteres e informe si el nombre del producto es igual al valor recibido como parámetro, éste sería más o menos así:

public boolean esIgual( String pBuscado )
{
    return nombre.equals( pBuscado );
}
  • Se usa la sintaxis de invocación de métodos para poder utilizar el método equals. La razón es que String es una clase, y se deben respetar las reglas de llamada de un método (int, double y boolean no son clases, y por esta razón se puede utilizar el operador == directamente).
  • El retorno del método equals es de tipo boolean, razón por la cual lo podemos retornar directamente como respuesta del método que queremos construir.
  • En el ejemplo, el método equals se invoca sobre el atributo de la clase Producto llamado "nombre" y se le pasa como parámetro el valor recibido en "buscado".

La última operación que vamos a estudiar en este nivel nos permite "obtener" un carácter de una cadena. Para esto debemos dar la posición dentro de la cadena del carácter que nos interesa, e invocar el método chatAt de la clase String, tal como se muestra en los siguientes ejemplos. Nótese que el primer carácter de una cadena se encuentra en la posición 0.

Suponga que tenemos dos cadenas de caracteres, declaradas de la siguiente manera:

String cad1 = "la casa es roja"; 
String cad2 = "La Casa es Roja";
La expresión... Tiene el valor.. Comentarios...
cad1.equals(cad2) false La expresión es falsa, porque la comparación se hace teniendo en cuenta las mayúsculas y las minúsculas.
cad1.equalsIgnoreCase(cad2) true Con este método de la clase String podemos comparar dos cadenas de caracteres, ignorando si son mayúsculas o minúsculas.
cad1 + " y verde" "la casa es roja y verde" Se debe prever un espacio en blanco entre las cadenas, si no queremos que queden pegadas.
cad1.charAt(1) 'a' Los caracteres de la cadena se comienzan a numerar desde cero.
cad2.charAt(2) ' ' El espacio en blanco es el tercer carácter de la cadena. Debe quedar claro que no es lo mismo el carácter ' ' que la cadena de caracteres " ". El primero es un literal de tipo char, mientras que el segundo es un literal de la clase String.

Si en una expresión aritmética no se usan paréntesis para definir el orden de evaluación, Java aplicará a los operadores un orden por defecto. Dicho orden está asociado con una prioridad que el lenguaje le asigna a cada operador.
Básicamente, las reglas se pueden resumir de la siguiente manera:

  • Primero se aplican los operadores de multiplicación y división, de izquierda a derecha.
  • Después se aplican los operadores de suma y resta, de izquierda a derecha.

Supongamos que tenemos dos variables var1 y var2, con valores 10 y 5 respectivamente.

La expresión... Tiene el valor... Comentarios...
var1 – var2 - 10 -5 Aplica el operador de resta de izquierda a derecha.
var1 – ( var2 – 10 ) 15 Los paréntesis le dan un orden de evaluación distinta a la expresión: 10 – ( 5 – 10 ) = 10 –(-5) = 10 + 5 = 15.
var1 * var2 / 5 10 En esta expresión se hace primero la multiplicación y luego la división: ( 10 * 5 ) / 5 = 50 / 5 = 10. Esto es así porque ambos operadores tienen la misma prioridad, de modo que se evalúan de izquierda a derecha.
var1 * ( var2 / 10 ) 5 Los paréntesis le dan un orden de evaluación distinto a la expresión: 10 (5 / 10) = 10 0.5 = 5.
var1 - var2 + 10 15 En esta expresión se hace primero la resta y después la suma (aplica los operadores suma y resta de izquierda a derecha, puesto que ambos tienen la misma prioridad).
var1 + var2 * 10 60 En esta expresión se hace primero la multiplicación, puesto que ese operador tiene más prioridad que la suma.
var1 + var2 * 10 - 5 55 En esta expresión se hace primero la multiplicación, luego la suma y, finalmente, la resta.
var1 + var2 * 10 / 5 20 En esta expresión se hace primero la multiplicación, luego la división y, finalmente, la suma. Debe ser clara, en este punto, la importancia de los paréntesis en las expresiones.

Llegó el momento de comenzar a trabajar en el caso de la tienda, así que de nuevo manos a la obra.

Tarea 2

Objetivo: Generar habilidad en la construcción e interpretación de expresiones, utilizando el caso de estudio de la tienda.

Utilizando las declaraciones hechas en la sección anterior para las clases Tienda y Producto y el escenario propuesto a continuación, resuelva los ejercicios que se plantean más adelante.

Escenario:

Suponga que en la tienda del caso de estudio se tienen a la venta los siguientes productos:

  1. Libreta de apuntes, producto de papelería, a $5.500 pesos la unidad.
  2. Leche en bolsa de 1 litro, producto de supermercado, a $2.100 pesos.
  3. Jabón en polvo, producto de supermercado, a $4.200 el kilo.
  4. Aspirina, producto de droguería, a $400 la unidad.

Suponga además, que ya se han vendido en la tienda 6 libretas, 25 bolsas de leche, 14 bolsas de jabón y 32 aspirinas.

Por último tenemos la siguiente tabla para resumir el inventario de unidades de la tienda y la cantidad por debajo de la cual se puede hacer un abastecimiento.

Producto Cantidad en bodega Cantidad mínima
libreta 44 15
leche 25 10
jabón 36 8
aspirina 13 11

En el siguiente diagrama de objetos puede ver el estado actual de la tienda. Complete la cantidad de dinero en caja que tiene la tienda, teniendo en cuenta las ventas que ya se realizaron.

Parte I – Evaluación de Expresiones (operadores aritméticos):

Para el objeto... la expresión... toma el valor...
leche cantidadBodega - cantidadMinima 15
aspirina valorUnitario * cantidadBodega
jabón ( cantidadUnidadesVendidas+ cantidadBodega ) * ( valorUnitario + valorUnitario * IVA_SUPERMERCADO )
libreta valorUnitario * cantidadBodega / cantidadUnidadesVendidas * valorUnitario
leche valorUnitario * cantidadUnidadesVendidas * IVA_SUPERMERCADO
aspirina valorUnitario * ( 1 + IVA_DROGUERIA ) * cantidadUnidadesVendidas
la tienda ( producto1.darValorUnitario( ) + producto2.darValorUnitario( ) + producto3.darValorUnitario( ) + producto4.darValorUnitario( ) ) / 4 3050.0
la tienda ( producto1.darCantidadBodega( ) - producto1.darCantidadMinima( ) ) * ( producto1.darValorUnitario( ) * ( 1 + producto1.darIVA( ) ) )
la tienda dineroEnCaja - ( producto2.darCantidadMinima( ) * producto2.darValorUnitario( ) )
la tienda producto3.darCantidadUnidadesVendidas( ) * ( 1 + producto3.darIVA( ) )

Parte II – Evaluación de Expresiones (operadores relacionales):

Para el objeto... la expresión... toma el valor...
libreta tipo == Tipo.PAPELERIA true
libreta tipo != Tipo.DROGUERIA
leche cantidadMinima >= cantidadBodega
jabón valorUnitario <= 10000
aspirina cantidadBodega - cantidadMinima != cantidadUnidadesVendidas
jabón cantidadBodega * valorUnitario == cantidadUnidadesVendidas * IVA_PAPELERIA
la tienda producto1.darCantidadUnidadesVendidas( ) + producto2.darCantidadUnidadesVendidas( ) > producto3.darCantidadUnidadesVendidas( ) true
la tienda dineroEnCaja <= producto4.darCantidadUnidadesVendidas( ) * ( ( 1 + producto4.darIVA( ) ) * producto4.darValorUnitario( ) )
la tienda ( producto1.darCantidadBodega( ) + producto2.darCantidadBodega( ) + producto3.darCantidadBodega( ) + producto4.darCantidadBodega( ) ) <= 1000
la tienda dineroEnCaja * producto1.darIVA( ) > producto1.darCantidadUnidadesVendidas( ) * producto1.darValorUnitario( )

Parte III – Evaluación de Expresiones (operadores lógicos):

Para el objeto... la expresión... toma el valor...
leche !(tipo == Tipo.PAPELERIAǀǀ tipo == Tipo.DROGUERIA ) true
jabón tipo == Tipo.SUPERMERCADO && valorUnitario <= 10000
aspirina cantidadBodega > cantidadMinima && cantidadBodega < cantidadUnidadesVendidas
libreta valorUnitario >= 1000 && valorUnitario <= 5000
leche tipo != Tipo.PAPELERIA && tipo != Tipo.SUPERMERCADO
aspirina tipo == Tipo.PAPELERIA && valorUnitario > 50 && ! (cantidadMinima < cantidadBodega )
la tienda producto1.darTipo( ) == Tipo.PAPELERIA && producto2.darTipo( ) == Tipo.SUPERMERCADO && producto3.darTipo( ) != Tipo.DROGUERIA && producto4.darTipo( ) == Tipo.SUPERMERCADO false
la tienda ( dineroEnCaja / producto1.darValorUnitario( ) ) >= producto1.darCantidadMinima( )
la tienda (( producto2.darCantidadBodega() + producto2.darCantidadBodega())/10 < 100 ) && (( producto2.darCantidadBodega()+producto2.darCantidadBodega())/10 >= 50 )
la tienda dineroEnCaja * 0.1 <= producto3.darValorUnitario( ) * ( 1 + producto3.darIVA( ) )

Parte IV – Creación de Expresiones (operadores aritméticos):

En un método de la clase... para obtener.. se usa la expresión...
Producto Valor de venta de un producto con IVA del 16% valorUnitario * ( 1 + IVA_PAPELERIA )
Producto Número de unidades que se deben vender para alcanzar la cantidad mínima.
Producto Número de veces que se ha vendido la cantidad mínima del producto.
Producto Número de unidades sobrantes si se arman paquetes de 10 con lo disponible en bodega.
Tienda Dinero en caja de la tienda incrementado en un 25% dineroEnCaja * 1.25
Tienda Total del IVA a pagar por las unidades vendidas de todos los productos.
Tienda El número de unidades del producto 3 que se pueden pagar (a su valor unitario) con el dinero en caja de la tienda.
Tienda El número de estantes de 50 posiciones que se requieren para almacenar las unidades en bodega de todos los productos (suponga que cada unidad de producto ocupa una posición).

Parte V – Creación de Expresiones (operadores relacionales):

En un método de la clase... para obtener.. se usa la expresión...
Producto ¿La cantidad en bodega es mayor o igual al doble de la cantidad mínima? cantidadBodega >= 2 * cantidadMinima
Producto ¿El tipo no es PAPELERIA?
Producto ¿El total de productos vendidos es igual a la cantidad en bodega?
Producto ¿El nombre del producto comienza por el carácter 'a'?
Tienda ¿El nombre del producto 2 es "aspirina"? producto2.darNombre( ).equals( "aspirina")
Tienda ¿La cantidad mínima del producto 4 es una quinta parte de la cantidad de productos vendidos?
Tienda ¿El valor obtenido por los productos vendidos (incluyendo el IVA) es menor a un tercio del dinero en caja?
Tienda ¿El promedio de unidades vendidas de todos los productos es mayor al promedio de unidades en bodega de todos los productos?

Parte VI – Creación de Expresiones (operadores lógicos):

En un método de la clase... para obtener.. se usa la expresión...
Producto ¿El tipo de producto es SUPERMERCADO y su valor unitario es menor a $3.000? tipo == Tipo.SUPERMERCADO && valorUnitario < 3000
Producto ¿En la cantidad en bodega o en la cantidad de productos vendidos está al menos 2 veces la cantidad mínima?
Producto ¿El tipo no es DROGUERIA y el valor está entre 1000 y 3500 incluyendo ambos valores?
Producto ¿El tipo es PAPELERIA y la cantidad en bodega es mayor a 10 y el valor unitario es mayor o igual a $3.000?
Tienda ¿El tipo del producto 1 no es ni DROGUERIA ni PAPELERIA y el total de unidades vendidas de todos los productos es menor a 30? producto1.darTipo( ) != Tipo.DROGUERIA && producto1.darTipo( ) != Tipo.PAPELERIA && ( producto1.darProductosVendidos( ) + producto2.darProductosVendidos( ) + producto3.darProductosVendidos( ) + producto4.darProductosVendidos( ) ) < 30
Tienda ¿Con el valor en caja de la tienda se pueden pagar 500 unidades del producto 1 ó 300 unidades del producto 3 (al precio de su valor unitario)?
Tienda ¿Del producto 4, el tope mínimo es mayor a 10 y la cantidad en bodega es menor o igual a 25?
Tienda ¿El valor unitario de los productos 1 y 2 está entre 200 y 1000 sin incluir dichos valores?

5.5. Manejo de Variables

El objetivo de las variables es permitir manejar cálculos parciales en el interior de un método. Las variables se deben declarar (darles un nombre y un tipo) antes de ser utilizadas y siguen la misma convención de nombres de los atributos. Las variables se crean en el momento en el que se declaran y se destruyen automáticamente al llegar al final del método que las contiene. Por esta razón es imposible utilizar el valor de una variable por fuera del método donde fue declarada.

Se suelen usar variables por tres razones principales:

  1. Porque es necesario calcular valores intermedios.
  2. Por eficiencia, para no pedir dos veces el mismo servicio al mismo objeto.
  3. Por claridad en el código.

A continuación se muestra un ejemplo de un método de la clase Tienda que calcula la cantidad disponible del primer producto y luego vende esa misma cantidad de todos los demás.

public void venderDeTodo( )
{
    int cuanto = producto1.darCantidadBodega( ); 
    producto2.vender( cuanto );
    producto3.vender( cuanto ); 
    producto4.vender( cuanto );
}
  • Se declara al comienzo del método una variable de tipo entero llamada "cuanto", y se le asigna la cantidad que hay en bodega del producto 1 de la tienda.
  • La declaración de la variable y su inicialización se pueden hacer en instrucciones separadas (no hay necesidad de inicializar las variables en el momento de declararlas). La única condición que verifica el compilador es que antes de usar una variable ya haya sido inicializada.
  • En este método se usa la variable "cuanto" por eficiencia y por claridad (no calculamos el mismo valor tres veces sino sólo una).

5.6 Otros Operadores de Asignación

El operador de asignación visto en el nivel anterior permite cambiar el valor de un atributo de un objeto, como una manera de reflejar un cambio en el mundo del problema. Vender 5 unidades de un producto, por ejemplo, se hace restando el valor 5 del atributo cantidadBodega.

En este nivel vamos a introducir cuatro nuevos operadores de asignación, con la aclaración de que sólo es una manera más corta de escribir las asignaciones, las cuales siempre se pueden escribir con el operador del nivel anterior.

  • Operador ++. Se aplica a un atributo entero, para incrementarlo en 1. Por ejemplo, para indicar que se agregó una unidad de un producto a la bodega (en la clase Producto), se puede utilizar cualquiera de las siguientes versiones del mismo método.
public void agregarNuevaUnidadBodega( )
{
    cantidadBodega++;
}
  • El operador de incremento se puede ver como un operador de asignación en el cual se modifica el valor del operando sumándole el valor 1.
  • El uso de este operador tiene la ventaja de generar expresiones un poco más compactas.
public void agregarNuevaUnidadBodega( )
{
    cantidadBodega = cantidadBodega + 1;
}
  • Esta segunda versión del método tiene la misma funcionalidad, pero utiliza el operador de asignación normal.

  • Operador --. Se aplica a un atributo entero, para disminuirlo en 1. Se utiliza de manera análoga al operador de incremento.

  • Operador +=. Se utiliza para incrementar un atributo en cualquier valor. Por ejemplo, el método para hacer un pedido de una cierta cantidad de unidades para la bodega, puede escribirse de las dos maneras que se muestran a continuación. Debe quedar claro que la instrucción var++ es equivalente a var += 1, y equivalente a su vez a var = var + 1.

public void pedir( int pNum )
{
    cantidadBodega += pNum;
}
  • Este método de la clase Producto permite hacer un pedido de "pNum" unidades y agregarlas a la bodega.

  • El operador += se puede ver como una generalización del operador ++, en el cual el incremento puede ser de cualquier valor y no sólo igual a 1.

public void pedir( int pNum )
{
    cantidadBodega = cantidadBodega + pNum;
}
  • Esta segunda versión del método tiene la misma funcionalidad, pero utiliza el operador de asignación normal.
  • La única ventaja de utilizar el operador += es que se obtiene un código un poco más compacto. Usarlo o no usarlo es cuestión de estilo de cada programador.

  • Operador -=. Se utiliza para disminuir un atributo en cualquier valor. Se utiliza de manera análoga al operador +=.

Tarea 3

Objetivo: Generar habilidad en la utilización de las asignaciones y las expresiones como un medio para transformar el estado de un objeto.

Para las declaraciones de las clases Tienda y Producto dadas anteriormente y, teniendo en cuenta el escenario planteado más adelante, escriba la instrucción o las instrucciones necesarias para modificar el estado, siguiendo la descripción que se hace en cada caso.

Escenario

Suponga que en la tienda del caso de estudio se tienen a la venta los siguientes productos:

  1. Lápiz, producto de papelería, con un valor base de $500 pesos la unidad.
  2. Borrador, producto de papelería, a $300 pesos.
  3. Kilo de café, producto de supermercado, a $5.600 la unidad.
  4. Desinfectante, producto de droguería, a $3.200 la unidad.

Suponga además, que se han vendido 15 lápices, 5 borradores, 7 kilos de café y 12 frascos de desinfectante, y que en la caja de la tienda hay en este momento $43.275,50.

Por último tenemos la siguiente tabla para resumir el inventario de unidades de la tienda y el tope mínimo que se debe alcanzar para poder hacer un nuevo pedido:

Producto Cantidad en bodega Tope mínimo
lapiz 30 9
borrador 15 5
café 20 10
desinfectante 12 11

Complete el diagrama de objetos que aparece a continuación, con la información del escenario:

Signatura de los métodos de la clase Tienda:

  //-----------------------------------
  // Signaturas de métodos
  //-----------------------------------
  public Producto darProducto1( )
  public Producto darProducto2( )
  public Producto darProducto3( )
  public Producto darProducto4( )
  public double darDineroEnCaja( )

Signatura de los métodos de la clase Producto:

  //-----------------------------------
  // Signaturas de métodos
  //-----------------------------------
  public String darNombre( )
  public int darTipo( )
  public double darValorUnitario( )
  public int darCantidadBodega( )
  public int darCantidadMinima( )
  public int darCantidadUnidadesVendidas( )
  public double darIVA( )
  public int vender( int pCantidad )
  public void abastecer( int pCantidad  )
En un método de la clase... la siguiente modificación de estado.. se logra con las siguientes instruciones...
Producto Se vendieron 5 unidades del producto (suponga que hay suficientes). cantidadUnidadesVendidas += 5; cantidadBodega -= 5;
Producto El valor unitario se incrementa en un 10%
Producto Se incrementa en uno la cantidad mínima para hacer pedidos.
Producto El producto ahora se clasifica como de SUPERMERCADO
Producto Se cambia el nombre del producto. Ahora se llama "teléfono".
En un método de la clase... la siguiente modificación de estado.. se logra con las siguientes instruciones...
Tienda Se asigna al dinero en caja de la tienda la suma de los valores unitarios de los cuatro productos. dineroEnCaja = producto1.darValorUnitario( ) + producto2.darValorUnitario( ) + producto3.darValorUnitario( ) + producto4.darValorUnitario( );
Tienda Se venden 4 unidades del producto 3 (suponga que están disponibles).
Tienda Se disminuye en un 2% el dinero en la caja.
Tienda Se abastece la tienda con la mitad de la cantidad mínima de cada producto, suponiendo que la cantidad en bodega de todos los productos es menor a la cantidad mínima.
Tienda Se pone en la caja el dinero correspondiente a las unidades vendidas de todos los productos de la tienda.
Una clase de la interfaz de usuario Se vende una unidad de cada uno de los productos de la tienda. Recuerde que este método está por fuera de la clase Tienda, y que por lo tanto no puede utilizar sus atributos de manera directa.

Antes de comenzar a escribir el cuerpo de un método, es importante tener en cuenta la clase en la cual éste se encuentra. No olvide que dependiendo de la clase en la que uno se encuentre, las cosas se deben decir de una manera diferente. En unos casos los atributos se pueden manipular directamente y, en otros, es indispensable llamar un método para cambiar el estado (para que la modificación la realice el objeto al que pertenece el atributo).

results matching ""

    No results matching ""