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

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 Caso."— 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 Caso de estudio: Estacionamiento 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: ESTACIONAMIENTO Una empresa de micros tiene un estacionamiento formado por un conjunto de unidades de estacionamiento. En un momento dado una unidad puede estar ocupada por un micro o libre. Las unidades libres y ocupadas están intercaladas. El estacionamiento puede ser modelado por un arreglo en el cual el subíndice indica el número de unidad. Inicialmente el estacionamiento está vacío. Introducción a la Programación Orientada a Objetos IPOO - 2015 2

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: ESTACIONAMIENTO Cuando un micro estaciona en una unidad se asigna un objeto a un elemento del arreglo. Cuando se retira un micro se asigna nulo a un elemento del arreglo. Introducción a la Programación Orientada a Objetos IPOO - 2015 3

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: ESTACIONAMIENTO Definimos una clase Estacionamiento como una TABLA de elementos de tipo micro. La clase brinda operaciones para: Estacionar un micro en una Unidad dada. Estacionar un micro en una Unidad libre. Retirar un micro dado. Retirar el micro de una Unidad dada. Decidir si un micro está asignado a alguna Unidad. Recuperar el micro asignado a una Unidad. Introducción a la Programación Orientada a Objetos IPOO - 2015 4

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: ESTACIONAMIENTO Definimos una clase Estacionamiento como una TABLA de elementos de tipo micro. La clase brinda operaciones para: Calcular la cantidad de Unidades. Calcular cuántas Unidades tienen asignado un micro. Decidir si todas las Unidades tienen asignado un micro. Calcular cuántos Micros tienen que hacer la verificación vehicular en el mes m. Asignar un elemento a una posición dada del arreglo Introducción a la Programación Orientada a Objetos IPOO - 2015 5

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: ESTACIONAMIENTO Definimos una clase Estacionamiento como una TABLA de elementos de tipo micro. La clase brinda operaciones para: Asignar un elemento en la primera posición no ligada del arreglo. Asignar nulo a la posición del arreglo ligada a un elemento dado. Asignar nulo a una posición dada del arreglo. Decidir si un micro está asignado a alguna Unidad. Decidir si alguna posición del arreglo está ligada a un elemento dado. … 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: ESTACIONAMIENTO 7 Estacionamiento > t [] Micro Micro > precioBase:real > patente:String cantAsientos:entero fechaUltMnt:Fecha > Introducción a la Programación Orientada a Objetos IPOO - 2015

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: ESTACIONAMIENTO Estacionamiento > t [] Micro > Estacionamiento(max: entero) > estacionar(unMicro: Micro, p: entero) estacionar(unMicro: Micro) retirar(p: entero) retirar(unMicro: Micro) Crea una Tabla con max Unidades Busca la primera unidad libre y asigna el unMicro a la unidad. Requiere que haya una Unidad libre y unMicro no sea nulo Elimina unMicro de la unidad p. Requiere controlada la unidad Asigna unMicro a la Unidad p. Requiere la unidad válida y vacía y micro no nulo Elimina unMicro de la unidad a la que está asignado Introducción a la Programación Orientada a Objetos IPOO - 2015

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: ESTACIONAMIENTO 9 Estacionamiento > t [] Micro > cantUnidades(): entero cantUnidadesOcupadas(): entero todasOcupadas(): boolean estamicro(unMicro:Micro):boolean existeUnidad(p: entero): boolean microUnidad(p: entero): Micro cantVerificación(m: entero): entero Micro > … > … > mesVerificación():entero Introducción a la Programación Orientada a Objetos IPOO - 2015

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 10 class Estacionamiento { private Micro[] t; //Constructor public Estacionamiento(int max) { /*Crea un arreglo para representar max Unidades de estacionamiento */ t = new Micro[max]; }... Introducción a la Programación Orientada a Objetos IPOO - 2015

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 Observemos que si no se cumple el requerimiento la terminación va a ser anormal. El comentario indica que es la clase cliente la responsable de garantizar que hay una Unidad libre, por ejemplo invocando a todasOcupadas(). 11 //Comandos public void estacionar (Micro unMicro) { /*Busca la primera Unidad libre y asigna unMicro a la unidad. Requiere que haya una Unidad libre y unMicro no sea nulo*/ int i = 0; while (t[i] != null) i++; t[i] = unMicro; }

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 Observemos que si no se cumple el requerimiento la terminación va a ser anormal. Si la unidad ya tenía un micro asignado, implícitamente queda eliminado al asignarse un nuevo micro. 12 public void estacionar(Micro unMicro, int p) { /*Asigna unMicro a la unidad p. Requiere controlado la unidad y micro no nulo*/ t[p] = unMicro; }

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 Si no se cumple el requerimiento la terminación va a ser anormal. Si la unidad no tenía un micro asignado no se produce ningún cambio. 13 public void retirar(int p) { /*Elimina el micro de la unidad p. Requiere controlada la unidad*/ t[p] = null; }

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 14 //Comandos public void retirar(Micro unMicro) { /*Elimina el micro de la unidad en la que está estacionado*/ int i = 0; boolean encontro = false; while (i < cantUnidades() && !encontro){ if (t[i] == unMicro) { encontro = true; t[i] = null; } i++; } }

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 public int cantUnidades (){ return t.length(); } public int cantUnidadesOcupadas (){ int i = 0; int cant = 0; while (i < cantUnidades ()){ if (t[i]!=null) cant++; i++; } return cant; } Introducción a la Programación Orientada a Objetos IPOO - 2015 15

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 boolean todasOcupadas (){ int i = 0; boolean todas = true; while (i < cantUnidades () && todas ){ todas = t[i]!=null; i++; } return todas; } Introducción a la Programación Orientada a Objetos IPOO - 2015 16

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 boolean estaMicro(Micro unMicro){ /*Decide si un micro dado, no nulo, está asignado a una Unidad*/ int i = 0; boolean esta = false; while (i < cantUnidades() && !esta ){ esta = t[i] == unMicro ; i++; } return esta; } Introducción a la Programación Orientada a Objetos IPOO - 2015 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 public boolean existeUnidad (int p){ return p >= 0 & p < t.length; } public Micro microUnidad (int p){ /*Retorna el micro en una Unidad dada, que asume controlado*/ return t[p]; } 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 int cantVerificación (int m){ /*Retorna la cantidad de micros que deben hacer la verificación vehicular en el mes m. Requiere 1<=m<=12*/ int cant = 0; for (int i=0; i < cantUnidades();i++) if (t[i].mesVerificacion() == m) cant++ return cant; } Introducción a la Programación Orientada a Objetos IPOO - 2015 19

20 Introducción a la Programación Orientada a Objetos IPOO - 2015 20 class Estacionamiento { private Micro[] t; //Constructor public Estacionamiento(int max) { /*Crea un arreglo con max Unidades */ t = new Micro[max]; } class SectoresFabrica { private Robot[] t; //Constructor public SectoresFabrica(int max) { /*Crea un arreglo con max Sectores */ t = new Robot[max]; } Reusabilidad

21 21 //Comandos public void estacionar (Micro unMicro) { /*Busca la primera Unidad libre y asigna unMicro a la unidad. Requiere que haya una Unidad libre y micro no sea nulo*/ int i = 0; while (t[i] != null) i++; t[i] = unMicro; } //Comandos public void asignar(Robot robot) { /*Busca el primer sector y asigna robot al sector. Requiere que haya un Sector libre y robot no sea nulo*/ int i = 0; while (t[i] != null) i++; t[i] = robot; } Reusabilidad

22 public boolean estaMicro (Micro unMicro){ /*Decide si un micro dado, no nulo, está asignado al menos a una Unidad*/ int i = 0; boolean esta = false; while (i < cantUnidades() && !esta ){ esta = t[i] == unMicro) ; i++; } return esta; } public boolean estaRobot (Robot robot){ /*Decide si un robot dado, no nulo, está asignado a un Sector */ int i = 0; boolean esta = false; while (i < cantSectores() && !esta ){ esta = t[i] == robot) ; i++; } return esta; }

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 REUSABILIDAD Si observamos el comportamiento de la clase SectoresFabrica definida antes y la clase Estacionamiento definida ahora, podemos notar un patrón de comportamiento. Los sectores de la fábrica y las unidades del estacionamiento se asocian a elementos de un arreglo. En ambas clases el constructor crea un arreglo. El comando que asigna un robot a un sector es análogo al comando que estaciona un micro en una unidad. La consulta que decide si un robot está asignado a algún sector es análoga a la consulta que decide si un micro está estacionado en alguna unidad. Introducción a la Programación Orientada a Objetos IPOO - 2015 23

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 REUSABILIDAD Algunos servicios son específicos de SectoresFabrica, otros de Estacionamiento. Una diferencia es que un mismo robot puede estar asignado a dos sectores. En cambio un micro solo puede estar asignado a una unidad de estacionamiento. Dos clases pueden encapsular estructuras análogas pero diferir en el significado de los servicios. En siguiente diseño de la clase Estacionamiento los métodos que insertan elementos asumen la responsabilidad de validar las posiciones. Introducción a la Programación Orientada a Objetos IPOO - 2015 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: ESTACIONAMIENTO Estacionamiento > t [] Micro > Estacionamiento(max: entero) > estacionar(unMicro: Micro, p: entero): boolean estacionar(unMicro: Micro): boolean retirar(p: entero): boolean retirar(unMicro: Micro) Crea una Tabla con max Unidades Busca la primera unidad libre y asigna el unMicro a la unidad. Si no hay una unidad libre retorna false Elimina unMicro de la unidad p. Si la unidad no es válida retorna false Asigna unMicro a la Unidad p. Si la unidad no es válida o está ocupada retorna false Elimina unMicro de la unidad a la que está asignado Introducción a la Programación Orientada a Objetos IPOO - 2015


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

Presentaciones similares


Anuncios Google