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.

Slides:



Advertisements
Presentaciones similares
ANALIZADOR SEMANTICO DIANA CAROLINA CASTAÑO YANCI VIVIANA CASTRO PEDRO LUIS FLÓREZ SANTIAGO GUTIÉRREZ A.
Advertisements

Lenguaje de programación Java
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Introducción a la Programación Orientada a Objetos Una Universidad administra varias residencias para estudiantes extranjeros. Cada residencia ocupa un.
El proceso de desarrollo de software
Abstracciones y Modelos
Reusabilidad La productividad está basada en reusabilidad y extensibilidad El reusabilidad permite desarrollar nuevas aplicaciones a partir de componentes.
El proceso de desarrollo de software
Aplicación del paradigma orientado a objetos
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.
Introducción a la Programación Orientada a Objetos Redefinición y Sobrecarga Dada la siguiente jerarquía de clases: Alfa Delta Beta.
Lic. Rosemary Torrico Bascopé
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 10: Interfaces Antonio J. Sierra.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
6. Herencia. Clases abstractas. Genericidad
Criterios de la Orientación a Objetos 1. Método y Lenguaje (proceso de pensamiento y notaciones para analizar y producir software). 2. Implementación y.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Herramientas de polimorfismo y herencia en C++
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Clases.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Estructuras.
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Genericidad.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tabla.
Unidad 2.1: INTRODUCCIÓN A LA ORIENTACIÓN A OBJETOS.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Colección.
Programación orientada a objetos
:: Prof. Yeniffer Peña Programación I Programación Orientada a Objetos Presentación.
Herencia y Clases Abstractas
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo.
6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Clases.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Abstracción.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
Abstracción El concepto de abstracción es esencial en ciencias de la computación. Un programa es en sí mismo una abstracción, un modelo de la resolución.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
Diferencia entre implementar en RPA e IPOO - Diseño En.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Práctica 4 Versión Diseño de tipos Igualdad, representación, código,
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Asociación.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Prof. Manuel B. Sánchez.  El origen del término polimorfismo es simple: proviene de las palabras griegas poly (muchos) y morphos (forma) multiforme.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Dependencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Herencia.
Introducción a la Programación Orientada a Objetos Sonia Rueda Herencia y Polimorfismo Departamento de Ciencias e Ingeniería de la Computación UNIVERSIDAD.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Sonia Rueda Herencia y Polimorfismo
IPOO 2 cuatrimestre 2017 Departamento de Ciencias e Ingeniería
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Transcripción de la presentación:

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso de estudio: M.E. en un Hospital Dr. Luciano H. Tamargo Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2015

CASO DE ESTUDIO: M.E. EN UN HOSPITAL En un hospital cada una de los pasillos tiene un número asignado entre 1 y la cantidad total. Cada pasillo tiene previsto un espacio para colocar una máquina expendedora, aunque no todos los pasillos tienen una. La clase MEHospital modela la tabla de máquinas expendedoras asignadas a los pasillos y brinda servicios para computar la cantidad total de café que contienen las máquinas y la cantidad total de leche entre los modelos M111. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: M.E. EN UN HOSPITAL 3 MaquinaExpendedora R101M111 R101Plus Introducción a la Programación Orientada a Objetos IPOO MEHospital

4 > MaquinaExpendedora[] T > MEHospital(max: entero) > instalar(unaME: MaquinaExpendedora, p: entero) retirar(p:entero) > cantPasillos(): entero cantPasillosOcupados(): entero hayPasillosLibres(): boolean todosOcupados(): boolean existeME(unaME: MaquinaExpendedora): boolean totalCafe(): entero totalLeche(): entero Decide si hay una máquina equivalente a unaME

5 public boolean existeME (MaquinaExpendedora unaMe){ /* Decide si hay una ME equivalente a unaMe, que asume ligada*/ int i = 0; boolean esta = false; while (i < cantPasillos() && !esta){ if (T[i] != null) esta = T[i].equals(unaMe); i++; } return esta; } El mensaje equals debe ligarse con el método que corresponda a la clase del objeto asociado T[i], es decir, equals debe estar redefinido en cada clase que herede a MaquinaExpendedora.

6 * MaquinaExpendedora > maxCafe: entero maxTe: entero maxCacao: entero > NroSerie: entero cantCafe: entero cantCacao: entero cantTe: entero > MaquinaExpendedora(ns: entero) > cafe() te() cargarCafe(grs: entero): entero… > equals(unaMe: MaquinaExpendedora): boolean Decide si hay una máquina equivalente a unaME. Asume unaMe ligada

CASO DE ESTUDIO: M.E. EN UN HOSPITAL 7 abstract class MaquinaExpendedora{ public boolean equals(MaquinaExpendedora unaMe){ /* Decide si la máquina es equivalente a unaMe. Asume unaMe ligada */ return nroSerie() == unaMe.obtenerNroSerie()&& cantCafe() == unaMe.obtenerCantCafe() && cantCacao() == unaMe.obtenerCantCacao()&& cantTe() == unaMe.cantCantTe(); } } Introducción a la Programación Orientada a Objetos IPOO

8 M111 > maxLeche: entero … > cantLeche: entero … > M111(ns: entero) > te() teConLeche subMarino()… cargarLeche(grs: entero): entero… > equals(unaMe: MaquinaExpendedora): boolean obtenerCantLeche(): entero… obtenerMaxLeche(): entero … vasosTeConLeche(): entero Decide si la máquina es equivalente a unaMe. Asume unaMe ligada

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Si el método equals tiene la misma signatura que el método provisto por MaquinaExpendedora, queda redefinido. absract class MaquinaExpendedora{ public boolean equals(MaquinaExpendedora unaMe){ … } } class M111 extends MaquinaExpendedora{ public boolean equals(MaquinaExpendedora unaMe){ … } }

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Consideramos dos máquinas del modelo M111 equivalentes si los atributos generales y los específicos son iguales. El compilador rechaza el mensaje unaMe.obtenerCantLeche() porque unaMe es de clase MaquinaExpendedora. class M111{ public boolean equals(MaquinaExpendedora unaMe){ /* Decide si la máquina es equivalente a unaMe. Asume unaMe ligada */ return super.equals(unaMe) && cantLeche() == unaMe.obtenerCantLeche(); } }

CASO DE ESTUDIO: M.E. EN UN HOSPITAL El compilador acepta el mensaje e.obtenerCantLeche() porque e es de clase M111. Sin embargo, esta implementación no es adecuada para nuestro problema. class M111{ public boolean equals(M111 unaMe){ /* Decide si la máquina es equivalente a unaMe. Asume unaMe ligada */ return super.equals(unaMe) && cantLeche() == unaMe.obtenerCantLeche(); } }

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Si el método equals tiene distinta signatura que el método provisto por MaquinaExpendedora, queda sobrecargado. absract class MaquinaExpendedora{ public boolean equals(MaquinaExpendedora unaMe){ … } } class M111 extends MaquinaExpendedora{ public boolean equals(M111 unaMe){ … } }

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Si el método equals está sobrecargado es el tipo estático del parámetro el que determina la ligadura. Siempre se ejecutará el método definido en MaquinaExpendedora. public boolean existeME (MaquinaExpendedora unaMe){ /* Decide si hay una ME equivalente a unaMe, que asume ligada*/ int i = 0; boolean esta=false; while (i < cantPasillos() && !esta){ if (T[i] != null) esta = T[i].equals(unaMe); i++; } return esta; }

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Necesitamos que: – equals esté definido en MaquinaExpendedora y redefinido en cada clase derivada, es decir, que tenga la misma signatura. –En la implementación de equals en la clase M111 tenemos que acceder a cantLeche. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Este método se ejecuta si un objeto de clase M111 recibe el mensaje equals. Para decidir si ese objeto es igual al parámetro es necesario considerar que el parámetro sea también de clase M111. class M111{ public boolean equals(MaquinaExpendedora unaMe){ // Asume unaMe ligada boolean ig = false; if (getClass() == unaMe.getClass()){ M111 r = (M111) unaMe; ig = super.equals(unaMe) && cantLeche() == r.obtenerCantLeche(); } return ig; } }

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Analizar en qué caso no es correcta esta versión class M111{ public boolean equals(MaquinaExpendedora unaMe){ /* Decide si la máquina es equivalente a unaMe. Asume unaMe ligada */ boolean ig = false; if (unaMe instanceof M111){ M111 r = (M111) unaMe; ig = super.equals(unaMe) && cantLeche() == r.obtenerCantLeche(); } return ig; } }

CASO DE ESTUDIO: M.E. EN UN HOSPITAL 17 :M111 t NroSerie cantCafé cantTe cantCacao cantLeche :R101 NroSerie cantCafé cantTe cantCacao cantCrema :R101Plus NroSerie cantCafé cantTe cantCacao cantCrema cantCanela

CASO DE ESTUDIO: M.E. EN UN HOSPITAL En este caso el diseñador considera que dos máquinas son equivalentes si tienen el mismo número de serie. El atributo nroSerie es la clave. El método igualNroSerie solo se define en la clase MaquinaExpendedora. public boolean existeME (MaquinaExpendedora unElem){ /* Decide si hay un elemento equivalente a unElem, que asume ligada*/ int i = 0; boolean esta=false; while (i < cantPasillos() && !esta){ if (T[i] != null) esta = T[i].igualNroSerie(unaMe); i++; } return esta; }