Plantilla:PHP/Herencia
De WikiEducator
Herencia
- La herencia es un mecanismo de programación que me permite crear una jerarquía en los componentes software, que se pueden ir especializando
- Es principio de abstracción por el cual podemos crear una jerarquía de clases, donde tenemos la raíz con los elementos comunes y en los nodos vamos especializando clases.
- La idea es definir una clase con ciertas características comunes (atributos, métodos)
Posteriormente crearemos otras clases a partir de la ya existente, quedando implícitamente los atributos y métodos como también parte de su estructura o composición.
- Es una característica muy natural (p.e Personas (médicos y bailarines) vehículos (Terrestres (coche, moto) Acuáticos (barco, lancha))
- Es una forma de obtener características comunes por separado y luego especializar evitando redundancias
- Facilita la reusabilidad y adaptación
- La herenica implica declarar jerarquía de clases
- En la raíz de la misma, establecemos la parte o estructura común a dichas clases , y posteriormente vamos especializando las diferencias de cada clase
|
- Para establecer una jerarquía, usamos la palabra reservada extends en las clases que hereden.
- Vamos a verlo con un ejemplo
- Primero establecemos la clase Persona
<?php class Persona { protected $nombre; protected $direccion; protected $edad; protected $frase; public function __construct(string $n, string $d, string $e){ } public function establecer_frase ($frase){ } public function hablar ($frase){ } }
- Ahora establecemos la clase que hereda de persona
|
- Observa el código
<?php class Sanitario extends Persona { protected $centroSalud; protected $yearTitulacion; public function __construct(string $centro, string $year){ parent::__construct(); .... }
- Vemos dos ejemplos para explicar de forma empírica este concepto
Herencia: gestión personal ambulatorio
| |||
Las propiedades (atributos) y métodos de cada clase se especifican en los siguientes diagramas de clases
http://manuel.infenlaces.com/dwes/ejercicios/T6_Ambulatorio/
|
Clases Abstractas
- Cuando realizamos jerarquías muchas veces encontramos métodos comunes a varias clases. Esto implicaría que ese método sería un método de una superclase o clase padre de la que luego se heredará
- Pero puede ocurrir que aunque el concepto del método es común a todas las clases,la forma de implementarla es particular en cada una de ellas.
- En este caso, la forma correcta de proceder, es especificar el método el la clase superior, e implementar el código en cada una de las clases que derivo.
- El método especificado en la clase superior sería un método sin código, conocido como un método abstracto, y la clase dónde se especifica pasa a ser abstracta
|
|
- Vamos a platear un ejemplo
App de Geometría
| |
Descripción de la Clase Polígono
Descripción de la Clase Rectángulo
Descripción de la Clase Cuadrado
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <?php spl_autoload_register(function ($clase){ require "$clase.php"; }); $triangulo = new Triangulo(200,300); $cuadrado = new Cuadrado(200); $rectangulo = new Rectangulo(200,100); echo "<h4>Triángulo, ". Poligono::lados($triangulo)." y área ". $triangulo->area()." px<sup>2</sup></h4>"; echo "<h4>Cuadrado, ". Poligono::lados($cuadrado)." y área ". $cuadrado->area()." px<sup>2</sup></h4>"; echo "<h4>Rectángulo, ". Poligono::lados($rectangulo)." y área ". $rectangulo->area()." px<sup>2</sup></h4>"; echo $triangulo->dibuja(); echo $cuadrado->dibuja(); echo $rectangulo->dibuja(); ?> </body> </html>
|
V