Diferencia entre revisiones de «Plantilla:PHP/Herencia»
De WikiEducator
(→Herencia) |
(→Clases Abstractas) |
||
(5 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
===Herencia=== | ===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 | *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 característica muy natural (p.e Personas (médicos y bailarines) vehículos (Terrestres (coche, moto) Acuáticos (barco, lancha)) | ||
[[Archivo:Herencia.png]] | [[Archivo:Herencia.png]] | ||
Línea 8: | Línea 10: | ||
*Facilita la reusabilidad y adaptación | *Facilita la reusabilidad y adaptación | ||
;La herenica implica declarar jerarquía de clases | ;La herenica implica declarar jerarquía de clases | ||
− | *En la raíz de la misma establecemos la parte o estructura común, y posteriormente vamos especializando | + | *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 |
− | [[Archivo: | + | [[Archivo:jerarquia_clases_1.png]] |
{{MRM_Puntos clave| | {{MRM_Puntos clave| | ||
Línea 16: | Línea 18: | ||
*Para establecer una jerarquía, usamos la palabra reservada '''''extends''''' en las clases que hereden. | *Para establecer una jerarquía, usamos la palabra reservada '''''extends''''' en las clases que hereden. | ||
*Vamos a verlo con un ejemplo | *Vamos a verlo con un ejemplo | ||
− | [[Archivo: | + | [[Archivo:jerarquia_ambulatoria_1.png]] |
*Primero establecemos la clase '''''Persona''''' | *Primero establecemos la clase '''''Persona''''' | ||
<source lang=php> | <source lang=php> | ||
Línea 153: | Línea 155: | ||
<hr /> | <hr /> | ||
}} | }} | ||
− | ==== | + | ====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á | *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. | *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. | ||
+ | {{MRM_Ejemplo|Title=clase abstracta| | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | }} | ||
+ | |||
+ | |||
+ | |||
*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. | *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 | *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 |
Última revisión de 17:26 23 may 2023
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