Nychol Bazurto Gómez
Nuevos elementos de modelado
Expresiones
Clases y objetos
Instrucciones condicionales
Responsabilidades de una clase
"Mi cadena es muy linda"En caso de tener dos variables un ejemplo de concatenación sería:
String sabor = "chocolate";
double gramosAzucar = 4.5;
String respuesta = "El helado de " + sabor + " tiene " + gramosAzucar + "gramos de azúcar.";
String nombre= "Nychol";
char primerLetra = nombre.charAt(0);String nombre= "Nychol";
char tercerLetra = nombre.charAt(3);String nombre= "Nychol";
char ultimaLetra = nombre.charAt(nombre.lenght() -1 );char letra = 'N';
String nombre = letra + "ychol";
%
Calcula el residuo de la división entre dos valores
| 4 % 4 | 0 |
|---|---|
| 14 % 3 | 2 |
| 17 % 3 | 2 |
| 3 % 17 | 3 |
| 4.5 % 2.2 | 0.1 |
Sirven para dar un valor global (que todo el programa/aplicación puede consultar) e inmutable (que no va a cambiar durante la ejecución del programa.)
public final static <tipo> <nombre> = >valor>;
El nombre de la constante SIEMPRE va en mayúsculas.
// Constantes
public final static int PAPELERIA = 1;
public final static int SUPERMERCADO = 2;
public final static int DROGUERIA = 3;
// Atributo
...
private int tipo;
// Código interno de la clase producto
tipo = PAPELERIA;
tipo = SUPERMERCADO;
tipo = DROGUERIA;Puedo usar las constantes desde otra clase. Por ejemplo desde la clase Tienda.
public void ejemplo( )
{
…
int tipoVenta = Producto.PAPELERIA;
int tipoCompra = Producto.SUPERMERCADO;
…
}Definen posibles valores de un atributo.
public class Producto
{
// Constantes
public enum Tipo
{
PAPELERIA,
SUPERMERCADO,
DROGUERIA
}
// Atributos
private String nombre;
private Tipo tipo;
private double valorUnitario;
private int cantidadBodega;
private int cantidadMinima
private int cantidadUnidadesVendidas:
…
} Permiten agrupar los posibles valores de la característica, asignando solamente un nombre significativo para cada uno de ellos, sin asignarles ningún valor
public class Tienda
{
…
// Métodos
public void ejemplo2( )
{
…
Tipo tipoCompra = Tipo.SUPERMERCADO;
Tipo tipoVenta = Tipo.PAPELERIA;
...
}
...
} La ventaja de usar una enumeración (PAPELERIA) en lugar de un valor numérico es que el programa resultante es mucho más fácil de leer y entender.
Expresiones
Es la manera en que expresamos algo sobre el estado de un objeto.
El medio que tenemos para decir en un programa algo sobre el mundo del problema.
Aparecen dentro del cuerpo de los métodos y están formadas por operandos y operadores.
Expresiones
OPERADORES
OPERANDOS
Indican la manera de calcular el valor de la expresión
Dependen del tipo de los datos que los operandos
Expresiones
OPERADOR
OPERANDO
OPERANDO
Expresiones
OPERADOR
OPERANDO
OPERANDO
+
-
*
/
%
Expresiones
OPERADOR
OPERANDO
OPERANDO
+
-
*
/
%
NIVEL 1
Expresiones
Permiten establecer un valor de verdad (verdadero o falso) para una situación del mundo.
Ejemplo: queremos establecer si el valor de un producto es menor que $10.000.
valorUnitario < 10000Operadores relacionales
| 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 |
| La expresión … | se interpreta como |
|---|---|
| tipo == Tipo.DROGUERIA | ¿El producto es de droguería? |
| cantidadBodega > 0 | |
| totalProductosVendidos > 0 | |
| cantidadBodega <= cantidadMinima |
Operadores relacionales
Ejemplo del uso de operadores relacionales para saber si algo es verdadero o falso sobre un producto
| 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? |
Operadores relacionales
Ejemplo del uso de operadores relacionales para saber si algo es verdadero o falso sobre un producto
Operadores lógicos
Permiten describir situaciones más complejas.
Son composiciones de expresiones relacionales o de atributos de tipo boolean.
| Operador | Se lee como |
|---|---|
| && | y |
| || | o |
| ! | no |
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 |
Operadores lógicos
| La expresión … | Se interpreta como |
|---|---|
| tipo == SUPERMERCADO && totalProductosVendidos == 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 == DROGUERIA | El producto vale entre 10000 y 20000 y además es un producto de drogueria? |
| ! (tipo == PAPELERIA) | El producto no es de papelería? |
| tipo == SUPERMERCADO || tipo == DROGUERIA | El producto es de supermercado o droguería? |
| 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_PAPEL ) |
| Producto | Número de unidades que se deben vender para alcanzar el tope mínimo | |
| Producto | Número de unidades sobrantes si se arman paquetes de 10 con lo disponible en bodega |
| En un método de la clase... | para obtener… | se usa la expresión… |
|---|---|---|
| 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 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) |
| 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? |
| En un método de la clase... | para obtener… | se usa la expresión… |
|---|---|---|
| Tienda | La cantidad mínima del producto 4 es una quinta parte de la cantidad de productos vendidos? | |
| Tienda | El promedio de unidades vendidas de todos los productos es mayor al promedio de unidades en bodega de todos los productos? |
| 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 == 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? |
| En un método de la clase... | para obtener… | se usa la expresión… |
|---|---|---|
| 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? | p1.darTipo( ) != Producto.DROGUERIA && p1.darTipo( ) != Producto.PAPELERIA && ( p1.darProductosVendidos( ) + p2.darProductosVendidos( ) + p3.darProductosVendidos( ) + p4.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 | El valor unitario de los productos 1 y 2 está entre 200 y 1000 sin incluir dichos valores? |
Condicionales
Condicionales
Condicionales
if (condicion)
{
instrucciones que se deben ejecutar si se cumple la condición
}
else
{
instrucciones que se deben ejecutar si NO se cumple la condición
}evalua si una o más condiciones se cumplen
Condicionales
if (semaforo.darColor() == "verde")
{
System.out.println("Cruzar la calle");
}
else
{
System.out.println( "Esperar") ;
}if (hambre == true && dinero > 3000 )
{
System.out.println("Comprar dona");
}
else
{
System.out.println("D'oh");
}Condicionales
Class Producto
{
public int vender ( int cant )
{
int unidadesVendidas = 0;
if ( cant > cantidadBodega )
{
totalProductosVendidos += cantidadBodega;
unidadesVendidas = cantidadBodega;
cantidadBodega = 0;
return unidadesVendidas;
}
else
{
totalProductosVendidos += cant;
cantidadBodega -= cant;
return cant;
}
}
}Condicionales
Class Producto
{
public int vender ( int cant )
{
int unidadesVendidas = 0;
if ( cant > cantidadBodega )
{
totalProductosVendidos += cantidadBodega;
unidadesVendidas = cantidadBodega;
cantidadBodega = 0;
}
else
{
totalProductosVendidos += cant;
cantidadBodega -= cant;
unidadesVendidas = cant;
}
return unidadesVendidas;
}
}Condicionales
Class Producto
{
public boolean haySuficienteParaVender ( )
{
boolean suficiente = true;
if ( cantidadBodega > 0)
{
suficiente = true;
}
else
{
suficiente = false;
}
return suficiente;
}
}Condicionales
Class Producto
{
public boolean haySuficienteParaVender ( )
{
boolean suficiente = true;
if ( cantidadBodega == 0)
{
suficiente = false;
}
return suficiente;
}
}
Condicionales
Class Producto
{
public boolean haySuficienteParaVender ( )
{
boolean suficiente = false;
if ( cantidadBodega > 0)
{
suficiente = true;
}
return suficiente;
}
}
Condicionales
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
}Condicionales
public double darIVA ( )
{
if ( tipo == PAPELERIA)
{
return IVA_PAPEL;
}
else if ( tipo == SUPERMERCADO)
{
return IVA_MERCADO;
}
else
{
return IVA_FARMACIA;
}
}Condicionales
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;
}Condicionales
Class Producto
{
public boolean haySuficienteParaVender ( )
{
boolean suficiente;
if ( cantidadBodega > cantidadMinima)
{
suficiente = true;
}
else
{
suficiente = false;
}
return suficiente;
}
}
Calcula el número de productos en la Tienda que son de tipo PAPELERIA. El resultado del método es un valor entero entre 0 y 4
Condicionales
Class Producto
{
public boolean haySuficienteParaVender ( )
{
return ( cantidadBodega > cantidadMinima);
}
}
Condicionales
Class Producto
{
public double darPrecioFinalPapeleria ( boolean conIVA)
{
double precioFinal = valorUnitario;
if ( conIVA == true)
{
precioFinal = valorUnitario + (valorUnitario * IVA_PAPEL);
}
return precioFinal;
}
}Dar el precio final de un producto de papelería con o sin IVA dependiendo del parámetro que lo indica
Condicionales
Class Producto
{
public double darPrecioFinalPapeleria ( boolean conIVA)
{
double precioFinal = valorUnitario;
if ( conIVA )
{
precioFinal = valorUnitario + (valorUnitario * IVA_PAPEL);
}
return precioFinal;
}
}Dar el precio final de un producto de papelería con o sin IVA dependiendo del parámetro que lo indica
Condicionales
Qué condiciones usaríamos para
Condicionales
Una manera alternativa de expresar la solución de un problema para el cual existe un conjunto de casos
public double darIVA( )
{
double iva = 0.0;
switch( tipo )
{
case PAPELERIA:
{
iva = IVA_PAPELERIA;
break;
}
case SUPERMERCADO:
{
iva = IVA_SUPERMERCADO;
break;
}
case DROGUERIA:
{
iva = IVA_DROGUERIA;
break;
}
}
return iva;
}La expresión (de tipo entero, String o del tipo de una enumeración)
Valor de la constante que identifica el caso
Instrucciones del caso. Al final se debe colocar la instrucción break para indicar el fin del conjunto de instrucciones
Clase vs Objeto
Clase (Plantilla, Molde, Formato)
Objeto
Producto
:Producto
String nombre
int tipo
double valorUnitario
int cantidadBodega
int cantidadMinima
int totalProductosVendidos
nombre = “libreta”
tipo = PAPELERIA
valorUnitario = 5500
cantidadBodega = 44
cantidadMinima = 15
totalProductosVendidos = 6
Clase vs Objeto
Clase (Plantilla, Molde, Formato)
Objeto
Ejemplos:
linea1.darNumeroMinutos( )
linea2.agregarLlamadaLocal( )
p1.darCantidadMinima( )
p2.darProductosVendidos( )
Clase vs Objeto
:Producto
:Producto
:Producto
:Producto
:Tienda
dineroEnCaja=0
nombre="Jabon"
tipo= SUPERMERCADO
valorUnitario=4200
cantidadBodega = 14
cantidadMinima=5
totalProductosVendidos=13
nombre="aspirina"
tipo= DROGUERIA
valorUnitario=2400
cantidadBodega = 14
cantidadMinima=5
totalProductosVendidos=1
nombre="libreta"
tipo= PAPELERIA
valorUnitario=5500
cantidadBodega = 44
cantidadMinima=15
totalProductosVendidos=6
nombre="leche"
tipo= SUPERMERCADO
valorUnitario=2100
cantidadBodega = 25
cantidadMinima=10
totalProductosVendidos=20
Clase vs Objeto
public Tienda ( Producto a1, Producto a2, Producto a3, Producto a4)
{
p1 = a1;
p2 = a2;
p3 = a3;
p4 = a4;
dineroEnCaja = 0;
} Clase vs Objeto
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 );
// Crea la tienda con sus 4 productos
tienda = new Tienda( p1, p2, p3, p4 );
}Clase vs Objeto
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 );
// Crea la tienda con sus 4 productos
tienda = new Tienda( p1, p2, p3, p4 );
}Clase vs Objeto
Clase vs Objeto
Una clase es responsable de administrar la información que hay en sus atributos.
Una clase es responsable de ayudar a sus vecinos del modelo del mundo y colaborar con ellos en la solución de sus problemas.
Text