Académique Documents
Professionnel Documents
Culture Documents
Nivel 2
Definiendo situaciones y
manejando casos
– R1:Vender un producto.
– R2: Hacer pedido de un producto.
– R3: Calcular estadísticas de la
empresa.
La Tienda
R1
R2
R3
Requerimientos Funcionales
Entradas
Resultado
Entradas
Resultado
Requerimientos Funcionales
Nombre R3 – Calcular estadísticas de ventas.
Entradas
Ninguna
Resultado
Tienda Producto
• String (cadena
de caracteres) “esta es una cadena”
“”
““
Ejemplo tipo double en la Tienda
Producto public class Producto
{
valorUnitario
private double valorUnitario;
}
valorUnitario = 23.12;
int valorPesos = ( int ) valorUnitario;
valorUnitario = valorUnitario / 1.07;
int valorPesos = 17 / 3;
Operadores aritméticos
• Suma +
• Resta -
• Multiplicación *
• División /
• Módulo %
Calcula el residuo de la división entre dos valores
Ejemplos del operador %
4%4 0
14 % 3 2
17 % 3 2
3 % 17 3
• boolean
•Permite representar valores lógicos
(verdadero o falso)
•Solo tiene dos valores: true y false
Ejemplo tipo boolean en la Tienda
Producto public class Producto
{
valorUnitario
private double valorUnitario;
subsidiado
private boolean subsidiado;
}
subsidiado = true;
subsidiado = false;
boolean variableLogica = subsidiado;
Tipos simples de datos
• int
• double
• String
• boolean
• char
calidad = ‘A’;
calidad = ‘B’;
char variableCaracter = calidad;
Uso de CONSTANTES
• En los programas se pueden usar
constantes para:
– Definir el dominio de un atributo
(posibles valores que puede tomar un
atributo)
– Representar valores inmutables (que no
van a cambiar durante la ejecución del
programa)
Constantes para definir el dominio
de un atributo
• Se usan cuando un atributo solo
puede tomar un cierto número de
valores.
• Ejemplo: el tipo del producto, solo
puede ser:
– supermercado
– papelería
– droguería
Constantes para definir el dominio
de un atributo
• Se usan cuando un atributo solo
puede tomar un cierto número de
valores.
• Ejemplo: el tipo del producto, solo
puede ser:
– Supermercado (1)
– Papelería (2)
– Droguería (3)
Ejemplo del uso de constantes en
la Tienda
public class Producto
Producto {
// Constantes
valorUnitario public final static int PAPELERIA = 1;
subsidiado
public final static int SUPERMERCADO = 2;
calidad
public final static int DROGUERIA = 3;
tipo
// Atributos
private double valorUnitario;
private boolean subsidiado;
private char calidad;
private int tipo;
}
Ejemplos de instrucciones con uso
de constantes
tipo = PAPELERIA;
tipo = SUPERMERCADO;
tipo = DROGUERIA;
Ejemplos de instrucciones con uso
de constantes
• El siguiente método podría pertenecer a la
clase Tienda:
}
Ejemplos de instrucciones con uso
de constantes
• Las siguientes instrucciones pueden ir como parte
de cualquier método de la clase Producto:
Producto :Producto
:Producto
nombre =
tipo =
Producto p = new Producto( ); valorUnitario =
cantidadBodega =
cantidadMinima =
totalProductosVendidos =
Creación de un Objeto
• Un objeto se crea:
– utilizando la instrucción new
– dando el nombre de la clase a la cual pertenece
nombre =
tipo =
Producto p = new Producto( ); valorUnitario =
cantidadBodega =
cantidadMinima =
totalProductosVendidos =
Creación de un Objeto
• Para inicializar los valores de un objeto, se
usan los métodos CONSTRUCTORES:
– Son invocados automáticamente en el momento de
ejecutar la instrucción de creación
– Reglas:
• El método constructor se debe llamar igual a la clase
• No puede tener ningún tipo de retorno
Método constructor de la clase
Producto
public Producto
{
tipo = 0;
nombre = “”;
valorUnitario = 0.0;
cantidadBodega = 0;
cantidadMinima = 0;
totalProductosVendidos = 0;
}
Creación de un Objeto
nombre = “”
tipo = 0
Producto p = new Producto( ); valorUnitario = 0.0
cantidadBodega = 0
cantidadMinima = 0
totalProductosVendidos = 0
Constructor con Parámetros
public Producto (int tip, String nom, double val, int cant, int min)
{
tipo = tip;
nombre = nom;
valorUnitario = val;
cantidadBodega = cant;
cantidadMinima = min;
totalProductosVendidos = 0;
}
Creación de un Objeto
:Producto
Atributos incializados
nombre = “lapiz”
tipo = PAPELERIA
Producto p = new Producto (Producto.PAPELERIA, valorUnitario = 500.0
“lapiz”, 500.0, 30, 9 ); cantidadBodega = 30
cantidadMinima = 9
totalProductosVendidos = 0
public Producto (int tip, String nom, double val, int cant, int min)
Quién instancia los productos ?
Quién instancia los productos ?
R// La Tienda
En el método constructor de la
Tienda
public Tienda ( Producto a1, Producto a2, Producto a3, Producto a4)
{
p1 = a1;
p2 = a2;
p3 = a3;
p4 = a4;
dineroEnCaja = 0;
}
Quién crea los productos y la
tienda?
R// La Interfaz
En el constructor de la interfaz
public InterfazTienda( )
{
// Crea los 4 productos de la tienda
Producto p1 = new Producto( Producto.PAPELERIA, "lápiz", 550.0, 18, 5 );
Producto p2 = new Producto( Producto.DROGUERIA, "aspirina", 109.5, 25, 8 );
Producto p3 = new Producto( Producto.PAPELERIA, "borrador", 207.3, 30, 10 );
Producto p4 = new Producto( Producto.SUPERMERCADO, "pan", 150.0, 15, 20 );
public Producto (int tip, String nom, double val, int cant, int min)
{
tipo = tip;
nombre = nom;
valorUnitario = val;
cantidadBodega = cant; R// Se ejecuta automáticamente
el método constructor de la
cantidadMinima = min; clase Producto con los
totalProductosVendidos = 0; parámetros en ORDEN correcto
}
Producto x = new Producto( Producto.PAPELERIA, “libreta", 5500, 44, 15 );
public Producto (int tip, String nom, double val, int cant, int min)
{
tipo = tip; Parámetros del método, que son los
nombre = nom; valores que se asignan a los atributos del
producto que se está creando
valorUnitario = val;
cantidadBodega = cant;
cantidadMinima = min;
totalProductosVendidos = 0;
}
Atributos del
producto que se No todos los valores que se asignan a los atributos en
está creando el método constructor entran como parámetros. En la
creación del objeto se pueden también dar valores por
defecto a algunos atributos
Resultado: se crea un nuevo objeto
llamado x de la clase Producto
Producto x = new Producto( Producto.PAPELERIA, “libreta", 5500, 44, 15 );
public Producto (int tip, String nom, double val, int cant, int min)
{
tipo = tip; x
nombre = nom;
valorUnitario = val;
cantidadBodega = cant;
cantidadMinima = min;
totalProductosVendidos = 0;
}
0
Volvamos a InterfazTienda …
1. Crear los 4 productos
public InterfazTienda( ) como variables locales del
{ método InterfazTienda
p1
Tienda Producto
0..1
p2
0..1
p3 En UML
0..1
p4
0..1
Asociaciones opcionales
p1
Tienda Producto
0..1
p2
0..1
p3
0..1
p4
0..1
• Atributos • Atributos
• Parámetros • Parámetros
• Valores (números • Valores (números
por ejemplo) por ejemplo)
• Constantes • Constantes
• Llamadas a • Llamadas a
métodos métodos
Expresiones artiméticas
• Atributo •+ • Atributo
• Parámetro • Parámetro
• Valor
•- • Valor
• Constante
• Constante •* • Llamada a un
• Llamada a un
método
método •/
•%
Ejemplos de expresiones
aritméticas
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_PAPEL / 2) ) El precio al usuario si el
producto debe pagar el IVA de
los productos de papelería
(16%) y solo paga la mitad de
éste
totalProductosVendidos * 1.1 El número total de unidades
vendidas del producto, inflado
en un 10%
Ejemplos de expresiones
aritméticas
La expresión … Se interpreta como …
valoUnitario * 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_PAPEL / 2) ) El precio al usuario si el
producto debe pagar el IVA de
los productos de papelería
(16%) y solo paga la mitad de
éste
totalProductosVendidos * 1.1 El número total de unidades
vendidas del producto, inflado
en un 10%
Ahora … Nuevos operadores, no
solo aritméticos
Operadores relacionales
• Permiten establecer un valor de verdad
(verdadero o falso) para una situación
del mundo.
• Ejemplo: queremos establecer si el
valor unitario antes de los impuestos
de un producto es menor que $10.000.
cantidadBodega > 0
totalProductosVendidos > 0
&& y
|| o
! no
Aplicación de operadores
lógicos
operando1 && operando2 Es cierto, si ambos
operandos son verdaderos
operando1 || operando2 Es cierto, si cualquiera de los
dos operandos es verdadero
! operando1 Es cierto, si el operando es
falso
Ejemplo del uso de operadores lógicos para saber
si algo es verdadero o falso sobre un producto
La expresión … Se interpreta como …
tipo == SUPERMERCADO && El producto es de supermercado y no
totalProductosVendidos == 0 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 && El producto vale entre 10000 y 20000
valorUnitario <= 20000 && y además es un producto de
tipo == DROGUERIA drogueria?
OTRA FORMA:
return suficiente;
}
}
Ejemplo 2 – Otra opción
Class Producto
{
public boolean haySuficienteParaVender ( )
{
return ( cantidadBodega >
cantidadMinima);
}
}
Ejemplo 3
• Dar el precio final de un producto de papelería con o sin IVA
dependiendo del parámetro que lo indica
Class Producto
{
public double darPrecioFinalPapeleria ( boolean conIVA)
{
double precioFinal = valorUnitario;
if ( conIVA == true)
{
precioFinal = valorUnitario + (valorUnitario * IVA_PAPEL);
}
return precioFinal;
}
}
Ejemplo 3 – Otra opción
• Dar el precio final de un producto de papelería con o sin IVA
dependiendo del parámetro que lo indica
Class Producto
{
public double darPrecioFinalPapeleria ( boolean conIVA)
{
double precioFinal = valorUnitario;
if ( conIVA )
{
precioFinal = valorUnitario + (valorUnitario * IVA_PAPEL);
}
return precioFinal;
}
}
Condicionales en Cascada =
Varios CASOS
if (condicion1)
{
instrucciones que se deben ejecutar si se cumple la condición1
}
else if (condicion2)
{
instrucciones que se deben ejecutar si se cumple la condición2
}
else if (condicion3)
{
instrucciones que se deben ejecutar si se cumple la condición3
}
…
else
{
instrucciones que se deben ejecutar si no se cumple ninguna de las
condiciones anteriores
}
Ejemplo – En la Clase Producto
public double darIVA ( )
{
if ( tipo == PAPELERIA)
{
return IVA_PAPEL;
}
else if ( tipo == SUPERMERCADO)
{
return IVA_MERCADO;
}
else
{
return IVA_FARMACIA;
}
}
Ejemplo – Otra opción
public double darIVA ( )
{
double resp = 0.0;
if ( tipo == PAPELERIA)
{
resp = IVA_PAPEL;
}
else if ( tipo == SUPERMERCADO)
{
resp = IVA_MERCADO;
}
else
{
resp = IVA_FARMACIA;
}
return resp;
}
Ejemplo – En la Clase Producto
public double calcularPrecioFinal ( )
{
if ( tipo == PAPELERIA)
{
}
else if ( tipo == SUPERMERCADO)
{
}
else
{
}
}
Ejercicio – En la Clase Producto
public void hacerPedido ( int cantidadPedido )
{
}
Ejercicio – En la Clase Producto
public void cambiarValorUnitario ( int cantidadPedido )
{
}
Ejercicio – En la Clase Tienda
public int venderProducto ( String nombreProducto, int canidad )
{
Calcular el número de
productos de papelería
que hay en la tienda.
}
Condicionales Compuestas
switch ( expresion )
{
case valor1:
instrucciones que se deben ejecutar si la expresión tiene el valor1
break;
case valor2:
instrucciones que se deben ejecutar si la expresión tiene el valor2
break;
case valor3:
instrucciones que se deben ejecutar si la expresión tiene el valor1
break;
}
Ejemplo sin switch
public double darIVA ( )
{
double iva = 0.0;
if ( tipo == PAPELERIA)
{
iva = IVA_PAPEL;
}
else if ( tipo == SUPERMERCADO)
{
iva = IVA_MERCADO;
}
else
{
iva = IVA_FARMACIA;
}
return iva;
}
Ejemplo con switch
public double darIVA ( )
{
double iva = 0.0;
switch ( tipo)
{
case PAPELERIA:
iva = IVA_PAPEL;
break;
case SUPERMERCADO:
iva = IVA_MERCADO;
break;
case DROGUERIA:
iva = IVA_FARMACIA;
break;
}
return iva;
}
Comparación de Strings
Método equals de la clase String
string1.equals (string2)