Parte I: Programación en un lenguaje orientado a objetos 1. Introducción a los lenguajes de programación 2. Datos y expresiones 3. Estructuras algorítmicas 4. Datos compuestos 5. Modularidad 6. Tratamiento de errores 7. Entrada/salida con ficheros 8. Herencia y Polimorfismo • Herencia. Clases Abstractas. Polimorfismo. www.istr.unican.es © Michael González Harbour, 18/ma/15 1 UNIVERSIDAD DE CANTABRIA Jerarquía de clases Uno de los mecanismos de la programación orientada a objetos es poder crear clases a partir de otras, por extensión • Cuando la nueva clase se parece a la anterior se programan solo las extensiones, sin repetir lo común - programación por extensión Esto da lugar a una jerarquía: • clase padre o superclase • clases hijas o subclases www.istr.unican.es UNIVERSIDAD DE CANTABRIA © Michael González Harbour, 18/ma/15 2 Herencia Ejemplo de relación de herencia: • todos los coches son vehículos • pero no al revés La herencia :mecanismo para crear nuevas clases a partir de otras existentes, • heredando, y posiblemente redefiniendo, y/o añadiendo operaciones • heredando y posiblemente añadiendo atributos Vehiculo Coche superclase (padre) Barco subclases (hijo) El mecanismo de herencia no suprime abributos ni operaciones www.istr.unican.es © Michael González Harbour, 18/ma/15 3 UNIVERSIDAD DE CANTABRIA Herencia de operaciones Al extender una clase • se heredan todas las operaciones del padre • se puede añadir nuevas operaciones La nueva clase puede elegir para las operaciones heredadas: • redefinir la operación: se vuelve a escribir - la nueva operación redefinida puede usar la del padre y hacer más cosas: programación incremental - o puede ser totalmente diferente • dejarla como está: no hacer nada La herencia se puede aplicar múltiples veces • da lugar a una jerarquía de clases www.istr.unican.es UNIVERSIDAD DE CANTABRIA © Michael González Harbour, 18/ma/15 4 Herencia en un diagrama de clases Figura -color +dibuja() +borra() +cambiaColor() superclase Línea Círculo -puntoInicio -puntoFin +dibuja() +borra() -centro -radio subclases +dibuja() +borra() +rellena() • Los atributos y métodos de la superclase no se repiten en las subclases, salvo que se hayan redefinido - por ejemplo, FDPELD&RORU se hereda sin cambios - UHOOHQD es una operación nueva www.istr.unican.es © Michael González Harbour, 18/ma/15 5 UNIVERSIDAD DE CANTABRIA Herencia y Constructores Los constructores no se heredan • las subclases deben definir su propio constructor Normalmente será necesario inicializar los atributos de la superclase • para ello se llama a su constructor desde el de la subclase FRQVWUXFWRUGHXQDVXEFODVH public6XEFODVHSDU£PHWURV^ LQYRFDHOFRQVWUXFWRUGHODVXSHUFODVH superSDU£PHWURVSDUDODVXSHUFODVH LQLFLDOL]DVXVSURSLRVDWULEXWRV ` • la llamada a “VXSHU” debe ser la primera instrucción del constructor de la subclase www.istr.unican.es UNIVERSIDAD DE CANTABRIA © Michael González Harbour, 18/ma/15 6 Ejemplo Clase que representa un vehículo cualquiera Vehiculo -Color color -int numSerie -static int ultimoNumSerie +Vehiculo(Color c) +Color color() +int numSerie() +pinta (Color nuevoColor) www.istr.unican.es © Michael González Harbour, 18/ma/15 7 UNIVERSIDAD DE CANTABRIA Ejemplo: clase Vehiculo &ODVHTXHUHSUHVHQWDXQYHK¯FXORFXDOTXLHUD public class9HKLFXOR ^ FRORUHVGHORVTXHVHSXHGHSLQWDUXQYHK¯FXOR public static enum&RORU^52-29(5'($=8/` DWULEXWRV private&RORUFRORU private finalLQWQXP6HULH DWULEXWRHVW£WLFRSDUDREWHQHUHOQ¼PGHVHULH private staticLQWXOWLPR1XP6HULH www.istr.unican.es UNIVERSIDAD DE CANTABRIA © Michael González Harbour, 18/ma/15 8 clase Vehiculo (cont.) &RQVWUX\HXQYHK¯FXOR #SDUDPFFRORUGHOYHK¯FXOR public9HKLFXOR&RORUF ^ thisFRORU F REWHQHUXQQXHYRQ¼PHURGHVHULH XOWLPR1XP6HULH thisQXP6HULH XOWLPR1XP6HULH ` www.istr.unican.es © Michael González Harbour, 18/ma/15 9 UNIVERSIDAD DE CANTABRIA clase Vehiculo (cont.) 5HWRUQDHOFRORUGHOYHK¯FXOR #UHWXUQFRORUGHOYHK¯FXOR public&RORUFRORU ^ returnFRORU ` 5HWRUQDHOQXPHURGHVHULHGHOYHK¯FXOR #UHWXUQQXPHURGHVHULHGHOYHK¯FXOR publicLQWQXP6HULH ^ returnQXP6HULH ` www.istr.unican.es UNIVERSIDAD DE CANTABRIA © Michael González Harbour, 18/ma/15 10 clase Vehiculo (cont.) ` 3LQWDHOYHK¯FXORGHXQFRORU #SDUDPQXHYR&RORUFRORUFRQHOTXHSLQWDU HOYHK¯FXOR public YRLGSLQWD&RORUQXHYR&RORU ^ FRORU QXHYR&RORU ` www.istr.unican.es © Michael González Harbour, 18/ma/15 11 UNIVERSIDAD DE CANTABRIA Ejemplo: extensión a la clase Coche Vehiculo &RORUFRORU LQWQXP6HULH 9HKLFXOR&RORUF &RORUFRORU LQWQXP6HULH SLQWD&RORUQXHYR&RORU Coche LQWFLOLQGUDGD &RFKH&RORUFLQWFLOLQGUDGD LQWFLOLQGUDGD FDPELD&LOLQGUDGDLQWFLOLQ www.istr.unican.es UNIVERSIDAD DE CANTABRIA © Michael González Harbour, 18/ma/15 12 Extensión a la clase Coche (cont.) &ODVHTXHUHSUHVHQWDXQFRFKH public class&RFKHextends9HKLFXOR^ // cilindrada del coche privateLQWFLOLQGUDGD &RQVWUXFWRUDOTXHOHSDVDPRVHOFRORU \ODFLOLQGUDGD public&RFKH&RORUFLQWFLOLQGUDGD ^ superF thisFLOLQGUDGD FLOLQGUDGD ` www.istr.unican.es © Michael González Harbour, 18/ma/15 13 UNIVERSIDAD DE CANTABRIA Extensión a la clase Coche (cont.) /** Obtiene la cilindrada del coche */ publicLQWFLOLQGUDGD^ returnFLOLQGUDGD ` /** Cambia la cilindrada del coche */ publicYRLGFDPELD&LOLQGUDGDLQWFLOLQ^ thisFLOLQGUDGD FLOLQ ` 6HKHUHGDQORVP«WRGRV FRORUQXP6HULH\SLQWD ` www.istr.unican.es UNIVERSIDAD DE CANTABRIA © Michael González Harbour, 18/ma/15 14 Ejemplo: extensión a la clase Barco Se puede hacer herencia sin añadir métodos y/o atributos public class%DUFRextends9HKLFXOR ^ &RQVWUXFWRUDOTXHOHSDVDPRVHOFRORU public%DUFR&RORU F^ superF ` ` www.istr.unican.es © Michael González Harbour, 18/ma/15 15 UNIVERSIDAD DE CANTABRIA Redefiniendo operaciones Una subclase puede redefinir (“override”) una operación en lugar de heredarla directamente • es conveniente indicarlo poniendo #RYHUULGH justo antes del método En muchas ocasiones (no siempre) la operación redefinida invoca la de la superclase • se usa para ello la palabra VXSHU • se refiere a la superclase directa del objeto actual Invocación de un método de la superclase: superQRPEUH0«WRGRSDUDPHWURV www.istr.unican.es UNIVERSIDAD DE CANTABRIA © Michael González Harbour, 18/ma/15 16 Ejemplo: nueva operación en la clase Vehiculo public class9HKLFXOR^ 2EWHQHUXQWH[WRFRQORVGDWRV GHOYHK¯FXOR public6WULQJWR6WULQJ ^ return9HKLFXOR!QXP6HULH QXP6HULH FRORU FRORU ` ` www.istr.unican.es © Michael González Harbour, 18/ma/15 17 UNIVERSIDAD DE CANTABRIA Ejemplo: redefinir la nueva operación en la clase Coche public class&RFKH^ 2EWHQHUXQWH[WRFRQORVGDWRVGHOFRFKH LQFOX\HQGRODFLOLQGUDGD #2YHUULGH public6WULQJWR6WULQJ ^ returnsuperD7H[WRFLOLQGUDGD FLOLQGUDGD ` ` www.istr.unican.es UNIVERSIDAD DE CANTABRIA © Michael González Harbour, 18/ma/15 18 Resumen Herencia Las clases se pueden extender • la subclase hereda los atributos y métodos de la superclase - aunque la parte privada de la superclase no es accesible desde las subclases (la parte SURWHFWHG, sí) A la subclase se le pueden añadir nuevas operaciones y atributos Al extender una clase se pueden redefinir sus operaciones • si se desea, se puede invocar desde la nueva operación a la de la superclase: programación incremental Buena práctica de programación: • utilizar #2YHUULGH en los métodos redefinidos www.istr.unican.es © Michael González Harbour, 18/ma/15 19 UNIVERSIDAD DE CANTABRIA Clases abstractas En ocasiones definimos clases de las que no pretendemos crear objetos • su único objetivo es que sirvan de superclases a las clases “reales” Ejemplos: • nunca crearemos objetos de la clase )LJXUD - lo haremos de sus subclases &¯UFXOR, &XDGUDGR, ... • nunca crearemos un 9HKLFXOR - crearemos un &RFKH, un %DUFR, un $YLµQ, ... A ese tipo de clases las denominaremos clases abstractas www.istr.unican.es UNIVERSIDAD DE CANTABRIA © Michael González Harbour, 18/ma/15 20 Clases abstractas en Java Las clases abstractas en Java se identifican mediante la palabra reservada DEVWUDFW public abstract class)LJXUD^ ` Es un error tratar de crear un objeto de una clase abstracta )LJXUDI new)LJXUD ERROR detectado por el compilador Pero NO es un error utilizar referencias a clases abstractas )LJXUDI new&¯UFXOR// correcto )LJXUDI new&XDGUDGR // correcto www.istr.unican.es © Michael González Harbour, 18/ma/15 21 UNIVERSIDAD DE CANTABRIA Métodos abstractos Una clase abstracta puede tener métodos abstractos • se trata de métodos sin cuerpo • que es obligatorio redefinir en las subclases no abstractas • ejemplo de método abstracto public abstractYRLGGLEXMD no tiene instrucciones www.istr.unican.es UNIVERSIDAD DE CANTABRIA © Michael González Harbour, 18/ma/15 22 Ejemplo: clase abstracta Figura y subclases Figura Elementos abstractos en cursiva -color +cambiaColor +borra +dibuja Figura1D Figura2D -ptoIni -ptoFin -colorRelleno +cambiaRelleno Recta +borra +dibuja www.istr.unican.es Curva -radio +borra +dibuja Círculo -ptoCentro -radio Cuadrado -ptoSupIzq -ptoInfDer +borra +dibuja +borra +dibuja © Michael González Harbour, 18/ma/15 23 UNIVERSIDAD DE CANTABRIA Polimorfismo Las operaciones polimórficas son aquellas que hacen funciones similares con objetos diferentes de la misma jerarquía Ejemplo: suponer que existe la clase )LJXUD y sus subclases - &¯UFXOR &XDGUDGR 3RO¯JRQR Figura +dibuja() +borra() Todas ellas con las operaciones: - GLEXMD() - ERUUD() www.istr.unican.es UNIVERSIDAD DE CANTABRIA Círculo Cuadrado Polígono +dibuja() +borra() +dibuja() +borra() +dibuja() +borra() © Michael González Harbour, 18/ma/15 24 Polimorfismo (cont.) Nos gustaría poder hacer la operación polimórfica PXHYH)LJXUD que opere correctamente con cualquier clase de figura: PXHYH)LJXUD ERUUD GLEXMDHQODQXHYDSRVLFLµQ Esta operación polimórfica debería: • llamar a la operación ERUUD del &¯UFXOR cuando la figura sea un círculo • llamar a la operación ERUUD del &XDGUDGR cuando la figura sea un cuadrado • etc. www.istr.unican.es © Michael González Harbour, 18/ma/15 25 UNIVERSIDAD DE CANTABRIA Polimorfismo en Java El polimorfismo en Java se basa en dos propiedades: 1. Una referencia a una superclase puede apuntar a un objeto de cualquiera de sus subclases 9HKLFXORY new&RFKH9HKLFXORURMR 9HKLFXORY new%DUFR9HKLFXORD]XO 2. La operación se selecciona en base a la clase del objeto, no a la de la referencia YD7H[WR usa el método de la clase &RFKH, puesto que Y es un coche YD7H[WR www.istr.unican.es UNIVERSIDAD DE CANTABRIA usa el método de la clase %DUFR, puesto que Y es un barco © Michael González Harbour, 18/ma/15 26 Polimorfismo en Java Gracias a esas dos propiedades, el método PRYHU)LJXUD sería: publicYRLGPXHYH)LJXUD)LJXUDI3RVLFLµQSRV^ IERUUD IGLEXMDSRV ` Y podría invocarse de la forma siguiente: &¯UFXORF new&¯UFXOR 3RO¯JRQRS new3RO¯JRQR SRV PXHYH)LJXUDFSRV PXHYH)LJXUDSSRV www.istr.unican.es © Michael González Harbour, 18/ma/15 27 UNIVERSIDAD DE CANTABRIA Polimorfismo en Java (cont.) • Gracias a la primera propiedad el parámetro I puede referirse a cualquier subclase de )LJXUD • Gracias a la segunda propiedad en PXHYH)LJXUD se llama a las operaciones ERUUD y GLEXMD apropiadas El lenguaje permite que una referencia a una superclase pueda apuntar a un objeto de cualquiera de sus subclases • pero no al revés 9HKLFXORY new&RFKH// permitido &RFKHF new%DUFR// ¡NO permitido! www.istr.unican.es UNIVERSIDAD DE CANTABRIA © Michael González Harbour, 18/ma/15 28 Conversión de referencias (casting) Es posible convertir referencias 9HKLFXORY new&RFKH &RFKHF &RFKHY YFLOLQGUDGD// ¡ERROR! FFLOLQGUDGD// correcto El casting cambia el “punto de vista” con el que vemos al objeto • a través de Y le vemos como un 9HKLFXOR - y por tanto sólo podemos invocar métodos de esa clase • a través de F le vemos como un &RFKH - y podemos invocar cualquiera de los métodos de esa clase • el objeto siempre es el mismo - tenemos un solo objeto coche, que a su vez es un solo vehículo www.istr.unican.es © Michael González Harbour, 18/ma/15 29 UNIVERSIDAD DE CANTABRIA Resumen El polimorfismo nos permite abstraer operaciones • podemos invocarlas sin preocuparnos de las diferencias existentes para objetos diferentes • el sistema elige la operación apropiada al objeto El polimorfismo se asocia a las jerarquías de clases: • una superclase y todas las subclases derivadas de ella El polimorfismo en Java se basa en dos propiedades: • Una referencia a una superclase puede apuntar a un objeto de cualquiera de sus subclases • La operación se selecciona en base a la clase del objeto, no a la de la referencia www.istr.unican.es UNIVERSIDAD DE CANTABRIA © Michael González Harbour, 18/ma/15 30
© Copyright 2024