Plantilla:PHP/Herencia
De WikiEducator
Revisión a fecha de 04:26 23 may 2023; ManuelRomero (Discusión | contribuciones)
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




