poo herencias en java - aleksandr paul quito perez

8

Click here to load reader

Upload: aleksandr-paul-quito-perez

Post on 11-Jun-2015

6.051 views

Category:

Documents


0 download

DESCRIPTION

En esta oportunidad, presento este material con el tema de Herencias en Java, explicados de una manera sencilla, de tal manera que el lector, lo entienda. atte: Aleksandr Paul Quito Perez

TRANSCRIPT

Page 1: POO HERENCIAS EN JAVA - Aleksandr Paul Quito Perez

Universidad Tecnológica del Perú Aleksandr Paúl Quito Pérez

Lenguaje de Programación I Herencias

-1-

PROGRAMACIÓN ORIENTADA A OBJETOS:

HERENCIAS Java permite el empleo de la herencia, característica muy potente que permite definir

una clase tomando como base a otra clase ya existente. Esto es una de las bases de la

reutilización de código, en lugar de copiar y pegar.

Existen dos tipos de herencia sencilla y múltiple. Sencilla significa que sólo heredamos de una clase base, mientras que múltiple indica que tenemos varias clases

base (por ejemplo un hidroavión

hereda de barco y de avión). Java

sólo soporta herencia simple.

Al utilizar la herencia aparecen dos

conceptos: super y this, this representa al objeto completo, en

cambio super, sólo representa la

parte heredada de la clase base.

Cuando se hereda nos encontramos frente a un pequeño problema: ¿Qué sucede cuando

se hereda un método de la clase base, el cuál estamos redefiniendo en la clase derivada?

Esto es un caso de sobrescritura de métodos. La solución es simple, cuando estemos

ejecutando el método de un objeto derivado se llamará al método de su propia clase, es

decir el redefinido. Si lo que se quiere es emplear el método de la clase base, hay que

emplear una técnica que consiste en usar: super.método().

Los constructores no son heredados, pero sí llamados. Es decir, cuando se construye un

objeto de la clase derivada se llama al constructor de la clase derivada, pero antes de

comenzar a ejecutarse se llama al constructor de la clase base, que tras ejecutarse

continua la ejecución del constructor de la clase derivada.

Se puede elegir qué constructor de la clase base es llamado, generalmente llamando al

método super(), que representa al constructor de la clase base, pero al pasar parámetros

distintos, seleccionamos qué constructor de la clase base queremos llamar.

Supongamos ahora que tenemos algo que es capaz de encenderse, de apagarse, de

iniciar una reproducción, de parar una reproducción, sin duda todos pensamos en un

reproductor, pero por esa descripción encajan objetos como reproductor de cassete,

reproductor de CD, el vídeo,...

Llamaremos a la descripción interfaz, y los objetos que cumplen ese interfaz (es decir,

tienen todas las funciones que definen el interfaz) diremos que implementan el interfaz. Pensemos ahora en el hecho que una persona que sabe iniciar una

reproducción de un CD también sabe iniciar una reproducción de vídeo, en ambos casos

debe de encender el objeto, iniciar la reproducción, parar la reproducción y apagar el

reproductor. Eso significa que para la persona es transparente el tipo (clase) real del

objeto reproductor que posea, ya que la persona sabe que puede ponerlo en marcha,

apagarlo, sin necesidad de conocer la clase real, tan sólo debe de saber que es un objeto

del tipo reproductor.

Page 2: POO HERENCIAS EN JAVA - Aleksandr Paul Quito Perez

Universidad Tecnológica del Perú Aleksandr Paúl Quito Pérez

Lenguaje de Programación I Herencias

-2-

HERENCIAS – APLICACIÓN PRÁCTICA El tema de herencia en java se asemeja a la vida real, para esto debe existir una Clase

Padre y una o varias Clases Hijos, en simples palabras podemos decir, que los Hijos

heredaran atributos del Padre.

Por ejemplo:

Creemos la Clase Animal, que cumplirá con la función de ser una clase Padre; los

atributos de la clase son:

Raza �String

Nombre �String

Edad �int

En Java esto seria así:

Como vemos esta clase Animal, contiene atributos que quizás cualquier animal en

particular debe de tener. Ahora crearemos una clase hijo, por ejemplo llamemos a esta

nueva clase Perro.

Esta clase Perro, debe contener los mismos atributos de cualquier animal así como raza,

nombre, edad y quizás otros atributos muy particulares a un perro.

Entonces haremos que los atributos de la clase padre Animal se los herede a la clase hijo

Perro, esto se logra haciendo uso de una palabra reservada por JAVA que es “extends”,

veamos como es la sintaxis de la clase hijo una vez que deseamos que herede los

atributos del padre: en la misma clase perro agregaremos lo siguiente:

Como podemos apreciar la sintaxis general para cualquier caso es la siguiente:

Page 3: POO HERENCIAS EN JAVA - Aleksandr Paul Quito Perez

Universidad Tecnológica del Perú Aleksandr Paúl Quito Pérez

Lenguaje de Programación I Herencias

-3-

public class [Nombre de la clase hijo] extends [Nombre de la clase padre]{

}

• Esto se lee: la Clase hijo extends=heredara de la clase Padre:

Posteriormente veremos esto en la aplicación con un ejemplo, la recomendación para

ello es previamente haber entendido el concepto de clases, métodos y objetos.

EJEMPLO DE APLICACIÓN: En esta ocasión se creara una clase padre de nombre Persona, el cual contendrá los atributos necesarios que pueda tener una

persona. Tales como son: código, nombre, apellidos, fnacimiento, direccion.

Posteriormente se creara una clase hijo de nombre Alumno, con atributos que puede

heredar de la clase Persona, así como atributos propios de un Alumno en particular.

Paso 1: Creamos la clase Persona con los atributos declarados:

Observación: en la declaración de cada atributo del tipo String estamos utilizando su

método constructor vacío, otra manera de declarar es simplemente poner:

String nombre; - String apellidos;

Paso 2: Crearemos su método constructor por defecto, quedando como sigue:

Paso 3: Creamos su métodos set y get para cada atributo, esto se puede crear

manualmente o sino usando el asistente que nos brinda Java Virtual Machine, donde

se procede de la siguiente manera: No ubicamos en cualquier parte de la hoja de

código, damos clic derecho y buscamos – Refactor ���� Encapsulate fields, tal como

se muestra en la siguiente figura:

Page 4: POO HERENCIAS EN JAVA - Aleksandr Paul Quito Perez

Universidad Tecnológica del Perú Aleksandr Paúl Quito Pérez

Lenguaje de Programación I Herencias

-4-

Luego nos aparecerá el siguiente asistente, donde le daremos check a cada uno, para

que nos genere automáticamente los métodos set y get para cada atributo, sin

necesidad de escribirlos manualmente:

Luego debajo de esto podemos observar que hay opciones:

Fields Visibility : private

Accessors’ Visibility : public

El primero nos quiere decir que si deseamos que nuestras variables sean del tipo

privado o quizás del tipo publico, por razones de seguridad se escoge privado, y cuando

se da este caso estas variables serán vistas únicamente dentro de su misma clase mas no

fuera de ella.

Page 5: POO HERENCIAS EN JAVA - Aleksandr Paul Quito Perez

Universidad Tecnológica del Perú Aleksandr Paúl Quito Pérez

Lenguaje de Programación I Herencias

-5-

Lo segundo es sobre los métodos set y get que también se le conoces como métodos

accesores, esto por defecto siempre son de tipo publico. Si modificar nada damos clic en

refactor y vemos que pasa con nuestro código:

se puede apreciar algo nuevo en el código, fíjense los atributos todos se volvieron

privados y los métodos set y get son del tipo publico.

Paso 4: dentro de esta misma clase crearemos un método asignarDatos, este

método debe permitirme ingresar datos, y luego igualarlos o asignarlos a nuestros

atributos creados en la clase Persona. Esto se hace como sigue:

Observación: los atributos declarados como argumentos dentro del método

asignarDatos; estos atributos que van declarados dentro del paréntesis del método, no

confundirlos con los que hemos creado líneas arriba, en el paso 1, estos atributos que se

encuentran dentro del paréntesis pueden tener nombres diferentes, pero deben de

conservar el tipo de dato: es decir:

Nosotros hemos declarado en el paso 1 que el código es del tipo entero

entonces cuando se trate de asignación este debe de conservar su

mismo tipo de dato, lo que puede variar es el nombre de dichos atributos, es por ende

Page 6: POO HERENCIAS EN JAVA - Aleksandr Paul Quito Perez

Universidad Tecnológica del Perú Aleksandr Paúl Quito Pérez

Lenguaje de Programación I Herencias

-6-

que dentro del paréntesis se conserva el mismo tipo de

dato que es el entero, y así para cada variable.

- Luego vemos en el código que se nos presenta una palabra nueva que es el this, esta palabra la usamos cuando tenemos igualdad de nombres en los atributos, así como se

presento líneas arriba:

Cuando se da este caso es recomendable usar el this, para diferenciar correctamente, a

la hora de utilizar esta palabra ponemos un punto y no saldrá opciones tal como se

muestra:

Es de mucha utilidad esta palabra, ya que nos sirve como un buscador de atributos o

métodos, si es que no recordamos el nombre de estos.

Puede haber 3 formas de poder asignar estos atributos usando o sin usar la palabra this,

recordando que esta palabra es una especie de buscador. El cual nos ayudara a

diferenciar nuestros atributos de clase.

FORMA 1: Cuando los atributos de la clase y del método son iguales:

FORMA 2: Utilizando el set. Aquí se puede utilizar el this de forma opcional.

Observemos aquí después de la palabra set sigue el nombre del atributo de la clase pero

en mayúscula, y aquí viene una nueva regla cada atributo o variable debe empezar

siempre con letras minúsculas.

Para evitar estos posibles errores se hace uso del this, después de poner un punto

podemos llamar al setCodigo rápidamente de la siguiente forma:

Page 7: POO HERENCIAS EN JAVA - Aleksandr Paul Quito Perez

Universidad Tecnológica del Perú Aleksandr Paúl Quito Pérez

Lenguaje de Programación I Herencias

-7-

this.setCodigo(codigo);

FORMA 3: Cuando los atributos de la clase del método son distintos; en esta ocasión

no es necesario utilizar el this.

Pero nos puede servir como buscador.

El cual quedaría así:

Las dos formas de asignar son validas.

Aquí se puede observar mejor el orden en que se asigna las variables, en primer lugar va

el atributo de la clase y luego el atributo del método, .

PASO 5. Y por ultimo para terminar con esta clase padre, crearemos un método

que contenga todas las impresiones de los atributos, esto se hace tal como sigue:

Por ultimo hay que hacer una observación que se puede utilizar el get o simplemente

el nombre del atributo de la clase, o también ayudado del buscador this.

Y con esto terminamos con la clase persona, los siguientes pasos se trataran de clase

hijos el cual heredaran los atributos de la clase padre Persona.

PASO 6. Crearemos una clase hijo de nombre Alumno, el cual deberá heredar los

atributos del padre.

Anteriormente se explico el uso de la palabra extends. Que se usa para heredar.

No haremos nada más en esta clase hijo Alumno. Quedara así como se muestra.

Page 8: POO HERENCIAS EN JAVA - Aleksandr Paul Quito Perez

Universidad Tecnológica del Perú Aleksandr Paúl Quito Pérez

Lenguaje de Programación I Herencias

-8-

PASO 7. Como ultimo paso crearemos una clase Hprueba con método main para

correr nuestra aplicación:

Crearemos un objeto “a1” de la clase Alumno. Mucha atención aquí, que vamos a

llamar a los atributos que Alumno heredo de la clase Persona.

Luego del objeto “a1” llamaremos al método que esta en el padre de la clase persona

Una ves asignados los datos correspondientes y llamando al método listar datos el cual

nos permite imprimir los datos que queremos, nuestro código seria el siguiente:

Compilando tenemos lo siguiente:

Como podemos apreciar la clase hijo Alumno heredo todos los atributos de la clase

padre Persona.