Introduccin a la Programacin Orientada a Objetos Encapsulamiento
Introducción a la Programación Orientada a Objetos Encapsulamiento y Abstracción Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR 2019 IPOO 2 cuatrimestre 2019 Sonia Rueda
Encapsulamiento El encapsulamiento es un mecanismo que permite esconder los detalles de la implementación de cada uno de los módulos que conforman un sistema, de modo que los demás módulos solo conozcan su funcionalidad y su comportamiento. Si cambian la implementación de un módulo, en tanto no se modifique la interfaz, el cambio no tendrá impacto en los módulos que lo usan. Se reducen así las dependencias entre diferentes unidades de software, de modo que estas son más fáciles de leer, verificar y modificar.
Encapsulamiento En Java cada clase es un módulo de software. Los modificadores de acceso definen el nivel de encapsulamiento dentro de una clase. Cada miembro de una clase que se declara privado queda escondido y no es visible fuera de la clase. Si cambia su representación, el cambio es transparente para el exterior. Cada miembro de una clase que se declara público es visible fuera de la clase y por lo tanto puede ser accedido. Si cambia la representación, el cambio puede afectar a la clases relacionadas.
Caso de Estudio: Estación Meteorológica Defina una clase Temp. Min. Max. Est 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ó todo el día • Retornar el mayor promedio (entre temperaturas mínima y máxima) registrado
Caso de Estudio: Estación Meteorológica • 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. • Decidir si hubo n días consecutivos con amplitudes mayores a un valor g. Establecer casos de prueba
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est real [] min real [] max <<constructores>> Temp. Min. Max. Est (cant : entero) Crea una estructura para mantener las temperaturas de cant días y las inicializa en 0. En este diseño la estructura de datos son dos arreglos de componentes de tipo elemental.
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est real [] [] minmax <<constructores>> Temp. Min. Max. Est (cant : entero) La primera fila mantiene las temperaturas mínimas y la segunda fila mantiene las temperaturas máximas de cada día del período. Temp. Min. Max. Est (cant : entero) Crea una estructura para mantener las temperaturas de cant días y las inicializa en 0.
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est Registro [] minmax <<constructores>> Temp. Min. Max. Est (cant : entero) Registro min: real max: real <<constructores>> Registro (mi, ma: real) Temp. Min. Max. Est (cant : entero) Crea una estructura para mantener las temperaturas de cant días y las inicializa en 0. En este diseño la estructura de datos es un arreglo de componentes de tipo clase Registro.
Caso de Estudio: Estación Meteorológica Responsabilidades • Requiere maxima >= minima para cada día del período. • El primer día se denota con la posición 1. • La cantidad de días del período se define en el momento de la creación. • Todos los elementos ya están ingresados cuando se ejecutan las consultas
Caso de Estudio: Estación Meteorológica class Temp. Min. Max. Est { //Atributos de instancia private float [] max; private float [] min; Temp. Min. Max. Est real [] max real [] min <<constructores>> Temp. Min. Max. Est (cant : entero) /*Constructor Crea una estructura para mantener las temperaturas mínimas y otra para las máximas, ambas con cant elementos. */ public Temp. Min. Max. Est(int cant) { max= new float[cant]; min = new float[cant]; }. . . } El valor inicial de cada componente del arreglo es 0.
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est class Temp. Min. Max. Est { //Atributo de instancia real [] [] minmax private float [] [] minmax; <<constructores>> Temp. Min. Max. Est (cant : entero) /*Constructor Crea una estructura para mantener las temperaturas de cant días y las inicializa en 0. La primera fila mantiene las temperaturas mínimas, la segunda fila mantiene las temperaturas máximas. */ public Temp. Min. Max. Est(int cant) { minmax= new float[2][cant]; }. . . } El valor inicial de cada componente del arreglo es 0.
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est class Temp. Min. Max. Est { //Atributo de instancia Registro [] minmax private Registro [] minmax; <<constructores>> Temp. Min. Max. Est (cant : entero) /*Constructor Crea una estructura para mantener objetos con las temperaturas mínimas y máximas de un período de cant días. Las inicializa en 0*/ public Temp. Min. Max. Est (int cant){ minmax = new Registro [cant]; for (int dia = 0; dia < cant; dia++) minmax[dia] = new Registro(0, 0); }. . . }
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est real [] min real [] max <<constructores>> Temp. Min. Max. Est (cant : entero) <<comandos>> establecer. Temp. Min (d: entero, t: real) establecer. Temp. Max (d: entero, t: real) <<consultas>> obtener. Temp. Min(d : entero): real obtener. Temp. Max(d : entero): real cant. Dias () : entero
Caso de Estudio: Estación Meteorológica private float [] max; private float [] min; … //Comandos y Consultas triviales // Requieren max >= min, 1<= d <= cant. Dias() public void establecer. Temp. Min (int d, float m){ min[d-1] = m; } public void establecer. Temp. Max (int d, float m){ max[d-1] = m; } public float obtener. Temp. Min (int d){ return min[d-1]; } public float obtener. Temp. Max (int d){ return max[d-1]; }
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est real [] [] minmax <<constructores>> Temp. Min. Max. Est (cant : entero) <<comandos>> establecer. Temp. Min (d: entero, t: real) establecer. Temp. Max (d: entero, t: real) <<consultas>> obtener. Temp. Min(d : entero): real obtener. Temp. Max(d : entero): real cant. Dias () : entero
Caso de Estudio: Estación Meteorológica private float [] [] minmax; //Comandos y Consultas triviales // Requiere max >= min, 1<= d <= cant. Dias() public void establecer. Temp. Min (int d, float m){ minmax[0][d-1] = m; } public void establecer. Temp. Max (int d, float m){ minmax[1][d-1] = m; } public float obtener. Temp. Min (int d){ return minmax[0][d-1]; } public float obtener. Temp. Max (int d){ return minmax[1][d-1]; }
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est Registro [] minmax min: real max: real <<constructores>> Temp. Min. Max. Est (cant : entero) <<comandos>> establecer. Temp. Min (d: entero, t: real) establecer. Temp. Max (d: entero, t: real) <<consultas>> obtener. Temp. Min(d : entero): real obtener. Temp. Max(d : entero): real cant. Dias () : entero <<constructores>> Registro (mi, ma: real) <<comandos>> establecer. Min (m: real) establecer. Max(m: real) <<consultas>> obtener. Min(): real obtener. Max(): real promedio. Dia(): real amplitud. Dia(): real
Caso de Estudio: Estación Meteorológica private Registro [] minmax; //Comandos y Consultas triviales // Requiere max >= min, 1<= d <= cant. Dias() public void establecer. Temp. Min (int d, float m){ minmax[d-1]. establecer. Min(m); } public void establecer. Temp. Max (int d, float m){ minmax[d-1]. establecer. Max(m); } public float obtener. Temp. Min (int d){ return minmax[d-1]. obtener. Min(); } public float obtener. Temp. Max (int d){ return minmax[d-1]. obtener. Max(); }
Caso de Estudio: Estación Meteorológica private float [] min; private float [] max; public int cant. Dias (){ return min. length; } private float [] [] minmax; public int cant. Dias (){ return minmax[0]. length; } private Registro [] minmax; public int cant. Dias (){ return minmax. length; }
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est <<consultas>> cant. Heladas(): entero helo. Todo(): entero mayor. Promedio () : real amplitud. Mayor(g: real) : boolean minmax. Sig. Mayor (g: real): boolean amplitud. Sig. Mayor(g: real): boolean 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.
Caso de Estudio: Estación Meteorológica Algoritmo cant. Heladas DS contador inicializar el contador en 0 para cada día si heló incrementar el contador El algoritmo no depende de la estructura de datos
Caso de Estudio: Estación Meteorológica Algoritmo cant. Heladas DS contador inicializar el contador en 0 para cada día si heló incrementar el contador private float [] max; private float [] min; public int cant. Heladas(){ //Computa la cantidad de días en los que heló. int cant=0; for (int i=0; i<cant. Dias(); i++) if (min[i]<0) cant++; return cant; }
Caso de Estudio: Estación Meteorológica Algoritmo cant. Heladas DS contador inicializar el contador en 0 para cada día si heló incrementar el contador private float [][] minmax; public int cant. Heladas(){ //Computa la cantidad de días en los que heló. int cant=0; for (int i=0; i<cant. Dias(); i++) if (minmax[0][i]<0) cant++; return cant; }
Caso de Estudio: Estación Meteorológica Algoritmo cant. Heladas DS contador inicializar el contador en 0 para cada día si heló incrementar el contador private Registro [] minmax; public int cant. Heladas(){ //Computa la cantidad de días en los que heló. int cant=0; for (int i=0; i<cant. Dias(); i++) if (minmax[i]. obtener. Min()<0) cant++; return cant; }
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est <<consultas>> cant. Heladas(): entero helo. Todo(): entero mayor. Promedio () : real amplitud. Mayor(g: real) : boolean minmax. Sig. Mayor (g: real): boolean amplitud. Sig. Mayor(g: real): boolean amplitud. NConsec(g: real, n: entero): boolean
Caso de Estudio: Estación Meteorológica Algoritmo helo. Todo DS contador inicializar el contador en 0 para cada día si heló todo el día incrementar el contador private float [] max; private float [] min; public int helo. Todo(){ /*Computa la cantidad de días en los que heló el día*/ int cant=0; for (int i=0; i<cant. Dias(); i++) if (max[i]<0) cant++; return cant; }
Caso de Estudio: Estación Meteorológica Algoritmo helo. Todo DS contador inicializar el contador en 0 para cada día si heló todo el día incrementar el contador private float [][] minmax; public int helo. Todo(){ //Computa la cantidad de días en los que heló. int cant=0; for (int i=0; i<cant. Dias(); i++) if (minmax[1][i]<0) cant++; return cant; }
Caso de Estudio: Estación Meteorológica Algoritmo helo. Todo DS contador inicializar el contador en 0 para cada día si heló todo el día incrementar el contador private Registro [] minmax; public int helo. Todo(){ //Computa la cantidad de días en los que heló. int cant=0; for (int i=0; i<cant. Dias(); i++) if (minmax[i]. obtener. Max()<0) cant++; return cant; }
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est <<consultas>> cant. Heladas(): entero helo. Todo(): entero mayor. Promedio () : real amplitud. Mayor(g: real) : boolean minmax. Sig. Mayor (g: real): boolean amplitud. Sig. Mayor(g: real): boolean
Caso de Estudio: Estación Meteorológica Algoritmo mayor. Promedio DS mayor calcula el promedio del primer día para cada día a partir del segundo promedio del día si promedio > mayor promedio del día public float mayor. Promedio(){ /*Computa el mayor promedio entre la máxima y la mínima diaria/* }
Caso de Estudio: Estación Meteorológica Algoritmo mayor. Promedio DS mayor calcula el promedio del primer día para cada día a partir del segundo promedio del día si promedio > mayor promedio del día public float mayor. Promedio(){ /*Computa el mayor promedio entre la máxima y la mínima diaria/* float mayor = promedio. Dia(0) ; for (int i=1; i<cant. Dias(); i++) if (promedio. Dia(i) > mayor) mayor = promedio. Dia(i); return mayor; } Recorrido Exhaustivo
Caso de Estudio: Estación Meteorológica Algoritmo mayor. Promedio DS mayor calcula el promedio del primer día para cada día a partir del segundo promedio del día si promedio > mayor promedio del día private return } float [] max; float [] min; float promedio. Dia(int d){ (max[d]+min[d])/2;
Caso de Estudio: Estación Meteorológica Algoritmo mayor. Promedio DS mayor calcula el promedio del primer día para cada día a partir del segundo promedio del día si promedio > mayor promedio del día private float [][] minmax; private float promedio. Dia(int d){ return (minmax[0][d]+minmax[1][d])/2; }
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est <<consultas>> cant. Heladas(): entero helo. Todo(): entero mayor. Promedio () : real amplitud. Mayor(g: real) : boolean minmax. Sig. Mayor (g: real): boolean amplitud. Sig. Mayor(g: real): boolean
Caso de Estudio: Estación Meteorológica Algoritmo amplitud. Mayor DE g para cada día del período y mientras no se verifica la propiedad si la amplitud térmica del día fue mayor a g se verifica la propiedad public boolean amplitud. Mayor(float g){ /*Decide 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*/. … }
Caso de Estudio: Estación Meteorológica amplitud. Mayor 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. Mayor 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 12 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica Algoritmo amplitud. Mayor DE g para cada día del período y mientras no se verifica la propiedad si la amplitud térmica fue mayor a g se verifica la propiedad public boolean amplitud. Mayor(float g){ /*Decide 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*/. boolean encontre=false; int i=0; while ((i<cant. Dias()) && (!encontre)) if (amplitud. Dia(i)>g) encontre=true; else i++; return encontre; Recorrido NO Exhaustivo }
Caso de Estudio: Estación Meteorológica Algoritmo amplitud. Mayor DE g para cada día del período y mientras no se verifica la propiedad si la amplitud térmica fue mayor a g se verifica la propiedad private return } float [] max; float [] min; float amplitud. Dia(int d){ MATH. abs(max[d]-min[d]);
Caso de Estudio: Estación Meteorológica Algoritmo amplitud. Mayor DE g para cada día del período y mientras no se verifica la propiedad si la amplitud térmica fue mayor a g se verifica la propiedad private float [][] minmax; private float amplitud. Dia(int d){ return MATH. abs(minmax[1][d]-minmax[0][d]); }
Caso de Estudio: Estación Meteorológica • 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. Establecer casos de prueba
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est <<consultas>> cant. Heladas(): entero helo. Todo(): entero mayor. Promedio () : real amplitud. Mayor(g: real) : boolean minmax. Sig. Mayor (g: real): boolean amplitud. Sig. Mayor(g: real): boolean amplitud. NConsec(g: real): boolean
Caso de Estudio: Estación Meteorológica Algoritmo minmax. Sig. Mayor DE g para cada día del período menos el último y mientras no se verifica la propiedad si la diferencia con la máxima del dia siguiente es mayor a g O la diferencia con la mínima del dia siguiente es mayor a g Se verifica la propiedad public boolean minmax. Sig. Mayor(float g){ /*Decide 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. */ … }
Caso de Estudio: Estación Meteorológica minmax. Mayor 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 3 g 8 0 6 1. 0 7. 2 11 10 3. 0 6 5
Caso de Estudio: Estación Meteorológica minmax. Mayor 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 3 g 11. 5 0 6 1. 0 7. 2 11 10 3. 0 6 5
Caso de Estudio: Estación Meteorológica minmax. Mayor 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 3 g 12. 5 0 6 1. 0 7. 2 11 10 3. 0 6 5
Caso de Estudio: Estación Meteorológica minmax. Mayor 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 3 g 20 0 6 1. 0 7. 2 11 10 3. 0 6 5
Caso de Estudio: Estación Meteorológica Algoritmo minmax. Sig. Mayor DE g para cada día del período menos el último y mientras no se verifica la propiedad si la diferencia con la máxima del dia siguiente es mayor a g O la diferencia con la mínima del dia siguiente es mayor a g Se verifica la propiedad public boolean minmax. Sig. Mayor(float g){ /*Decide 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. */ boolean encontre=false; int i=0; while ((i<cant. Dias()-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; Recorrido NO Exhaustivo }
Caso de Estudio: Estación Meteorológica • 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
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est <<consultas>> cant. Heladas(): entero helo. Todo(): entero mayor. Promedio () : real amplitud. Mayor(g: real) : boolean minmax. Sig. Mayor (g: real): boolean amplitud. Sig. Mayor(g: real): boolean amplitud. NConsec(g: real): boolean
Caso de Estudio: Estación Meteorológica Algoritmo amplitud. Sig. Mayor DE g para cada día del período, menos el último y mientras no se verifica la propiedad si la diferencia entre la amplitud del día y la amplitud del dia siguiente es mayor a g Se verifica la propiedad public boolean amplitud. Sig. Mayor(float g){ /*Decidir si entre dos días consecutivos, la diferencia entre las amplitudes térmicas fue mayor que un cierto valor g*/ … }
Caso de Estudio: Estación Meteorológica amplitud. Sig. Mayor 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 8 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. Sig. Mayor 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 12 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica Algoritmo amplitud. Sig. Mayor DE g para cada día del período, menos el último y mientras no se verifica la propiedad si la diferencia entre la amplitud del día y la amplitud del dia siguiente es mayor a g Se verifica la propiedad public boolean amplitud. Sig. Mayor(float g){ /*Decide si entre dos días consecutivos, la diferencia entre las amplitudes térmicas fue mayor que un cierto valor g*/ boolean encontre=false; int i=0; while ((i<cant. Dias()-1) && (!encontre)) if (Math. abs(amplitud. Dia(i)-amplitud. Dia(i+1))>g) encontre=true; else i++; return encontre; }
Caso de Estudio: Estación Meteorológica • Decidir si hubo n días consecutivos con amplitudes mayores a un valor g. Establecer casos de prueba
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est <<consultas>> cant. Heladas(): entero helo. Todo(): entero mayor. Promedio () : real amplitud. Mayor(g: real) : boolean minmax. Sig. Mayor (g: real): boolean amplitud. Sig. Mayor(g: real): boolean amplitud. NConsec(g: real, n: entero): boolean
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 cont 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 cont 1 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 cont 2 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 cont 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 cont 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 cont 1 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 cont 2 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 3 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 cont 3 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 -1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 4 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica amplitud. NConsec 13 7 5 7. 5 -2 10 12 9. 5 7. 2 22 17 9. 5 12 15 6 10 0 -1 2. 0 1 0 5 3 3 7 6 5. 5 1 10 10 3 g 5. 5 n 7 6 1. 0 7. 2 11 10 3. 0 6 6 8. 5 0 11 7 6. 5 6
Caso de Estudio: Estación Meteorológica Algoritmo amplitud. NConsec DE g, n cont 0 para cada día del período y mientras cont < n si la amplitud del día fue mayor a g cont +1 sino cont 0 public boolean amplitud. NConsec(float g, int n){ /*Decide si hubo n días consecutivos con amplitudes mayores a un valor g. */ … }
Caso de Estudio: Estación Meteorológica Algoritmo amplitud. NConsec DE g, n cont 0 para cada día del período y mientras cont < n si la amplitud fue mayor a g cont +1 sino cont 0 public boolean amplitud. NConsec(float g, int n){ /*Decide si hubo n días consecutivos con amplitudes mayores a un valor g. */ int cont = 0; int i=0; while ((i<cant. Dias()) && cont < n){ if (amplitud. Dia(i)>g) cont++; else cont = 0; i++; } Modificar la condición de corte para mejorar la return cont==n; eficiencia de la solución. }
Caso de Estudio: Estación Meteorológica Temp. Min. Max. Est Registro [] minmax min: real max: real <<constructores>> Temp. Min. Max. Est (cant : entero) … cant. Heladas(): entero helo. Todo(): entero mayor. Promedio () : real amplitud. Mayor(g: real) : boolean minmax. Sig. Mayor (g: real): boolean amplitud. Sig. Mayor(g: real): boolean amplitud. NConsec(g: real): boolean <<constructores>> Registro (mi, ma: real) <<comandos>> establecer. Min (m: real) establecer. Max(m: real) <<consultas>> obtener. Min(): real obtener. Max(): real promedio. Dia(): real amplitud. Dia(): real
Caso de Estudio: Estación Meteorológica private float [] max; private float [] min; public Temp. Min. Max. Est(int cant) { max= new float[cant]; min = new float[cant]; } est=new Temp. Min. Max. Est(5); est max min length 5
Caso de Estudio: Estación Meteorológica private Registro [] minmax; public Temp. Min. Max. Est (int cant){ minmax = new Registro [cant]; for (int dia = 0; dia < dias; dia++) minmax[dia] = new Registro(0, 0); } est=new Temp. Min. Max. Est(5); est minmax length 5
Caso de Estudio: Estación Meteorológica private float [] [] minmax; public Temp. Min. Max. Est(int cant) { minmax= new float[2][cant]; } est=new Temp. Min. Max. Est(5); est length 5 minmax length 2
Caso de Estudio: Estación Meteorológica class Test. Temp. Min. Max. Est { static Temp. Min. Max. Est est; public static void main(String[] args) { int cant. D =0; cant. D = leer. Cant. Dias () ; est=new Temp. Min. Max. Est(cant); leer. Temp. Est(cant. D) ; System. out. println("Muestra la estación mostrar. Temp. Est(cant. D) ; "); System. out. println("La cantidad de heladas es " + est. cant. Heladas() ); } … }
Caso de Estudio: Estación Meteorológica public static int leer. Cant. Dias() { int cant; do{ System. out. println("Ingrese la cantidad de días "); cant=ES. leer. Entero(); } while (cant <= 0); return cant; }
Caso de Estudio: Estación Meteorológica public static void leer. Temp. Min. Est(int cant) { float max, min ; for (int i=0; i< cant; i++){ System. out. println("Ingrese …. "+i); do { max = ES. leer. Float(); min = ES. leer. Float(); if (max < min) … while (max < min); } establecer. Temp. Min (i, min) ; establecer. Temp. Nax (i, max) ; }
Caso de Estudio: Estación Meteorológica public static void mostrar. Temp. Min. Est (int cant){ for (int i=0; i< cant; i++){ System. out. println(" min "+est. obtener. Temp. Min(i) ); System. out. println(" max "+est. obtener. Temp. Max(i) ); } La clase Cliente no conoce la estructura de datos porque está encapsulada, los cambios en la representación de los atributos no afectan a Test. Temp. Min. Max. Est
- Slides: 87