Tema 5. Herencia. Departamento de Lenguajes y Sistemas Informáticos Universidad de Granada

Documentos relacionados
Programación Dirigida a Objetos. MATERIAL COMPLEMENTARIO Tema 5.- Herencia

TEMA 5. Agenda. Herencia

Taller de Programación I. Tema 10: Herencia en Java

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente.

La Herencia: Teoría (1)

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2015/2016

Herencia en Java. Agustín J. González Diseño y Programación Orientados a Objetos

A3F. Polimorfismo. Carlos Fontela

Tema 1. Lección 2. Conceptos Básicos de los Lenguajes Dirigidos a Objetos. Departamento de Lenguajes y Sistemas informáticos Universidad de Granada

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2015/2016

Examen Teórico Convocatoria de Junio de 2012

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Herencia. Implementación en Java

Definición. Mónica E. García García Feb 07

Curso de Java POO: Programación orientada a objetos

Introducción a OOP. Programación Orientada a Objeto

Práctica 2. Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones

Examen Teórico. Convocatoria de Febrero de 2015

Programación orientada a objetos

Herencia en Java. Agustín J. González Diseño y Programación Orientados a Objetos

Fundamentos de Programación

Tema 1. Herencia y Polimorfismo

Contenidos. Técnicas de POO. Abstracción. Abstracción. Programación Orientada a Objetos Facultad de Informática

Tema 3 Herencia en Java Parte 1. Programación Orientada a Objetos Curso 2015/2016

Herencia: relación es un

Reutilización con Delegación y Herencia

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Principios de Computadoras II

Java Básico. Polimorfismo. Copyright

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Curso de Java POO: Programación orientada a objetos

Relaciones entre clases

Tema 1.- Conceptos básicos de la OO

A3F. Polimorfismo. Carlos Fontela

Polimorfismo Java y Servicios Web I Master en Ingeniería Matemática

Objetivos. Objetivos. Herencia. Objetivos. agregar funcionalidad a una clase existente, sin compilar su nueva definición.

10 -Herencia Y Polimorfismo. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

3.1 Introducción a TDA y OO. Capítulo III. Tipos de Datos Abstractos, Orientación a Objetos y Lenguaje Java

Introducción al Paradigma Orientado a Objetos

Herencia y Clases Abstractas

Conceptos más avanzados de Programación Orientada a Objetos

Tema 1. Introducción a la Programación Orientada a Objetos

Programación orientada a objetos I

Examen Teórico. Convocatoria de Julio de 2015

Clases abstractas e interfaces en Java

Clases y herencia. FJP Unidad 8. Diseño de clases

CLASE 9 -HERENCIA Y POLIMORFISMO

Introducción a la Orientación a Objetos

Herencia. Hay clases que comparten gran parte de sus características.

Herencia. Proceso mediante el cual una clase adquiere las propiedades (atributos) y comportamiento (métodos) de otra.

Herencia Java y Servicios Web I Master en Ingeniería Matemática

Guía práctica de estudio 08: Polimorfismo

Guía práctica de estudio 07: Herencia

HERENCIA Y TIPOS. Articulo. Video Audio Altavoces. Amplificador

Reutilización con Delegación y Herencia

Programación orientada a objetos. Introducción

FACULTAD DE INGENIERÍA

Tema 10: Interfaces. Índice

Tema 3 Herencia. Primera parte. Herencia en Java Programación Orientada a Objetos Curso 2010/2011

6. Herencia. Clases abstractas. Genericidad. Clase Object Polimorfismo y ligadura dinámica super Herencia y creación Clases abstractas Genericidad

Unidad 2. Elementos Intermedios del Lenguaje

Clases Abstractas e Interfaces

Programación Orientada a Objetos

INICIACIÓN A LA PROGRAMACIÓN LENGUAJE JAVA con BlueJ

UNIDAD 4 IMPLEMENTACION DE PROPIEDADES DE LOS OBJETOS JAVA

Edwin Andrés Cubillos Vega

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Programación Tema 7: Relaciones entre clases. Programación DIT-UPM

Paradigma Orientado a Objetos Caso de estudio: Squeak Smalltalk. Lenguajes de Programación 2018

Principios de Computadoras II

Encapsulamiento, polimorfismo, abstracción y herencia

CONCEPTO DE INTERFACE Y HERENCIA MÚLTIPLE EN JAVA. IMPLEMENTS. EJEMPLOS Y DIAGRAMAS DE CLASES. (CU00696B)

Introducción a la Orientación a Objetos

Patrones de diseño. Patrón básico Handler. Técnicas de Programación - Curso 2007/08

INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS

16. Herencia Definición de herencia. 168 A. García-Beltrán y J.M. Arranz

TEMA 6: Lenguajes orientados a objetos. Fundamentos teóricos.

RTTI y reflexión A3F. Carlos

Programación Orientada a Objetos

Programación Orientada a Objetos en Java

Academia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos

Aplicaciones de Escritorio

Tema 3. Herencia. Programación Avanzada. Jorge Badenas

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Tema 3 Herencia en Java Parte 2. Programación Orientada a Objetos Curso 2016/2017

INTRODUCCIÓN A LA PROGRAMACIÓN

Sesión 7. TEMA 9 Extensión de clases: HERENCIA

Lenguaje de Programación

Modulo 11. Clases y Objetos en Java

Curso de Java orientado a Android Parte 2

RTTI y reflexión Modelos de datos

Programación. Orientada a Objetos. Prof. Angela Di Serio. Universidad Simón Bolívar Especialización en Telemática

Abstracción. Encapsulamiento. Polimorfismo. Objeto. método / objeto / clase / módulo. Separación de las propiedades de un

Transcripción:

Tema 5 Herencia Departamento de Lenguajes y Sistemas Informáticos Universidad de Granada

Qué es la Herencia? Propiedad de que las instancias de una clase hija tengan acceso a la estructura de datos* y al comportamiento definidos en la clase padre * En Java las variables private no pueden ser accedidas directamente en la subclase La herencia es transitiva Clase A Clase B Clase C

Composición vs. Construcción Problema: Dada la clase Numero, definir la clase Numero2 con la misma funcionalidad más una función de conversión a romano

Composición vs. Construcción Solución por Construcción (Heredando de la clase):

Composición vs. Construcción Solución por Composición (Usando la clase):

Beneficios de la Herencia Reusabilidad Fiabilidad Compartición Consistencia Biblioteca de componentes software Ocultación de información Modelado de prototipos Prototipo cambios Uso

Costes de la Herencia Velocidad de ejecución Código general vs. código especializado Tamaño del programa

Heurísticas para la Herencia Cómo crear subclases? Especialización Generalización Especificación Extensión Limitación Variación Combinación

Heurísticas para la Herencia Cómo crear subclases? Especialización Si dados dos conceptos A y B, tiene sentido el enunciado B es un A, entonces es probable que B sea una subclase de A Si dados dos conceptos A y B, tiene sentido el enunciado B tiene un A, entonces es probable que en la clase B exista un atributo de tipo A

Heurísticas para la Herencia Cómo crear subclases? Especialización Perro es un Mamífero class Perro extends Mamifero {...} Mamifero subclass: #Perro... Automóvil tiene un Motor class Automovil { private Motor unmotor;...} Object subclass: #Automovil variableinstancenames: unmotor......

Heurísticas para la Herencia Cómo crear subclases? Generalización Es lo opuesto a la Especialización La subclase es más general Se redefine al menos un método Sólo si la superclase no puede ser modificada Ventana es una VentanaAColor (donde color es negro) class VentanaAColor extends Ventana {... public void dibuja(color uncolor) {...}...}

Heurísticas para la Herencia Cómo crear subclases? Especificación Interfaces de Java A A1 A2... AN Usar la herencia para garantizar que un conjunto de clases tiene un protocolo común

Heurísticas para la Herencia Cómo crear subclases? Extensión No es obligatorio redefinir ningún método Se amplia la subclase añadiendo métodos y variables

Heurísticas para la Herencia Cómo crear subclases? Limitación Es lo opuesto a la Extensión Es obligatorio redefinir al menos un método dando un mensaje de error No debe utilizarse Se reduce el comportamiento de la subclase

Heurísticas para la Herencia Cómo crear subclases? Variación Agrupar el código común de dos clases sin relación de herencia A B C ó? mejor: B A B A

Heurísticas para la Herencia Cómo crear subclases? Combinación Herencia múltiple Combinar en una clase características de dos o más superclases A B C

Problemas de la Herencia Múltiple Ambigüedad en los nombres -metodo1() -var1 A B -metodo1() -var1 Elijo uno o me quedo con los dos? C Renombrar y Redefinir Herencia de ancestros comunes metodo1() - var1- D D -metodo1() -var1 D -metodo1() -var1 A B Dos copias o una? A B C C

Problemas de la Herencia Múltiple Redefinir:

Problemas de la Herencia Múltiple Renombrar:

Herencia Múltiple en los Lenguajes Smalltalk : Herencia simple Java: Herencia simple Las interfaces permiten simular la herencia múltiple C++: Herencia múltiple

Interfaces en Java Diferencias entre interfaz y clase abstracta Una clase puede tener variables declaradas Una interfaz no declara ninguna variable Una clase abstracta puede tener métodos implementados La interfaz no tiene ningún método implementado Una clase abstracta sólo puede heredar de una clase La interfaz puede heredar de varias interfaces Simplifica la herencia múltiple

Interfaces en Java Las interfaces permiten simular la herencia múltiple Una clase hereda de otra clase e implementa una interfaz Una clase implementa varias interfaces Las interfaces permiten polimorfismo sin relación de herencia NombreInterfaz var; var puede referenciar distintas clases sin ninguna relación de herencia entre ellas

Asignación de Memoria Se reserva en pila memoria para la clase declarada Se pierde información A var; var = new A2(34, c ) A -intvara A1 A2... AN - int varb -charvard Se reserva en pila memoria para la clase y cualquiera de sus subclases No se conocen todas las subclases hasta tiempo de ejecución Se reserva en pila memoria para un puntero y en tiempo de ejecución se reserva en el montículo memoria para la clase referenciada

Asignación de Variables Ejemplo Smalltalk: Object subclass:#rectangulo instancevariabllenames: alto ancho centro... unpunto := Punto cordx:0 cordy:0. x := Rectangulo ancho:1 alto:2 centro:unpunto. Ejemplo Java: class Rectangulo { private int alto; private int ancho; private Punto centro;... } Punto unpunto := new Punto(0,0); Rectangulo x:= new Rectangulo(1, 2, unpunto);

Asignación de Variables Objetos en el Heap En Smalltalk (y :=x.) En Java (y = x;) Copia en Smalltalk x y 1... 0 0 2 x y x y 1 2 0 0... 2 0 0 1... 1 2 0 0 COPY: Las variables de instancia se comparten con el original DEEPCOPY: Las variables de instancia son copias del original

Asignación de Variables Copia en Java Método clone Heredado de Object Hay que redefinirlo También el método equals La asignación copia la referencia en los objetos (heap), pero el valor en los valores primitivos (stack) class Rectangulo {... public Object clone() { ancho2 = ancho; alto2 = alto; centro2 = centro.clone(); return new Rectangulo(ancho2, alto2, centro2); } }

Comparación de Objetos En Smalltalk Comparar identidad (==) Comparar estado (=) En Java Comparar identidad de objetos y valor de tipos primitivos (==) Comparar estado de objetos (equals) class Rectangulo {... public boolean equals(object o){ Rectangulo r = (Rectangulo) o; return ( ( (r.centro()). equals(centro) ) && (r.alto()==alto) && (r.ancho()==ancho)); } }

Comparación de Objetos Responde V o F: Samlltalk: y:=x. y==x. y := x copy. y==x. y := x copy. y centro == x centro. y := x deepcopy. y centro ==x centro. Java: y = x; y==x; y=x; y.equals(x); y=x.clone(); y==x; y=x.clone(); y.ancho() == x.ancho() y=x.clone(); y.centro() == x.centro() y=x.clone(); y.equals(x);

Comparación de Objetos Responde V o F: Samlltalk: y:=x. y==x. V y := x copy. y==x. F y := x copy. y centro == x centro. V y := x deepcopy. y centro ==x centro. F Java: y = x; y==x; V y=x; y.equals(x); V y=x.clone(); y==x; F y=x.clone(); y.ancho() == x.ancho(); V y=x.clone(); y.centro() == x.centro(); F y=x.clone(); y.equals(x); V Depende de la implementación

Herencia en Smalltalk Herencia de variables y métodos de instancia Los nombres de las variables de instancia y los métodos de instancia se almacenan en la clase Podemos verlos inspeccionando la clase (inspect) methoddic instancevariables Podemos añadir nuevas variables (addinstvarname:) Podemos borrar métodos (removeselector:) etc.

Herencia en Smalltalk Carta inspect unacarta inspect

Herencia en Smalltalk Carta addinstvarname: color Carta removeselector: #palo:

Herencia en Smalltalk La subclase hereda las variables y métodos de instancia de su superclase Jerarquía de herencia Colecciones:

Herencia en Smalltalk La subclase hereda las variables y métodos de instancia de su superclase Jerarquía de herencia Magnitudes:

Herencia en Smalltalk Herencia de variables y métodos de clase Los nombres de las variables de clase y los métodos de clase se almacenan en la metaclase La metaclase de la que es instancia una clase se referencia con el nombre de la clase seguido del mensaje class Clase Object Collection String Metaclase Object class Collection class String class

Herencia en Smalltalk La metaclase es una clase Se puede instanciar (tiene sólo una instancia) Se puede inspeccionar, añadir y borrar variables y métodos de clase Carta class 1 instancia Carta c := Carta palo: oros numero:5. 1 1 instancia 0..*

Herencia en Smalltalk La metaclase es una clase Se puede instanciar (tiene sólo una instancia) Se puede inspeccionar, añadir y borrar variables y métodos de clase (Carta class) inspect

Herencia en Smalltalk La metaclase es un objeto Su clase es MetaClass La metaclase de MetaClass es MetaClass class Carta class Collection class MetaClass MetaClass class Bag class

Herencia en Smalltalk La metaclase es un objeto Su clase es MetaClass La metaclase de MetaClass es MetaClass class Carta class Collection class MetaClass MetaClass class Bag class

Herencia en Smalltalk La metaclase es un objeto Su clase es MetaClass La metaclase de MetaClass es MetaClass class Carta class Collection class MetaClass Bag class MetaClass class

Herencia en Smalltalk Jerarquía de herencia con metaclases Object Collection Behaviour Bag Class......... Reflejo de la jerarquía de clases...... MetaClass

Herencia en Smalltalk Jerarquía de herencia con metaclases Object Object class Collection Behaviour... Collection class Behaviour class... Bag Class...... MetaClass Bag class Class class...... MetaClass class Herecia de Object class, Metaclass y Metaclass class?

Herencia en Smalltalk Jerarquía de herencia con metaclases Object Object class Collection Behaviour... Collection class Behaviour class... Bag Class...... Bag class... Class class... MetaClass MetaClass class

Object subclass:#empleado instancevariablenames: classvariablenames: SueldoBase... SueldoBase SueldoBase := 1000. ^ SueldoBase sueldo ^((self class) SueldoBase) sueldoinc: num ^((self sueldo)*num) Empleado subclass:#empleadoasalariado instancevariablenames: classvariablenames:... SueldoBase SueldoBase := 2000. ^ SueldoBase EmpleadoAsalariado subclass:#director instancevariablenames: classvariablenames:... SueldoBase SueldoBase := 3000. ^ SueldoBase sueldo ^((super class) SueldoBase) sueldoinc: num ^((super sueldo)*num)