Usuario:ManuelRomero/ProgramacionWeb/php/POO/Herencia/EjemploGeometria/Poligono
De WikiEducator
< Usuario:ManuelRomero | ProgramacionWeb/php | POO
Revisión a fecha de 00:16 7 dic 2016; ManuelRomero (Discusión | contribuciones)
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;
}
}