1. 2 herencia en el mundo real medio de transporte vehiculo aéreo objeto de oficina cosa coche...

32
1

Upload: elena-peralta

Post on 02-Apr-2015

111 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

1

Page 2: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

2

Herencia en el mundo real

Medio de transporte

Vehiculo aéreo

Objeto de oficina

Cosa

Coche

Medio de tele-comunicación

Page 3: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

Objetivos:a) Definir el concepto de herencia entre

clasesb) Interpretar el código fuente de una

aplicación Java donde aparecen clases relacionadas mediante la herencia.

c) Construir una aplicación Java sencilla, convenientemente especificada, que haga uso de la herencia entre clases.

3

Page 4: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

La herencia es una propiedad que permite la declaración de nuevas clases a partir de otras ya existentes. Esto proporciona una de las ventajas principales de la Programación Orientada a Objetos: la reutilización de código previamente desarrollado ya que permite a una clase más específica incorporar la estructura y comportamiento de una clase más general.

4

Page 5: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

En otras palabras: La idea básica es poder crear clases

basadas en clases ya existentes. Cuando heredamos de una clase

existente, estamos re-usando código (métodos y campos).

Podemos agregar métodos y variables para adaptar la clase a la nueva situación.

5

Page 6: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

La herencia la identificamos cuando encontramos la relación es-un entre la nueva clase y la ya existente. Un estudiante es una persona.

La clase ya existente se le llama superclase, clase base , o clase padre.

A la nueva clase se le llama subclase, clase derivada, o clase hija.

6

Page 7: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

De hecho, en Java, todas las clases deben derivar de alguna clase. (Object)

Cuando una clase B se construye a partir de otra A mediante la herencia, la clase B hereda todos los atributos, métodos y clases internas de la clase A. Además la clase B puede redefinir los componentes heredados y añadir atributos, métodos y clases internas específicas

7

Page 8: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

Para indicar que la clase B (clase descendiente, derivada, hija o subclase) hereda de la clase A (clase ascendiente, heredada, padre, base o superclase) se emplea la palabra reservada extends en la cabecera de la declaración de la clase descendiente. La sintaxis es la siguiente:

public class ClaseB extends ClaseA { // Declaracion de atributos y metodos especificos de ClaseB // y/o redeclaracion de componentes heredados }

8

Page 9: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

9

Page 10: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

Java permite definir una clase como subclase de una clase padre.class clase_hija extends

clase_padre{..........}

10

Clase Padre

Clase Hija

Page 11: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

11

Page 12: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

En este diagrama: La clase Empleado es la superclase

de Director, Comercial e Informático. Las clases Director, Comercial e Informático son subclases

de la clase Empleado. La clase Director es la superclase de Ejecutivo. La clase Ejecutivo es la subclase de Director. Las subclases heredan todos los métodos y atributos de sus

superclases. Por tanto, al definir una subclase, esta tiene automáticamente el mismo comportamiento que la superclase que hereda. Y se debe tener en cuenta que esta herencia sube en la jerarquía hasta llegar a la cumbre.

12

Page 13: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

13

Existe una raíz en esta jerarquía, que es la clase Object. Todas las clases creadas heredan las características y el comportamiento de Object.

Page 14: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

¿Cómo se define la herencia en Java?Para indicar que una clase hereda de otra, se utiliza la palabra

reservada extends. Siguiendo el ejemplo del gráfico anterior, deberíamos definir las clases de la siguiente manera:

class Empleado { }class Director extends Empleado { }class Comercial extends Empleado { }class Informatico extends Empleado { }class Ejecutivo extends Director { }

14

Page 15: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

El objetivo del constructor es el de inicializar un objeto cuando éste es creado. Asignaremos los valores iniciales así como los procesos que ésta clase deba realizar.

Se utiliza para crear tablas de métodos virtuales y poder así desarrollar el polimorfismo, una de las herramientas de la programación orientada a objetos (POO). Al utilizar un constructor, el compilador determina cual de los objetos va a responder al mensaje (virtual) que hemos creado. Tiene un tipo de acceso, un nombre y un paréntesis.

En java es un método especial dentro de una clase, que se llama automáticamente cada vez que se crea un objeto de esa clase.

15

Page 16: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

Un constructor se llama igual que la clase. No devuelve nada, ni siquiera void. Pueden existir varios, pero siguiendo las

reglas de la sobrecarga de funciones. De entre los que existan, tan sólo uno se

ejecutará al crear un objeto de la clase. Dentro del código de un constructor

generalmente suele existir inicializaciones de variables y objetos, para conseguir que el objeto sea creado con dichos valores iniciales.

16

Page 17: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

Constructor por defectoUn constructor por defecto es un constructor sin parámetros

que no hace nada. Sin embargo será invocado cada vez que se construya un objeto sin especificar ningún argumento, en cuyo caso el objeto será iniciado con los valores predeterminados por el sistema (los atributos numéricos a ceros, los alfanuméricos a nulos, y las referencias a objetos a null).

Para definir los constructores se emplea la siguiente sintaxis:

[modifVisibilidad] nombreConstructor (listaParámetros) [throws listaExcepciones]

{}

17

Page 18: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

public class Arboles { public Arboles() { System.out.println("Un árbol genérico"); } public Arboles(String tipo) { System.out.println("Un árbol tipo " + tipo); } public Arboles(int altura) { System.out.println("Un árbol de " + altura + " metros"); } public Arboles(int altura,String tipo) { System.out.println("Un " + tipo + " de " + altura + " metros"); } public static void main(String args[]) { Arboles arbol1 = new Arboles(4); Arboles arbol2 = new Arboles("Roble"); Arboles arbol3 = new Arboles(); Arboles arbol4 = new Arboles(5,"Pino");

} }

18

Page 19: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

Cuando se declara un objeto de una clase derivada, se ejecutan los constructores siguiendo el orden de derivación, es decir, primero el de la clase base, y después los constructores de las clases derivadas de arriba a abajo.

Para pasar parámetros al constructor de la clase padre:

super (para1, para2, ..., paraN)19

Page 20: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

class Humano { protected String nombre; protected String apellido;

public Humano(String nombre, String apellido) { this.nombre = nombre; this.apellido = apellido; }

/* el this es un apuntador al objeto mismo. Y se emplea para evitar ambigüedades, porque en el método constructor que usas sirve para diferenciar el atributo de la clase, del atributo que entra como parámetro. */

public String nombreCompleto() { return this.apellido + ", " + this.nombre; }

public String identificacion() { return this.nombreCompleto(); }}

20

Page 21: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

class Ciudadano extends Humano { protected String documento;

public Ciudadano(String nombre,String apellido, String documento) { super(nombre,apellido);

this.documento = documento; } //super( ) llama al constructor de la clase de la que se hereda

(extends). public String identificacion() { return super.identificacion() + ", documento: " +

this.documento; } public String getDocumento(){ return documento; } }

21

Page 22: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

public class Herencia { public static void main (String args[ ]) { Humano a = new Humano("Emilio","Rosso"); Ciudadano b = new Ciudadano("Emilio","Rosso","3052454545");

System.out.println(a.nombreCompleto()); System.out.println(b.identificacion()); System.out.println(b.getDocumento()); // System.out.println(a.getDocumento()); /* no es posible acceder a un miembro de la clase hija usando una

referencia u objeto de la clase padre*/ } }

22

Page 23: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

23

Page 24: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

24

Page 25: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

Una clase abstracta (abstract) es una clase de la que no se pueden crear objetos. Su utilidad es permitir que otras clases deriven de ella, proporcionándoles un marco o modelo que deben seguir y algunos métodos de utilidad general. En otras palabras una clase abstracta define una interfaz común para los diversos miembros de una jerarquía de clases.

La clase abstracta contiene métodos que se definirán en las subclases.

Todas las clases de la jerarquía pueden usar la misma interfaz gracias al polimorfismo.

25

Page 26: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

Una clase abstracta puede tener métodos declarados como abstractos, en cuyo caso no se da definición del método. Si una clase tiene algún método abstracto es obligatorio que la clase sea abstracta. En cualquier sub-clase este método deberá ser redefinido, o bien volver a declararse como abstracto (el método y la sub-clase).

Una clase abstracta puede tener métodos que no son abstractos. Aunque no se puedan crear objetos de esta clase, sus sub-clases heredarán el método completamente a punto para ser utilizado.

Como los métodos static no pueden ser redefinidos, un método abstract no puede ser static.

26

Page 27: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

Si una clase contiene al menos un método abstracto, entonces es una clase abstracta.

Una clase abstracta es una clase de la que no se pueden crear objetos, pero puede ser utilizada como clase padre para otras clases.

Declaración:abstract class NombreClase {

..............}

27

Page 28: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

Algunas veces, una clase que se ha definido representa un concepto abstracto y como tal, no debe ser ejemplarizado. Por ejemplo, la comida en la vida real. ¿Has visto algún ejemplar de comida? No. Lo que has visto son ejemplares de manzanas, pan, y chocolate. Comida representa un concepto abstracto de cosas que son comestibles. No tiene sentido que exista un ejemplar de comida.

28

Page 29: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

Similarmente en la programación orientada a objetos, se podría modelar conceptos abstractos pero no querer que se creen ejemplares de ellos. Por ejemplo, la clase Number del paquete java.lang representa el concepto abstracto de número. Tiene sentido modelar números en un programa, pero no tiene sentido crear un objeto genérico de números.

29

Page 30: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

La clase Number sólo tiene sentido como superclase de otras clases como Integer y Float que implementan números de tipos específicos.

Las clases como Number, que implementan conceptos abstractos y no deben ser ejemplarizadas, son llamadas clases abstractas. Una clase abstracta es una clase que sólo puede tener subclases no puede ser ejemplarizada.

30

Page 31: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

Para declarar que una clase es un clase abstracta, se utiliza la palabra clave abstract en la declaración de la clase.

abstract class Number { . . . }Si se intenta ejemplarizar una clase abstracta, el compilador

mostrará un error similar a este y no compilará el programa:

AbstractTest.java:6: class AbstractTest is an abstract class. It can't be instantiated.

new AbstractTest(); ^1 error

31

Page 32: 1. 2 Herencia en el mundo real Medio de transporte Vehiculo aéreo Objeto de oficina Cosa Coche Medio de tele- comunicación

32