Universidad de Cantabria corcuerp@unican.es



Documentos relacionados
Programación Orientada a Objetos en Java

Curso de Java POO: Programación orientada a objetos

Programación en Java. Programación en OO

Programación Orientada a Objetos con Java

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

2.2.- Paradigmas de la POO

POLIMORFISMO "una interfaz, múltiples métodos".

Estructura de las Aplicaciones Orientadas a Objetos Herencia y Polimorfismo

Introducción a la Programación Orientada a Objetos

Definición de clases: Herencia, polimorfismo, ligadura dinámica

POO en Java IV: Herencia (Parte 1)

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

GUIA PROGRAMACIÓN ORIENTADA A OBJETOS

Herencia. 3.- Herencia. Declaración de una clase derivada en Delphi. Jerarquía de clases

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso Cuatrimestre de otoño. 17 de Enero de 2011

Programación Orientada a Objetos en C#.NET CAPÍTULO 5 H E R E N C I A. Ing. Bruno López Takeyas, M.C.

Prácticas de Programación

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Programación orientada a objetos

Programación Orientada a Objetos en Java

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Programación Orientada a Objetos en JAVA

Tutorial de UML. Introducción: Objetivos: Audiencia: Contenidos:

Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos

15. Parámetros o argumentos

Curso de Python Inicial

Modulo 1 El lenguaje Java

Pilares de la Orientación a Objetos

MODULO DE PROGRAMACION JAVA Nivel Básico-Intermedio

Java Inicial (20 horas)

Capítulo 6. Introducción a la POO

Relaciones entre clases: Diagramas de clases UML

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

2.1. Introducción al lenguaje Java

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

2. Estructura de un programa en Java

Tema 1. Conceptos de Java para Estructuras de Datos: interfaces y programación genérica

Clases. Java: Clases y Objetos. Clases. Clases. Modificadores de clase. Definición de una clase. Cada objeto es un ejemplar de una clase

Capítulo 10. Subtipos y Herencia.

PHP y MySQL. Inicio: - Herencia - Palabra clave Final - Polimorfismo - Type Hinting - Abstracción de clases

Curso de Doctorado: Tecnologías de Objetos

Modelo de Objetos Distribuidos

Diagramas de Clase en UML 1.1

Escuela Politécnica Nacional I. Bernal. Iván Bernal, Ph.D. 4

UNIVERSIDAD CATOLICA DE COLOMBIA FACULTAD DE INGENIERIA DE SISTEMAS

Fundamentos de Programación Orientada a Objetos ( POO ) - Parte 3 Desarrollo de Software

Tema 6. Reutilización de código. Programación Programación - Tema 6: Reutilización de código

Java en 2 horas. Rodrigo Santamaría

GESTIÓN DE REDES PARTE III

Estructura de las Aplicaciones Orientadas a Objetos Herencia de clases

Pruebas de unidad con JUnit

Notación UML para modelado Orientado a Objetos

INDICE Uso de la composición (I). Preservación de la ocultación Utilización de miembros heredados (I). Atributos...

El lenguaje de programación Java

Tema 2. El lenguaje de programación Java (Parte 1)

Introducción al UML. Domingo Hernández H. Escuela de Ingeniería de Sistemas Departamento de computación

DIAGRAMA DE CLASES EN UML

1. Qué tipos de relación hay entre las siguientes clases?

Tema: Patrones de Diseño.

Relaciones entre Clases Programación Avanzada Prim FCC-Buap Profesor: M. C. Miguel Rodríguez Hernandez

Tema: Herencia Simple y Múltiple en C++.

9. Objetos y clases Clases

Benemérita Universidad Autónoma del Estado de Puebla

2. Conceptos básicos Abstracción La abstracción como un proceso mental natural La abstracción en el desarrollo de software

Java: Clases Abstractas e Interfaces

Prof. Dr. Paul Bustamante

INSTITUTO TECNOLOGICO de la laguna Programación Orientada a Objetos en C++

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

Patrones Creacionales Builder. Patrones Creacionales Abstract Factory. Patrones Creacionales Singleton. Patrones Creacionales Prototype

1. Visión general de RMI

Patrones para persistencia (I) Ingeniería del Software II

Objetivo de aprendizaje del tema

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

Repaso de las características más importantes de la programación Java y su adaptación a Android

Benemérita Universidad Autónoma del Estado de Puebla

Herencia e Interfaces

Programación Orientada a Objetos. Java: Excepciones

Arquitectura y Lenguaje Java

Objetos y Clases en Java. ELO-329: Diseño y Programación Orientados a Objetos

Tema 2. Técnicas básicas de POO. Técnicas de Programación - Curso 2007/08

ESCUELA DE INGENIERÍA DE SISTEMAS DEPARTAMENTO DE COMPUTACIÓN PROGRAMACIÓN 2 PRÁCTICA DE LABORATORIO 7 Herencia y Composición en POO

19. Packages o paquetes

ELO329: Diseño y Programación Orientados a Objetos 20 de Junio de Certamen Final

Programación Avanzada para Sistemas de Telecomunicación. Objetos y clases. J.C. Cruellas. Objetos y clases

Modelado Estático Avanzado (Generalizaciones) Diseño de Software Avanzado Departamento de Informática

CONCEPTOS FUNDAMENTALES DE LA ORIENTACION A OBJETOS

Programación Orientada a Objetos

Tema 3: Genericidad en Java. Tema 3: Genericidad en Java. Objetivos y Bibliografía. Modelos de Datos Genéricos

PROGRAMA DE MATERIA SOFTWARE DE BASE Y PROGRAMACION DE SISTEMAS SOFTWARE DE BASE Y PROGRAMACION DE SISTEMAS

Clases abstractas e interfaces

Lenguajes de Programación Curso Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces Clases abstractas 2

TEMA 7: DIAGRAMAS EN UML

11. Algunas clases estándar de Java (II)

CONTENIDOS. 1. Completar el ejemplo de Herencia: Superclase Persona-Subclase Alumno

Introducción a la programación orientada a objetos

1 HILOS (THREADS) EN JAVA

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein Javier Navarro

Factory method (Gamma et al.)

PROGRAMACIÓN ORIENTADA A OBJETOS

Transcripción:

Herencia Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es

Objetivos Aprender los conceptos de herencia Comprender la forma de derivar una subclase Java 2

Índice Qué es herencia? La Clase Object Cómo derivar una subclase Qué se puede hacer en una subclase? Palabra reservada super Sobreescritura (overriding) de métodos Modificadores en los métodos sobreescritos Casting de clases Clases y métodos final Java 3

Qué es herencia? Característica primaria de la programación orientada a objetos La herencia es una relación entre una superclase: clase más general una subclase: clase más especializada La subclase hereda los datos (variables) y comportamientos (métodos) de la superclase Java 4

Porqué la herencia? Reusabilidad Un comportamiento (método) en una super clase es heredado por todas las subclases. Se escribe un método una vez y se puede utilizar por todas las subclases Un conjunto de propiedades (campos) en una super clase son heredadas por todas las subclases. Una clase y todas las subclases comparten el mismo conjunto de propiedades Una subclase sólo necesita implementar las diferencias entre ella y su antecesor Java 5

Ejemplo: Jerarquía de Clase Vehículo Vehiculo Moto Coche Camion Turismo Todoterreno Java 6

Principio de sustitución Como la subclase Coche es-un Vehiculo Coche comparte características comunes con Vehiculo Se puede sustituir un objeto Coche en un algoritmo que espera un objeto Vehiculo La relación es-un se representa con una flecha en un diagrama de clase y significa que la subclase puede pertenecer como un objeto de la superclase Coche micoche = new Coche(...); procesavehiculo(micoche); Vehiculo es-un Coche Java 7

Herencia de las superclases Una subclase hereda desde la superclase: Todos los métodos públicos que no sobreescribe (override) Todas las variables de instancia La subclase puede: Añadir variables de instancia nuevas Añadir nuevos métodos Cambiar la implementación de métodos heredados Java 8

La Clase Object La clase Object es la madre de todas las subclases En lenguaje Java, todas las clases son derivadas o extendidas a partir de la super clase Object La clase Object es la única que no tiene una clase padre La clase Object define e implementa el comportamiento común a todas las clases incluyendo las que uno escribe getclass() equals() tostring() Java 9

Llamada a método tostring El método tostring retorna la representación String de un objeto La clase Rectangle (java.awt) tiene un método tostring Se puede invocar directamente Rectangle box = new Rectangle(5, 10, 20, 30); String s = box.tostring(); // Invoca tostring directamente // Asigna s a "java.awt.rectangle[x=5,y=10,width=20,height=30]" Se invoca implicítamente cuando se concatena un String con un objeto System.out.println("box=" + box); // Llamada tostring implicito Java 10

Sobreescribiendo el método tostring Para una clase creada se puede usar tostring sin sobreescribir CuentaBanco miahorro = new CuentaBanco(5000); String s = miahorro.tostring(); // Asigna a s algo como CuentaBanco@d24606bf" Contiene el nombre de la clase seguido del código hash del objeto (no es muy útil) Si se sobreescribe, se puede obtener el estado del objeto public class CuentaBanco { public String tostring() { // retorna CuentaBanco[balance=5000]" return "CuentaBanco[balance=" + balance + "]"; Java 11

Herencia y el método tostring Es preferible usar getclass (heredado del objeto) en la superclase public class CuentaBanco {... public String tostring() { return getclass().getname() + "[balance=" + balance + "]"; Después usar herencia, llamando primero tostring de la sc public class CuentaAhorro extends CuentaBanco {... public String tostring() { return super.tostring() + "[interestrate=" + intrate + "]"; // retorna CuentaAhorro[balance= 10000][interestRate= 5] Java 12

Cómo derivar una subclase Para derivar una clase hija se usa la palabra reservada extends Suponiendo que se tiene una clase padre Person public class Person { protected String name; protected String address; /** Default constructor */ public Person() { System.out.println("Inside Person:Constructor"); name = ""; address = "";.... Java 13

Cómo derivar una subclase Se desea crear otra clase llamada Student Como un estudiante también es una persona, se decide extender la clase Person que hereda todas las propiedades y métodos de la clases existente Person public class Student extends Person { public Student(){ System.out.println("Inside Student:Constructor");.... Java 14

Qué se puede hacer en una subclase? Una subclase hereda todos los miembros (campos y métodos) public y protected de su padre, sin importar el package en el que se encuentra la subclase Si la subclase está en el mismo paquete del padre, también hereda los miembros privados del paquete (campos o métodos) del padre Java 15

Qué se puede hacer en una subclase respecto a los campos Los campos heredados se pueden usar de forma directa, como cualquier otro campo Se puede declarar nuevos campos en la subclase que no están en la superclase Se puede declarar un campo en la subclase con el mismo nombre como el de la superclase, por lo que se le oculta (no recomendado) Una subclase no hereda los miembros privados de la clase padre. La sc debe ofrecer métodos públicos o protegidos para acceder a los campos privados Java 16

Qué se puede hacer en una subclase respecto a los métodos Los métodos heredados se pueden usar de forma directa Se puede escribir una nueva instancia del método en la subclase que tiene la misma interfaz del método en la superclase (overriding) Se puede escribir un nuevo método estático en la subclase que tiene la misma interfaz como el de la superclase (ocultación) Se puede declarar nuevos métodos en la subclase que no están en la superclase Java 17

Llamada encadenada de constructor Un constructor de una subclase invoca el constructor de la superclase implícitamente Cuando un objeto Student, una subclase, es instanciado el constructor por defecto de su superclase, clase Person, es invocado implícitamente antes que el método constructor de la subclase es invocado El constructor de una subclase puede invocar el constructor de su superclase explícitamente usando la palabra reservada super Se usa para pasar parámetros al constructor de la supercl Java 18

Ejemplo: Llamada a constructor sc Considerando el siguiente código: public static void main (String [] args) { Student ana = new Student(); Crea un objeto de la clase Student. La salida del programa es: Inside Person:Constructor Inside Student:Constructor Java 19

Palabra reservada super Una subclase puede llamar explícitamente un constructor de su superclase inmediata Esto se consigue por el uso de super para la llamada al constructor Una llamada del constructor super() en el constructor de una subclase resultará en la ejecución del constructor de la superclase basado en los argumentos pasados La llamada a super() debe ser la primera sentencia en el constructor y sólo se puede usar en un constructor Java 20

Palabra reservada super Otro uso de super es para referirse a miembros de la superclase (como la referencia this) Ejemplos de uso de super: public class Student extends Person { public Student(){ super( UnNombre, UnaDireccion ); System.out.println("Inside Student:Constructor"); super.name = UnNombre ; super.address = UnaDireccion ;.... Java 21

Sobreescritura (overriding) de métodos Si una clase derivada necesita tener una versión diferente de la instancia de un método de la superclase, sobreescribe la instancia del método en la subclase El método que sobreescribe tiene el mismo nombre, número y tipo de parámetros y tipo de retorno que el método sobreescrito El método que sobreescribe puede también retornar un subtipo del tipo retornado por el método sobreescrito. Al tipo retornado se le llama covariante Java 22

Ejemplo de (overriding) de métodos public class Person { : public String getname() { System.out.println("Parent: getname"); return name; --------------------------------------------------------------------------------------------------------------------------------------------------- public class Student extends Person { : public String getname() { System.out.println("Student:getName"); return name; : Cuando se invoca el método getname de un objeto Student, el resultado es: Student:getName Java 23

Modificadores en los métodos sobreescritos El especificador de acceso de un método sobreescrito puede permitir más, pero no menos, acceso que el método sobreescrito Así, un método protegido en la superclase se puede hacer público, pero no privado, en la subclase Se obtendrá un error en tiempo de compilación si se intenta cambiar una instancia de método en la superclase a un método de clase en la subclase, y viceversa Java 24

Ocultación de Métodos Si una subclase define un método de clase (método estático) con la misma interfaz que el método de clase en la superclase, el método en la subclase esconde al de la superclase class Animal { public static void testclassmethod() { System.out.println("metodo de clase en Animal."); // testclassmethod() de la subclase oculta el de la superclase class Cat extends Animal { public static void testclassmethod() { System.out.println("metodo de clase en Cat."); Java 25

Ocultación de campos Dentro de una subclase, un campo que tiene el mismo nombre que un campo en la superclase oculta el campo de la superclase incluso si son de tipos diferentes Dentro de la subclase, el campo en la superclase no puede ser referenciado simplemente por su nombre Para ello debe ser accedido con la palabra clave super En general, no se recomienda el uso de campos ocultos debido a que dificulta la lectura del código Java 26

Qué es Tipo? Cuando se crea una instancia de un objeto de una clase, se dice que el objeto es del tipo de la clase y sus superclases Ejemplo: Student student1 = new Student(); El objeto student1 es del tipo Student El objeto student1 también es del tipo Person si Student es una subclase de Person El objeto student1 también es del Object Java 27

Qué es Significado? La instancia de un objeto de un tipo particular se puede usar en cualquier lugar donde se invoca una instancia del tipo y del supertipo Ejemplo: El objeto student1 es de tipo Student y Person El objeto student1 se puede usar en cualquier lugar donde el objeto de tipo Student o Person se invoca Este mecanismo hace posible polimorfismo Java 28

Casting de tipo implícito Un objeto de una subclase se puede asignar a una variable (referencia) de la clase padre a través del casting de tipo implícito Ejemplo: Si la clase Student es hija de la clase Person y UCStudent es hija de la clase Student UCStudent ucstudent = new UCStudent(); Student student = ucstudent; //cast implicito Person person = ucstudent; //cast implicito Object object = ucstudent; //cast implicito Java 29

Casting de tipo explícito Un objeto de una superclase se puede asignar a una variable (referencia) de la clase hija a través del casting de tipo explícito. No hacerlo produce error de compilación Ejemplo: Si la clase Student es hija de la clase Person Person person1 = new Student(); Student student1=(student)person1;//cast expl Java 30

Excepción en ejecución por tipos dispares Incluso con cast explícito se puede tener un error en tiempo de ejecución Ejemplo: La clase Student es hija de la clase Person La clase Teacher es hija de la clase Person Person person1 = new Student(); Person person2 = new Teacher(); Student student1=(student)person1;//cast expl //produce error de type mismatch en ejecución Student student2=(student)person2; Java 31

Uso del operador instanceof para prevenir error por disparidad de tipo Se puede comprobar el tipo del objeto usando el operador instanceof antes de realizar el cast Ejemplo: la clase Student es hija de la clase Person y la clase Teacher es hija de la clase Person Person person1 = new Student(); Person person2 = new Teacher(); //Hacer cast despues de verificar tipo if (pearson2 instanceof Student) { Student student2=(student)person2; Java 32

Clases final Son clases que no se pueden extender. Declaración: public final ClassName {... Ejemplos de clases finales son las clases wrapper y la clase String Java 33

Métodos final Son métodos que no se pueden sobreescribir. Declaración: public final [tiporeturn][nombremet]([parametros]) {... Los métodos static son automáticamente final public final String getname() { return name; Java 34