domingo, 17 de abril de 2011

Herencia en PHP Parte 1

La herencia es una de las relaciones donde más errores conceptuales se cometen, principalmente porque es fácil visualizar el “reuso mecánico de código”, lo que lleva a “heredar por el simple hecho de disponer de código”.

Definición: “es una relación de parentesco entre dos entidades” (una es padre de la otra, una es hija de la otra)

Antes de abordar lo “mecánico de la herencia” quiero destacar lo resaltado :
Parentesco. No puede existir herencia si no existe alguna relación “familiar” entre ambas entidades. Uno de los peores errores que se puede cometer -y que demuestra la falta de conocimientos en Objetos- es usar el mecanismo de la herencia con el único objetivo de “reusar código” de otra clase.

A partir de estos errores no hay sistema que pueda ser bien implementado si todos heredan de clases por el simple hecho de querer usar sus funcionalidades.
“La herencia no se debe aplicar de forma mecánica, si no hay una relación literal y coherente de padre-hijo, la herencia no es aplicable”

Metáfora: como en la genética, un padre hereda a su hijo determinadas características que podrá usar a su favor o en su contra. Todo lo que esté en su contra será culpa de nuestro diseño, de cómo habremos hecho al padre y de cuanta información en exceso dejamos que llegue a sus hijos.

Representación UML

La representación en UML es una “flecha continua” que va desde la clase “hija” hasta la clase “padre”, similar a la relación de “asociación”, pero con la diferencia que termina con una punta en forma de triángulo.
Nota: entender la diferencia de las flechas: si es punteada (“no continua”) la relación es más débil que una “flecha continua”. Por lo tanto la Herencia es una relación igual de fuerte que la asociación, pero más fuerte que una relación como la “dependencia” (“línea punteada”).
Un diagrama genérico sería:

Se pueden hacer varias lecturas:

1. Todos los atributos y métodos se heredan del Padre al Hijo, pero…
2. Los atributos y métodos que son de tipo “público” (public) o “protegido” (protected) son visibles directamente desde el Hijo (en el caso particular de “público” son visibles de todos lados, incluyendo desde el exterior del objeto).
3. Los atributos y métodos que son de tipo “privado” (private) se heredan del padre a su hijo pero no son “visibles” de forma directa, solo se podrá hacer a través de métodos del padre que sean públicos o protegidos.

Funcionalmente hablando podríamos decir que un método público “saludar” del padre que su hijo hereda se ejecuta de la misma forma que si el hijo lo hubiera implementado él mismo, solo que el código se encuentra “guardado/almacenado” en el padre.

Hasta el momento tenemos una introduccion basica de lo que es herencia en la programacion orientada a objetos si bien decia no por querer reutilizar codigo tenemos que usar la herencia sino por una relacion que tengas esas dos clases a la cual se asemejen en su comportamiento.

Continuara ....

Comenten no sean bayuncos ...

No hay comentarios:

Publicar un comentario