Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/Objetos/introduccion»

De WikiEducator
Saltar a: navegación, buscar
Línea 23: Línea 23:
  
  
{{PHP/Estatico}}
 
 
{{PHP/Herencia}}
 
{{PHP/Herencia}}
  

Revisión de 23:41 1 ene 2020






DWES Tema6 .png

Conceptos básicos de OOP

OOP Vs Programación estructurada

  • En programación el paradigma imperativo está basado en funciones y datos.
  • El paradigma orientado a objetos está basado en Objetos.
  • Los objetos son el elemento básico y central de la programación orientada a objetos (OOP) o (POO).
  • Podemos hablar de universo de discurso como el sistema que queremos automatizar por software
  • Un Objeto es una entidad (concreta o abstracta) que presenta una actividad en un entorno concreto, en un determinado universo de discurso.




Icon define.gif
Definición
Objeto Cada elemento activo que identificamos dentro de un determinado universo de discurso.
Serán nuestros componentes software para ensamblar nuestros programas




Icon casestudy.gif
Ejemplo
En un banco hay cuentas bancarias (objeto)
Las cuentas bancarias se identifican con un número y un titular (nombre, apellido y dni) atributos
Las cuentas se pueden dar de alta, de baja, hacer extracciones e ingresos y transferencias... métodos




Icon casestudy.gif
Ejemplo
En la gestión de una empresa, a nivel de información tenemos
  • Empleados
  • Nóminas
  • Base de datos
  • Proveedores
  • Facturas
  • Pedidos

UNIVERSO DISCUROS OBJETOS.png




Icon casestudy.gif
Compartiva con la aplicación de master mind
Comparativa oo estructurado.png





  • Puede parecer una forma más complicada de programar, pero es una manera de dividir la naturaleza del problema que estamos estudiando en unidades independientes que pueden interactuar entre ellas.
  • Cada una de ellas va a tener una identidad propia asignando valores a sus atributos
  • Cada una de ellas va a tener un comportamiento concreto que va a ser lo que sabe hacer para que los demás o el programa principal lo utilice


Elementos en la programación orientada a objetos

  • De lo dicho anteriormente deducimos que tenemos dos elementos:
  1. Los atributos o características de la clase.
  2. Los métodos o comportamiento de la clase .
  • Para crear objetos, previamente hay que definir su estructura.
  • La definición de la estructura (atributos y métodos ) de componentes software se llama clase


Icon define.gif
Clase
La descripción y especificación de componentes software para su posterior uso en los programas
  • Una clase es la estructura de un tipo concreto de objetos.
  • Los objetos son elementos concretos en mi sistema. Instancias de la clase en memoria para ser usadas por un programa



Elementos de la POO


Icon define.gif
Atributo
  • Son las características o datos de un objeto.
  • Sus valores nos da el estado de un objeto en un momento dado.
  • Normalmente al instanciar un objeto en memoria lo primero que hacemos es dar valores a sus atributos
  • Es recomendado que los atributos estén encapsulados solo al objeto (privados)




Elementos de la POO


Icon define.gif
Métodos
  • Especifican el comportamiento de los objetos.
  • Permiten modificar y conocer el estado de un objetos (métodos getter and setter).
  • Permiten que un objeto haga cosas en el sistema (comunicación entre objetos) .
  • Los métodos son las acciones que el objeto sabe hacer, servicios que ofrece
  • También son las acciones internas para facilitar las acciones al objeto


Clase.png



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

Herencia.png

  • 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

Jerarquia clases 1.png



Icon key points.gif

Puntos clave

Todos los atributos y métodos de un supertipo o clase en nivel superior que sean públicos o protegidos, son heredados (son parte de ella) a todas las clases de nivel inferior.


  • Para establecer una jerarquía, usamos la palabra reservada extends en las clases que hereden.
  • Vamos a verlo con un ejemplo

Jerarquia ambulatoria 1.png

  • 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


Icon key points.gif

Principios del uso de la herencia

Todos los atributos y métodos públicos y protegidos del supertipo Persona son también de Sanitario
En un momento dado, podemos invocar a los métodos del supertipo usando el operador parent seguido del operador de resolución de ámbito ::


  • 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


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

  • Ver la aplicación ejecutándose
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.


Icon casestudy.gif
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.
  • 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.

App geometria.png

  • Realizamos los siguientes clases
Clase Polígono

Descripción de la Clase Polígono


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 Triángulo


Uso de esta aplicación
  • Un posible código index.php que lo único que hace es crear objetos y visulizar su área y dibujarlos
<!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>
Resultado de su ejecución

AppGeometria.png


V