N2: definición de situaciones y manejo de casos
Nychol Bazurto Gómez

Nuevos elementos de modelado
Nivel
2
Expresiones
Clases y objetos
Instrucciones condicionales
Responsabilidades de una clase
Qué vamos a aprender
- Diferencia entre clase y objeto.
- Modelar características de un objeto usando:
- Nuevos tipos simples de datos.
- La técnica de definir constantes para representar los valores posibles de un atributo.
- Utilizar instrucciones condicionales simples y compuestas como parte del cuerpo de un método
- • Clasificar los métodos de una clase:
- Constructores – Modificadores – Analizadores
Algunas aclaraciones
- Suma: +
- Resta: -
- Multiplicación: *
- División: /
"Mi cadena es muy linda"Operadores para int y double
String siempre va entre comillas doble

Algunas aclaraciones
En caso de tener dos variables un ejemplo de concatenación sería:
Concatenar strings
EL RETURN JAMás va seguido de igual =
String sabor = "chocolate";
double gramosAzucar = 4.5;
String respuesta = "El helado de " + sabor + " tiene " + gramosAzucar + "gramos de azúcar.";después de la firma los métodos no llevan ;
Deben tener paréntesis que representen su inicio y fin
una variable o un atributo no lleva paréntesis.

NUEVOS TIPOS DE DATOS
- Puede ser una letra o un número (de un dígito).
- En Java se llama char
- Va entre comillas sencillas
- Ejemplo:
CARACTER SENCILLO


NUEVOS TIPOS DE DATOS
CONVERTIR UN STRING EN UN CHAR
- charAt( posicion)
- Ejemplo primera letra:
- Inicial = ‘N’
- Ejemplo letra intermedia:
- Letra en posición 3 = ‘h’
- Ejemplo última
letra : - Última : ‘l’
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 );NUEVOS TIPOS DE DATOS
CONVERTIR UN CHAR en un string
char letra = 'N';
String nombre = letra + "ychol";
NUEVOS TIPOS DE DATOS
BOOLEAN
- Expresa una condición lógica.
- O verdadero o falso (ningún otro posible valor)
- En Java se llama boolean y sólo puede ser true o false.
- NUNCA va entre comillas.
- Ejemplo:

NUEVOS TIPOS DE OPERADORES
- diasGuarderia ++;
- Remplaza a diasGuarderia = diasGuarderia +1;
Sumar uno: ++
- diasGuarderia --;
- Remplaza a diasGuarderia = diasGuarderia -1;
Restar uno : --
Sumar un numero N: Ejemplo con (N=20)
- diasGuarderia += 20;
- Remplaza a diasGuarderia = diasGuarderia +20;
Restar un numero N: Ejemplo con (N=20)
- diasGuarderia -= 20;
- Remplaza a diasGuarderia = diasGuarderia - 20;
NUEVOS TIPOS DE OPERADORES
%
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 |
Módulo
CONSTANTES
- Se declaran al principio de la clase que tiene el atributo con el que se relacionan.
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.)
- Pueden ser de cualquier tipo (int, double, String, char, boolean).
- Están relacionadas con algunos atributos (valores posibles de un String, mínimo o máximo de int o double).
- Sirven para declarar valores inmutables (ejemplo: tasa de impuestos).
CONSTANTES
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;CONSTANTES
Puedo usar las constantes desde otra clase. Por ejemplo desde la clase Tienda.
public void ejemplo( )
{
…
int tipoVenta = Producto.PAPELERIA;
int tipoCompra = Producto.SUPERMERCADO;
…
}ENUMS
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
ENUMS
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
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
EXPRESIONEs
OPERADORES
OPERANDOS
- Atributos
- Parámetros
- Valores (números
por ejemplo ) - Constantes
- Llamadas a métodos
Indican la manera de calcular el valor de la expresión
Dependen del tipo de los datos que los operandos

Expresiones
EXPRESIONEs
OPERADOR
OPERANDO
- Atributos
- Parámetros
- Valores (números
por ejemplo ) - Constantes
- Llamadas a métodos
- Atributos
- Parámetros
- Valores (números
por ejemplo ) - Constantes
- Llamadas a métodos
OPERANDO


Expresiones
EXPRESIONEs
OPERADOR
OPERANDO
- Atributos
- Parámetros
- Valores (números
por ejemplo ) - Constantes
- Llamadas a métodos
- Atributos
- Parámetros
- Valores (números
por ejemplo ) - Constantes
- Llamadas a métodos
OPERANDO
+
-
*
/
%

Expresiones
EXPRESIONEs
OPERADOR
OPERANDO
- Atributos
- Parámetros
- Valores (números
por ejemplo ) - Constantes
- Llamadas a métodos
- Atributos
- Parámetros
- Valores (números
por ejemplo ) - Constantes
- Llamadas a métodos
OPERANDO
+
-
*
/
%

NIVEL 1

Expresiones
OPERADORES RELACIONALES

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
OPERADORES 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
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
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 |

Operadores lógicos
USEMOS aLGUNOS OPERADORES...
| 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? |

PRACTIQUEMOS


PRACTIQUEMOS
| 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 |
Creación de Expresiones (operadores aritméticos)

| 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) |
Creación de Expresiones (operadores aritméticos)

| 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? |
Creación de Expresiones (operadores RELACIONALES)

| 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? |
Creación de Expresiones (operadores RELACIONALES)

| 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? |
Creación de Expresiones (operadores Lógicos)

| 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? |
Creación de Expresiones (operadores Lógicos)
Condicionales
CONDICIONALES

Condicionales
CONDICIONALES

- Cuando necesitamos dar una solución a un problema considerando distintos CASOS que se pueden presentar.
- Dependiendo del CASO (que se expresa con una CONDICION) se ejecuta una acción diferente.
Condicionales
INSTRUCCIón if - else

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
}If
evalua si una o más condiciones se cumplen
Condicionales
INSTRUCCIón if - else

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
INSTRUCCIón if - else

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
INSTRUCCIón if - else

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
INSTRUCCIón if - else

Class Producto
{
public boolean haySuficienteParaVender ( )
{
boolean suficiente = true;
if ( cantidadBodega > 0)
{
suficiente = true;
}
else
{
suficiente = false;
}
return suficiente;
}
}Condicionales
INSTRUCCIón if - else

Class Producto
{
public boolean haySuficienteParaVender ( )
{
boolean suficiente = true;
if ( cantidadBodega == 0)
{
suficiente = false;
}
return suficiente;
}
}
Condicionales
INSTRUCCIón if - else

Class Producto
{
public boolean haySuficienteParaVender ( )
{
boolean suficiente = false;
if ( cantidadBodega > 0)
{
suficiente = true;
}
return suficiente;
}
}
Condicionales
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
}Condicionales
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;
}
}Condicionales
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;
}Condicionales
Ejemplo – en la clase tienda

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
Ejemplo 2 – otra opcion

Class Producto
{
public boolean haySuficienteParaVender ( )
{
return ( cantidadBodega > cantidadMinima);
}
}
Condicionales
Ejemplo 3 en la clase Producto

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
Ejemplo 3 en la clase Producto

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

PRACTIQUEMOS
Qué condiciones usaríamos para
- Determinar si un número es par
o no . - Imprimir de menor a mayor tres números.
- Sólo
evaluar los caracteres N y L. -
Indicar siuna letra esuna vocal.
Condicionales

CONDICIONALES COMPUESTAS
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 VS OBJETO

Clase (Plantilla, Molde, Formato)
- Caso general.
- No dice cuál es el valor de un atributo.
- Solo afirma cuáles son los atributos que deben tener los objetos que pertenezcan a esa clase.
Objeto
- Pertenecen a una clase
- Cumplen con la estructura de atributos que exige la clase
- Tienen valores en sus atributos


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
En cuanto a los métodos …

Clase (Plantilla, Molde, Formato)
- Define los métodos
- Es decir, dice cómo deben reaccionar sus objetos cuando se invoque uno de sus métodos
Objeto
- Puede ejecutar los métodos de la clase a la cual pertenece
Ejemplos:
linea1.darNumeroMinutos( )
linea2.agregarLlamadaLocal( )
p1.darCantidadMinima( )
p2.darProductosVendidos( )
Clase vs Objeto
Diagrama de objetos

: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
QUIén instancia los productos

LA TIENDA
public Tienda ( Producto a1, Producto a2, Producto a3, Producto a4)
{
p1 = a1;
p2 = a2;
p3 = a3;
p4 = a4;
dineroEnCaja = 0;
} Clase vs Objeto
Quién crea los productos y la tienda?

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 );
// Crea la tienda con sus 4 productos
tienda = new Tienda( p1, p2, p3, p4 );
}Clase vs Objeto
Quién crea los productos y la tienda?

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 );
// Crea la tienda con sus 4 productos
tienda = new Tienda( p1, p2, p3, p4 );
}Clase vs Objeto
TIPOS de métodos

- Métodos constructores: tienen la responsabilidad de inicializar los valores de los atributos de un objeto durante su proceso de creación.
- Métodos modificadores: tienen la responsabilidad de cambiar el estado de los objetos de la clase. Son los responsables de "hacer".
- Métodos analizadores: tienen la responsabilidad de calcular información a partir del estado de los objetos de la clase. Son los responsables de "saber"
Clase vs Objeto
RESPONSABILIDADES

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.
¿PREGUNTAS?
¿PREGUNTAS?
Text
GRACIAS
- J. Villalobos and R. Casallas, Fundamentos de Programación. https://cupi2.virtual.uniandes.edu.co/libro-del-curso-pdf/libro-completo
- Iconos hechos por Freepik, Becris, Pause08 de Flaticon son licenciados por Creative Commons by 3.0
Nivel1
By nychi713
Nivel1
- 614