La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

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.

Presentaciones similares


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

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<=e<cantEstaciones() y 1<=d<=cantDias() Observemos que en este diseño la primera estación se referencia con 0 y el primer día con 1.

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<=e<cantEstaciones() y 1<=d<=cantDias() Cuenta la cantidad de estaciones en las que heló Queda pendiente como ejercicio establecer casos de prueba adecuados para verificar cada servicio. 9

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<= e < cantEstaciones() y 1<=d<=cantDias()*/ tabla[e][d-1] = t ; } public float obtenerTemp(int e, int d){ /*Requiere 0<=e<cantEstaciones() y 1<=d<=cantDias()*/ return tabla[e][d-1] ; } 13 Observemos que el primer día corresponde a subíndice 0 en el arreglo.

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<cantEstaciones();est++) for (int dia=0;dia<cantDias();dia++) if (tabla[est][dia]> t) cont++; return cont; } Introducción a la Programación Orientada a Objetos IPOO - 2016 16 Un recorrido exhaustivo por estación y luego por día puede implementarse con dos bucles anidados. Observemos que recorremos el arreglo desde la fila 0, columna 0.

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;est<cantEstaciones();est++){ pEst = promedioTempMin(est); if (pEst>mayor) 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<cantDias();dia++) suma = suma + tabla [e][dia]; return suma/cantDias(); } Introducción a la Programación Orientada a Objetos IPOO - 2016 20

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<=d<=cantDias() float mayor = tabla[0][d-1]; for (int est=1;est<cantEstaciones();est++) if (tabla[est][d-1] > mayor) mayor = tabla[est][d-1] ; return mayor; } Introducción a la Programación Orientada a Objetos IPOO - 2016 21 Recorre todas las estaciones del día d. Es un recorrido exhaustivo de una columna del arreglo.

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<cantEstaciones();est++) if (huboHeladas(est)) cont++; return cont ; } Introducción a la Programación Orientada a Objetos IPOO - 2016 23 El recorrido es exhaustivo, todas las estaciones meteorológicas tienen que considerarse.

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<=e<cantEstaciones() */ boolean helada = false; int dia=0; while (dia < cantDias() && !helada){ if ( tabla[e][dia]<=0) helada = true; dia++; } return helada; } 24 Cada recorrido sobre una estación meteorológica particular es no exhaustivo. Sí un día helo, el método retorna verdadero.

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] <= 0){ cont++; helada = true; } j++; } } return cont ; } 26

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] <= 0){ cont++; helada = true; } j++; } return cont ; } 27 ERROR DE APLICACIÓN

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] <= 0){ cont++; } j++; } return cont ; } 28 ERROR DE APLICACIÓN

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 <= e.cantDias()-1;j++){ t = j*2; e.establecerTemp(e.cantEstaciones()-1,j,t); } e.establecerTemp(e.cantEstaciones()-1, e.cantDias(),0); return e; } 30

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<= e.cantDias();j++) System.out.print(" "+e.obtenerTemp(i,j)); System.out.println(); } 31

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<=e<cantEstaciones() y 1<=d<=cantDias() En este diseño la region se modela con un arreglo cuyas componentes mantienen referencias a objetos.

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<=e<cantEstaciones() y 1<=d<=cantDias() Cuenta la cantidad de estaciones en las que heló El cambio en la representación interna de los datos no afecta a la signatura de los servicios. 35

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<nEst;est++) tabla[est] = new TempMinEstacion(nDias); } … } Introducción a la Programación Orientada a Objetos IPOO - 2016 36

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<=e<cantEstaciones() y 1<=d<=cantDias() */ tabla[e].establecerTempMin(d,t); } public float obtenerTemp(int e,int d){ /* Requiere 0<=e<cantEstaciones() y 1<=d<=cantDias() */ return tabla[e].obtenerTempMin(d); } Introducción a la Programación Orientada a Objetos IPOO - 2016 38

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;est<cantEstaciones();est++){ pEst= tabla[est].promedioTempMin(); if (pEst>mayor) 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<= e.cantDias()-1;j++){ t = j*2; e.establecerTemp (e.cantEstaciones()-1,j,t); } e.establecerTemp (e.cantEstaciones()-1, e.cantDias(),0); return e; } 41

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<= e.cantDias();j++) System.out.print(“ “ +e.obtenerTemp(i,j) ); System.out.println(); } 42


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

Presentaciones similares


Anuncios Google