Download Herencia y Polimorfismo

Document related concepts
no text concepts found
Transcript
HERENCIA,
CONSTRUCTORES, CLASES Y
MÉTODOS ABSTRACTOS,
INTERFACES Y
POLIMORFISMO
1
Herencia en el mundo real
Cosa
Medio de telecomunicación
Medio de
transporte
Objeto de
oficina
Coche
Vehiculo aéreo
2
HERENCIA
Objetivos:
a) Definir el concepto de herencia entre clases
b) 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
DEFINICIÓN HERENCIA

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
HERENCIA
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
HERENCIA
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
HERENCIA
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
HERENCIA

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
HERENCIA CLASES Y SUPERCLASES
9
HERENCIA EN JAVA

Java permite definir una
clase como subclase de una
clase padre.
class clase_hija extends clase_padre
{
..........
}
Clase Padre
Clase Hija
10
HERENCIA
11
HERENCIA
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
HERENCIA
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.
13
HERENCIA

¿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
CONSTRUCTORES

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
CONSTRUCTORES





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
CONSTRUCTORES

Constructor por defecto
Un 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
CONSTRUCTORES - EJEMPLO
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
CONSTRUCTORES Y HERENCIA
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
EJEMPLO DE CÓDIGO
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
CONSTRUCTORES Y HERENCIA
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
CONSTRUCTORES Y HERENCIA
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
HERENCIA Y CONSTRUCTORES
23
24
CLASES Y MÉTODOS ABSTRACTOS

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
CLASES Y MÉTODOS ABSTRACTOS

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
CLASES ABSTRACTAS
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
CLASES Y MÉTODOS ABSTRACTOS

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
CLASES Y MÉTODOS ABSTRACTOS

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
CLASES Y MÉTODOS ABSTRACTOS


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
CLASES Y MÉTODOS ABSTRACTOS
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
CLASES Y MÉTODOS ABSTRACTOS
32