La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS

Presentaciones similares


Presentación del tema: "INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS"— Transcripción de la presentación:

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 Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2017

2 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: float tabla [][]; tabla = new float[nEst][n]; Introducción a la Programación Orientada a Objetos IPOO

3 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA
Gráficamente un arreglo de dos dimensiones puede verse como una grilla: 1 2 3 4 5 6 -4.0 5.0 11.0 8.0 4.0 -2.0 0.0 1.0 -3.0 -1.0 Cada fila representa a una estación. Cada columna representa a un día del período.

4 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: 1 2 3 4 5 6 -4.0 5.0 11.0 8.0 4.0 -2.0 0.0 1.0 -3.0 -1.0 1 2 3 4 5 6 -4.0 5.0 11.0 8.0 4.0 -2.0 0.0 1.0 -3.0 -1.0 tabla[2] Introducción a la Programación Orientada a Objetos IPOO

5 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 : 1 2 3 4 5 6 -4.0 5.0 11.0 8.0 4.0 -2.0 0.0 1.0 -3.0 -1.0 1 2 3 4 5 6 -4.0 5.0 11.0 8.0 4.0 -2.0 0.0 1.0 -3.0 -1.0 tabla[0][3] Introducción a la Programación Orientada a Objetos IPOO

6 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

7 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA
tabla 4 4 4 4 4 4 4 length 7 Introducción a la Programación Orientada a Objetos IPOO

8 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA
TempMinRegion <<atributos de instancia>> real [][] tMin <<Constructores>> TempMinRegion(nEst, nDias: entero) <<Comandos>> 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. Introducción a la Programación Orientada a Objetos IPOO

9 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA
TempMinRegion <<atributos de instancia>> real [][] tMin <<Consultas>> 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.

10 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

11 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]; } …

12 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA
public int cantEstaciones () { return tabla.length ; } public int cantDias () { return tabla[0].length ; 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

13 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] ; Observemos que el primer día corresponde a subíndice 0 en el arreglo.

14 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. Es un recorrido exhaustivo 1 2 3 4 5 6 -4.0 5.0 11.0 8.0 4.0 -2.0 0.0 1.0 -3.0 -1.0

15 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 Es una versión refinada del algoritmo anterior donde se identifican claramente las estructuras de control. Introducción a la Programación Orientada a Objetos IPOO

16 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; } 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. Introducción a la Programación Orientada a Objetos IPOO

17 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

18 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

19 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

20 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

21 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; } Recorre todas las estaciones del día d. Es un recorrido exhaustivo de una columna del arreglo. Introducción a la Programación Orientada a Objetos IPOO

22 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 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. Introducción a la Programación Orientada a Objetos IPOO

23 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 ; } El recorrido es exhaustivo, todas las estaciones meteorológicas tienen que considerarse. Introducción a la Programación Orientada a Objetos IPOO

24 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; Cada recorrido sobre una estación meteorológica particular es no exhaustivo. Sí un día helo, el método retorna verdadero.

25 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 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 En la segunda versión no se asume disponible una primitiva, la solución propone dos bucles anidados

26 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 ;

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

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

29 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()); } …

30 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;

31 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(); }

32 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

33 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

34 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA
TempMinRegion <<atributos de instancia>> TempMinEstacion [] tabla <<Constructores>> TempMinRegion(nEst, nDias: entero) <<Comandos>> 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. Introducción a la Programación Orientada a Objetos IPOO

35 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA
TempMinRegion <<atributos de instancia>> TempMinEstacion [] tabla <<Consultas>> 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.

36 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA
class TempMinRegion { private TempMinEstacion[] tabla; public TempMinRegion(int nEst, int nDias){ //Requiere nEst>0 y nDias >0 tabla = new TempMinEstacion[nEst]; for (int est=0;est<nEst;est++) tabla[est] = new TempMinEstacion(nDias); } … Introducción a la Programación Orientada a Objetos IPOO

37 CASO DE ESTUDIO: ESTACIÓN METEOROLÓGICA
public int cantEstaciones () { return tabla.length ; } public int cantDias () { return tabla[0].cantDias(); 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 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){ return tabla[e].obtenerTempMin(d); Introducción a la Programación Orientada a Objetos IPOO

39 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; La clase TempMinRegion está asociada a la clase TempMinEstacion, tiene un atributo de esa clase y usa sus servicios.

40 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()); … } Como la representación de los datos está encapsulada, el cambio en la estructura no afecta a las clases que usan a TempMinRegion.

41 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;

42 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(); }

43 CE: Estaciones Meteorológicas
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 ; } La implementación de estacionesHeladas no se modifica. El recorrido es exhaustivo, todas las estaciones meteorológicas tienen que considerarse.


Descargar ppt "INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS"

Presentaciones similares


Anuncios Google