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

Operadores 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 los siguientes casos:

  • 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 si una letra es una 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