Diana Progra

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 8

Instituto Tecnológico de Mérida

Programación orientada a objetos

Unidad III:
Herencia y polimorfismo

Diana Laura Salas Ramírez

Grupo: 2DV

Prof. Tomas Humberto Villalobos Díaz


-HERENCIA
La herencia es específica de la programación orientada a objetos, donde una
clase nueva se crea a partir de una clase existente. La herencia (a la que
habitualmente se denomina subclase) proviene del hecho de que la subclase (la
nueva clase creada) contiene los atributos y métodos de la clase primaria. La
principal ventaja de la herencia es la capacidad para definir atributos y métodos
nuevos para la subclase, que luego se aplican a los atributos y métodos
heredados.

Esta particularidad permite crear una estructura jerárquica de clases cada vez más
especializada. La gran ventaja es que uno ya no debe comenzar desde cero
cuando desea especializar una clase existente. Como resultado, se pueden
adquirir bibliotecas de clases que ofrecen una base que puede especializarse a
voluntad (la compañía que vende estas clases tiende a proteger las datos
miembro usando la encapsulación).
-POLIMORFISMO
El polimorfismo es la habilidad de una función, método, variable u objeto de
poseer varias formas distintas. Podríamos decir que un mismo identificador
comparte varios significados diferentes.

El propósito del polimorfismo es implementar un estilo de programación


llamado envío de mensajes en el que los objetos interactúan entre ellos mediante
estos mensajes, que no son más que llamadas a distintas funciones.

Java tiene 4 grandes formas de polimorfismo (aunque conceptualmente, muchas


más):

*Polimorfismo de Sobrecarga
*Paramétrico
*Polimorfismo de inclusión

- Sobrecarga: Es cuando existen funciones con el mismo nombre, con


funcionalidad similar; en clases que son completamente independientes una de la
otra.

- Paramétrico: Existen funciones con el mismo nombre pero se usan diferentes


parámetros (nombre o tipo). Se selecciona el método dependiendo del tipo de
datos que se mande.

-Inclusión: Es cuando se puede llamar a un método sin tener que conocer su tipo,
así no se toma en cuenta los detalles de las clases especializadas, utilizando una
interfaz común.
-OBJETOS DE CLASE BASE

Como vemos en el código, el constructor de la clase base inicializa los cuatro


miembros dato. Llamamos al constructor creando un objeto de la clase Ventana

Ventana ventana=new Ventana(0, 0, 20, 30);

Desde el objeto ventana podemos llamar a las funciones miembro públicas

ventana.mostrar();
ventana.cambiarDimensiones(10, 10);
ventana.mostrar();

-CLASE DERIVADA

Incrementamos la funcionalidad de la clase Ventana definiendo una clase derivada


denominada VentanaTitulo. Los objetos de dicha clase tendrán todas las
características de los objetos de la clase base, pero además tendrán un título, y se
podran desplazar (se simula el desplazamiento de una ventana con el ratón).

La clase derivada heredará los miembros dato de la clase base y las funciones
miembro, y tendrá un miembro dato más, el título de la ventana.

public class VentanaTitulo extends Ventana{


protected String titulo;
public VentanaTitulo(int x, int y, int w, int h, String nombre) {
super(x, y, w, h);
titulo=nombre;
}

extends es la palabra reservada que indica que la clase VentanaTitulo deriva, o


es una subclase, de la clase Ventana.

La primera sentencia del constructor de la clase derivada es una llamada al


constructor de la clase base mediante la palabra reservada super. La llamada

super(x, y, w, h);

inicializa los cuatro miembros dato de la clase base Ventana: x, y, ancho, alto. A
continuación, se inicializa los miembros dato de la clase derivada, y se realizan las
tareas de inicialización que sean necesarias. Si no se llama explícitamente al
constructor de la clase base Java lo realiza por nosotros, llamando al constructor
por defecto si existe.

La función miembro denominada desplazar cambia la posición de la ventana,


añadiéndoles el desplazamiento.
public void desplazar(int dx, int dy){
x+=dx;
y+=dy;
}

Redefine la función miembro mostrar para mostrar una ventana con un título.

public void mostrar(){


super.mostrar();
System.out.println("titulo : "+titulo);
}

En la clase derivada se define una función que tiene el mismo nombre y los
mismos parámetros que la de la clase base. Se dice que redefinimos la
función mostrar en la clase derivada. La función miembro mostrar de la clase
derivada VentanaTitulo hace una llamada a la función mostrar de la clase
base Ventana, mediante

super.mostrar();

De este modo aprovechamos el código ya escrito, y le añadimos el código que


describe la nueva funcionalidad de la ventana por ejemplo, que muestre el título.

Si nos olvidamos de poner la palabra reservada super llamando a la


función mostrar, tendríamos una función recursiva. La función mostrar llamaría
a mostrar indefinidamente.

public void mostrar(){ //¡ojo!, función recursiva


System.out.println("titulo : "+titulo);
mostrar();
}

-OBJETOS DE LA CLASE DERIVADA

Creamos un objeto ventana de la clase derivada VentanaTitulo

VentanaTitulo ventana=new VentanaTitulo(0, 0, 20, 30,


"Principal");

Mostramos la ventana con su título, llamando a la función mostrar, redefinida en la


clase derivada
ventana.mostrar();

Desde el objeto ventana de la clase derivada llamamos a las funciones miembro


definidas en dicha clase

ventana.desplazar(4, 3);

Desde el objeto ventana de la clase derivada podemos llamar a las funciones


miembro definidas en la clase base.

ventana.cambiarDimensiones(10, -5);

Para mostrar la nueva ventana desplazada y cambiada de tamaño escribimos

ventana.mostrar();

-OBJETOS DE LA CLASE DERIVADA


Creamos un objeto ventana de la clase derivada VentanaTitulo

VentanaTitulo ventana=new VentanaTitulo(0, 0, 20, 30,


"Principal");

Mostramos la ventana con su título, llamando a la función mostrar, redefinida en la


clase derivada

ventana.mostrar();

Desde el objeto ventana de la clase derivada llamamos a las funciones miembro


definidas en dicha clase

ventana.desplazar(4, 3);
Desde el objeto ventana de la clase derivada podemos llamar a las funciones
miembro definidas en la clase base.

ventana.cambiarDimensiones(10, -5);

Para mostrar la nueva ventana desplazada y cambiada de tamaño escribimos

ventana.mostrar();

-CLASES ABSTRACTAS

Una clase que declara la existencia de métodos pero no la implementación de


dichos métodos (o sea, las llaves { } y las sentencias entre ellas), se considera una
clase abstracta.

Una clase abstracta puede contener métodos no-abstractos pero al menos uno de
los métodos debe ser declarado abstracto.

Para declarar una clase o un método como abstractos, se utiliza la palabra


reservada abstract.

abstract class Drawing


{
abstract void miMetodo(int var1, int var2);
String miOtroMetodo( ){ ... }
}

Una clase abstracta no se puede instanciar pero si se puede heredar y las clases
hijas serán las encargadas de agregar la funcionalidad a los métodos abstractos.
Si no lo hacen así, las clases hijas deben ser también abstractas.

-INTERFAZ
Una interface es una variante de una clase abstracta con la condición de que
todos sus métodos deben ser asbtractos. Si la interface va a tener atributos, éstos
deben llevar las palabras reservadas static final y con un valor inicial ya que
funcionan como constantes por lo que, por convención, su nombre va en
mayúsculas.

interface Nomina
{
public static final String EMPRESA = "Patito, S. A.";
public void detalleDeEmpleado(Nomina obj);
}

Una clase implementa una o más interfaces (separadas con comas ",") con la
palabra reservada implements. Con el uso de interfaces se puede "simular" la
herencia múltiple que Java no soporta.
class Empleado implements Nomina
{
...
}

En este ejemplo, la clase Empleado tiene una clase padre llamada Object
(implícitamente) e implementa a la interface Nomina, quedando el diagrama de
clases de la siguiente manera:

La clase que implementa una interface tiene dos opciones:


1) Implementar todos los métodos de la interface.
2) Implementar sólo algunos de los métodos de la interface pero esa clase debe
ser una clase abstracta (debe declararse con la palabra abstract).
-BIBLIOTECA
Una biblioteca de clases es un conjunto de clases de programación orientada a
objetos. Esas clases contienen métodos que son útiles para los programadores.
En el caso de Java cuando descargamos el JDK obtenemos la librería de clases
API. Utilizar las clases y métodos de las APIs de Java reduce el tiempo de
desarrollo de los programas. También, existen diversas bibliotecas de clases
desarrollados por terceros que contienen componentes reutilizables de software, y
están disponibles a través de la Web.

BIBLIOGRAFIA

http://profesores.fi-b.unam.mx/carlos/java/java_basico4_9.html
https://www.ctr.unican.es/asignaturas/pp/apuntes/03-herencia_3en1.pdf
https://www.luaces-novo.es/polimorfismo-en-java/
http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/herencia/herencia.htm

También podría gustarte