sábado, 25 de febrero de 2012

3.2 Clasificación: Herencia simple y Herencia múltiple

Para descargar el documento del tema haz clic aquí

Herencia
La herencia es un mecanismo que permite la definición de una clase a partir de la definición de otra ya existente. La herencia permite compartir automáticamente métodos y datos entre clases, subclases y objetos.
La herencia está fuertemente ligada a la reutilización del código en la POO. Esto es, el código de cualquiera de las clases puede ser utilizado sin más que crear una clase derivada de ella, o bien una subclase.

Hay dos tipos de herencia: Herencia Simple y Herencia Múltiple. La primera indica que se pueden definir nuevas clases solamente a partir de una clase inicial mientras que la segunda indica que se pueden definir nuevas clases a partir de dos o más clases iniciales. Java sólo permite herencia simple.
 
¿Existe la herencia múltiple en Java? ¿Por qué?
Objetivo: Fortalecer los conceptos de clases, métodos, propiedades o atributos, herencia, constructores 
y acerca de los métodos Get y Set. Todo esto con ayuda del programa realizado en la guía anterior con
 nuestro “Silabario para programadores”. El trabajo estructurado de la semana pasada ahora lo 
traslademos a una aplicación, siempre en el ambiente consola, en la cual definamos con un alto grado 
de encapsulamiento, las clases que harán posible la realización de la aplicación y llevarán definida 
todo el funcionamiento, o lo que es mismo, la capa de negocios del programa.

El ejemplo es sencillo. El Silabario lo que realiza es una serie de operaciones básicas que resuelven 
4 tipos de problemas distintos: El factorial de número, la tabla de multiplicar de un número, la 
clasificación de la edad del usuario y la elección de la estación del año favorita del usuario. El silabario
además, tiene la característica que el programador escogerá la sentencia o instrucción básica que brinde
la solución más sencilla y óptima para cada uno de los problemas.

Para efectos de esta tema, y porque es la mejor manera de poder apreciar las clases y 
objetos de este ejercicio, definiremos cada clase como una clase “Operación”, que es la que facilitará y
tendrá las herramientas necesarias para efectuar la resolución de cada uno de los problemas.

Un objeto operación necesita de propiedades o atributos. Una operación necesita de operadores, uno, 
dos ó más. Es por eso que definiremos dos atributos para realizar dichas operaciones. Con dos bastarán 
para este ejercicio.
Los métodos de esta clase son muy variados. Cada una de las operaciones realizará uno diferente, por 
lo tanto no cabe dentro de la percepción de un objeto “Operación” básico, la definición de cada uno de 
los métodos.
Los métodos que sí se necesitarían son los populares métodos GET y SET, que nos sirven para leer y 
cambiar los valores de una propiedad específica. Como hemos definido propiedades, éstas necesitan de 
sus getters y setters. 
 
 
La clase de una Operación Básica para el silabario quedará así:
 
public class operacionBase {
protected int operador;
public operacionBase(){
this.operador=0;
}

public void setOperador(int o){
this.operador=o;
}

public int getOperador(){
return this.operador;
}
}


Declaramos la propiedad con visibilidad protected por motivos de seguridad, para que solamente los 
miembros de esa clase y los que heredan de ella, es decir las subclases, puedan accesar a estos atributos.
Como hemos definido ya una clase base, ahora podremos definir el resto de clases que podrán heredar 
de la clase base. Cabe destacar que no siempre se podrá hacer una clase base y con respecto a esta 
empezar a heredarles a otras. Esto depende de la naturaleza de cada aplicación, y de la manera de cómo
el programador diseñe su capa de negocios.
Para realizar la clase que nos devuelva el factorial de un número, el programador puede escoger la 
instrucción While. Por lo tanto el programador debe desarrollar el método que reciba como parámetro 
el número del que se desee el factorial y que devuelva el resultado esperado. Heredando de la clase 
base, tenemos ya garantizados los atributos y métodos propios de la misma, por lo tanto, la clase para 
realizar el factorial del número podría quedar así:


public class operacionFactorial extends operacionBase{
public operacionFactorial(){
super();
}

public int devolverFactorial(){
int factorial=1;
int cont=1;
while (cont <= this.operador) { factorial *= cont; cont++; } return factorial;
}
}
El diagrama UML nos ayudará a comprender mejor la herencia y estructura de estas clases:



Como puede observar el programador, se utiliza la propiedad “operador” cuya definición pertenece a la 
clase base. Sin embargo, como la clase “operacionFactorial” hereda todos los atributos y métodos de la 
clase básica, podemos hacer un llamado a dicha propiedad con la ayuda de la sentencia “this”.

2 comentarios: