Usuario:ManuelRomero/ProgramacionWeb/php/POO/Herencia/EjemploGeometria/Poligono

De WikiEducator
< Usuario:ManuelRomero‎ | ProgramacionWeb/php‎ | POO
Revisión a fecha de 12:16 7 dic 2016; ManuelRomero (Discusión | contribuciones)

(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Saltar a: navegación, buscar

Clase Poligono

  • Es una clase abstracta porque tiene el método abstracto area()
  • Se han creado métodos que son invocados por los métodos de las clases que de ella derivan
  • Se ha creado un método estático static para comprobar cómo éste método sí que puede ser invocado en tiempo de ejecución (ver fichero index.php dónde aparece la instruccion Poligono::lados($obj)
  • El código dibuja, como se especifica contiene código javascrip usando el elemento cavas de html5
  • POR SU PUESTO ESTE CÓDIGO BÁSICO NO ES OBJETO DE ESTUDIO PARA ESTE MÓDULO
  • Se ha añadido para dar más visualización a este sencillo ejemplo
  • Solo se invoca por la clase cuadrado y rectángulo, la clase Triangulo ha escrito su propio método dibuja, se podría haber generalizado más, pero para simplificarlo se ha dejado así

<?php

/**

* Description of Poligono
*
* @author manuel
*/

abstract class Poligono {

   //put your code here
   protected $lados;
   protected $base;
   protected $altura;
   /**
    * 
    * @return string mensaje con el número de lados de este polígono
    * Este método es para experimentar que
    * una clase abstracta NO puede instanciar objetos
    * Pero puede tener elementos estáticos
    * Estos SI que pueden ser invocados en ejecución
    */
   public static function lados($objeto) {
       return " Polígono de $objeto->lados lados";
   }
   public function __construct($l, $b, $h) {
       $this->lados = $l;
       $this->base = $b;
       $this->altura = $h;
   }
   
      /**
    * Método abstracto para obtener el área
    * El código de este método dependerá del polígono
       *   concreto que tratemos en un momento dado
    */
   abstract function area();
   
   /**
    * 
    * $x, $y son las coordenadas dónde empieza a pintarse el dibujo
    * @param type $x posición inferior izquierda x 
    * @param type $y posición inferior izquierda x 
    * @return type string con el código para dibujar
    *    para este cometido se hace un uso básico del elemento canvas
    * 
    */
    public  function dibuja ($x,$y,$texto){
        
                  $codigoHtml = <<<FIN
               <canvas height="700px" width="1024px" id="canvas">
                     Su navegador no soporta en elemento CANVAS</canvas>
               <script lang=javascript>
                     var canvas = document.getElementById('canvas');
                     var ctx = canvas.getContext('2d');
                     ctx.lineWidth=3;
                     ctx.beginPath();
                     var x=$x;
                     var y=$y;
              
               //Dibujo un lado
                     ctx.moveTo(x,y);
                     ctx.lineTo(x+$this->base,y);//Dibjujo la base
                     ctx.strokeStyle = "#f00";
                     ctx.stroke();
               
               //Dibujo otro lado
                     ctx.lineTo(x+($this->base),y-$this->altura);//Dibjujo la base
                     ctx.strokeStyle = "#f00";
                     ctx.stroke();
              //Dibujo otro lado
                     ctx.lineTo(x,y-$this->altura);//Dibjujo la base
                     ctx.strokeStyle = "#f00";
                     ctx.stroke();
              //Dibujo el último lado
                     ctx.lineTo(x,y);
                     ctx.strokeStyle = "#f00";
                     ctx.stroke();
                          
               ctx.font = '24px "Tahoma"';
               
               ctx.fillText("$texto", $x,$y-($this->altura+50));
               ctx.font =     '10px "Tahoma"';
               var txt = "$texto";
               ctx.fillText("2", ($x+(txt.length)*10.5),$y-($this->altura+60));           
               </script>

FIN;

       return $codigoHtml;
   }


}