Usuario:ManuelRomero/ProgramacionWeb/php/POO/Herencia/EjemploGeometria/Poligono
De WikiEducator
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; } }