0% encontró este documento útil (0 votos)
74 vistas64 páginas

Tema 4

Este documento describe conceptos de herencia y polimorfismo en programación orientada a objetos. Explica jerarquías de clases, herencia, sobrescritura de métodos, polimorfismo e implementación de estas técnicas mediante ejemplos de clases Persona, Empleado y Estudiante.

Cargado por

Toby Messi
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
74 vistas64 páginas

Tema 4

Este documento describe conceptos de herencia y polimorfismo en programación orientada a objetos. Explica jerarquías de clases, herencia, sobrescritura de métodos, polimorfismo e implementación de estas técnicas mediante ejemplos de clases Persona, Empleado y Estudiante.

Cargado por

Toby Messi
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Tema 4: Herencia y

Polimorfismo
El alumno aplicará las propiedades de la
programación orientada a objetos para la resolución
de problemas y conocerá elementos adicionales para
construir soluciones de Sw.
4.1 Jerarquía de
clases y objetos
4.1.1 Generalidades

Jerarquizar es una capacidad que permite ordenar


abstracciones.
Su principal ventaja consiste en detectar estructuras
y comportamientos comunes y con ello simplificar el
desarrollo.
4.1.1 Generalidades

La jerarquía se puede establecer de acuerdo a la


metodología de diseño:

➢Top-Down

➢Bottom-Up
4.1.2 Jerarquía de clases

• La jerarquía de clase se puede dividir en


generalización y especialización.
• La generalización es la asociación de elementos
comunes dentro de un conjunto de clases en una
clase con el propósito de “agrupar”

Animal

Reptil Mamífero Anfibio


4.1.2 Jerarquía de clases

• La especialización permite diferenciar ya sea a


través de las características o de los
comportamientos de un conjunto de objetos.

Animal

Reptil Mamífero Anfibio

Serpiente Caballo Rana


4.1.3 Jerarquía de objetos

La jerarquía entre objetos se puede clasificar en 2


tipos de relaciones:

✓ Relaciones de asociación
✓ Relaciones de dependencia

Ambos tipos de relaciones se pueden


implementar con la composición de clases
Tarea
• Investigar los tipos de relaciones entre objetos
Relaciones de asociación
Relaciones de dependencia
Relaciones de agregación?
Describir en qué consiste cada una de ellas, cuales
son las diferencias entre ellas
2 ejemplos de cada una
4.2 Herencia
4.2.1 Aspectos básicos de herencia

• La herencia es uno de los elementos distintivos del


paradigma orientado a objetos.

• Se utiliza para establecer jerarquías entre clases.

• Unos de sus objetivos es reducir el código


redundante.
4.2.1 Aspectos básicos de herencia

El principal objetivo de la
herencia es:

• Generalizar la
funcionalidad de una
clase.
• Especializar el
comportamiento de
una clase.
4.2.1 Aspectos básicos de herencia

• Por lo general, cuando se habla de herencia se usan


los términos clase padre o clase base cuando se
refieren a una superclase y términos clase hijo o
clase derivada para referirse a una subclase.

“Confucio inventó la confusión”


4.2.1 Aspectos básicos de herencia

• El “super” en superclase parece implicar que las


superclases tienen más capacidad, y el “sub” en
subclase parece implicar que las subclases tienen
menor capacidad.

• En realidad, ocurre justamente lo contrario: las


subclases tienen más capacidad. Las subclases
pueden hacer todo lo que pueden hacer las
superclases, y aún más.
4.2.1 Aspectos básicos de herencia
• Una clase ancestro se refiere a cualquiera de las
clases por arriba de una clase particular en una
jerarquía de la herencia.
• Una clase descendiente se refiere a cualquiera de
las clases por abajo de una clase particular en una
jerarquía de la herencia
4.2.1 Aspectos básicos de herencia
4.2.1 Aspectos básicos de herencia

• Una clase base puede serlo de tantas derivadas


como se desee: Una sola super clase, varias
subclases.
4.2.2. Herencia múltiple

Herencia múltiple

Java no permite la herencia múltiple.


4.2.3 Implementación de herencia
4.2.3 Implementación de herencia

Clases derivadas

• Contiene los componentes (atributos y métodos)


de la clase base.
• Los constructores no se heredan. Las clases
derivadas deberán implementar sus propios
constructores.
• Puede modificar el comportamiento de sus propios
métodos (extender la funcionalidad de la clase).
4.2.4 Sobreescritura

• Los métodos heredados de la clase base se pueden


redefinir en las clases derivadas. (también se le
llama modificar o sobreescribir)
• El método en la clase derivada se debe escribir con
el mismo nombre, el mismo número y tipo de
parámetros y el mismo tipo de retorno que en la
clase base.
4.2.4 Sobreescritura

• El método sobrescrito puede tener un modificador


de acceso menos restrictivo que el de la clase base.
• Si por ejemplo el método heredado es protected
se puede redefinir como public pero no como
private porque sería un acceso más restrictivo que
el que tiene en la clase base.
• Cuando se redefine un método, se oculta el de la
clase base y todas las sobrecargas que tenga en
ella.
4.2.5 Instrucción super()

• Esta instrucción (palabra reservada) se ejecuta


cuando se utiliza de manera explicita alguno de los
elementos de la clase padre.
• La instrucción super se utiliza para:
❖ Constructores
❖ Métodos
❖ Atributos
4.2.5 Instrucción super()

• Los constructores no se heredan. Cada clase


derivada tendrá sus propios constructores.
• La clase derivada inicializa los atributos propios y si
es necesario inicializar los de la clase padre lo
deberá hacer de manera explícita.
4.2.5 Instrucción super()

Cuando se crea un objeto de una clase derivada se


ejecutan los constructores en este orden:
• Primero se ejecuta el constructor por defecto de
las clases antecesores en orden jerárquico.
• Posteriormente se ejecuta el constructor de la
clase derivada.
4.2.5 Instrucción super()

Cuando se crea un objeto de la clase derivada y se


requiere usar un constructor de la clase padre
distinto al constructor por defecto:
• Se ejecuta la instrucción:
super(param1,param2,…)
• En la clase base debe existir un constructor
adecuado a los parámetros indicados
4.2.5 Instrucción super()

• Una clase derivada puede volver a declarar un


atributo de la clase base.
• En este caso el atributo de la clase base queda
oculto para la clase derivada.
• Para acceder a un atributo de la clase base que ha
quedado oculto en la clase derivada se escribe:
super.nombreAtributo;
4.2.6 Modificador “final”

• En el contexto de herencia, la palabra reservada


final se emplea para proteger la redefinición de los
métodos de una clase.
• Un método o un atributo con este modificador, no
puede ser sobreescrito (override) en las clases
derivadas.
4.2.6 Modificador “final”

• Se puede declarar una clase como final, cuando se


desea garantizar que no se puedan crear clases
derivadas de dicha clase
• Una clase final no se puede heredar
• Uno de los mecanismos que tienen los hackers para
dañar o para obtener información privada en los
sistemas es la de crear una clase derivada y
sustituir dicha clase por la original
4.2.6 Modificador “final”

• Por ejemplo, la clase String que es una de las más


importantes en la programación en lenguaje Java,
está declarada como final.
4.3 Modificadores de
acceso
4.3 Modificadores de Acceso

• El es principal mecanismo de los lenguajes


orientados a objetos para establecer la
encapsulación.
• También conocidos como, modificadores de
visibilidad, permiten establecer el alcance de los
atributos y de los métodos de una clase.
4.3 Modificadores de Acceso

• Para implementar el concepto de encapsulación


mediante los modificadores de acceso, se combina
el uso de paquetes y el uso de herencia y el alcance
propio de las clases.
4.3 Modificadores de Acceso

CLASE DERIVADA EL RESTO DE


MODIFICADOR PACKAGE
PROPIA OTRO PACKAGE LAS CLASES

public ✓ ✓ ✓ ✓
protected ✓ ✓ ✓ 
<friendly> ✓ ✓  
private ✓   
4.4 Polimorfismo
4.4.1 Aspectos básicos de polimorfismo

• Permite a una operación tener el mismo nombre en


clases diferentes y que actúe de modo distinto en
cada una de ellas.
• Los objetos pueden responder de diferente manera
al mismo mensaje
• Cuando diferentes tipos de objetos responden en
forma distinta a la llamada a un mismo método.
4.4.1 Aspectos básicos de polimorfismo

• La programación orientada a objetos permite a


través del polimorfismo, que no necesariamente se
conozca en tiempo de compilación el tipo de dato
de un objeto y que este pueda ser definido de
acuerdo al usuario final o a las necesidades de un
programa
• Para implementar el polimorfismo es necesario
hacerlo a través de la herencia.
4.4.2 La clase Object

• Es el ancestro de todas las otras clases, es la raíz de


la jerarquía de herencia
• Siempre que se crea un nuevo tipo de dato (clase),
de manera automática “hereda” los métods de la
clase “Object”.
4.4.2 La clase Object
4.4.3 Implementación de polimorfismo

• Los métodos heredados de la clase base se pueden


redefinir (modificar, sobrescribir) en las clases
derivadas.

• El método en la clase derivada se debe especificar


con el mismo nombre, el mismo número y tipo de
parámetros y el mismo tipo de retorno que en la
clase base.
4.4.3 Implementación de polimorfismo
Persona persona1 = new Persona();
Persona persona2 = new Empleado();
Persona persona3 = new Estudiante();

Estudiante est1 = new Persona(); 


Empleado emp1 = new Persona(); 
4.4.3 Implementación de polimorfismo

Persona persona1 = new Persona();


Empleado empleado1 = new Empleado();
Estudiante estudiante1 = new Estudiante();
persona1.Saludar();
empleado1.Saludar();
estudiante1.Saludar();
4.4.3 Implementación de polimorfismo

Persona persona1 = new Persona();


Persona persona2 = new Empleado();
Persona persona3 = new Estudiante();
persona1.Saludar();
persona2.Saludar();
persona3.Saludar();
4.4.3 Implementación de polimorfismo

Ejemplo

Persona persona3 = new Estudiante();


persona3.Saludar();
Empleado empleado1 = new Empleado();
persona3 = empleado1;
persona3.Saludar();
4.4.3 Implementación de polimorfismo

• Ejemplo
Empleado empleado1 = new Empleado();
Estudiante estudiante1 = new Estudiante();

Persona persona4;
persona4 = estudiante1;
persona4.Saludar();
persona4 = empleado1;
persona4.Saludar();
4.4.4 Casting (conversión) de objetos

El polimorfismo permite la “conversión” de un tipo


de dato de un objeto en otro.
Específicamente lo que se actualiza es la referencia
del objeto correspondiente.
Estudiante e1 = new Estudiante();
Persona p1 = e1;
Estudiante e2 = (Estudiante)p1
4.4.4 Casting (conversión) de objetos

Persona persona5 = new Estudiante();


persona5.Apellido= “Ramirez";
Estudiante estudiante2 = (Estudiante)persona5;
estudiante2.Saludar();
System.out.println(" dice "+estudiante2.Apellido);
4.5 Clases
Abstractas
4.5 Clases abstractas

• Una clase abstracta... es una clase genérica que


tiene el propósito de hacer una generalización de
elementos.
• Se denomina abstracta porque es una clase de la
cual no se crean instancias. (no se puede instanciar)
4.5 Clases abstractas

• Se usa únicamente para definir subclases (para


especializar).
• Una clase abstracta puede contener métodos
abstractos y no abstractos
• Para declarar una clase o un método como
abstractos, se utiliza la palabra reservada abstract.
4.5 Clases abstractas

• Con las clases abstractas se pretende definir un


proceso general que luego será implementado por
las sub-clases que hereden de ella.

• Si se tiene una clase que hereda de una Abstracta,


es obligatorio definir los métodos abstractos de la
clase padre.
4.5 Clases abstractas

• Las clases clases abstractas no pueden tener los


modificadores “private” o “final”.
• Una clase abstracta puede heredar de otra clase
abstracta.
• Un método abstracto solo se puede declarar en
clases abstractas.
4.5 Clases abstractas

Consideraciones
• No existen los constructores abstractos
• No existen los métodos estáticos abstractos
• Las clases abstractas no se pueden instanciar.
• Los métodos de una clase abstracta deben ser
públicos
4.5.1 Uso de clases abstractas

public abstract class Figura {


private String color;
public Figura(String color){
this.color = color;
}
public abstract double calcularArea();
public abstract int calcularPerimetro();
public String getColor() {
return color;
}
}
4.5.1 Uso de clases abstractas
public class Cuadrado extends Figura {
private double lado;
public Cuadrado(String color, double lado) {
super(color);
this.lado = lado;
}
public double calcularArea() {
return lado * lado;
}
public int calcularPerimetro(){
return lado*4;
}
}
4.5.2 Clases con modificador final

public abstract class Perro extends Animal


{
// Definición de la clase
}

public final class Gato extends Animal{


// Definición de la clase
}
4.6 Interfaces
4.6.1 Definición de interfaces

• “An interface is an abstract data type that defines a


list of abstract public methods that any class
implementing the interface must provide.”
• Un interfaz en Java es un ente (unidad, elemento,
tad) que contiene un conjunto de métodos
abstractos.
4.6 Interfaces

• El uso de las interfaces es esencial para la


construcción de grandes proyectos de
programación.
• Se utilizan comúnmente en elementos gráficos.
• Una de las formas en las que se puede entender la
idea de uso de interfaces es como un contrato
entre el diseñador de un programa y los
implementadores del programa.
4.6.1 Definición de interfaces

• Es la extensión del concepto de clase abstracta, la


diferencia es que todos sus métodos deberán
declararse obligatoriamente como abstractos.
• Las clases implementan las interfaces. Esto implica
que las clases definen los métodos que se
encuentran declarados en las interfaces.
4.6.2 Uso de interfaces

public interface SerVivo {


void comer();
void caminar();
void dormir(int horas);
int tiempoDeVida();
}
4.6.2 Uso de interfaces

• Una clase invoca una interfaz usando la palabra


“implements” en la definición de la clase.

public class Perro extends Animal implements SerVivo{


// Definición de la clase
}
4.6.2 Uso de interfaces

public abstract interface puedeVolar {


public abstract void Volar(int vel);
void despegar();
double aterrizar();
}
4.6.1 Definición de interfaces

• Una clase solo puede heredar de una clase padre,


pero puede implementar todas las interfaces que
necesite para cumplir las funcionalidades de un
programa
• El uso de interfaces no implica herencia porque no
se reutiliza código ni se conservan características
particulares (atributos)
4.6.2 Uso de interfaces

• Reglas de uso de las interfaces:

1.- No se pueden instanciar.


2.- No requiere tener métodos pero todos los que
tenga deben ser abstractos y publicos
3.- No puede tener el modificador “final”
4.- Una clase puede implementar todas las interfaces
que necesite

También podría gustarte