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

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

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

Volver temario


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 
     * @param type $texto es un texto para poner el tipo de polígono y su área
            * Este texto aparecerá dibujado encima de la imagen
     * 
      @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;
 
    }
 
 
}