Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/Inaem2021/Objetos/practica»
De WikiEducator
(→Calculadora Real/Racional) |
(→Calculadora Real/Racional Versión 1) |
||
(6 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
{{Usuario:ManuelRomero/ProgramacionWeb/Inaem2021/Objetos/nav}} | {{Usuario:ManuelRomero/ProgramacionWeb/Inaem2021/Objetos/nav}} | ||
+ | ===Calculadora Real/Racional Versión 1=== | ||
+ | *Se pide que realicemos una aplicación web que resuelva cálculos aritméticos con números fraccionarios del tipo a/b. | ||
+ | |||
+ | *La pantalla de inicio tendrá la siguiente forma: | ||
+ | [[imagen:calc_v1_index.png]] | ||
+ | *Como vemos tenemos dos cajas de texto, un desplegable y un botón submit para operar | ||
+ | *La aplicación implementará los siguientes requisitos | ||
+ | ;RF1 Diseño de la interfaz gráfica | ||
+ | *Debes de establecer una interfaz gráfica para poder realizar la aplicación, tal cual se muestra en la image | ||
+ | ;RF2 Recoger los datos | ||
+ | *Si aprieto el botón submit (RF2.1), recojo los 3 datos(RF2.2): | ||
+ | :'''''RF2.1''''' | ||
+ | *Podemos seguir con la idea de intentar separar más el controlador y la vista, es decir, todo el código php lo realizaremos en un fichero php que no tenga nada de hmtl | ||
+ | *Esto nos permite también mejorar la legibilidad, de forma que si hemos presionado submit requerimos ese fichero donde se ejecuta todo el código php. | ||
+ | *La idea sería hacer algo como esto: | ||
+ | #En el fichero index.php escribiríamos | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | if (isset($_POST['submit'])) | ||
+ | require "controlador.php"; | ||
+ | |||
+ | ?> | ||
+ | </source> | ||
+ | y en el fichero '''''controlador.php''''' es donde recogeríamos los valores e implementaríamos toda la lógica de la aplicación, generaríamos los valores que luego visualizaremos en el html, pero esto será otro requisito posterior | ||
+ | :'''''RF2.2''''' | ||
+ | *Ahora toca recoger los valores del formulario: | ||
+ | <source lang=php> | ||
+ | $op1; | ||
+ | $op2; | ||
+ | $operador; | ||
+ | </source> | ||
+ | *Hay que observar que los valores que recojo, en principio son string (siempre el contenido de una caja de texto, cuando lo recojo con $_POST, voy a obtener un valor de tipo string | ||
+ | <source lang=php> | ||
+ | $op1 = $_POST['op1']; | ||
+ | </source> | ||
+ | *Recordad que para evitar temas de seguridad es mejor recogerlo con filter_input, y si le aplicamos un función de escapar los caracteres especiales como es htmlspecialchar, aún tendremos más seguiridad, por lo que la acción anterior, estará mejor establecida como: | ||
+ | <source lang=php> | ||
+ | $op1 = htmlspecialchars(filter_input(INPUT_POST, 'op1')); | ||
+ | </source> | ||
+ | ;RF3 Implementar la clase Racional | ||
+ | *Los valores que he recogido, aunque son de tipo string, los queremos convertir a un tipo especial que vamos a crear, <span class="r">un objeto de la clase racional</span> | ||
+ | *Se tiene que crear una clase que especifique un objeto que tenga numerador, denominador y que sepa sumar, restar, multiplicar y dividir racionales. | ||
+ | *Este ejercicio lo hicimos en clase, así que toca recordar y preguntar cualquier duda que tengáis, es muy importante que lo hagáis poco a poco, entendiendo lo que hacéis, no se lo preguntéis al chat openai, mejor con el slack planteemos dudas y resolvamos. En el wiki también hay una clase Racional creada | ||
+ | *La idea es | ||
+ | <source lang=php> | ||
+ | class Racional | ||
+ | { | ||
+ | private $num; | ||
+ | private $den; | ||
+ | public function __construct(int|string $num=1, int $den=1){ | ||
+ | //Implementa el código para obtener a partir de los parámetros un valor | ||
+ | //para $this->num y otro para $this->den | ||
+ | //Recueda que los parámetros podrían ser: | ||
+ | //$numero = new Racional() => crearía 1/1 | ||
+ | //$numero = new Racional(6)=> crearía 6/1 | ||
+ | //$numero = new Racional(5,7)=>crearía 5/7 | ||
+ | //$numero = new Racional("6/5")=>crearía 6/5 | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | ;RF4 Leer la entrada como objetos racionales | ||
+ | *Una vez que esté creada la clase, ya podremos convertir los string leídos en la caja de texto a objetos racionales. | ||
+ | *Para ello, en el fichero controlador.php: | ||
+ | <source lang=php> | ||
+ | //Hacemos la autocarga de los ficheros que implementen la especificación de las clases | ||
+ | $carga = fn($clase)=>require "$clase.php"; | ||
+ | spl_autoload_register($carga); | ||
+ | |||
+ | //Leemos el string de las cajas de texto | ||
+ | $op1 = htmlspecialchars(filter_input(INPUT_POST, 'op1')); | ||
+ | .... | ||
+ | |||
+ | //Convertimos a Racional | ||
+ | $op1 = new Racional($op1); | ||
+ | |||
+ | </source> | ||
+ | *Esto claramente se puede hacer en una sola instrución, pero mejor separarlo para comprenderlo mejor por pasos. | ||
+ | |||
+ | ;RF5 Realizar la operación y obtener resultado | ||
+ | *Para este requisito hay que implementar dos aspectos: | ||
+ | *1.- Implementar las operaciones en la clase Racional: que la suma me devuelva otro racional como resultado. por ejemplo el método sumar | ||
+ | <source lang=php> | ||
+ | public function sumar(Racional $r1):Racional | ||
+ | { | ||
+ | $num = $r1->num * $this->den + $r1->den * $this->num; | ||
+ | $den = $r1->den * $this->den; | ||
+ | return new Racional ($num, $den); | ||
+ | } | ||
+ | </source> | ||
+ | *2.- Ahora hay que utilizarlo cuando corresponda, en el fichero controlador.php: | ||
+ | <source lang=php> | ||
+ | |||
+ | $operador = htmlspecialchars(filter_input(INPUT_POST, 'operador')); | ||
+ | |||
+ | switch($operador){ | ||
+ | case '+': | ||
+ | $resultado = $op1->sumar($op2); | ||
+ | break; | ||
+ | //....... | ||
+ | </source> | ||
+ | |||
+ | ;RF6 implementar el método toString para visualizar los objetos como string | ||
+ | *Lo que nos queda es que al intentar visualizar un Racional, o sea convertirlo a string, nos visualice el valor, por ejemplo <span class="r">8/7</span> | ||
+ | |||
===Calculadora Real/Racional=== | ===Calculadora Real/Racional=== | ||
*Se pide que realicemos una aplicación web que resuelva cálculos aritméticos con operadores reales . | *Se pide que realicemos una aplicación web que resuelva cálculos aritméticos con operadores reales . |
Última revisión de 22:44 24 ene 2023
Calculadora Real/Racional Versión 1
- Se pide que realicemos una aplicación web que resuelva cálculos aritméticos con números fraccionarios del tipo a/b.
- La pantalla de inicio tendrá la siguiente forma:
- Como vemos tenemos dos cajas de texto, un desplegable y un botón submit para operar
- La aplicación implementará los siguientes requisitos
- RF1 Diseño de la interfaz gráfica
- Debes de establecer una interfaz gráfica para poder realizar la aplicación, tal cual se muestra en la image
- RF2 Recoger los datos
- Si aprieto el botón submit (RF2.1), recojo los 3 datos(RF2.2):
- RF2.1
- Podemos seguir con la idea de intentar separar más el controlador y la vista, es decir, todo el código php lo realizaremos en un fichero php que no tenga nada de hmtl
- Esto nos permite también mejorar la legibilidad, de forma que si hemos presionado submit requerimos ese fichero donde se ejecuta todo el código php.
- La idea sería hacer algo como esto:
- En el fichero index.php escribiríamos
<?php if (isset($_POST['submit'])) require "controlador.php"; ?>
y en el fichero controlador.php es donde recogeríamos los valores e implementaríamos toda la lógica de la aplicación, generaríamos los valores que luego visualizaremos en el html, pero esto será otro requisito posterior
- RF2.2
- Ahora toca recoger los valores del formulario:
$op1; $op2; $operador;
- Hay que observar que los valores que recojo, en principio son string (siempre el contenido de una caja de texto, cuando lo recojo con $_POST, voy a obtener un valor de tipo string
$op1 = $_POST['op1'];
- Recordad que para evitar temas de seguridad es mejor recogerlo con filter_input, y si le aplicamos un función de escapar los caracteres especiales como es htmlspecialchar, aún tendremos más seguiridad, por lo que la acción anterior, estará mejor establecida como:
$op1 = htmlspecialchars(filter_input(INPUT_POST, 'op1'));
- RF3 Implementar la clase Racional
- Los valores que he recogido, aunque son de tipo string, los queremos convertir a un tipo especial que vamos a crear, un objeto de la clase racional
- Se tiene que crear una clase que especifique un objeto que tenga numerador, denominador y que sepa sumar, restar, multiplicar y dividir racionales.
- Este ejercicio lo hicimos en clase, así que toca recordar y preguntar cualquier duda que tengáis, es muy importante que lo hagáis poco a poco, entendiendo lo que hacéis, no se lo preguntéis al chat openai, mejor con el slack planteemos dudas y resolvamos. En el wiki también hay una clase Racional creada
- La idea es
class Racional { private $num; private $den; public function __construct(int|string $num=1, int $den=1){ //Implementa el código para obtener a partir de los parámetros un valor //para $this->num y otro para $this->den //Recueda que los parámetros podrían ser: //$numero = new Racional() => crearía 1/1 //$numero = new Racional(6)=> crearía 6/1 //$numero = new Racional(5,7)=>crearía 5/7 //$numero = new Racional("6/5")=>crearía 6/5 } }
- RF4 Leer la entrada como objetos racionales
- Una vez que esté creada la clase, ya podremos convertir los string leídos en la caja de texto a objetos racionales.
- Para ello, en el fichero controlador.php:
//Hacemos la autocarga de los ficheros que implementen la especificación de las clases $carga = fn($clase)=>require "$clase.php"; spl_autoload_register($carga); //Leemos el string de las cajas de texto $op1 = htmlspecialchars(filter_input(INPUT_POST, 'op1')); .... //Convertimos a Racional $op1 = new Racional($op1);
- Esto claramente se puede hacer en una sola instrución, pero mejor separarlo para comprenderlo mejor por pasos.
- RF5 Realizar la operación y obtener resultado
- Para este requisito hay que implementar dos aspectos:
- 1.- Implementar las operaciones en la clase Racional: que la suma me devuelva otro racional como resultado. por ejemplo el método sumar
public function sumar(Racional $r1):Racional { $num = $r1->num * $this->den + $r1->den * $this->num; $den = $r1->den * $this->den; return new Racional ($num, $den); }
- 2.- Ahora hay que utilizarlo cuando corresponda, en el fichero controlador.php:
$operador = htmlspecialchars(filter_input(INPUT_POST, 'operador')); switch($operador){ case '+': $resultado = $op1->sumar($op2); break; //.......
- RF6 implementar el método toString para visualizar los objetos como string
- Lo que nos queda es que al intentar visualizar un Racional, o sea convertirlo a string, nos visualice el valor, por ejemplo 8/7
Calculadora Real/Racional
- Se pide que realicemos una aplicación web que resuelva cálculos aritméticos con operadores reales .
- El término real o racional lo vamos a usar con un significado adaptado a este ejercicio, es decir:
- Número Real
- un número con o sin decimales
- Número Racional
- un número expresado en forma de fracción del tipo a/b, donde b, no puede ser cero y ambos han de ser números enteros
)
- La operación se insertará en una caja de texto
- La operación tendrá el siguiente formato
OP1 operador OP2
- Donde
- OP1 es un operador real o racional
- operador es una operación que puede ser +,-,*,/,:.
- según los operandos sean reales o racionales el operador división será / o : respectivamente
- El tipo de operación, la deberemos obtener según nos indique un método stático de la clase operación según se indica más abajo.
- En la pantalla mostraremos un pequeño texto explicativo y una caja de texto donde el usuario podrá interactuar
- En el siguiente enlace se puede ver el funcionamiento esperado en esta prácticas
http://manuel.infenlaces.com/distancia/dwes/practicas/Calculadora/ |
- clona el esqueleto (con código implementado)
git clone https://github.com/MAlejandroR/Calculadora
- ESte ejemplo es posible que no funcione bien, pero sirve para mostrar cómo debería de funcionar
- Al presionar intro aparecerá un texto (en el primer caso 9/8+4/7)
- En el segundo caso ( 9.4 / 2)
- En el tercer caso ( 9/6:6)
- En el cuarto caso es erróneo ( 9/5*5.6 )
- Para realizar este ejercicio, tendremos que implementar las siguientes clases según aparece en el dibujo
- Es obligatorio usar esta jerarquía de clase.
- Todos los atributos private o protected (no debe de haber atributos public)
- Los métodos según correspondan serán private protected o public
- A continuación una descripción de las clases.
- Racional (p.e 10/6)
- Propiedades
- Num (p.e 10)
- Den (p.e 6)
- Métodos
- constructor. Hay que sobrecargarlo según se indica, aunque en este caso, solo usemos el constructor con cadena de caracteres
$a = new Racional(); //Crea el racional 1/1 $a= new Racional (10); //Crea el racional 10/1 $a = new Racional(10,6); //Crea el racional 10/6 $a = new Racional("10/6");//Crea el racional 10/6 $a = new Racional("10");//Crea el racional 10/6 No hace falta recoger otras situaciones no deseadas, no obstante si se hace se debería de crear el Racional 1/1
- simplifica() Simplifica si se puede numerador y denominador (Utilizar el método de Euclides (mcd))
- suma
- resta
- multiplica
- divide
- __toString
- Todos estos métodos operan con un argumento racional y retorna un Racional resultado de operarse él mismo con el racional que pasamos como argumento
//En la clase public function suma (Racional $b) { $numResultado = ....; $denResultado = .... $resultado = new Racional...... return $resultado; } ..... //En el programa que use la clase $a = new Racional("5/6"); $b = new Racional (6,4); $c= $a->sumar($b); echo "$a+$b=$c"//Me visualizará 5/6+6/4=56/24, o bien simplificado 7/3
- Operación
- Como vemos en el diagrama va a tener algún método abstracto, por lo que la vamos a considerar abstracta
- Propiedades
- Operando1 es un atributo que podrá ser real o racional, pero como en php no hay que declarar tipos, nos va bien
- Operando2 igual
- Operación será la cadena de caracteres que el usuario inserte en la caja de texto.
- Operador es el carácter que indica el tipo de operación que se quiere realizar.
- Resultado es el resultado de la operación, puede ser real o racional
- Esta clase descompondrá la operación y generará un resultado
- A continuación el código del index.php que he usado yo
- Para hacer este proyecto facilito un esqueleto con partes ya implementadas para facilitar su desarrollo y comprensión
|
</div>