viernes, 9 de octubre de 2009

Concepto de Herencia en Java


En el siguiente texto hablaremos de este potentisimo elemento dentro de la programación y en concreto de la orientada a objetos.
Hablando muy por encima, la Herencia, nos permite un ahorro de energia, desarrollo, definido todo ello dentro de la POO.
Mediante este mecanismo conseguiremos la relación entre una clase padre y una hija de modo que la hija utilize elementos de la clase padre.
Dentro de la considerada “Herencia” destacan, mecanismos como el uso de las clases abstractas, interfaces, sobrecarga, sobreescritura, y los paquetes, polimorfismo…

Un repaso sencillo para que entendamos como funciona la herencia.

Como ya dijimos anteriormente la Herencia es un mecanismo de la programación orientada a objetos que nos permite una redución en cuanto al trabajo, una mayor claridad, menor esfuerzo y una gran ventaja para las personas que se dediquen a la reutilización de software o revision de codigo.

La palabra herencia, significa clararamente heredar, dar algo de un elemento a otro. Como por ej.  “El padre de Juan muere y Juan hereda su casa”. Traduciendolo a lenguaje de programación, la Herencia lo que nos permitiría es lo siguiente: Al ser juan un joven no autosuficiente, puede usar la casa de su padre, pero no es el propietario legal, de tal forma al morir su padre, Juan, se convierte en padre.
Es decir, Juan no necesita ser dueño único de la casa para usarla.




Este simil con la vida real nos permite definir lo que es una clase PADRE y una HIJA.  Mediante el uso de la herencia, una clase PADRE, hereda, metodos, atributos etc a una clase HIJA. De tal forma que si tenemos un extenso codigo en la clase principal PADRE, la clase Hija heredaría todo ese codigo de manera muy sencilla y sin la necesidad de volver a crear o copiar el mismo codigo. Con lo cual obtendremos una mayor claridad en nuestro codigo, un menor esfuerzo para un resultado equivalente.

La sintaxis utilizada para definir una clase HIJA que hereda de una PADRE.  Sería la siguiente:


class HIJA extends PADRE{
//contenido de la clase
}


En el ejemplo anterior de la vida real xD, sería:

class supadre{
// definida casa y atribuida a supadre
}

class Juan extends supadre{
//La clase de juan
}


De tal forma, al estar atribuida a supadre y definida, al heredar, también es la casa de Juan, pero este no es el propietario (CLASE PRINCIPAL). Cuando su padre muera o no exista la clase padre, Juan se convertiria en la clase principal y se eliminaría el “extends”…

De esta forma, en una clase hija no hace falta definir y atribuir la casa también a Juan, sino que por Herencia, el codigo se transmite de la clase supadre a la clase Juan.

*Pondré un programa ejemplo de herencia, intentar realizarlo y ver que se cumple lo antes leido:


class Operacion{
int x=3;
public void op(){
x=5;
}
}
class Operacion2 extends Operacion{
public void op2(){
System.out.println("Resultado: "+(x+1));
}
}
class Ejemplo{
public static void main (String args[]){
Operacion2 obj1 = new Operacion2();
obj1.op2();
}
}


Espero que os parezca sencillo. Un consejo, NO OS DEJEIS ENGAÑAR, tener muy claro los conceptos. Os dais cuenta del programa? El resultado es 4, y… porqué es 4 y no es 6. Pues porque si os dais cuenta, el x=5 esta sobre-escrito a nivel local del metodo “op”, cuando este metodo finaliza, la x, continua siendo 3. Por tanto decimos que la x=5 solo es válida dentro del metodo “op” de la clase padre.

Si os dais cuenta de la herencia, la clase hija no necesita de declarar la variable int x=3, ya que la HEREDA de la clase padre.

¿Alguna duda, no ha quedado claro?.

p.d. No sé si se habrá quedado claro con el ejemplo de la vida real si no lo veis muy claro pedidme otro ejemplo y os lo explico rapidamente.

Un saludo!!!
.DeMoNy.

0 comentarios:

Publicar un comentario