Defina una clase TempMinMaxEst que encapsule la representación de las temperaturas mínimas y máximas registradas en una estación meteorológica y brinde.

Slides:



Advertisements
Presentaciones similares
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE
Advertisements

Complejidad Computacional
Estructura de Datos Unidad 4. Recursividad Dra. María Lucía Barrón Estrada Enero-Junio 2007.
Entrada y salida Fundamentos de programación/Programación I
MATLAB.
Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar las variables.
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Defina una clase TempMinEstacion que encapsule la representación de las temperaturas mínimas registradas en una estación meteorológica en un período y.
Abstracciones y Modelos
Reusabilidad La productividad está basada en reusabilidad y extensibilidad El reusabilidad permite desarrollar nuevas aplicaciones a partir de componentes.
El proceso de desarrollo de software
Lección 1 Introducción a la POO
Oracle y Java Continuación *
1 Entrada/Salida en Java Jaime Ramírez, Ángel Lucas González DLSIIS. Facultad de Informática Universidad Politécnica de Madrid.
Tema 1. Introducción a la programación (Lenguaje java).
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
/*Desarrollar una solución que permita ingresar y almacenar el promedio de prácticas, la nota del examen parcial y la nota del examen final de todos.
Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.
Archivos Contenido: Archivos de Texto Archivos de Acceso Aleatorio
Método en Java.
Recursión Se dice que un método es recursivo si forma parte de sí mismo o se define en función de sí mismo. La recursión es un medio particularmente poderoso.
Lenguajes de Programación Tema 4. Paradigma Orientado a Objetos Java 1.5 Pedro García López
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Introducción a la Programación Orientada a Objetos Redefinición y Sobrecarga Dada la siguiente jerarquía de clases: Alfa Delta Beta.
Java. Objeto Es la instancia de una clase. Cada objeto se crea utilizando la palabra reservada new. Un objeto es conocido como una instancia. Ejemplo.
Realizado por: Bertha Palomeque A. Rodrigo Barzola J. Sensor de Temperatura utilizando el Starter Kit Javelin Stamp.
Estructuras de Datos y Algoritmos TDA LISTA. Metáfora del TDA (repaso) Conjunto de operaciones forman una pared forman una interfase entre los programas.
0. Desarrollo de Programas: técnica del refinamiento.
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
El patrón de diseño Proxy Raúl Heras Alberto Blasco José Manuel Arévalo.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Creación de Aplicaciones
Public class MiClase { public static int tmp = 123; // miembro variable public static final double PI = ;// miembro constante public float.
USA agenda e itemAgenda
Clase Teórica No. 4 Programación IV
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
JAVA J.A.C..
Estructuras de control Introducción a la programación.
3.  Recursividad.
Patrones Creacionales
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
METODOLOGÍA DE LA PROGRAMACIÓN
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo.
Introducción a la Programación Orientada a Objetos Arreglos de 2 dimensiones TDA Matriz Implementar un TDA Matriz que brinde operaciones para calcular.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Asociación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2015 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
IPOO 2 cuatrimestre 2018 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
IPOO 2 cuatrimestre Departamento de Ciencias e Ingeniería
Transcripción de la presentación:

Defina una clase TempMinMaxEst que encapsule la representación de las temperaturas mínimas y máximas registradas en una estación meteorológica y brinde operaciones para: Contar en cuántos días heló Contar en cuántos días heló todo el día Retornar el mayor promedio (entre temperaturas mínima y máxima) registrado Decidir si algún día la amplitud térmica (diferencia entre la temperatura máxima y la mínima) fue de más de g grados. Decidir si entre dos días consecutivos, la diferencias entre las temperaturas máximas o la diferencia entre las temperaturas mínimas, fue mayor que g. Decidir si entre dos días consecutivos, la diferencia entre las amplitudes térmicas fue mayor que un cierto valor g. Establecer casos de prueba Encapsulamiento

TempMinMaxEst float [] min float [] max > TempMinMaxEst (cant : entero) > establecerTempMin (d : entero t : real) establecerTempMax (d : entero t : real) Crea dos estructuras para mantener las temperaturas de cierta cantidad de d í as y las inicializa en 0 Se asume que la clase Cliente controla que la temperatura m á xima es mayor o igual a la M í nima. Encapsulamiento

> obtenerTempMin(d : entero):real obtenerTempMax(d : entero):real cantDias () : entero mayorPromedio () : real diasHelo () : entero heloTodo(): entero amplitudMayor(g:real) : boolean minmaxSigMayor (g:real):boolean amplitudSigMayor(g:real):boolean TempMinMaxEst float [] min float [] max Encapsulamiento

Características de la clase La entrada y salida se realiza desde la clase cliente. El chequeo de consistencia lo hace la clase que lee datos (temperatura máxima mayor o igual a mínima). El primer día corresponde al subíndice 0. La estructura está completa y la cantidad de elementos se define en el momento de la creación Todos los elementos ya están ingresados cuando empieza el procesamiento Encapsulamiento

class TempMinMaxEst { private float [] max; private float [] min; //Constructor // Crea una estructura para mantener las temperaturas // de cierta cantidad de días y las inicializa en 0 public TempMinMaxEst(int cant) { max= new float[cant]; min = new float[cant]; inicializa(cant); }... } Encapsulamiento

class TempMinMaxEst { private float [] max; private float [] min; //Comandos y Consultas triviales // Asume que la clase Cliente controla max > min public void establecerTempMin (int d,float m){ min[d] = m; } public void establecerTempMax (int d,float m){ max[d] = m; } public float obtenerTempMin (int d){ return min[d]; } public float obtenerTempMax (int d){ return max[d]; } }... } Encapsulamiento

class TempMinMaxEst { private float [] max; private float [] min;... // Consultas public int cantHeladas(){ //… int cant=0; for (int i=0;i<min.length;i++) if (min[i]<0) cant++; return cant; } … } Recorrido Exhaustivo Encapsulamiento

class TempMinMaxEst { private float [] max; private float [] min;... // Consultas public float mayorPromedio(){ //… float mayor = (min[0]+max[0])/2; for (int i=1;i<min.length;i++) if ((max[i]+min[i])/2 > mayor) mayor = (max[i]+min[i])/2; return mayor; } } … } Encapsulamiento

class TempMinMaxEst { private float [] max; private float [] min;... // Consultas public boolean amplitudMayor(float g){ //… boolean encontre=false; int i=0; while ((i<min.length) && (!encontre)) if ((max[i]-min[i])>g) encontre=true; else i++; return encontre; } … } Encapsulamiento

class TempMinMaxEst { private float [] max; private float [] min;... // Consultas public boolean minmaxSigMayor(float g){ //… boolean encontre=false; int i=0; while ((i<min.length-1) && (!encontre)) if (Math.abs(max[i]-max[i+1])>g) || Math.abs(min[i]-min[i+1])>g)) encontre=true; else i++; return encontre; } …} Encapsulamiento

class TempMinMaxEst { private float [] max; private float [] min;... // Consultas public boolean amplitudSigMayor(float g){ //… boolean encontre=false; int i=0; while ((i<min.length-1) && (!encontre)) if (Math.abs(max[i]-max[i+1])>g) || Math.abs(min[i]-min[i+1])>g)) encontre=true; else i++; return encontre; }…} Encapsulamiento

Diseñe e implemente una clase tester que brinde un servicio para leer las temperaturas y para probar la funcionalidad de la clase TempMinMaxEst Encapsulamiento

class TestTempMinMaxEst { static TempMinMaxEst est; public static void main(String[] args) { int cantD =0; cantD = leerCantDias () ; est=new TempMinMaxEst(cant); leerTempEst(cantD) ; System.out.println("Muestra la estación "); mostrarTempEst(cantD) ; System.out.println(El mayor promedio es + est.mayorPromedio() ); } Encapsulamiento

class TestTempMinEstacion { … public static int leerCantDias() { int cant; do{ System.out.println("Ingrese la cantidad de días "); cant=ES.leerEntero(); } while (cant <= 0); return cant; } Encapsulamiento

class TestTempMinMaxEst { public static void leerTempMinEst(int cant) { float max,min ; for (int i=0;i< cant;i++){ System.out.println("Ingrese …. "+i); do { max = ES.leerFloat(); min = ES.leerFloat(); if (max < min) … while (max < min); est.establecerTempMin (i,min) ; est.establecerTempNax (i,max) ; } }; } Encapsulamiento

class TestTempMinEstacion { public static void mostrarTempMinEst (int cant){ for (int i=0;i< cant; i++){ System.out.println(" min "+est.obtenerTempMin(i) ); System.out.println( max "+est.obtenerTempMax(i) ); } Encapsulamiento

Defina una clase TempMinMaxEst que encapsule la representación de las temperaturas mínimas y máximas registradas en una estación meteorológica y brinde operaciones para: El mismo problema puede representarse de maneras diferentes. En lugar de dos arreglos de componentes elementales podríamos tener un arreglo cuyas componentes son objetos. Cada objeto mantiene dos valores elementales, uno para la temperatura mínima y otro para la máxima. Encapsulamiento

TempMinMaxEst float [] min float [] max > TempMinMaxEst (cant : entero) > establecerTempMin (d : entero t : real) establecerTempMax (d : entero t : real) Crea dos estructuras para mantener las temperaturas de cierta cantidad de d í as y las inicializa en 0 Se asume que la clase Cliente controla que la temperatura m á xima es mayor o igual a la M í nima. Encapsulamiento

TempMinMaxEst Registro [] rt Registro min:float max:float > Registro (mi,ma:real) > establecerMin (m:real) establecerMax(m:real) > obtenerMin():real obtenerMax():real promedio():real > TempMinMaxEst (cant : entero) > establecerTempMin (d : entero t : real) establecerTempMax (d : entero t : real) Encapsulamiento

TempMinEstacion Registro [] rt > obtenerTempMin(d : entero):real obtenerTempMax(d : entero):real cantDias () : entero mayorPromedio () : real diasHelo () : entero amplitudMayor(g:real) : boolean minmaxSigMayor (g:real):boolean amplitudSigMayor(g:real):boolean Encapsulamiento

class TempMinMaxEst { private Registro [] rt; //constructor public TempMinMaxEst (int cant){ //Crea un arreglo de referencias nulas rt = new Registro [cant]; }... } Encapsulamiento

class TempMinMaxEst { private Registro [] rt; //Comandos y Consultas triviales // Asume que la clase Cliente controla max > min public void establecerTempMin (int i, float m){ rt[i].establecerTempMin(m); } public void establecerTempMax (int i,float m){ rt[i].establecerMax(m); } public float obtenerTempMin (int i){ return rt[i].obtenerMin(); } public float obtenerTempMax (int i){ return rt[i].obtenerMax(); } }... } Encapsulamiento

class TempMinMaxEst { private Registro [] rt;... // Consultas public int cantHeladas(){ //… int cant=0; for (int i=0;i<rt.length;i++) if (rt[i].obtenerMin()<0) cant++; return cant; } … } Encapsulamiento

public float mayorPromedio(){ float mayor = (rt[0].obtenerMin()+ rt[0].obtenerMax())/2; Registro aux; float m; for (int i=1;i<rt.length;i++){ aux = rt[i]; m = (aux.obtenerMin()+ aux.obtenerMax())/2; if (m > mayor) mayor = m; } return mayor; } Encapsulamiento

La única modificación en el diseño son los atributos de instancia. Como los atributos están encapsulados, el cambio en la representación afecta la implementación de las operaciones, PERO NO A LAS CLASES CLIENTE. En particular nos sirve el mismo tester que acabamos de definir. Queda como ejercicio implementar las demás operaciones de acuerdo a este diseño. Encapsulamiento

class TestTempMinMaxEst { static TempMinMaxEst est; public static void main(String[] args) { int cantD =0; cantD = leerCantDias () ; est=new TempMinMaxEst(cant); leerTempEst(cantD) ; System.out.println("Muestra la estación "); mostrarTempEst(cantD) ; System.out.println(El mayor promedio es + est.mayorPromedio() ); } Encapsulamiento

Introducción a la Programación Orientada a Objetos Hallar una representación adecuada para mantener el registro de las temperaturas máximas y mínimas para cierta cantidad de estaciones meteorológicas diferentes. Otra alternativa para representar los datos sería mediante un arreglo de dos dimensiones declarado como sigue: float rt [][]; rt = new float[2][7]; Encapsulamiento

Introducción a la Programación Orientada a Objetos Gráficamente un arreglo de dos dimensiones puede verse como una grilla: Encapsulamiento

TempMinMaxEst float [] [] rt > TempMinMaxEst (cant : entero) > establecerTempMin (d : entero t : real) establecerTempMax (d : entero t : real) Observemos que en las tres alternativas la signatura de las operaciones es la misma, cambia la declaración de los atributos Encapsulamiento

TempMinEstacion float [] [] rt > obtenerTempMin(d : entero):real obtenerTempMax(d : entero):real cantDias () : entero mayorPromedio () : real diasHelo () : entero amplitudMayor(g:real) : boolean minmaxSigMayor (g:real):boolean amplitudSigMayor(g:real):boolean Encapsulamiento

class TempMinMaxEst { private float [] [] rt; //Constructor // Crea una estructura para mantener las temperaturas // de cierta cantidad de días y las inicializa en 0 public TempMinMaxEst(int cant) { rt= new float[2][cant]; inicializa(cant); }... } Encapsulamiento

class TempMinMaxEst { private float [] [] rt; //Comandos y Consultas triviales // Asume que la clase Cliente controla max > min public void establecerTempMin (int i, float m){ rt[0][i] = m; } public void establecerTempMax (int i,float m){ rt[1][i] = m; } public float obtenerTempMin (int i){ return rt[0][i]; } public float obtenerTempMax (int i){ return rt[1][i]; } }... } Encapsulamiento

class TempMinMaxEst { private float [][] rt;... // Consultas public int cantHeladas(){ //… int cant=0; for (int i=0;i<rt[0].length;i++) if (rt[0][i]<0) cant++; return cant; } … } Encapsulamiento

public float mayorPromedio(){ float mayor = (rt[0][0]+rt[1][0])/2; float m; for (int i=1;i<rt[0].length;i++){ m = (rt[0][i]+rt[1][i])/2; if (m > mayor) mayor = m; } return mayor; } Encapsulamiento

class TempMinMaxEst { private float [] max; private float [] min; //Constructor public TempMinMaxEst(int cant) { max= new float[cant]; min = new float[cant]; inicializa(cant); }... } Encapsulamiento

class TempMinMaxEst { private Registro [] rt; //constructor public TempMinMaxEst (int cant){ //Crea un arreglo de referencias nulas rt = new Registro [cant]; }... } Encapsulamiento

class TempMinMaxEst { private float [] [] rt; //Constructor public TempMinMaxEst(int cant) { rt= new float[2][cant]; inicializa (cant); }... } Encapsulamiento

class TestTempMinMaxEst { TempMinMaxEst est; est=new TempMinMaxEst(5);... System.out.println(El mayor promedio es + est.mayorPromedio() ); } Encapsulamiento

class TempMinMaxEst { private float [] max; private float [] min; //Constructor public TempMinMaxEst(int cant) { max= new float[cant]; min = new float[cant]; inicializa(cant); }… } min 5 length est 5 length max Encapsulamiento

class TempMinMaxEst { private Registro [] rt; //constructor public TempMinMaxEst (int cant){ //Crea un arreglo de referencias nulas rt = new Registro [cant]; }... } est 5 length rt Encapsulamiento

class TempMinMaxEst { private float [] [] rt; //Constructor public TempMinMaxEst(int cant) { rt= new float[2][cant]; inicializa (cant); }... } est 2 length rt 3 length 3 Encapsulamiento

Introducción a la Programación Orientada a Objetos Defina una clase TempMinMaxRegion que permita mantener una tabla que registre las temperaturas mínimas y máxima de cierta cantidad de estaciones meteorológicas de una región para cada día de un período. Encapsulamiento TempMinMaxRegion Registro [][] tabla > TempMinMaxRegion(ne,nd: entero) > establecerTemp(e,d : entero, t : Registro) Asume que el d í a y la estaci ó n son v á lidas

Introducción a la Programación Orientada a Objetos Encapsulamiento TempMinMaxRegion Registro [][] tabla > cantEstaciones() : entero cantDias() : entero obtenerTemp (est,dia:entero ): Registro mayorAmplitud(): real mayorAmplitud(est:entero):real diaMayorAmplitud(): entero estacionMayorAmplitud():entero estacionesHeladas () : entero Asume un valor consistente Cuenta la cantidad de estaciones en las que hel ó Retorna la mayor amplitud t é rmica registrada Retorna la mayor amplitud t é rmica de una estaci ó n Retorna el d í a en el que se registro la mayor amplitud t é rmica

Introducción a la Programación Orientada a Objetos Encapsulamiento Registro min:float max:float > Registro (mi,ma:real) > establecerMin (m:real) establecerMax(m:real) > obtenerMin():real obtenerMax():real amplitud():real

Introducción a la Programación Orientada a Objetos Encapsulamiento class TempMinMaxRegion { private Registro [][] tabla; public TempMinMaxRegion (int nEst,int nDias){ tabla = new Registro [nEst][nDias]; } … }

Introducción a la Programación Orientada a Objetos Encapsulamiento public int cantEstaciones () { return tabla.length ; } public int cantDias () { return tabla[0].length ; }

Introducción a la Programación Orientada a Objetos Encapsulamiento Algoritmo mayorAmplitud DS mayor para cada estacion para cada día si la amplitud es mayor que la encontrada hasta el momento, la mayor es la que corresponde a estacion y dia Notemos que en el diseño del algoritmo no usamos una notación formal, buscamos identificar las estructuras de control que van a permitir recorrer la estructura de datos.

Introducción a la Programación Orientada a Objetos Encapsulamiento public float mayorAmplitud () { float mayor = tabla[0][0].amplitud(); for (int i=0;i<cantEstaciones();i++) for (int j=0;j<cantDias();j++) if mayor < tabla[i][j].amplitud(); mayor = tabla[i][j].amplitud(); return mayor; }

Introducción a la Programación Orientada a Objetos Encapsulamiento Algoritmo mayorAmplitud DE est DS mayor para cada día si la amplitud es mayor que la encontrada hasta el momento, la mayor es la que corresponde a dia La solución requiere recorrer solo una fila, la que corresponde a la estación recibida como parámetro.

Introducción a la Programación Orientada a Objetos Encapsulamiento public float mayorAmplitud (int est) { float mayor = tabla[est][0].amplitud(); for (int j=1;j<cantDias();j++) if mayor < tabla[est][j].amplitud(); mayor = tabla[est][j].amplitud(); return mayor; }

Introducción a la Programación Orientada a Objetos Encapsulamiento public float diaMayorAmplitud () { float mayor = tabla[0][0].amplitud(); int dia = 0; for (int i=0;i<cantEstaciones();i++) for (int j=0;j<cantDias();j++) if mayor < tabla[i][j].amplitud(){ mayor = tabla[i][j].amplitud(); dia = j; } return dia; } Aunque mayorAmplitud() y diaMayorAmplitud() implementan diferentes servicios, la estructura de la solución es muy similar.

Introducción a la Programación Orientada a Objetos Encapsulamiento TempMinMaxRegion Registro [][] tabla >... contarMayorAmplitud(e:Estacion) :real generarMayorAmp():Estacion Estacion float [] estacion > Estacion(n:entero) > establecerEstacion( dia:entero,valor:real) > obtenerEstacion (dia:entero): real Calcula la cantidad de d í as en los cuales la amplitud super ó a un valor establecido para esa estaci ó n Genera una estructura con la mayor amplitud de cada estaci ó n

Introducción a la Programación Orientada a Objetos Encapsulamiento public int contarMayorAmplitud(Estacion est) { // Calcula la cantidad de d í as en los cuales la amplitud super ó a // un valor establecido para esa estación int cont =0; for (int i=0;i<cantEstaciones();i++){ for (int j=1;j<cantDias();j++) if (tabla[i][j].amplitud() > est.obtenerEst(i)); cont++; e.establecerEst(i,mayor); } return cont; } La estructura de control del recorrido es similar a las implementaciones anteriores, la comparación involucra a dos estructuras de datos.

Introducción a la Programación Orientada a Objetos Encapsulamiento public Estacion generarMayorAmplitud () { float mayor; Estacion e = new Estacion (cantDias()); for (int i=0;i<cantEstaciones();i++){ mayor = tabla[i][0]; for (int j=1;j<cantDias();j++) if mayor < tabla[i][j].amplitud(); mayor = tabla[i][j].amplitud(); e.establecerEst(i,mayor); } return e; } La implementación de este servicio requiere recorrer una estructura de datos y generar otra.

Introducción a la Programación Orientada a Objetos Encapsulamiento Analice qué cambios en la implementación provocarían las siguiente modificaciones de diseño: Las clases Cliente acceden a las estaciones meteorológicas y a los días comenzando con 1. Cada fila representa a un día del período y cada columna a una estación meteorológica.

Introducción a la Programación Orientada a Objetos En la clase de hoy… Distintas alternativas de representación de los datos para un mismo problema. -Dos arreglos de reales -Un arreglo de objetos de tipo clase -Un arreglo de reales dos dimensiones Encapsulamiento: La interface entre la clase proveedora y las clases cliente. Diseño de algoritmos: Recorridos exhaustivos y no exhaustivos. Tester: Casos de Prueba.