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

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
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.
Arquitectura CLARO-TECNOTREE
El proceso de desarrollo de software
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
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Aplicación del paradigma orientado a objetos
Diseño y programación de
Encapsulamiento y Abstracción
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.
El concepto de clase Con frecuencia un término puede definirse de diferentes maneras según el enfoque. Desde el punto de vista del análisis y el diseño.
Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
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 6: Clases Antonio J. Sierra.
1 Herencia en Java Agustín J. González Diseño y Programación Orientados a Objetos.
Semana 5 Subprogramas..
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
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.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
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 Unidad 1 GENERICIDAD
Introducción a la Programación Orientada a Objetos Una clase que modela los atributos y el comportamiento de una colección de objetos, define un tipo de.
Programación orientada a objetos
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 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.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
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.
Tipo de relación entre clases Es uno de los aspectos que distinguen el paradigma de orientación a objetos frente a otros paradigmas. Mecanismo que,
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
Programación Orientada a Objetos: CLASES Y OBJETOS
Clases “ Es una Abstracción de un elemento del mundo real ”
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS GUI.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
Herencias Conceptos básicos i
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
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 Objetos.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
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.
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.
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
Transcripción de la presentación:

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Polimorfismo y Chequeo de Tipos Dr. Luciano H. Tamargo Depto. de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur, Bahía Blanca 2015

PROGRAMACIÓN ORIENTADA A OBJETOS Aunque no existe una caracterización precisa acerca de qué es un lenguaje orientado a objetos, en general se acuerda que debe soportar: –Abstracción de datos y encapsulamiento. –Herencia. –Polimorfismo y ligadura dinámica. Java brinda soporte para todos estos conceptos. Introducción a la Programación Orientada a Objetos IPOO

ABSTRACCIÓN DE DATOS En el diseño de una aplicación, siguiendo la metodología de abstracción de datos, los objetos son organizados en clases de acuerdo a sus atributos y comportamiento. Además, en esta metodología, las clases encapsulan la representación de los atributos y la implementación del comportamiento definiendo tipos de datos abstractos. La abstracción de datos tiene limitaciones para numerosas aplicaciones, en las cuales los objetos comparten algunos atributos o comportamiento, pero difieren en otros. Introducción a la Programación Orientada a Objetos IPOO

HERENCIA En el diseño de una aplicación, siguiendo el paradigma orientado a objetos, las clases son organizadas de acuerdo a sus atributos y comportamiento. La herencia es un mecanismo que permite clasificar clases estableciendo una relación de generalización- especialización. Cuando la herencia es simple la clasificación es jerárquica y las clases se estructuran como un árbol. Un objeto que es instancia de una clase es también instancia de sus clases ancestro siguiendo la rama en el árbol. Introducción a la Programación Orientada a Objetos IPOO

POLIMORFISMO Una variable polimórfica puede referenciar a objetos de diferentes clases. Una asignación polimórfica asocia a una variable declarada de una clase dada a un objeto de una clase derivada. Un método polimórfico recibe como parámetros a variables polimórficas. Introducción a la Programación Orientada a Objetos IPOO

LIGADURA DINÁMICA El tipo estático de una variable es la clase que aparece en la declaración. El tipo dinámico de una variable es la clase del objeto al que está ligada en ejecución. Cuando un método se redefine, la ligadura entre un mensaje y un método queda determinada por la clase del objeto, esto es, por el tipo dinámico de una variable. Introducción a la Programación Orientada a Objetos IPOO

CHEQUEO DE TIPOS El tipo estático de una variable determina los mensajes que puede recibir. El compilador chequea que no va a haber errores en ejecución. El tipo dinámico de la variable determina el método que se ejecuta en respuesta a un mensaje. El compilador no puede establecer la ligadura entre un mensaje y el método, es la clase del objeto en ejecución la que lo determina. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: MÁQUINAS EXPENDEDORAS 8 MaquinaExpendedora R101M111 R101Plus Introducción a la Programación Orientada a Objetos IPOO

9 MaquinaExpendedora > maxCafe: entero maxTe: entero maxCacao: entero > NroSerie: entero cantCafe: entero cantCacao: entero cantTe: entero > MaquinaExpendedora(ns: entero) > cafe() te() cargarCafe(grs: entero): entero… > masCafe(MaquinaExpendedora e): MaquinaExpedendora Cada máquina tiene un número que la identifica

10 M111 > maxLeche: entero … > cantLeche: entero … > M111(ns: entero) > te() teConLeche subMarino()… cargarLeche(grs: entero): entero… > obtenerCantLeche(): entero… obtenerMaxLeche(): entero … vasosTeConLeche(): entero

11 R101 > maxCrema: entero … > cantCrema: entero … > R101(ns: entero) > te() carioca()… cargarCrema(grs: entero): entero… > obtenerCantCrema(): entero… obtenerMaxCrema(): entero … vasosCarioca(): entero …

12 R101Plus > maxCanela: entero … > cantCanela: entero … > R101Plus(ns: entero) > cafe() bahiano()… cargarCanela(grs: entero) : entero… > obtenerCantCanela(): entero… obtenerMaxCanela(): entero … vasosCafe():entero vasosBahiano() : entero … Los métodos cafe() y vasosCafe() se redefinen

CASO DE ESTUDIO: MÁQUINAS EXPENDEDORAS Una variable polimórfica puede quedar asociada a objetos de diferentes clases. Una asignación polimórfica liga un objeto de una clase a una variable declarada de otra clase. 13 : M111 me MaquinaExpendedora me = new M111(nro1); Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: MÁQUINAS EXPENDEDORAS Una variable polimórfica puede quedar asociada a objetos de diferentes clases. Una asignación polimórfica liga un objeto de una clase a una variable declarada de otra clase 14 : M111 me MaquinaExpendedora me = new M111(nro1); … me = new R101(nro2); : R101 Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: MÁQUINAS EXPENDEDORAS El tipo estático de me es MaquinaExpendedora El tipo dinámico de me es R101 ; El tipo estático MaquinaExpendedora determina el conjunto de tipos dinámicos para me. El mismo criterio se aplica al pasaje de parámetros. 15 MaquinaExpendedora me; R101 r = new R101(nro); me = r; Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: MÁQUINA EXPENDEDORA class MaquinaExpendedora {… … public MaquinaExpendedora masCafe (MaquinaExpendedora m) { //Asume m ligada if (cantCafe > m.obtenerCantCafe()) return this; else return m; } 16 MaquinaExpendedora me1,me2,me3; R101 meR101 = new R101(nro1); me1 = new R101Plus(nro2); me2 = meR101.masCafe(me1); me3 = me1.masCafe(meR101);

CASO DE ESTUDIO: MÁQUINAS EXPENDEDORAS El chequeo de tipo impone algunas limitaciones a nivel de polimorfismo. Una variable polimórfica sólo puede referenciar a objetos de su clase o de las clases derivadas. Una asignación polimórfica asocia un objeto de una clase a una variable cuyo tipo estático es una clase ancestro de la clase del objeto. El compilador rechaza : 17 R101 meR101 = new R101(nro1); R101Plus meR101Plus ; meR101Plus= new R101(nro2); meR101Plus= meR101;

CASO DE ESTUDIO: MÁQUINAS EXPENDEDORAS El casting relaja el control del compilador. Es responsabilidad del programador asegurar que el objeto referenciado por meR101 sea efectivamente de clase R101Plus. Si no se incluye el condicional y meR101 no referencia a un objeto de clase R101Plus se produce una excepción en ejecución. 18 R101 meR101 = new R101(nro); R101Plus meR101Plus ; if (meR101 instanceof R101Plus) meR101Plus= (R101Plus) meR101; Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: MÁQUINAS EXPENDEDORAS 19 MaquinaExpendedora te() cafe() masCafe(me) R101 te() carioca() M111 te() teconLeche() submarino() R101Plus bahiano() cafe() Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: MÁQUINAS EXPENDEDORAS Una variable polimórfica determina los mensajes que un objeto puede recibir, aunque el objeto determina la implementación específica del comportamiento que se ejecuta en respuesta a los mensajes. El compilador rechaza 20 R101 meR101 ; R101Plus meR101Plus = new R101Plus (nro); meR101 = meR101Plus; Introducción a la Programación Orientada a Objetos IPOO meR101.bahiano();

CASO DE ESTUDIO: MÁQUINA EXPENDEDORA class MaquinaExpendedora { … public void cafe() { cantCafe=cantCafe–40; } … } 21 class R101Plus extends R101 { … public void cafe() { cantCafe=cantCafe-45; } … } MaquinaExpendedora me; R101Plus meR101Plus; meR101Plus=new R101Plus(nro); me = meR101Plus; me.cafe();

CASO DE ESTUDIO: M.E. EN UN HOSPITAL En un hospital cada una de los pasillos tiene un número asignado a partir de 0. 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 23 MaquinaExpendedora R101M111 R101Plus Introducción a la Programación Orientada a Objetos IPOO MEHospital MEHospital es una tabla

24 MEHospital > 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 totalVasosCafe(): entero totalLeche(): entero Asigna la máquina unaMe al pasillo p que asume válido Decide si al menos un pasillo tiene una máquina Decide si todos los pasillos tienen una máquina Computa la cantidad total de vasos de café entre todas las máquinas Computa la cantidad total de leche entre todas las máquinas M111 Calcula la cantidad de pasillos que tienen una máquina El pasillo p, que asume válido, no queda ligado a una máquina

CASO DE ESTUDIO: M.E. EN UN HOSPITAL El arreglo está constituido por un conjunto de variables polimórficas. 25 public void instalar(MaquinaExpendedora me, int p) { /*Inserta me en la posicion p, que asume valido*/ T[p] = me; } public void retirar(int p){ /*Elimina la máquina del pasillo p, que asume valido*/ T[p] = null; }

CASO DE ESTUDIO: M.E. EN UN HOSPITAL 26 public int cantPasillos(){ /*Cantidad de pasillos*/ return T.length; } public int cantPasillosOcupados(){ /*Calcula la cantidad de pasillos que tienen asignada una máquina expendedora*/ int cant = 0; for (int i=0; i< maxPasillos();i++) if (T[i] != null) cant++; return cant; } Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: M.E. EN UN HOSPITAL 27 public boolean todosOcupados(){ /*Decide si todos los pasillos tienen asignada una máquina*/ int i = 0; boolean hay = false; while (i < maxPasillos() && !hay){ if (T[i] == null) hay = true ; i++; } return !hay; } Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: M.E. EN UN HOSPITAL 28 class Test { MEHospital lote = new MEHospital(5); … MaquinaExpendedora m1,m2,m3,m4; m1 = new M111(11); m2 = new R101Plus(12); m3 = new R101(13); … lote.instalar(m1,1); lote.instalar(m2,2); lote.instalar(m3,4); … } Todos los elementos del arreglo tienen el mismo tipo estático, la estructura es homogénea.

CASO DE ESTUDIO: M.E. EN UN HOSPITAL 29 :M111 t class MEHospital{ private MaquinaExpendedora[] T; NroSerie cantCafé cantTe cantCacao cantLeche :R101 NroSerie cantCafé cantTe cantCacao cantCrema :R101Plus NroSerie cantCafé cantTe cantCacao cantCrema cantCanela Todas tiene el ingrediente café

CASO DE ESTUDIO: M.E. EN UN HOSPITAL La operación vasosCafe() está provista para todas las máquinas. Si la fábrica ofrece 100 modelos diferentes, cada una con un método vasosCafe () distinto, el método totalVasosCafe () no cambia. 30 public int totalVasosCafe (){ int c = 0; for (int i = 0; i < maxPasillos();i++) { if (T[i] != null) c = c + T[i].vasosCafe(); } return c; } Introducción a la Programación Orientada a Objetos IPOO

31 En un lenguaje imperativo cada vez que se agrega un nuevo modelo es necesario modificar el código. Procedure totalVasosCafe(var lote:MEHospital var c:integer) var i:integer; begin c = 0; for i := 0 to lote.max do if (lote.T[i] != null) case lote.T[i].tipo of 1 : c = c+lote.T[i].vasosCafeM111(); 2 : c = c+lote.T[i].vasosCafeR101(); 3 : c = c+lote.T[i].vasosCafeR101Plus(); … return c; end;

CASO DE ESTUDIO: M.E. EN UN HOSPITAL 32 MaquinaExpendedora café() vasosCafe() R101M111 R101Plus café() vasosCafe() Introducción a la Programación Orientada a Objetos IPOO HEHospital

CASO DE ESTUDIO: M.E. EN UN HOSPITAL 33 :M111 t class MEHospital{ private MaquinaExpendedora[] T; NroSerie cantCafé cantTe cantCacao cantLeche :R101 NroSerie cantCafé cantTe cantCacao cantCrema :R101Plus NroSerie cantCafé cantTe cantCacao cantCrema cantCanela Sólo algunas tienen leche

CASO DE ESTUDIO: M.E. EN UN HOSPITAL La operación obtenerCantLeche() sólo está provista para los objetos de clase M public int totalLeche (){ int c = 0; for (int i = 0; i < maxPasillos(); i++){ if (T[i] != null && T[i] instanceof M111){ c = c + T[i].obtenerCantLeche();} } return c; } ERROR

CASO DE ESTUDIO: M.E. EN UN HOSPITAL La operación obtenerCantLeche() sólo está provista para los objetos de clase M public int totalLeche (){ int c = 0; M111 aux; for (int i = 0; i < maxPasillos(); i++){ if (T[i] != null && T[i] instanceof M111){ aux = (M111)T[i]; c = c + aux.obtenerCantLeche();} } return c; }

CASO DE ESTUDIO: M.E. EN UN HOSPITAL 36 public boolean existeME (MaquinaExpendedora unElem){ /* Decide si hay un elemento con la misma identidad que unElem, que asume ligada*/ int i = 0; boolean esta = false; while (i < maxPasillos() && !esta){ if (T[i] != null) esta = T[i] == unElem; i++; } return esta; } Introducción a la Programación Orientada a Objetos IPOO

37 El mensaje equals debe ligarse con el método que corresponda a la clase del objeto asociado T[i]. Consideremos este caso un poco más adelante. public boolean existeME (MaquinaExpendedora unElem){ /* Decide si hay un elemento equivalente a unElem, que asume ligada*/ int i = 0; boolean esta = false; while (i < cantME && !esta){ if (T[i] != null) esta = T[i].equals(unaMe); i++; } return esta; }

38 MaquinaExpendedora > maxCafe: entero maxTe: entero maxCacao: entero > NroSerie: entero cantCafe: entero cantCacao: entero cantTe: entero > MaquinaExpendedora(ns: entero) > cafe() te() cargarCafe(grs: entero): entero… > igualNroSerie(me:MaquinaExpendedora): boolean

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Todas las máquinas expendedoras tienen un número de serie que las identifica. Este número sirve de clave de búsqueda, para identificar a cada instancia particular. Este servicio no compara todos los atributos, sólo el número de serie. 39 class MaquinaExpendedora { public boolean igualNroSerie(MaquinaExpendedora m){ return NroSerie == m.obtenerNroSerie(); } Introducción a la Programación Orientada a Objetos IPOO

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. 40 public boolean existeME (MaquinaExpendedora unElem){ /* Decide si hay un elemento equivalente a unElem, que asume ligada*/ int i = 0; boolean esta = false; while (i < cantME && !esta){ if (T[i] != null) esta = T[i].igualNroSerie(unaMe); i++; } return esta; }

41 M111 > maxLeche: entero … > cantLeche: entero … > M111(ns: entero) > te() teConLeche subMarino()… cargarLeche(grs: entero): entero… > obtenerCantLeche(): entero… obtenerMaxLeche(): entero … vasosTeConLeche(): entero El método igualNroSerie se hereda de la clase base, en la cual está también el atributo clave

CASO DE ESTUDIO: MÁQUINAS EXPENDEDORAS En la fábrica toda máquina expendedora es de clase M111, R101 o R101Plus, no existen máquinas que queden modeladas con la clase MaquinaExpendedora. 42 MaquinaExpendedora R101M111 R101Plus Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: M.E. EN UN HOSPITAL En el diseño la clase MaquinaExpendedora permite factorizar los atributos y comportamiento que comparten todas las máquinas de la fábrica. La clase MaquinaExpendedora es entonces abstracta, en la aplicación no hay entidades de esa clase y en ejecución no habrá instancias de clase máquina expendedora. Toda clase abstracta tiene que especializarse en al menos una clase concreta, esto es una clase que modele a entidades del problema. Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Con frecuencia una clase general establece algunos de los servicios que brindan todas sus instancias, sin llegar a implementarlos de manera concreta. En el ejemplo de la fábrica de las máquinas expendedoras todas las máquinas brindan el servicio te() pero la implementación concreta varía según el tipo de máquina. Introducción a la Programación Orientada a Objetos IPOO

45 MaquinaExpendedora >… > *te()… > *vasosTe() : entero M111 >… > te() > vasosTe() : entero R101 >… > te() > vasosTe() : entero

CASO DE ESTUDIO: M.E. EN UN HOSPITAL En Java, el modificador abstract permite declarar una clase abstracta. Una clase abstracta puede contener uno o más métodos abstractos, esto es, la clase especifica un servicio pero no indica cómo se implementa. 46 abstract class MaquinaExpendedora { } Introducción a la Programación Orientada a Objetos IPOO public abstract void te() ; public abstract int vasosTe();

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Todas las máquinas expendedoras ofrecen el servicio te() pero la implementación varía. 47 class abstract MaquinaExpendedora { public abstract void te() ; } class M111 extends MaquinaExpendedora { public void te() { this.retirarTe (10); } } class R101 extends MaquinaExpendedora{ public void te() { this.retirarTe (15); } }

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Todas las máquinas expendedoras ofrecen el servicio vasosTe() pero la implementación varía. 48 class abstract MaquinaExpendedora { public abstract int vasosTe() ; } class M111 extends MaquinaExpendedora { public int vasosTe() { return this.obtenerCantTe() / 10; } } class R101 extends MaquinaExpendedora{ public int vasosTe() { return this.obtenerCantTe() / 15;} }

CASO DE ESTUDIO: M.E. EN UN HOSPITAL El arreglo está constituido por un conjunto de variables polimórficas. La operación vasosTe() está provista para todas. 49 class MEHospital{… public int totalVasosTe (){ int c = 0; for (int i = 0; i < maxPasillos();i++) { if (T[i] != null) c = c + T[i].vasosTe(); } return c; } } … }

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Una clase abstracta solo va a ser usada para definir clases más específicas, pero no va a tener instancias. De modo que la declaración que sigue es válida: Pero el compilador reportará un ERROR si se intenta crear una instancia: 50 MaquinaExpendedora me; Introducción a la Programación Orientada a Objetos IPOO me = new MaquinaExpendedora(nro);

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Ambos mensajes se ligarán al método te() provisto por la clase M MaquinaExpendedora me; M111 meM111; me = new M111(nro1); meM111 = new M111(nro2); me.te(); meM111.te(); Introducción a la Programación Orientada a Objetos IPOO

CASO DE ESTUDIO: M.E. EN UN HOSPITAL Los mensajes se ligarán al método te() provisto por la clase R MaquinaExpendedora me; R101 meR101; R101Plus meR101Plus; me = new R101(nro1); meR101 = new R101(nro2); meR101Plus = new R101Plus(nro3); me.te(); meR101.te(); meR101Plus.te(); Introducción a la Programación Orientada a Objetos IPOO

CLASES ABSTRACTAS En la jerarquía de clases que modelan un sistema, las clases de los niveles superiores son generales y las de los niveles inferiores son más específicas. Una clase es abstracta si no está asociada a entidades del problema. En ejecución no va a haber instancias de una clase abstracta. Las clases abstractas pueden identificarse en la etapa de diseño de la aplicación o pueden crearse artificialmente durante la implementación. Una clase abstracta puede tener uno o más métodos abstractos. Introducción a la Programación Orientada a Objetos IPOO

CLASES ABSTRACTAS Las clases derivadas deben redefinir los métodos abstractos provistos por la clase base, implementando el comportamiento específico. Si una clase derivada de una clase abstracta no implementa los métodos abstractos de su clase base, debe definirse también como abstracta o el compilador notifica un error. Como no existen instancias de una clase abstracta, el constructor sólo puede ser invocado desde los constructores de las clases derivadas. Introducción a la Programación Orientada a Objetos IPOO

MODIFICADORES Java brinda modificadores que determinan cualidades de clases, métodos y atributos. – public es visible para cualquier otra clase. – final no puede ser extendida. – abstract debe ser extendida. Introducción a la Programación Orientada a Objetos IPOO CLASES

MODIFICADORES Java brinda modificadores que determinan cualidades de clases, métodos y atributos. – public es visible en todas las clases. – private sólo es visible dentro de la clase en la que se declara. – protected es visible en el paquete y en las clases derivadas. Introducción a la Programación Orientada a Objetos IPOO METODOS Y ATRIBUTOS

MODIFICADORES Java brinda modificadores que determinan cualidades de clases, métodos y atributos. – static no hacen referencia a variables de instancia de la clase, sólo a sus parámetros. Un método de instancia no recibe un mensaje a través de un objeto de la clase sino directamente a través de la clase: Math.max(i,j); – final no pueden ser redefinidos. – abstract no está definido, se implementa en una clase derivada. Si un método se declara abstracto, la clase debe declararse como abstracta. 57 METODOS

MODIFICADORES Java brinda modificadores que determinan cualidades de clases, métodos y atributos. – static están compartidos por todas las instancias de la clase. – final el valor es constante. 58 ATRIBUTOS Introducción a la Programación Orientada a Objetos IPOO