Diferencia entre revisiones de «Plantilla:PHP/Herencia»

De WikiEducator
Saltar a: navegación, buscar
(clases abstractas)
Línea 62: Línea 62:
 
;Clase Polígono
 
;Clase Polígono
 
Pincha aquí para ver la descripción de la clase
 
Pincha aquí para ver la descripción de la clase
 +
<font size<nowiki>=</nowiki>5 color<nowiki>=</nowiki>red>[[Usuario:ManuelRomero/ProgramacionWeb/php/POO/Herencia/EjemploGeometria/Poligono | Descripción de la Clase Poligono]]</font>
 +
<hr />
 
;Clase Rectángulo
 
;Clase Rectángulo
Pincha aquí para ver la descripción de la clase
+
<font size<nowiki>=</nowiki>5 color<nowiki>=</nowiki>red>[[Usuario:ManuelRomero/ProgramacionWeb/php/POO/Herencia/EjemploGeometria/Rectangulo | Descripción de la Clase Rectángulo]]</font>
 +
<hr />
 
;Clase Cuadrado
 
;Clase Cuadrado
Pincha aquí para ver la descripción de la clase
+
<font size<nowiki>=</nowiki>5 color<nowiki>=</nowiki>red>[[Usuario:ManuelRomero/ProgramacionWeb/php/POO/Herencia/EjemploGeometria/Cuadrado | Descripción de la Clase Cuadrado]]</font>
 +
<hr />
  
 
;Clase Triangulo
 
;Clase Triangulo
Pincha aquí para ver la descripción de la clase
+
<font size<nowiki>=</nowiki>5 color<nowiki>=</nowiki>red>[[Usuario:ManuelRomero/ProgramacionWeb/php/POO/Herencia/EjemploGeometria/Triangulo | Descripción de la Clase Triangulo]]</font>
 
+
<hr />
}}
+
;Uso de esta aplicación
Vamos a suponer que queremos hacer un programa de figuras geométricas.
+
Tenemos cuadrados, rectángulos y triángulos.
+
[[Archivo:herenciaPHP1.png]]
+
 
+
Cómo vemos hay atributos comunes podríamos declara una clase común llamada Polígono con los elementos comunes y luego tres clases que deriven de '''''Poligono'''''
+
[[Archivo:herenciaPHP2.png]]
+
*La implementación de esta estructura podría quedar de la siguiente manera
+
 
<source lang=php>
 
<source lang=php>
 
  
 
</source>
 
</source>
 
+
;Resultado de su ejecución
*Ahora vemos también un método común que es '''''calcularArea()'''''
+
[[Archivo:AppGeometria.png]]
*A pesar de que es común y la idea de la acción es igual, la implementación es diferente en cada caso
+
*Para estas situaciones está la posib
+
 
+
===Métodos abstractos===
+
<!--
+
*Son métodos que no tienen código
+
*Sirven para estructurar nuestra clase
+
{{MRM_Ejemplo|
+
*Definimos la clase polígono
+
*Es una estrucut
+
abstract class Poligono {
+
    //put your code here
+
   
+
    protected $lados;
+
    protected $area;
+
   
+
    public function __construct ($lados){
+
        $this->lados = $lados;
+
    }
+
   
+
   
+
    abstract public function calculaArea();
+
               
+
       
+
}
+
 
+
 
+
 
+
 
}}
 
}}
 
+
V
 
+
Puedo heredar un método y añadir cosas (MRM Falta ejemplo)
+
-->
+
 
+
<!-- Dejo esto aquí a ver si lo completo o no
+
===métodos abstractos===
+
*Son métodos que no se implementan en una clase, si no en la clase que herede de ésta.
+
Las clases que contengan métodos abstractos no se pueden instanciar en memoria.
+
===métodos estáticos===
+
 
+
 
+
 
+
 
+
 
+
-->
+

Revisión de 12:00 7 dic 2016

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))

Herencia.png

  • 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


Icon casestudy.gif
Herencia: gestión personal ambulatorio
  • Se pide gestionar un ambulatorio.
  • Para ello vamos a hacer sólo el diagrama de clases y su implementación.
  • Lo hacemos a nivel básico (sin entrar en detalles).
  • Tras realizar un análisis se determina que se pretende gestionar:
los datos de los empleados y anotar las acciones básicas que realizan.
  • Encontramos los siguientes elementos que especificamos como clases
Conserjes
Enfermeras
Médicas
Las propiedades (atributos) y métodos de cada clase se especifican
en los siguientes diagramas de clases
  • Claramente vemos que todos ellos tienen varios elementos en común.
  • Esto nos permite crear una clases genérica que por ejemplo podemos llamar personalAmbulatorio
  • Posteriormente creamos una especialización de personalAmbulatorio con los elementos particulares
  • El digrama podría quedar
JerarquiaPersonaAmbulatorio.png

Posible Solución



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


Icon define.gif
Clase Abstracta

Es aquella clase que tiene un método o más abstracto



Icon define.gif
Método Abstracto
  • Es un método que no tiene código asociado
  • El código se implementará en las clases derivadas



Icon key points.gif

Puntos clave

Nunca podremos instanciar un objeto de una clase abstracta
  • Esto es normal, ya que ese objeto no tendría instrucciones para su/s método/s abstracto/s



  • Vamos a platear un ejemplo



Icon casestudy.gif
App de Geometría
Gestionar figuras geométricas de tipo triángulo, cuadrado y Rectángulo.
  • De ellas queremos conocer:
  1. el número de lados.
  2. calcular el área.
  3. dibujar el polígono (Esto insertaremos un pequeño código de javascript de uso básico del canvas
  4. conocer el número de lados del polígono.
  • Realizamos los siguientes clases
Clase Polígono

Pincha aquí para ver la descripción de la clase Descripción de la Clase Poligono


Clase Rectángulo

Descripción de la Clase Rectángulo


Clase Cuadrado

Descripción de la Clase Cuadrado


Clase Triangulo

Descripción de la Clase Triangulo


Uso de esta aplicación
 
Resultado de su ejecución

AppGeometria.png


V