APO1 - Presentacion nivel 2

70
ALGORÍTMICA Y PROGRAMACIÓN 1 (APO 1) NIVEL 2 Mario José Villamizar Cano [email protected] Oficina ML-637 http://sistemas.uniandes.edu.co/~mj.villamizar24/dokuwiki/doku.php Grupo de Tecnologías de Información y Comunicación (COMIT) Departamento de Ingeniería de Sistemas y Computación Universidad de los Andes, Bogotá D.C., Colombia

description

Esta es la presentación del Nivel 2 del curso "ISIS-1204 Algorítmia y Programación por Objetos 1" (APO1) de la Universidad de los Andes, Bogotá, Colombia.

Transcript of APO1 - Presentacion nivel 2

Page 1: APO1 - Presentacion nivel 2

ALGORÍTMICA Y PROGRAMACIÓN 1 (APO 1)

NIVEL 2

Mario José Villamizar Cano

[email protected]

Oficina ML-637

http://sistemas.uniandes.edu.co/~mj.villamizar24/dokuwiki/doku.php

Grupo de Tecnologías de Información y Comunicación (COMIT)

Departamento de Ingeniería de Sistemas y Computación

Universidad de los Andes, Bogotá D.C., Colombia

Page 2: APO1 - Presentacion nivel 2

[email protected]

http://twitter.com/mariocloud

http://linkedin.com/in/mariojosevillamizarcano

REDES SOCIALES

NIVEL 2

Page 3: APO1 - Presentacion nivel 2

Entrega de los ejercicios a tiempo

Ejercicios entregados incorrectamente

Errores comunes

Todo método tiene llaves

Las llaves de un método comienzan después de su signatura

Al finalizar un método no hay punto y coma

Un método solo puede retornar un valor

Los atributos son private, los métodos son public

No es necesario crear variables para retornar

Hay que diferenciar mayúsculas de minúsculas

Los atributos no llevan paréntesis

Realizar todas las tareas de los niveles

RETROALIMENTACIÓN NIVEL 1

NIVEL 2

Page 4: APO1 - Presentacion nivel 2

NIVEL 2

Nuevos tipos simples de datos

Definición de constantes

Uso de expresiones

Instrucciones condicionales simples y compuestas

Identificar de manera informal los métodos de una clase

NIVEL 2 - DEFINICIÓN DE SITUACIONES Y MANEJO DE CASOS

Page 5: APO1 - Presentacion nivel 2

CASOS DE ESTUDIO

1 Caso de estudio: La tienda

NIVEL 2

Page 6: APO1 - Presentacion nivel 2

HOJAS DE TRABAJO

2 Hojas de trabajo: Juego de Triqui y Un estudiante

NIVEL 2

Page 7: APO1 - Presentacion nivel 2

CASOS DE ESTUDIO - LA TIENDA

NIVEL 2

Page 8: APO1 - Presentacion nivel 2

CASOS DE ESTUDIO - LA TIENDA

NIVEL 2

Page 9: APO1 - Presentacion nivel 2

CASOS DE ESTUDIO - LA TIENDA DE LIBROS

R1 – Vender un producto

R2 – Hacer pedido de un producto

R3 – Calcular estadísticas de ventas

(a) el producto más vendido

(b) el producto menos vendido

(c) la cantidad total de dinero obtenido por las ventas de la tienda

(d) el promedio de ventas de la tienda

NIVEL 2

Page 10: APO1 - Presentacion nivel 2

MANEJO DE VARIABLES

Sirven para manejar cálculos parciales en el interior de un método.

Se les debe definir un nombre y un tipo antes de que puedan ser

utilizadas.

Se destruyen al finalizar el método.

public double darValorUnitarioConIva( )

{

double valorConIva = valorUnitario * ( 1 + 0.16);

return valorConIva;

}

NIVEL 2

Page 11: APO1 - Presentacion nivel 2

NUEVOS ELEMENTOS DE MODELADO – TIPOS SIMPLES DE DATOS

¿Por qué nuevas maneras de modelar una característica?

double

Para modelar características que toman valores reales.

Se denomina literal de un tipo de datos a un valor constante de dicho

tipo.

Declaración de un atributo tipo double

private double valorUnitario;

NIVEL 2

Page 12: APO1 - Presentacion nivel 2

NUEVOS ELEMENTOS DE MODELADO – TIPOS SIMPLES DE DATOS

Instrucciones y operaciones con atributos tipo double e int

Asignación de un literal a un atributo

valor Unitario = 26.12;

int valorRedondeado = (int) valorUnitario;

valorUnitario = valorUnitario / 1.07;

int valorPesos = 17 / 3;

NIVEL 2

Page 13: APO1 - Presentacion nivel 2

NUEVOS ELEMENTOS DE MODELADO – TIPOS SIMPLES DE DATOS

El operador módulo (%): residuo entre dos números

4 % 4 = 0

25 % 6 = 1

17 % 15 = 2

4.5 % 2.2 = 0.1

boolean: para representar valores lógicos (true o false)

private boolean subsidiado;

subsidiado = true;

subsidiado = false;

boolean valorLogico = subsidiado;

NIVEL 2

Page 14: APO1 - Presentacion nivel 2

NUEVOS ELEMENTOS DE MODELADO – TIPOS SIMPLES DE DATOS

char: para representar un caracter

private char calidad;

calidad = 'A';

calidad = 'B';

calidad = 67;

char valorCaracter = calidad;

NIVEL 2

Page 15: APO1 - Presentacion nivel 2

TAREAS

Leer hasta la página 98.

Desarrollar todas las tareas 1, 2, 3 y 4.

Comprender el enunciado del ejercicio del nivel 2.

NIVEL 2

Page 16: APO1 - Presentacion nivel 2

PREGUNTAS

NIVEL 2

Page 17: APO1 - Presentacion nivel 2

NUEVOS ELEMENTOS DE MODELADO – TIPOS SIMPLES DE DATOS

Constantes para definir el dominio de un atributo

Declaración de constantes

//Constantes

public final static int PAPELERIA = 1;

public final static int SUPERMERCADO = 2;

public final static int DROGUERIA = 3;

//Atributos

private int tipo;

NIVEL 2

Page 18: APO1 - Presentacion nivel 2

NUEVOS ELEMENTOS DE MODELADO – TIPOS SIMPLES DE DATOS

Constantes para definir el dominio de un atributo

Operaciones dentro de un método de la clase Producto

tipo = PAPELERIA;

tipo = SUPERMERCADO;

tipo = DROGUERIA;

Operaciones dentro de un método de la clase Tienda

int tipoProductoVendido = Producto.PAPELERIA;

int tipoProductoComprado = Producto.SUPERMERCADO;

NIVEL 2

Page 19: APO1 - Presentacion nivel 2

NUEVOS ELEMENTOS DE MODELADO – TIPOS SIMPLES DE DATOS

Constantes para representar valores inmutables

Declaración de constantes

//Constantes

public final static double IVA_PAPEL = 0.16;

public final static double IVA_FARMACIA = 0.12;

public final static double IVA_MERCADO = 0.04;

NIVEL 2

Page 20: APO1 - Presentacion nivel 2

NUEVOS ELEMENTOS DE MODELADO – TIPOS SIMPLES DE DATOS

Constantes para representar valores inmutables

Operaciones dentro de un método de la clase Producto

precio = valorUnitario * (1 + IVA_MERCADO);

precio = valorUnitario * (1 + 0.04);

Operaciones dentro de un método de la clase Tienda

valorConIva = p1.darValorUnitario( ) * (1 + Producto.IVA_MERCADO);

valorConIva = p1.darValorUnitario( ) * (1 + 0.04);

NIVEL 2

Page 21: APO1 - Presentacion nivel 2

EXPRESIONES

Una expresión es la manera en que expresamos en un lenguaje de

programación algo sobre el estado de un objeto.

Las expresiones aparecen dentro del cuerpo de los métodos y está

formadas por operandos y operadores.

Operandos = atributos, parámetros, literales, constantes, variables o

llamadas a métodos.

Los operadores que se pueden usar en una expresión dependen del

tipo de los datos de los operandos de la expresión.

Operadores = aritméticos, relacionales, lógicos, sobre cadenas de

caracteres, de asignación.

NIVEL 2

Page 22: APO1 - Presentacion nivel 2

OPERADORES ARITMÉTICOS

+ (suma)

- (resta)

* (multiplicación)

/ (división)

% (modulo)

( ) (paréntesis)

Nota: Es importante colocar paréntesis para evitar ambigüedad en las

expresiones.

Orden de evaluación

Primero se aplican los paréntesis.

Luego 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.

NIVEL 2

Page 23: APO1 - Presentacion nivel 2

OPERADORES DE ASIGNACIÓN

Manera más corta de describir las asignaciones

Operador ++

Se aplica a un atributo de tipo entero para incrementarlo en 1.

public void adicionarUnidadEnBodega( )

{

cantidadBodega++;

}

public void adicionarUnidadEnBodega( )

{

cantidadBodega = cantidadBodega + 1;

}

NIVEL 2

Page 24: APO1 - Presentacion nivel 2

OPERADORES DE ASIGNACIÓN

Operador --

Se aplica a un atributo de tipo entero para disminuirlo en 1.

public void disminuirUnidadEnBodega( )

{

cantidadBodega--;

}

public void disminuirUnidadEnBodega( )

{

cantidadBodega = cantidadBodega - 1;

}

NIVEL 2

Page 25: APO1 - Presentacion nivel 2

OPERADORES DE ASIGNACIÓN

Operador +=

Se utiliza para incrementar un atributo en cualquier valor.

public void pedir ( int cantidadPedida)

{

cantidadBodega += cantidadPedida;

}

public void pedir ( int cantidadPedida)

{

cantidadBodega = cantidadBodega + cantidadPedida;

}

NIVEL 2

Page 26: APO1 - Presentacion nivel 2

OPERADORES DE ASIGNACIÓN

Operador -=

Se utiliza para disminuir un atributo en cualquier valor.

public void vender ( int cantidadVendida)

{

cantidadBodega -= cantidadVendida;

}

public void vender ( int cantidadVendida)

{

cantidadBodega = cantidadBodega - cantidadVendida;

}

NIVEL 2

Page 27: APO1 - Presentacion nivel 2

OPERADORES SOBRE CADENAS DE CARACTERES

Operador + para concatenar cadenas de caracteres.

public String operadorMasEjemplo1( )

{

String nombres = “Carlos Felipe”;

String apellidos = “Giraldo Parra”;

String nombreCompleto = nombres + apellidos;

return nombreCompleto;

}

NIVEL 2

nombreCompleto = “Carlos FelipeGiraldo Parra”

Page 28: APO1 - Presentacion nivel 2

OPERADORES SOBRE CADENAS DE CARACTERES

Operador + para concatenar cadenas de caracteres.

public String operadorMasEjemplo2( )

{

String nombres = “Carlos Felipe”;

String apellidos = “Giraldo Parra”;

String nombreCompleto = nombres + “ ” + apellidos;

return nombreCompleto;

}

NIVEL 2

nombreCompleto = “Carlos Felipe Giraldo Parra”

Page 29: APO1 - Presentacion nivel 2

OPERADORES SOBRE CADENAS DE CARACTERES

Operador + para concatenar cadenas de caracteres.

public String operadorMasEjemplo3( )

{

String nombres = “Carlos Felipe”;

String apellidos = “Giraldo Parra”;

int creditosAprobados = 140;

double promedio = 4.63;

String informacionCompleta = “Nombres: ”+ nombres +

“ Apellidos: ” + apellidos + “C. Aprobados: ” +

creditosAprobados + “Promedio: ” + promedio;

return informacionCompleta;

}

NIVEL 2

informacionCompleta = “Nombres: Carlos Felipe Apellidos: Giraldo

Parra C. Aprobados: 140 Promedio: 4.63”;

Page 30: APO1 - Presentacion nivel 2

OPERADORES SOBRE CADENAS DE CARACTERES

Método charAt de la clase String para acceder a un carácter dentro

de una cadena de caracteres.

public char darInicialDelNombre( )

{

String nombres = “Carlos Felipe”;

char inicial = nombres.charAt (0);

return inicial;

}

NIVEL 2

inicial = „C‟;

Page 31: APO1 - Presentacion nivel 2

OPERADORES SOBRE CADENAS DE CARACTERES

Método charAt de la clase String para acceder a un carácter dentro

de una cadena de caracteres.

public char darSegundaLetraDelNombre( )

{

String nombres = “Carlos Felipe”;

char inicial = nombres.charAt (1);

return inicial;

}

NIVEL 2

inicial = „a‟

Page 32: APO1 - Presentacion nivel 2

OPERADORES SOBRE CADENAS DE CARACTERES

Método equals de la clase String para comparar cadenas de

caracteres.

public boolean ejemplo1Equals( )

{

String producto1 = “Lapiz”;

String producto2 = “Lapiz”;

boolean resultadoComparacion = producto1.equals(producto2);

return resultadoComparacion;

}

NIVEL 2

resultadoComparacion = true

Page 33: APO1 - Presentacion nivel 2

OPERADORES SOBRE CADENAS DE CARACTERES

Método equals de la clase String para comparar cadenas de

caracteres.

public boolean ejemplo2Equals( )

{

String producto1 = “Lapiz”;

String producto2 = “Lapiz”;

boolean resultadoComparacion = producto2.equals(producto1);

return resultadoComparacion;

}

NIVEL 2

resultadoComparacion = true

Page 34: APO1 - Presentacion nivel 2

OPERADORES SOBRE CADENAS DE CARACTERES

Método equals de la clase String para comparar cadenas de

caracteres.

public boolean ejemplo3Equals( )

{

String producto1 = “Lapiz”;

String producto2 = “Lapiz ”;

boolean resultadoComparacion = producto2.equals(producto1);

return resultadoComparacion;

}

NIVEL 2

resultadoComparacion = false

Page 35: APO1 - Presentacion nivel 2

OPERADORES SOBRE CADENAS DE CARACTERES

Método equals de la clase String para comparar cadenas de

caracteres.

public boolean ejemplo4Equals( )

{

String producto1 = “Lapiz”;

String producto2 = “Aspirina”;

boolean resultadoComparacion = producto2.equals(producto1);

return resultadoComparacion;

}

NIVEL 2

resultadoComparacion = false

Page 36: APO1 - Presentacion nivel 2

OPERADORES SOBRE CADENAS DE CARACTERES

Método equalsIgnoreCase de la clase String para comparar cadenas

de caracteres sin tener en cuenta las mayúsculas y las minúsculas.

public boolean ejemplo1EqualsIgnoreCase( )

{

String producto1 = “Lapiz”;

String producto2 = “LAPIZ”;

boolean resultado = producto2.equalsIgnoreCase(producto1);

return resultado;

}

NIVEL 2

resultado = true

Page 37: APO1 - Presentacion nivel 2

OPERADORES SOBRE CADENAS DE CARACTERES

Método equalsIgnoreCase de la clase String para comparar cadenas

de caracteres sin tener en cuenta las mayúsculas y las minúsculas.

public boolean ejemplo2EqualsIgnoreCase( )

{

String producto1 = “Lápiz”;

String producto2 = “LAPIZ”;

boolean resultado = producto2.equalsIgnoreCase(producto1);

return resultado;

}

NIVEL 2

resultado = false

Page 38: APO1 - Presentacion nivel 2

OPERADORES SOBRE CADENAS DE CARACTERES

Método equalsIgnoreCase de la clase String para comparar cadenas

de caracteres sin tener en cuenta las mayúsculas y las minúsculas.

public boolean ejemplo3EqualsIgnoreCase( )

{

String producto1 = “Lápiz”;

String producto2 = “Aspirina”;

boolean resultado = producto2.equalsIgnoreCase(producto1);

return resultado;

}

NIVEL 2

resultado = false

Page 39: APO1 - Presentacion nivel 2

CLASES Y OBJETOS

NIVEL 2

En el diagrama de objetos se habla de un escenario particular.

Cada Tienda puede tener sus propios productos.

p1

p2 p4

p3

dineroEnCaja = 0

:Tienda

nombre = “libreta”

tipo = PAPELERIA

valorUnitario = 5500

cantidadBodega = 44

cantidadMinima = 15

totalProductosVendidos = 6

:Producto

nombre = “leche”

tipo = SUPERMERCADO

valorUnitario = 2100

cantidadBodega = 25

cantidadMinima = 10

totalProductosVendidos = 25

:Producto nombre = “aspirina”

tipo = DROGUERIA

valorUnitario = 2400

cantidadBodega = 13

cantidadMinima = 11

totalProductosVendidos = 7

:Producto

nombre = “jabón”

tipo = SUPERMERCADO

valorUnitario = 4200

cantidadBodega = 36

cantidadMinima = 8

totalProductosVendidos = 14

:Producto

Page 40: APO1 - Presentacion nivel 2

CLASES Y OBJETOS

NIVEL 2

Para inicializar los valores de un objeto, las clases permiten la

definición de métodos constructores.

public Producto()

{

tipo = 0;

nombre = "";

valorUnitario = 0.0;

cantidadBodega = 0;

cantidadMinima = 0;

totalProductosVendidos = 0;

}

El método constructor debe tener el mismo nombre de la clase.

El método constructor NO debe retornar ningún tipo de dato.

Page 41: APO1 - Presentacion nivel 2

CLASES Y OBJETOS

NIVEL 2

Para crear un objeto de una clases se utiliza la instrucción new

El método constructor es llamado automáticamente cada vez que se

crea un objeto.

El objeto creado puede ser referenciado desde una variable o desde

un atributo.

Ejemplo de cómo crear un objeto de la clase Producto.

Producto p = new Producto( );

nombre = "" tipo = 0

valorUnitario = 0.0

cantidadBodega = 0

cantidadMinima = 0

totalProductosVendidos = 0

:Producto

p

Page 42: APO1 - Presentacion nivel 2

CLASES Y OBJETOS

NIVEL 2

Una clase puede tener varios métodos constructores que se

diferencian por los parámetros recibidos.

public Producto( int tipoP, String nombreP, double valorUnitarioP,

int cantidadBodegaP, int cantidadMinimaP )

{

tipo = tipoP;

nombre = nombreP;

valorUnitario = valorUnitarioP;

cantidadBodega = cantidadBodegaP;

cantidadMinima = cantidadMinimaP;

totalProductosVendidos = 0;

}

En este caso al momento de crear un objeto de la clase, se pueden

definir los valores iniciales que van a tener los atributos del objeto.

Page 43: APO1 - Presentacion nivel 2

CLASES Y OBJETOS

NIVEL 2

Ejemplo de cómo crear un objeto cuando el constructor recibe

parámetros.

Producto p = new Producto( Producto.PAPELERIA, "lápiz", 550.0, 8, 5 );

En este caso, al momento de crear un objeto de la clase, se deben

definir los valores iniciales que van a tener los atributos del objeto.

nombre = "lápiz" tipo = PAPELERIA

valorUnitario = 550.0

cantidadBodega = 8

cantidadMinima = 5

totalProductosVendidos = 0

:Producto

p

Page 44: APO1 - Presentacion nivel 2

CLASES Y OBJETOS

NIVEL 2

Constructor de la clase Tienda

public Tienda( Producto p1P, Producto p2P, Producto p3P, Producto p4P )

{

p1 = p1P;

p2 = p2P;

p3 = p3P;

p4 = p4P;

dineroEnCaja = 0;

}

Creación de una 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 );

Tienda tienda = new Tienda( p1, p2, p3, p4 );

Page 45: APO1 - Presentacion nivel 2

TAREAS

Leer hasta la página 123.

Desarrollar las tareas 5, 6, y 7.

Desarrollar el ejercicio del nivel 2.

NIVEL 2

Page 46: APO1 - Presentacion nivel 2

PREGUNTAS

NIVEL 2

Page 47: APO1 - Presentacion nivel 2

OPERADORES RELACIONALES

Permiten determinar un valor de verdad (falso o verdadero) para una

situación del mundo. Son seis:

Es igual que: ==

Es diferente de: !=

Es menor que: <

Es mayor que: >

Es menor o igual que: <=

Es mayor o igual que: >=

NIVEL 2

Page 48: APO1 - Presentacion nivel 2

OPERADORES LÓGICOS

Sirven para construir expresiones más complejas a partir de

expresiones relacionales o de atributos de tipo boolean.

&& (y)

|| (o)

! (no)

NIVEL 2

Page 49: APO1 - Presentacion nivel 2

TAREA 2

NIVEL 2

p1

p2 p4

p3

dineroEnCaja = 0

:Tienda

nombre = “libreta”

tipo = PAPELERIA

valorUnitario = 5500

cantidadBodega = 44

cantidadMinima = 15

totalProductosVendidos = 6

:Producto

nombre = “leche”

tipo = SUPERMERCADO

valorUnitario = 2100

cantidadBodega = 25

cantidadMinima = 10

totalProductosVendidos = 25

:Producto nombre = “aspirina”

tipo = DROGUERIA

valorUnitario = 2400

cantidadBodega = 13

cantidadMinima = 11

totalProductosVendidos = 7

:Producto

nombre = “jabón”

tipo = SUPERMERCADO

valorUnitario = 4200

cantidadBodega = 36

cantidadMinima = 8

totalProductosVendidos = 14

:Producto

Page 50: APO1 - Presentacion nivel 2

INSTRUCCIONES CONDICIONALES

Una instrucción condicional nos permite plantear la solución a un

problema considerando los diferentes casos que se pueden presentar.

Hay que identificar todos los posibles casos.

Se deben utilizar un algoritmo para la solución de cada caso.

NIVEL 2

Problema

Caso 1 Caso 2

Algoritmo 1 Algoritmo 2

Caso n

Algoritmo n

Page 51: APO1 - Presentacion nivel 2

INSTRUCCIONES CONDICIONALES SIMPLES

Utilizadas para solucionar problemas con dos casos.

En Java se utiliza la instrucción if else para expresar los posibles

casos dentro de un método.

La instrucción if else tiene tres elementos.

Un condición que corresponde una expresión lógica capaz de distinguir

los dos posibles casos.

La solución para el primer caso.

La solución para el segundo caso.

NIVEL 2

Page 52: APO1 - Presentacion nivel 2

INSTRUCCIONES CONDICIONALES SIMPLES

La estructura de la instrucción if else es la siguiente.

if( condición )

{

//Algoritmo caso 1, cuando la condición es verdadera

}

else

{

//Algoritmo caso 2, cuando la condición es falsa

}

A partir de la condición se decide cual de los dos algoritmos ejecutar,

NUNCA se ejecutan los dos algoritmos.

NIVEL 2

Page 53: APO1 - Presentacion nivel 2

INSTRUCCIONES CONDICIONALES SIMPLES

Definir un método para vender una determinada cantidad de un

producto teniendo en cuenta que solo se puede vender la cantidad que

hay en la bodega.

public void vender( int cantidad )

{

if( cantidad > cantidadBodega )

{

totalProductosVendidos += cantidadBodega;

cantidadBodega = 0;

}

else

{

totalProductosVendidos += cantidad;

cantidadBodega -= cantidad;

}

}

NIVEL 2

Page 54: APO1 - Presentacion nivel 2

INSTRUCCIONES CONDICIONALES SIMPLES

Definir un método para vender una determinada cantidad de un

producto teniendo en cuenta que solo se puede vender la cantidad que

hay en la bodega.

public void vender( int cantidad )

{

if( cantidad <= cantidadBodega )

{

totalProductosVendidos += cantidad;

cantidadBodega -= cantidad;

}

else

{

totalProductosVendidos += cantidadBodega;

cantidadBodega = 0;

}

}

NIVEL 2

Page 55: APO1 - Presentacion nivel 2

INSTRUCCIONES CONDICIONALES SIMPLES

Si el algoritmo que resuelve uno de los casos sólo tiene una

instrucción, es posible eliminar los corchetes.

public boolean hayQueHacerPedido( )

{

if(cantidadBodega < cantidadMinima )

{

return true;

}

else

{

return false;

}

}

NIVEL 2

Page 56: APO1 - Presentacion nivel 2

INSTRUCCIONES CONDICIONALES SIMPLES

Si el algoritmo que resuelve uno de los casos sólo tiene una

instrucción, es posible eliminar los corchetes.

public boolean hayQueHacerPedido( )

{

if(cantidadBodega < cantidadMinima )

return true;

else

return false;

}

NIVEL 2

Page 57: APO1 - Presentacion nivel 2

CONDICIONALES EN CASCADA

Cuando el problema tiene más de dos casos, es necesario utilizar

una cascada (secuencia) de instrucciones if-else. En cada condición de

debe indicar la situación que se quiere considerar.

if( condición_1 )

{

//Algoritmo caso 1, cuando la condición 1 es verdadera

}

else if ( condición_2 )

{

//Algoritmo caso 2, cuando la condición 2 es verdadera

}

else

{

//Algoritmo caso 3, cuando la condición 2 es falsa

}

NIVEL 2

Page 58: APO1 - Presentacion nivel 2

CONDICIONALES EN CASCADA

Ejemplo definir un método en la clase Producto que retorne el IVA del

producto.

public double darIVA( )

{

if( tipo == PAPELERIA )

{

return IVA_PAPEL;

}

else if ( tipo == SUPERMERCADO)

{

return IVA_MERCADO;

}

else

{

return IVA_FARMACIA;

}

}

NIVEL 2

Page 59: APO1 - Presentacion nivel 2

INSTRUCCIONES CONDICIONALES COMPUESTAS

La instrucción condicional compuesta (switch) se utiliza cuando se

tiene un conjunto de casos con la particularidad de que cada caso debe

estar identificado por un valor entero.

Se utiliza un expresión entera entre paréntesis que sirve para

identificar el caso que se está presentando.

Cada caso se identifica con la instrucción case seguido del número

entero que identifica a cada caso.

Luego se implementan las instrucciones del caso y al finalizar las

instrucciones de cada caso se utiliza la instrucción break.

La instrucción switch se utiliza por eficiencia y claridad en el

programa. SÓLO se puede utilizar cuando los casos están identificados

por un valor entero.

NIVEL 2

Page 60: APO1 - Presentacion nivel 2

INSTRUCCIONES CONDICIONALES COMPUESTAS

Estructura de la instrucción switch

switch( Expresión )

{

case contante_caso_1:

instrucciones_caso_1;

break;

case contante_caso_2:

instrucciones_caso_2;

break;

case contante_caso_n:

instrucciones_caso_n;

break;

}

NIVEL 2

Page 61: APO1 - Presentacion nivel 2

INSTRUCCIONES CONDICIONALES COMPUESTAS

Ejemplo: Definir un método en la clase Producto que retorne el IVA

del producto.

NIVEL 2

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;

}

public double darIVA( )

{

switch( tipo )

{

case PAPELERIA:

return IVA_PAPEL;

case SUPERMERCADO:

return IVA_MERCADO;

case DROGUERIA:

return IVA_FARMACIA;

default:

return 0.0;

}

}

Page 62: APO1 - Presentacion nivel 2

PREGUNTAS

NIVEL 2

Page 63: APO1 - Presentacion nivel 2

MANEJO DE ASOCIACIONES OPCIONALES

La cardinalidad se define como el número de instancias de una clase

que pueden manejarse por medio de una asociación.

En este caso en el modelo de clases se indica que cada asociación

(p1, p2, p3 y p4) TIENE una instancia de la clase Producto.

NIVEL 2

Producto Tienda p1

1

p2

1

p3

1

p4

1

Cardinalidad = 1

Page 64: APO1 - Presentacion nivel 2

MANEJO DE ASOCIACIONES OPCIONALES

En este caso en el modelo de clases se indica que cada asociación

(p1, p2, p3 y p4) PUEDE TENER O NO una instancia de la clase

Producto.

Esto se denominan asociaciones opcionales.

NIVEL 2

Producto Tienda p1

0..1

p2

0..1

p3

0..1

p4

0..1

Cardinalidad = 0..1

Page 65: APO1 - Presentacion nivel 2

NIVEL 2

MANEJO DE ASOCIACIONES OPCIONALES

Para indicar que el objeto correspondiente a una asociación no está

presente se utiliza el valor especial null.

p1

p4

dineroEnCaja = 0 p2 = null p3 = null

:Tienda

nombre = “libreta”

tipo = PAPELERIA

valorUnitario = 5500

cantidadBodega = 44

cantidadMinima = 15

totalProductosVendidos = 6

:Producto

nombre = “leche”

tipo = SUPERMERCADO

valorUnitario = 2100

cantidadBodega = 25

cantidadMinima = 10

totalProductosVendidos = 25

:Producto

Page 66: APO1 - Presentacion nivel 2

CLASES Y OBJETOS

NIVEL 2

En el diagrama de clases no se habla de un escenario particular.

Nunca se dice el valor de un atributo.

Producto

String nombre

int tipo

double valorUnitario

int cantidadBodega

int cantidadMinima

int totalProductosVendidos

p1

1

p2

1

p3

1

p4

1

Tienda

double dineroEnCaja

Page 67: APO1 - Presentacion nivel 2

RESPONSABILIDADES DE UNA CLASE – TIPOS DE MÉTODO

Los métodos de un clases se clasifican en tres tipos:

Métodos constructores: tienen la responsabilidad de inicializar los

valores de los atributos de un objeto.

Métodos modificadores: tienen la responsabilidad de cambiar el

estado de un objeto (Métodos responsables del hacer).

Métodos analizadores: tienen la responsabilidad de calcular

información a partir del estado de los objetos de una clases (Métodos

responsables del saber).

NIVEL 2

Page 68: APO1 - Presentacion nivel 2

RESPONSABILIDADES DE UNA CLASE – TIPOS DE MÉTODO

¿Cómo identificar las responsabilidades de una clase?

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.

Las dos estrategias se basan en el diseño por tipo de métodos.

Constructores

Modificadores

Analizadores

NIVEL 2

Page 69: APO1 - Presentacion nivel 2

RECOMENDACIONES SOBRE EL EJERCICIO

Diligenciar los requerimientos funcionales.

Documentar los atributos o métodos que se requieran.

Revisar todos los TODO.

No borrar los TODO.

NOTA: Realizar todos los ejercicios definidos para el caso de estudio

de la Tienda (en total son 39 ejercicios con condicionales).

NIVEL 2

Page 70: APO1 - Presentacion nivel 2

PREGUNTAS

NIVEL 2