La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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.

Presentaciones similares


Presentación del tema: "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."— Transcripción de la presentación:

1 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 brinde operaciones para: Retornar la mayor temperatura registrada Calcular el promedio de las temperaturas Contar en cuántos días heló Decidir si hubo heladas Si se registran las temperaturas mínimas para n días, el primer día se nombra como 0 y el último como n-1 Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas Encapsulamiento

2 Representaremos las temperaturas mínimas del período mediante un arreglo de números reales. El arreglo está encapsulado en una clase TempMinEstacion, todo el acceso a la estructura se hace dentro de la clase. Las clases clientes no conocen la representación de los datos. Las operaciones visibles permiten calcular el promedio, la cantidad de heladas, etc. Los cambios en la representación no afectan a las clases clientes, en tanto no cambien las operaciones. Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas Encapsulamiento

3 TempMinEstacion float [] S > TempMinEstacion (cant : entero) > establecerTempMin (d : entero t : real) Crea una estructura para mantener las temperaturas de cant d í as Observemos que el valor 0 representa una temperatura válida. Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas Encapsulamiento Requiere un valor válido para d

4 TempMinEstacion float [] S > obtenerTempMin(d : entero):real cantDias () : entero mayorTempMin () : real promedioTempMin () : real cantHeladas() : entero huboHeladas () : boolean Cuenta la cantidad de d í as que hel ó Decide si hubo heladas Calcula el mayor valor Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas Encapsulamiento Requiere un valor válido para d

5 class TempMinEstacion { private float [] tMin; //Constructor // Crea una estructura para mantener las temperaturas // de cierta cantidad de días y las inicializa en 0 public TempMinEstacion(int cant) { tMin= new float[cant]; inicializarTemp(); }... } Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas Encapsulamiento

6 class TempMinEstacion { private float [] tMin; //Comandos private void inicializarTemp(){ for (int i=0;i<tMin.length;i++) tMin[i]=0; }... } Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas Encapsulamiento

7 Algoritmo promedioTempMin DS: promedio de las temperaturas promedio = 0 Para cada dia promedio = promedio + temperatura de ese dia promedio = promedio / cantDias Devolver promedio Introducción a la Programación Orientada a Objetos

8 class TempMinEstacion { private float [] tMin;... // Consultas public float promedioTempMin(){ //… float prom=0, suma=0; for (int i=0;i<tMin.length;i++) suma=suma+tMin[i]; prom=suma/tMin.length; return prom; } … } Caso de Estudio: Temperaturas Mínimas Encapsulamiento Recorrido Exhaustivo Introducción a la Programación Orientada a Objetos

9 Caso de Estudio: Temperaturas Mínimas Encapsulamiento Algoritmo mayorTempMin DS: mayor temperatura min mayor = temp del primer dia Para cada dia a partir del segundo dia Si la temp del dia actual > mayor mayor = temp del dia actual Devolver mayor Introducción a la Programación Orientada a Objetos

10 class TempMinEstacion { private float [] tMin;... // Consultas public float mayorTempMin(){ //… float mayor=tMin[0]; for (int i=1;i<tMin.length;i++){ if (tMin[i]>mayor) mayor=tMin[i]; } return mayor; } … } Caso de Estudio: Temperaturas Mínimas Encapsulamiento Verificar considerando que la mayor temperatura sea la primera y la última Introducción a la Programación Orientada a Objetos

11 Caso de Estudio: Temperaturas Mínimas Encapsulamiento Algoritmo cantHeladas DS: Cantidad de heladas cant = 0 Para cada dia Si la temperatura del dia < 0 cant = cant +1 Devolver cant Introducción a la Programación Orientada a Objetos

12 class TempMinEstacion { private float [] tMin;... // Consultas public int cantHeladas(){ //… int cant=0; for (int i=0;i<tMin.length;i++) if (tMin[i]<0) cant++; return cant; } … } Caso de Estudio: Temperaturas Mínimas Encapsulamiento Verificar considerando que no haya heladas, que todos los días sean heladas, que el primer día haya helado, que el último haya helado

13 Caso de Estudio: Temperaturas Mínimas Encapsulamiento Algoritmo huboHeladas DS: Verdadero si hubo heladas, falso en caso contrario hayHelada = falso Para cada dia mientras NO hayHelada hayHelada = temperatura del dia < 0 Devolver hay Introducción a la Programación Orientada a Objetos

14 class TempMinEstacion { private float [] tMin;... // Consultas public boolean huboHeladas(){ //… boolean encontre=false; int i=0; while ((i<tMin.length) && (!encontre)) if (tMin[i]<0)encontre=true; else i++; return encontre; } … } Caso de Estudio: Temperaturas Mínimas Encapsulamiento Verificar considerando que no haya heladas, que todos los días sean heladas, que el primer día haya helado, que sólo el último haya helado Recorrido NO Exhaustivo Introducción a la Programación Orientada a Objetos

15 El arreglo queda encapsulado en una clase, todo el acceso desde la clase cliente se realiza a través de los servicios ofrecidos por la clase proveedora. El primer día se denota con 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 La entrada y salida se realiza desde la clase cliente. Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas Encapsulamiento

16 Diseñe e implemente una clase tester que brinde un servicio para leer las temperaturas y para probar la funcionalidad de la clase TempMinEstacion Caso de Estudio: Temperaturas Mínimas Tester En la página de la materia está disponible una clase tester parcial, queda como ejercicio completarla con casos de prueba adecuados para cada servicios. Introducción a la Programación Orientada a Objetos

17 class TestTempMinEstacion { public static void main(String[] args) { // Tester para una semana int cant =7; TempMinEstacion est; est = leerTempMinEst(cant) ; System.out.println("Muestra la estación "); mostrarTempMinEst(est) ; System.out.println("Promedio Estación + est.promedioTempMin() ); … } Caso de Estudio: Temperaturas Mínimas Tester Introducción a la Programación Orientada a Objetos

18 class TestTempMinEstacion { public static TempMinEstacion leerTempMinEst(int cant) { float t ; TempMinEstacion e= new TempMinEstacion(cant); for (int i=0;i< e.cantDias();i++){ System.out.println( "Ingrese la temperatura del día "+i); t = ES.leerFloat(); e.establecerTempMin (i,t) ; }; return e; } Caso de Estudio: Temperaturas Mínimas Tester Introducción a la Programación Orientada a Objetos

19 class TestTempMinEstacion { public static TempMinEstacion leerTempMinEst(int cant) { float t ; TempMinEstacion e= new TempMinEstacion(cant); … return e; } Caso de Estudio: Temperaturas Mínimas Tester Introducción a la Programación Orientada a Objetos e tMin 7 length

20 class TestTempMinEstacion { public static void mostrarTempMinEst (TempMinEstacion e){ for (int i=0;i< e.cantDias(); i++) System.out.println(" "+e.obtenerTempMin(i) ); } Caso de Estudio: Temperaturas Mínimas Tester Introducción a la Programación Orientada a Objetos

21 TempMinEstacion float [] tMin > establecerTempMin (dia : entero t : real) > obtenerTempMin(dia : entero):real Introducción a la Programación Orientada a Objetos Requiere que dia sea válido La clase cliente es responsable de asegurar que dia esté dentro del período Caso de Estudio: Temperaturas Mínimas

22 class TempMinEstacion { private float [] tMin; //Comandos public void establecerTempMin(int dia, float t){ /*Requiere que dia sea consistente con la cantidad de días del período*/ tMin[dia]=t; } … } Caso de Estudio: Temperaturas Mínimas Responsabilidades Introducción a la Programación Orientada a Objetos

23 class TempMinEstacion { private float [] tMin; // Consultas public float obtenerTempMin(int dia){ float t){ /*Requiere que dia sea consistente con la cantidad de días del período*/ return tMin[dia]; } public int cantDias(){ return tMin.length; } … } Caso de Estudio: Temperaturas Mínimas Responsabilidades Introducción a la Programación Orientada a Objetos

24 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 brinde operaciones para: Retornar la mayor temperatura registrada Calcular el promedio de las temperaturas Contar en cuántos días heló Decidir si hubo heladas Retornar la primera temperatura mayor a una dada; si no existe devolver el mismo valor recibido. Retornar el número de día que corresponde a la primera helada del período, si no heló retorna 0. Si se registran las temperaturas mínimas para n días, el primer día se nombra como 0 y el último como n-1 Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas Encapsulamiento

25 TempMinEstacion float [] tMin > primerMayor(t:real): real diaPrimerMayor(t:real): entero Introducción a la Programación Orientada a Objetos Retorna la primera temperatura mayor a t o t Retorna el día en el que se produjo la primera tempertatura mayor a t Si no hubo ninguna retorna -1 Caso de Estudio: Temperaturas Mínimas Responsabilidades

26 TempMinEstacion float [] tMin > contarMayores(t:real):entero huboMasNMayores(t:real,n:entero) :boolean huboNmayores(t:real,n:entero) :boolean Cuenta la cantidad de días en las que las temperaturas fueron mayores a t. Introducción a la Programación Orientada a Objetos Decide si hubo al menos n días con temperaturas mayores a t. Caso de Estudio: Temperaturas Mínimas Decide si hubo exactamente n días con temperaturas mayores a t.

27 TempMinEstacion float [] tMin > huboNConMayores(t:real,n:entero) :boolean periodoMasLargo(t:real):entero Decide si hubo al menos n días consecutivos con temperaturas mayores a t. Computa la cantidad de días del período más largo con temperaturas mayores a t en días consecutivos. Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas

28 Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas 11.15.59.0-4.2 0.1-0.2 si t=5.5 debe computar 2 si t=15 debe computar 0 si t=-5 debe computar 6 public int contarMayores(float t){ //Cuenta las temperaturas mayores a t } Dado el siguiente registro de temperaturas

29 Caso de Estudio: Temperaturas Mínimas Algoritmo contarMayores DE: temp DS: cant de dia donde la temperatura > temp cant =0 Para cada dia Si temperatura del dia actual > temp cant = cant +1 Devolver cant Introducción a la Programación Orientada a Objetos

30 public int contarMayores(float t){ //Cuenta las temperaturas mayores a t int cont = 0; for (int i=0;i<cantDias();i++) if (tMin[i] > t) cont++; return cont; } Recorrido exhaustivo Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas t=5.5 2.16.2-2.04.2 2.12.29.0-4.2 11.15.59.0-4.2 0.15.53.0-4.2 Algunos Casos de Prueba

31 Caso de Estudio: Temperaturas Mínimas Algoritmo huboMasNMayores DE: temp, N DS: Verdadero si hubo, falso en caso contrario cant = 0 Para cada dia mientras que cant < N Si temperatura del dia actual > temp cant = cant +1 Devolver cant Introducción a la Programación Orientada a Objetos

32 public boolean huboMasNMayores(float t,int n){ /*Decide si hubo al menos n temperaturas mayores a t*/ int cont = 0; for (int i=0;i<cantDias()&&cont < n;i++) if (tMin[i] > t) cont++; return cont==n; } Recorrido no exhaustivo Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas t=5.5 n=3 2.16.2-2.05.5 8.12.29.0-4.2 11.18.5 4.0 0.15.57.06.2 7.2 3.0 9.00.17.06.2 Algunos Casos de Prueba

33 Caso de Estudio: Temperaturas Mínimas Algoritmo huboNMayores DE: temp, N DS: Verdadero si hubo, falso en caso contrario cant = 0 Para cada dia mientras que cant <= N Si temperatura del dia actual > temp cant = cant +1 Devolver (cant == N) Introducción a la Programación Orientada a Objetos

34 public boolean huboNMayores(float t,int n){ /*Decide si hubo exactamente n temperaturas mayores a t*/ int cont = 0; for (int i=0;i<cantDias() && cont<n+1;i++) if (tMin[i] > t) cont++; return cont==n; } Recorrido no exhaustivo Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas 8.12.29.06.20.15.57.06.27.2 t=5.5 n=3 Cuando cont toma valor 4 termina la iteración

35 Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas 11.15.54.08.2 0.1-0.2 si t=5.5 y n = 2 debe computar true si t=5.5 y n = 3 debe computar false si t=-5 y n = 10 debe computar false Dado el siguiente registro de temperaturas public boolean huboNConMayores(float t,int n){ /*Decide si hubo al menos n temperaturas consecutivas mayores a t*/ }

36 Caso de Estudio: Temperaturas Mínimas Algoritmo huboNConMayores DE: temp, N DS: Verdadero si hubo, falso en caso contrario cont = 0 Para cada dia mientras que cont < N Si temperatura del dia actual > temp cont = cont + 1 Sino cont = 0 Devolver cont == N Introducción a la Programación Orientada a Objetos

37 public boolean huboNConMayores(float t,int n){ /*Decide si hubo al menos n temperaturas consecutivas mayores a t*/ int cont = 0; for (int i=0;i<cantDias()&&cont < n;i++) if (tMin[i] > t) cont++; else cont = 0; return cont==n; } Recorrido no exhaustivo Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas Establecer Casos de Prueba considerando especialmente que las n temperaturas mayores a t estén en las primeras posiciones o en las últimas de la estructura.

38 TempMinEstacion float [] tMin > mayorAmplitud():real huboMayorAmplitud(t:real):boolean todasAmplitudesCrecientes():boolean Decide si hubo alguna amplitud térmica entre días consecutivos, mayor a t Retorna la mayor amplitud térmica entre 2 días consecutivos, asume que se registraron por lo menos dos días Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas Decide si todas las amplitudes térmicas entre días consecutivos son crecientes Establecer Casos de Prueba para cada servicio

39 Caso de Estudio: Temperaturas Mínimas Algoritmo mayorAmplitud Requiere: periodo de al menos 2 dias DS: Devuelve la mayor amplitud mayor = |T 0 – T 1 | Para cada dia entre el segundo y el ante ultimo Si |T i – T i+1 | > mayor mayor = |T i – T i+1 | Devolver mayor Introducción a la Programación Orientada a Objetos

40 public float mayorAmplitud(){ //Requiere un período de al menos 2 dias float may=Math.abs(tMin[0]-tMin[1]); for (int i=1;i<cantDias()-1; i++) if (Math.abs(tMin[i]-tMin[i+1]) > may) may = Math.abs(tMin[i]-tMin[i+1]); return may; } Recorrido Exhaustivo Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas

41 Algoritmo todasAmplitudesCrecientes Requiere: periodo de al menos 2 dias DS: Verdadero si son crecientes, falso caso contrario todasCreci = verdadero ampAnterior = |T 0 – T 1 | Para cada dia excepto el ultimo mientras todasCreci ampActual = |T i – T i+1 | todasCreci = ampAnterior < ampActual ampAnterior = ampActual Devolver todasCreci Introducción a la Programación Orientada a Objetos

42 public boolean todasAmplitudesCrecientes(){ //Requiere un período de al menos 2 dias boolean todas= true; float a1=Math.abs(tMin[0]-tMin[1]); for (int i=1;i<cantDias()-1 && todas;i++){ float a2 = Math.abs(tMin[i]-tMin[i+1]); todas = a1 < a2; a1 = a2; } return todas; } Recorrido NO Exhaustivo Introducción a la Programación Orientada a Objetos Caso de Estudio: Temperaturas Mínimas

43 TempMinEstacion float [] tMin > mayoresDiferencias (tme:TempMinEstacion, t:real ) : entero hayDiferenciaMayor (tme:TempMinEstacion, t: real) : boolean mayorDiferencia (tme:TempMinEstacion ) :real menorEntreEstaciones (tme:TempMinEstacion): TempMinEstacion Cuenta en cuántos días la diferencia absoluta entre las temperaturas de las dos estaciones es mayor a t Decide si en dos estaciones en algún día la diferencia absoluta entre temperaturas es mayor a t Retorna la mayor diferencia absoluta entre dos estaciones en el mismo día, asume que se registraron por lo menos dos días Retorna una Estación con la menor temperatura mínima de cada día entre dos estaciones dadas Requieren la misma cantidad de temperaturas en las dos estaciones Caso de Estudio: Temperaturas Mínimas Reciben y/o retornan un objeto de la clase TempMinEstacion

44 Caso de Estudio: Temperaturas Mínimas para cada día d del período t1 temperatura del día d de Estación 1 la estación que recibe el mensaje t2 temperatura del día d de Estación 2 la estación que pasa como parámetro si abs(t1-t2) > t cont cont+1 612-287.5 0 4.5 54258.5 10 11

45 Caso de Estudio: Temperaturas Mínimas para cada día d del período t1 tMin[d] t2 tme.obtenerTempMin(d) si abs(t1-t2) > t cont cont+1 612-287.5 0 4.5 54258.5 10 11 tMin es un arreglo las componentes se acceden usando un subíndice. tme es un objeto de clase TempMinEstacion, las componentes se acceden con los servicios provistos por la clase

46 public int mayoresDiferencias(TempMinEstacion tme, float t ){ /*Cuenta en cuantos días la diferencia absoluta entre las temperaturas de las dos estaciones es mayor a t Requiere la misma cantidad de temperaturas en las dos estaciones*/ int cont = 0; float t1,t2; for (int d = 0; d<cantDias() ; d++){ t1=tMin[d]; t2 = tme.obtenerTempMin(d); if(Math.abs(t1-t2)> t) cont++; } return cont; } Caso de Estudio: Temperaturas Mínimas

47 public int mayoresDiferencias(TempMinEstacion tme, float t ){ /* Cuenta en cuantos días la diferencia absoluta entre las temperaturas de las dos estaciones es mayor a t Requiere la misma cantidad de temperaturas en las dos estaciones */ int cont = 0; for (int d = 0; d<cantDias() ; d++) if(Math.abs(tMin[d]-tme.obtenerTempMin(d))> t) cont++; return cont; } Caso de Estudio: Temperaturas Mínimas Observe que si la clase cliente no cumple con la responsabilidad de que las dos estaciones tengan la misma cantidad de elementos se va a producir un error de aplicación o de ejecución (si la cantidad de días de tme es menor que cantDias()).

48 tMin 612-287.5 7 length 0 4.5 tMin 54258.5 7 length 10 11 tme Caso de Estudio: Temperaturas Mínimas estN estS

49 public boolean hayDiferenciaMayor(TempMinEstacion tme, float t ){ /*Decide si en dos estaciones en algún día la diferencia absoluta entre temperaturas es > t Requiere la misma cantidad de temperaturas en las dos estaciones */ boolean hay = false; for (int d = 0; d<cantDias() && !hay; d++) if(Math.abs(tMin[d]-tme.obtenerTempMin(d))> t) hay = true; return hay; } Caso de Estudio: Temperaturas Mínimas

50 public float mayorDiferencia (TempMinEstacion tme){ /*Retorna la mayor diferencia absoluta entre dos estaciones, en el mismo día asume que se registraron por lo menos dos días Requiere la misma cantidad de temperaturas en las dos estaciones */ float mayor = 0; for (int d = 0; d<cantDias(); d++) if(Math.abs(tMin[d]-tme.obtenerTempMin(d))> mayor) mayor = Math.abs(tMin[d]-tme.obtenerTempMin(d)); return mayor; } Caso de Estudio: Temperaturas Mínimas

51 public TempMinEstacion menorEntreEstaciones(TempMinEstacion tme){ /* Retorna una Estación con la menor temperatura mínima de cada día entre dos estaciones dadas Requiere la misma cantidad de temperaturas en las dos estaciones*/ TempMinEstacion tMenor = new TempMinEstacion(cantDias()); for (int d = 0; d<cantDias() ; d++) if(tMin[d]<tme.obtenerTempMin(d)) tMenor.establecerTempMin(d,tMin[d]); else tMenor.establecerTempMin(d,tme.obtenerTempMin(d)); return tMenor; } Caso de Estudio: Temperaturas Mínimas


Descargar ppt "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."

Presentaciones similares


Anuncios Google