1 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento y Abstracción Caso de estudio: Estación meteorológica Dr. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2016
2 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA En una región se mantienen las temperaturas mínimas registradas en un conjunto de estaciones meteorológicas en un período de n días. Una manera de representar los datos sería mediante un arreglo de dos dimensiones declarado como sigue: Introducción a la Programación Orientada a Objetos IPOO - 2016 2 float tabla [][]; tabla = new float[nEst][n];
3 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA Gráficamente un arreglo de dos dimensiones puede verse como una grilla: 3 0123456 0-4.05.011.08.0 4.0-2.0 10.0 1.05.00.05.00.0 2-2.00.05.0-2.011.04.00.0 3-3.0-2.04.05.08.011.0 Cada fila representa a una estación. Cada columna representa a un día del período.
4 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA La operación básica sigue siendo la subindicación. Ahora cuando especificamos sólo un subíndice hacemos referencia a una fila completa: Introducción a la Programación Orientada a Objetos IPOO - 2016 4 tabla[2] 0123456 0-4.05.011.08.0 4.0-2.0 10.0 1.05.00.05.00.0 2-2.00.05.0-2.011.04.00.0 3-3.0-2.04.05.08.011.0 0123456 0-4.05.011.08.0 4.0-2.0 10.0 1.05.00.05.00.0 2-2.00.05.0-2.011.04.00.0 3-3.0-2.04.05.08.011.0
5 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA Para hacer referencia a un elemento particular, por ejemplo, la temperatura mínima del cuarto día de la primera estación meteorológica : Introducción a la Programación Orientada a Objetos IPOO - 2016 5 tabla[0][3] 0123456 0-4.05.011.08.0 4.0-2.0 10.0 1.05.00.05.00.0 2-2.00.05.0-2.011.04.00.0 3-3.0-2.04.05.08.011.0 0123456 0-4.05.011.08.0 4.0-2.0 10.0 1.05.00.05.00.0 2-2.00.05.0-2.011.04.00.0 3-3.0-2.04.05.08.011.0
6 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA Un arreglo de dos dimensiones es en realidad un arreglo cuyas componentes son arreglos. No todas las componentes tienen necesariamente la misma cantidad de elementos. La variable length sigue siendo accesible, tabla.length nos proporciona el número de filas (cuatro). tabla[i].length, nos indica el número de elementos en la fila i. Introducción a la Programación Orientada a Objetos IPOO - 2016 6
7 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA Introducción a la Programación Orientada a Objetos IPOO - 2016 7 tabla 7 length 4 444444
8 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA Introducción a la Programación Orientada a Objetos IPOO - 2016 8 TempMinRegion > real [][] tMin > TempMinRegion(nEst, nDias: entero) > establecerTemp(e, d: entero, t: real) Requiere nEst>0 y nDias>0 Requiere 0
9 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA TempMinRegion > real [][] tMin > cantEstaciones(): entero cantDias(): entero obtenerTemp(e,d:entero): real contarMayores(t: real): entero mayorPromedioRegion(): real mayorTempDia(d: entero): real estacionesHeladas(): entero Requieren 0
10 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA contarMayores(t: real): entero computa la cantidad de días en los que se produjeron temperaturas mayores a t en la región. mayorPromedioRegion(): real computa el promedio de cada estación y retorna el mayor. mayorTempDia(d: entero): real retorna la mayor temperatura del día d, considerando todas las estaciones. estacionesHeladas(): entero computa en cuántas estaciones se produjeron heladas. Introducción a la Programación Orientada a Objetos IPOO - 2016 10
11 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA class TempMinRegion { /*Cada fila de la matriz representa a una estación y cada columna a un día del período*/ private float [][] tabla; public TempMinRegion(int nEst, int nDias){ //Requiere nEst > 0 y nDias > 0 tabla = new float[nEst][nDias]; } … } 11
12 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public int cantEstaciones () { return tabla.length ; } public int cantDias () { return tabla[0].length ; } 12 En este problema todas las filas tienen la misma cantidad de columnas, de modo que cantDias() no necesita recibir como parámetro un número que indique de qué fila se va a retornar la cantidad de columnas. Introducción a la Programación Orientada a Objetos IPOO - 2016
13 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public void establecerTemp(int e,int d, float t){ /*Requiere 0
14 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA Algoritmo contarMayores Recorrer cada día en cada estación Incrementar un contador si la temperatura es mayor a una temperatura dada. 14 0123456 0-4.05.011.08.0 4.0-2.0 10.0 1.05.00.05.00.0 2-2.00.05.0-2.011.04.00.0 3-3.0-2.04.05.08.011.0 Es un recorrido exhaustivo
15 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA Algoritmo contarMayores DE t DS contador para cada estacion e para cada dia d de la estacion e si la temperatura del día d en la estación e es > t incrementar contador Introducción a la Programación Orientada a Objetos IPOO - 2016 15 Es una versión refinada del algoritmo anterior donde se identifican claramente las estructuras de control.
16 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public float contarMayores (float t) { int cont = 0; for (int est=0;est
17 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA Algoritmo mayorPromedioRegion Considerar que el promedio de la primera estación es el mayor. Calcular el promedio de cada estación, a partir de la segunda, y compararlo con el mayor promedio calculado hasta el momento. Introducción a la Programación Orientada a Objetos IPOO - 2016 17
18 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA Algoritmo mayorPromedioRegion DS mayor mayor ← promedio de la primera estación para cada estacion e a partir de la segunda calcular el promedio de la estacion e si promedio de la estacion e > mayor mayor ← promedio de la estación e Introducción a la Programación Orientada a Objetos IPOO - 2016 18
19 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public float mayorPromedioRegion () { float pEst; float mayor = promedioTempMin(0); for (int est=1;estmayor) mayor = pEst; } return mayor; } Introducción a la Programación Orientada a Objetos IPOO - 2016 19
20 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA private float promedioTempMin(int e) { float suma = 0; for (int dia=0;dia
21 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public float mayorTempDia (int d) { //Requiere 1
22 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA Algoritmo estacionesHeladas DS contador para cada estacion e si heló al menos un dia en e incrementar el contador Introducción a la Programación Orientada a Objetos IPOO - 2016 22 En el diseño de cada algoritmo buscamos identificar las estructuras de control. “para cada estación” implica un recorrido exhaustivo de todas las filas, puede implementarse con un bucle for. Cada fila no va a ser recorrida exhaustivamente, en cuanto se encuentra un día que heló, se incrementa el contador y el recorrido de esa fila termina.
23 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public int estacionesHeladas () { /*Cuenta la cantidad de estaciones en las que heló*/ int cont = 0; for (int est=0;est
24 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA private boolean huboHeladas (int e) { /* Requiere 0
25 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA Algoritmo estacionesHeladas DS contador para cada estacion e si heló al menos un dia en e incrementar el contador 25 En la segunda versión no se asume disponible una primitiva, la solución propone dos bucles anidados Algoritmo estacionesHeladas DS contador para cada estacion e para cada día de la semana d y mientras no encuentre uno en el que heló en e si heló incrementar contador
26 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public int estacionesHeladas () { /*Cuenta la cantidad de estaciones en las que heló*/ int cont = 0; int j = 0; boolean helada; for (int i=0; i < cantEstaciones(); i++){ j = 0; helada = false; while (j < cantDias() && !helada){ if (tabla[i][j]
27 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public int estacionesHeladas () { /*Cuenta la cantidad de estaciones en las que heló*/ int cont = 0; int j = 0; boolean helada; for (int i=0; i < cantEstaciones(); i++){ j = 0; while (j < cantDias() && !helada){ if (tabla[i][j]
28 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public int estacionesHeladas () { /*Cuenta la cantidad de estaciones en las que heló*/ int cont = 0; int j = 0; boolean helada; for (int i=0; i < cantEstaciones(); i++){ j = 0; helada = false; while (j < cantDias() && !helada){ if (tabla[i][j]
29 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA class TestTempMinRegion { public static void main(String[] args) { // Tester para una semana int cant =7; TempMinRegion reg; reg = genTempMinReg(cant) ; System.out.println("Muestra la región "); mostrarTempMinReg(reg) ; System.out.println(“Mayor promedio de la region "+ reg.mayorPromedioRegion()); System.out.println(“Mayor temeratura en el primer día"+ reg.mayorTempDia(1)); System.out.println(“Cantidad de estaciones con heladas "+ reg.estacionesHeladas()); } … } 29
30 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public static TempMinRegion genTempMinReg(int cant) { float t; TempMinRegion e = new TempMinRegion(4,cant); for (int i=0;i< e.cantEstaciones()-1;i++){ for (int j=1;j< e.cantDias();j++){ t = j+i-5; e.establecerTemp (i,j,t) ; } e.establecerTemp(i,e.cantDias(),-i); } for (int j=1;j
31 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public static void mostrarTempMinReg(TempMinRegion e){ for (int i=0;i< e.cantEstaciones();i++){ for (int j=1;j
32 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 RESUMEN La implementación de cada servicio requiere diseñar adecuadamente un algoritmo. El diseño de cada algoritmo exige aplicar los conceptos de programación estructurada, diseño top-down y refinamiento paso a paso, aprendidos en Resolución de Problemas y Algoritmos. Buscamos soluciones correctas, legibles y eficientes. El recorrido de una estructura de datos como un arreglo implica seleccionar adecuadamente las estructuras de control. Introducción a la Programación Orientada a Objetos IPOO - 2016 32
33 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 RESUMEN La verificación de cada servicio requiere elegir adecuadamente los casos de prueba. El diseño establece como siempre los compromisos de la clase Cliente y la clase Proveedora. La verificación consiste en testear que cada clase cumple con su compromiso. Algunas modificaciones de diseño provocan cambios solo en la clase Cliente. Otras decisiones de diseño solo afectan a la clase Proveedora. Otras decisiones afectan a ambas. Introducción a la Programación Orientada a Objetos IPOO - 2016 33
34 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA Introducción a la Programación Orientada a Objetos IPOO - 2016 34 TempMinRegion > TempMinEstacion [] tabla > TempMinRegion(nEst, nDias: entero) > establecerTemp(e, d: entero, t: real) Requiere nEst>0 y nDias>0 Requiere 0
35 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA TempMinRegion > TempMinEstacion [] tabla > cantEstaciones(): entero cantDias(): entero obtenerTemp(e,d:entero): real contarMayores(t: real): entero mayorPromedioRegion(): real mayorTempDia(d: entero): real estacionesHeladas(): entero Requieren 0
36 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA class TempMinRegion { private TempMinEstacion[] tabla; public TempMinRegion (int nEst, int nDias){ //Requiere nEst>0 y nDias >0 for (int est=0;est
37 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public int cantEstaciones () { return tabla.length ; } public int cantDias () { return tabla[0].cantDias(); } 37 En este problema todas las filas tienen la misma cantidad de columnas, de modo que cantDias() no necesita recibir como parámetro un número que indique de qué fila se va a retornar la cantidad de columnas.
38 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public void establecerTemp(int e,int d, float t){ /* Requiere 0
39 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public float mayorPromedioRegion () { float pEst; float mayor = tabla[0].promedioTempMin(); for (int est=1;estmayor) mayor = pEst; } return mayor; } 39 La clase TempMinRegion está asociada a la clase TempMinEstacion, tiene un atributo de esa clase y usa sus servicios.
40 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA class TestTempMinRegion { public static void main(String[] args) { // Tester para una semana int cant =7; TempMinRegion reg; reg = genTempMinReg(cant) ; System.out.println("Muestra la región "); mostrarTempMinReg(reg) ; System.out.println(“Mayor promedio de la region "+ reg.mayorPromedioRegion()); … } … } 40 Como la representación de los datos está encapsulada, el cambio en la estructura no afecta a las clases que usan a TempMinRegion.
41 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public static TempMinRegion genTempMinReg(int cant) { float t ; TempMinRegion e= new TempMinRegion(4,cant); for (int i=0;i< e.cantEstaciones()-1;i++){ for (int j=1;j< e.cantDias();j++){ t = j+i-5; e.establecerTemp (i,j,t) ; } e.establecerTemp (i,e.cantDias(),-i) ; } for (int j=1;j
42 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 0 0 1 11 1 0 1 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA public static void mostrarTempMinReg (TempMinRegion e){ for (int i=0;i< e.cantEstaciones();i++){ for (int j=1;j