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 Arreglo.

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 Arreglo."— 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 Arreglo de dos dimensiones 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 2015

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 nEst 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 - 2015 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: Introducción a la Programación Orientada a Objetos IPOO - 2015 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

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 - 2015 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 de la primera estación meteorológica del cuarto día de la semana: Introducción a la Programación Orientada a Objetos IPOO - 2015 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 - 2015 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 - 2015 7 TempMinEstacion > real [][] tMin > TempMinRegion(nEst, nDias: entero) > establecerTemp(e, d: entero, t: real) Requiere nEst>0 y nDias>0 Requiere 0<=e<cantEstaciones() y 0<=d<cantDias()

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 TempMinEstacion > real [][] tMin > cantEstaciones(): entero cantDias(): entero obtenerTemp(e,d:entero): real promedioRegion(): real promedioEstacion(e: entero): real promedioDia(d: entero): real estacionesHeladas(): entero Requieren 0<=e<cantEstaciones() y 0<=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 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 float [][] tabla; public TempMinRegion(int nEst, int nDias){ //Requiere nEst>0 y nDias >0 tabla = new float[nEst][nDias]; } … } 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 public int cantEstaciones () { return tabla.length ; } public int cantDias () { return tabla[0].length ; } 10 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.

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 public void establecerTemp(int e,int d, float t){ /*Requiere 0<= e < cantEstaciones() y 0<= d < cantDias()*/ tabla[e][d] = t ; } public float obtenerTemp(int e, int d){ /*Requiere 0<= e < cantEstaciones() y 0 <= d< cantDias()*/ return tabla[e][d] ; } 11 Observemos que en este diseño el primer día y la primera estación se referencian con 0.

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 float promedioEstacion (int est) { /* Requiere 0<=e<cantEstaciones() */ float sum = 0; for (int dia=0;dia<cantDias();dia++) sum = sum + tabla[est][dia]; return sum/cantDias(); } Introducción a la Programación Orientada a Objetos IPOO - 2015 12

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 float promedioEstacion (int est) { /* Requiere 0<=e<cantEstaciones() */ float sum = acumuloEstacion(est); return sum/cantDias(); } Introducción a la Programación Orientada a Objetos IPOO - 2015 13 Calcular el promedio de una estación requiere sumar una fila.

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 private float acumuloEstacion (int i) { float sum = 0; for (int j=0; j < cantDias(); j++) sum = sum + tabla[i][j]; return sum; } Introducción a la Programación Orientada a Objetos IPOO - 2015 14

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 promedioRegion DS promedio Recorrer cada estación y por cada estación cada día, acumulando las temperaturas Dividir el valor acumulado por la cantidad de temperaturas registradas 15 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

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 Algoritmo promedioRegion DS promedio para cada estacion e para cada dia d de la estacion e suma ← suma + temperatura de estacion e en dia d promedio ← suma : (estaciones x dias) 16 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 una versión refinada del algoritmo anterior, permite identificar las estructuras de control

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 public float promedioRegion () { float sum = 0; for (int i = 0; i < cantEstaciones(); i++) for (int j = 0; j < cantDias(); j++) sum = sum + tabla[i][j]; return sum/(cantDias()*cantEstaciones()); } Introducción a la Programación Orientada a Objetos IPOO - 2015 17 Un recorrido exhaustivo por Estación y luego por Día puede implementarse con dos bucles for anidados.

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 public float promedioRegion () { float sum = 0; for (int i=0; i < cantEstaciones(); i++) sum = sum + acumuladoEstacion(i); return sum/(cantDias()*cantEstaciones()); } Introducción a la Programación Orientada a Objetos IPOO - 2015 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 promedioDia (int dia) { //Requiere 0<=dia<cantDias() float sum = 0; for (int i=0;i<cantEstaciones();i++) sum = sum + tabla[i][dia]; return (sum / cantEstaciones()); } Introducción a la Programación Orientada a Objetos IPOO - 2015 19 Recorre exhaustivamente todas las estaciones de un mismo día. El recorrido exhaustivo de una columna puede implementarse con un bucle for.

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 Algoritmo estacionesHeladas DS contador para cada estacion si heló al menos un dia incrementar el contador Introducción a la Programación Orientada a Objetos IPOO - 2015 20 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.

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 int estacionesHeladas () { /*Cuenta la cantidad de estaciones en las que heló*/ int cont = 0; for (int i=0; i<cantEstaciones(); i++) if (huboHeladas(i)) cont++; return cont ; } Introducción a la Programación Orientada a Objetos IPOO - 2015 21 El recorrido es exhaustivo, todas las estaciones meteorológicas tienen que considerarse.

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 private boolean huboHeladas (int est) { /* Requiere 0<=e<cantEstaciones() */ boolean helada = false; int j=0; while (j < cantDias() && !helada){ if ( tabla[est][j]<=0) helada = true; j++; } return helada; } 22 Cada recorrido sobre una estación meteorológica particular es no exhaustivo. Sí un día helo, el método retorna verdadero. Es muy importante elegir casos de prueba significativos.

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 Algoritmo estacionesHeladas DS contador para cada estacion si heló al menos un dia incrementar el contador 23 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 para cada día de la semana y mientras no encuentre uno en el que heló si heló incrementar contador

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 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 ; } 24

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 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 ; } 25 ERROR DE APLICACIÓN

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++; } j++; } return cont ; } 26 ERROR DE APLICACIÓN

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 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("Promedio Region "+ reg.promedioRegion() ); System.out.println("Promedio Estacion 0 "+ reg.promedioEstacion(0) ); System.out.println("Estaciones Heladas "+ reg.estacionesHeladas() ); } … } 27

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 static TempMinRegion genTempMinReg(int cant) { float t ; TempMinRegion e = new TempMinRegion(4,cant); for (int i=0;i< e.cantEstaciones();i++) for (int j=0;j< e.cantDias();j++){ t = j+i-5; e.establecerTemp (i,j,t) ; }; return e; } public static void mostrarTempMinReg (TempMinRegion e){ for (int i=0;i< e.cantEstaciones();i++) for (int j=0;j< e.cantDias();j++) System.out.println(" "+e.obtenerTemp(i,j) ); } 28

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 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 - 2015 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 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 - 2015 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 RESUMEN Declaración, creación y recorrido en arreglos de dos dimensiones Estructuras de datos y encapsulamiento Diseño de algoritmos: Recorridos exhaustivos y no exhaustivos. Tester: Casos de Prueba. Introducción a la Programación Orientada a Objetos IPOO - 2015 31


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 Arreglo."

Presentaciones similares


Anuncios Google