Diferencia entre revisiones de «Plantilla:PHP/Herencia»
De WikiEducator
Línea 34: | Línea 34: | ||
*El digrama podría quedar | *El digrama podría quedar | ||
[[Imagen:JerarquiaPersonaAmbulatorio.png|center|400px]]<br /> | [[Imagen:JerarquiaPersonaAmbulatorio.png|center|400px]]<br /> | ||
+ | *Ver la aplicación ejecutándose | ||
+ | http://manuel.infenlaces.com/web/T4_Ambulatorio/ | ||
+ | {{Plegable|Hide|Posible index de uso | | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | spl_autoload_register(function ($nombre_clase) { | ||
+ | include $nombre_clase . '.php'; | ||
+ | }); | ||
+ | |||
+ | $medico1 = new Medica("María", "Martínez", "Casa de María", 29, "Cardiólogía"); | ||
+ | $medico2 = new Medica("Luis", "Pérez", "Casa de Luis", 38, "Pediatría"); | ||
+ | $medico3 = new Medica("Nieves", "Ruiz", "Casa de Nieves", 44, "Dermatología"); | ||
+ | $conserje = new Conserje("Soledad", "Viruela", "Casa de Soledad", 58, "Mostrador Entrada"); | ||
+ | $enfermera = new Enfermera("Javier", "Moreno", "Casa de Javier", "general", 1990); | ||
+ | $enfermera2 = new Enfermera("Luis", "Perez", "Casa de Javier", "general", 1990); | ||
+ | |||
+ | |||
+ | $conserje->avisoEnfermera($enfermera, "Realizar cura en brazo Señor Martínez NSS 50/2155441/35"); | ||
+ | |||
+ | $enfermera->avisoMedico($medico3, "Paciente con toss y fiebre"); | ||
+ | |||
+ | $enfermera2->avisoMedico($medico2, "Paciente con toss y fiebre"); | ||
+ | $enfermera2->avisoMedico($medico2, "Paciente con Vómitos"); | ||
+ | $enfermera2->avisoMedico($medico3, "Paciente con pie torcido, impresión de rotura"); | ||
+ | |||
+ | |||
+ | $conserje->avisoMedico($medico1, "Visitar en casa con mucha fiebre", "Visita"); | ||
+ | $conserje->avisoMedico($medico1, "Problemas para desplazarse ", "Visita"); | ||
+ | $conserje->avisoMedico($medico2, "Mareos y vétigos", "Visita"); | ||
+ | $conserje->avisoMedico($medico2, "Persona mayor con poca mobilidad", "Visita"); | ||
+ | $conserje->avisoMedico($medico3, "Niño pequeño con fiebre", "Visita"); | ||
+ | $conserje->avisoMedico($medico1, "Caída en el parque", "Consulta"); | ||
+ | ?> | ||
+ | |||
+ | <html> | ||
+ | <head> | ||
+ | <meta charset="UTF-8"> | ||
+ | <title></title> | ||
+ | <style type="text/css"> | ||
+ | |||
+ | </style> | ||
+ | <link rel="stylesheet" href="./stilo.css" type="text/css"/> | ||
+ | </head> | ||
+ | <body> | ||
+ | <?php | ||
+ | echo "$medico3"; | ||
+ | echo "$medico1"; | ||
+ | echo "$medico2"; | ||
+ | // put your code here | ||
+ | ?> | ||
+ | </body> | ||
+ | </html> | ||
+ | </source> | ||
+ | |||
+ | }} | ||
+ | |||
<!-- | <!-- | ||
<font size<nowiki>=</nowiki>5 color<nowiki>=</nowiki>red>[[Usuario:ManuelRomero/ProgramacionWeb/php/POO/Herencia/EjemploAmbulatorio | Posible Solución]]</font> | <font size<nowiki>=</nowiki>5 color<nowiki>=</nowiki>red>[[Usuario:ManuelRomero/ProgramacionWeb/php/POO/Herencia/EjemploAmbulatorio | Posible Solución]]</font> |
Revisión de 22:05 22 nov 2018
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
Se puede definir una clase con ciertas características (atributos, métodos)
- Posteriormente puedo definir otra clase a partir de la ya existente, quedándo 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
- 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/web/T4_Ambulatorio/
|
clases abstractas
- Es una situación particular que se presentan en muchas jerarquías
- 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]]</font>
Descripción de la Clase Cuadrado]]</font>
Descripción de la Clase Triángulo]]</font>
<!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