Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/Objetos/practica2»

De WikiEducator
Saltar a: navegación, buscar
(Página creada con «{{Usuario:ManuelRomero/ProgramacionWeb/Objetos/nav}} ===Calculadora Real/Racional=== *Se pide que realicemos una aplicación web que resuelva cálculos aritméticos con ope...»)
 
 
(8 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 
{{Usuario:ManuelRomero/ProgramacionWeb/Objetos/nav}}
 
{{Usuario:ManuelRomero/ProgramacionWeb/Objetos/nav}}
 
===Calculadora Real/Racional===
 
===Calculadora Real/Racional===
 +
;Puedes probar una posible solucion
 +
http://manuel.infenlaces.com/contenido/practicas/calculadora/
 +
;Debes de descargarte el proyecto planteado y avanzar a partir de él
 +
<source lang=php>
 +
git clone https://github.com/MAlejandroR/Calculadora.git
 +
</source>
 +
;Enunciado
 
*Se pide que realicemos una aplicación web que resuelva cálculos aritméticos con operadores reales o racionales
 
*Se pide que realicemos una aplicación web que resuelva cálculos aritméticos con operadores reales o racionales
 
*La operación se insertará en una caja de texto
 
*La operación se insertará en una caja de texto
Línea 15: Línea 22:
 
*En el siguiente enlace se puede ver el funcionamiento esperado en esta prácticas
 
*En el siguiente enlace se puede ver el funcionamiento esperado en esta prácticas
 
{{MRM_Recursos de la Web|Title=Pŕactica de la calculadora Real - Racional|
 
{{MRM_Recursos de la Web|Title=Pŕactica de la calculadora Real - Racional|
http://manuel.infenlaces.com/distancia/practicas/practica_8_Calculadora/index.php
+
http://manuel.infenlaces.com/distancia/dwes/practicas/Calculadora/
 
}}
 
}}
*Vamos a aplicar una pequeña css para la pantalla
+
*clona el esqueleto (con código implementado)
{{Plegable|hide|CSS para práctica de la calculadora|
+
<source lang=bash>
<source lang=css>
+
  git clone https://github.com/MAlejandroR/Calculadora
fieldset{
+
</source>
    border: 0.25em solid;
+
*ESte ejemplo es posible que no funcione bien, pero sirve para mostrar cómo debería de funcionar
    align : center;
+
    position: absolute;
+
    left: 55%;
+
    top: 20%;
+
    margin-left: -115px;
+
    margin-top: -80px;
+
    padding:10px;
+
    background-color: #eee;
+
}
+
fieldset#rtdo{
+
    border: 0.25em solid;
+
    position: absolute;
+
    left: 55%;
+
    top: 55%;
+
    padding:10px;
+
    background-color: #eee;
+
}
+
fieldset#ayuda{
+
    border: 0.25em solid;
+
    position: absolute;
+
    left: 10%;
+
    top: 20%;
+
    padding:10px;
+
    background-color: #eee;
+
}
+
  
legend{
 
    font-size: 2em;
 
    color: green;
 
    font-weight: bold;
 
}
 
input[type=submit] {
 
    padding:5px 15px 10px 10px;
 
    background:#ccc;
 
    border:2;
 
    cursor:pointer;
 
    -webkit-border-radius: 5px;
 
    border-radius: 5px;
 
    margin: 1em;
 
    font-size: 1em;
 
}
 
label{
 
    font-weight: bold;
 
    font-size : 1.5em;
 
    margin: 0.65em;
 
  
}
 
input[type=text]{
 
    font-weight: bold;
 
    font-size : 1.5em;
 
    padding: 1em 1em 1em 1em;
 
    margin: 1em 1em 1em 1em;
 
}
 
#texhelp{
 
    font-size : 1.2em;
 
}
 
</source>
 
}}
 
 
{{MRM_Ejemplo|Title= Operaciones que se pueden insertar|
 
{{MRM_Ejemplo|Title= Operaciones que se pueden insertar|
 
;9/8+4/7
 
;9/8+4/7
Línea 144: Línea 95:
 
echo "$a+$b=$c"//Me visualizará 5/6+6/4=56/24, o bien simplificado 7/3
 
echo "$a+$b=$c"//Me visualizará 5/6+6/4=56/24, o bien simplificado 7/3
 
</source>
 
</source>
*Por defecto todas las operaciones se deben de facilitar con el racional simplificado, salvo que se pase en la operación un segundo parámetro a valor false, en cuyo caso no se simplifica y se da el valor sin simplificar
 
<!--
 
{{Plegable|hide|Clase Racional|
 
<source lang=php>
 
<?php
 
  
class Racional {
 
 
    private $num;
 
    private $den;
 
 
    /**
 
    *
 
    * @param type $num
 
    * @param type $den
 
    * @description Construimos un objeto de la clase recional en las siguientes situaciones
 
    *  //opciones new Racional () =>1/1
 
        //opciones new Racional (5) =>5/1
 
        //opciones new Racional (5,2) =>5/2
 
        //opciones new Racional ("5/2") =>5/2
 
        //opciones new Racional ("5") =>5/1
 
       
 
        //Otra sitiación no se instancia
 
 
    */
 
    public function __construct($num, $den) {
 
        if (is_null($den)) {
 
            switch (is_numeric($num)) {
 
                case true:
 
                    $this->num = $num;
 
                    $this->den = 1;
 
                    break;
 
                case false:
 
                    if (is_null($num)) {
 
                        $this->num = 1;
 
                        $this->den = 1;
 
                    } else {
 
                        $this->num = (int) $num;
 
                        //if (strpos($num, "/") == FALSE) {
 
                        $this->den = (int) substr($num, strpos($num, "/") + 1);
 
                        //} else
 
                        //    $this->den = 1;
 
                    }
 
                    break;
 
            }
 
        } else {
 
            $this->num = $num;
 
            $this->den = $den;
 
        }
 
    }
 
 
    /**
 
    * @param Racional $op1 segundo operando
 
    * @return \Racional Resultado de sumar al objeto racional actual, el objeto raciona que recibimos como parámetro
 
    */
 
    public function sumar(Racional $op1) {
 
        $num = $this->num * $op1->den + $this->den * $op1->num;
 
        $den = $this->den * $op1->den;
 
        return new Racional($num, $den);
 
    }
 
 
    /**
 
    * @param Racional $op1 segundo operando
 
    * @return \Racional Resultado de restar al objeto racional actual, el objeto raciona que recibimos como parámetro
 
    */
 
    public function restar(Racional $op1) {
 
        $num = $this->num * $op1->den - $this->den * $op1->num;
 
        $den = $this->den * $op1->den;
 
        return new Racional($num, $den);
 
    }
 
 
    /**
 
    * @param Racional $op1 segundo operando
 
    * @return \Racional Resultado de multiplicar al objeto racional actual, el objeto raciona que recibimos como parámetro
 
    */
 
    public function multiplicar(Racional $op1) {
 
        $num = $this->num * $op1->num;
 
        $den = $this->den * $op1->den;
 
        return new Racional($num, $den);
 
    }
 
    /**
 
    * @param Racional $op1 segundo operando
 
    * @return \Racional Resultado de dividir al objeto racional actual, el objeto raciona que recibimos como parámetro
 
    */
 
    public function dividir(Racional $op1) {
 
        $num = $this->num * $op1->den;
 
        $den = $this->den * $op1->num;
 
        return new Racional($num, $den);
 
    }
 
 
    /**
 
    *
 
    * @return type un string del tipo a/b
 
    */
 
    public function __toString() {
 
        return ($this->num . "/" . $this->den);
 
    }
 
}
 
</source>
 
}}
 
 
;Operación
 
;Operación
 
*Como vemos en el diagrama va a tener algún método abstracto, por lo que la vamos a considerar abstracta
 
*Como vemos en el diagrama va a tener algún método abstracto, por lo que la vamos a considerar abstracta
Línea 253: Línea 105:
 
*'''''Resultado''''' es el resultado de la operación, puede ser real o racional
 
*'''''Resultado''''' es el resultado de la operación, puede ser real o racional
 
*Esta clase  descompondrá la operación y generará un resultado  
 
*Esta clase  descompondrá la operación y generará un resultado  
{{Plegable|hide|Clase Operacion|
 
<source lang=php>
 
<?php
 
 
abstract class Operacion {
 
 
    //put your code here
 
    protected $op1;
 
    protected $op2;
 
    protected $operador;
 
    protected $operacion;
 
    static protected $tipo;
 
 
    const RACIONAL = 1;
 
    const REAL = 2;
 
    const ERROR = -1;
 
 
    /**
 
    * @param $operacion string que especifica la operación que se desar analizar
 
    * @description Establece de qué tipo es una operación en función de sus argumentos
 
    *      * Operacion real numero_real operando  numero_real
 
    *      * Operacion racional  numero_racional operandoRacional numero_racional
 
    *      * Operacion racional  numero_entero operandoRacional numero_racional
 
    *      * Operacion racional  numero_racional operandoRacional numero_entero
 
    *      * Otro caso se especificará un error
 
    *
 
    *  Usamos expresiones regulares para especificarlo
 
    * **/
 
   
 
    public static function tipoOperacion($operacion) {
 
        self::$tipo = Operacion::ERROR;
 
 
        $numReal = '[0-9]+(\.[0-9]*)?';
 
        $numEntero = '[0-9]+';
 
        $op = '[\+|\-|\*|\/]';
 
        $numRacional = '[0-9]+\/[0-9]+';
 
        $opRacional = '[\+|\-|\*|\:]';
 
 
 
        $exp = "/^$numReal$op$numReal$/";
 
        if (preg_match($exp, $operacion)) {
 
            self::$tipo = Operacion::REAL;
 
        } else {
 
            /*Escribe el código que consideres*/
 
 
 
         
 
        }
 
        return self::$tipo;
 
 
    }
 
 
    public function __construct($operacion) {
 
        $this->operacion = $operacion;
 
        $this->operador = $this->obtenerOperador($operacion);
 
        $this->op1 = $this->obtenerOperador1($operacion);
 
        $this->op2 = $this->obtenerOperador2($operacion);
 
    }
 
 
    private function obtenerOperador1($operacion) {
 
 
/*Escribe el código que consideres*/
 
    }
 
 
    private function obtenerOperador2($operacion) {
 
/*Escribe el código que consideres*/
 
    }
 
 
    private function obtenerOperador($operacion) {
 
/*Escribe el código que consideres*/
 
 
    }
 
   
 
 
    /**
 
    *  Métodos get and set
 
    */
 
   
 
   
 
    public function getOp1() {
 
        return $this->op1;
 
    }
 
 
    public function getOp2() {
 
        return $this->op2;
 
    }
 
 
    public function getOperador() {
 
        return $this->operador;
 
    }
 
 
    public function getTipo() {
 
        return $this->tipo;
 
    }
 
 
    public function __toString() {
 
        return "$this->op1$this->operador$this->op2";
 
    }
 
 
    /**
 
    *
 
    * @return string  que describe las  propiedades de una operacion
 
    * Lo devuelve como contenido de una tabla sin especificar la tabla
 
    */
 
    public function describe() {
 
        $operacion = "<tr><th>Operando 1 </th> <th> $this->op1</th></tr>";
 
        $operacion.="<tr><th>Operando 2 </th> <th> $this->op2</th></tr>";
 
        $operacion.="<tr><th>Operación </th> <th> $this->operador</th></tr>";
 
        if (self::$tipo == Operacion::RACIONAL)
 
            $tipo = "Racional";
 
        else
 
            $tipo = "Real";
 
        $operacion.="<tr><th>Tipo de operacion  </th> <th> $tipo</th></tr>";
 
        return $operacion;
 
    }
 
 
    /**
 
    * método abstracto que se implementará cuando se sepa si una operación es real o racional
 
    */
 
    abstract public function opera();
 
}
 
 
</source>
 
}}
 
;OpReal
 
{{Plegable|hide|Clase OperacionReal|
 
<source lang=php>
 
<?php
 
 
 
/**
 
* Description of OperacionReal
 
*
 
* @author manuel
 
*/
 
class OperacionReal extends Operacion {
 
 
    public function __construct($operacion) {
 
        parent::__construct($operacion);
 
    }
 
 
    public function opera() {
 
 
    /*Escribe el código que consideres*/
 
 
    }
 
 
    public function __toString() {
 
        $r = parent::__toString();
 
        $r.= "Resultado =" . $this->opera() . "<br />";
 
        return $r;
 
    }
 
 
    public function describe() {
 
        $r = "<table border=1><tr><th>Cocepto</th> <th>Valores</th></tr>";
 
        $r .= parent::describe();
 
        $r.= "<tr><th>Resultado </th><th>" . $this->opera() . "</th></tr>";
 
        $r.= "</table>";
 
        return $r;
 
    }
 
 
    //put your code here
 
}
 
 
</source>
 
}}
 
 
;OpRacional
 
{{Plegable|hide|Clase OpRacional|
 
<source lang=php>
 
<?php
 
 
/**
 
* Description of OperacionRacional
 
*
 
* @author manuel
 
*/
 
class OperacionRacional extends Operacion {
 
 
    public function __construct($operacion) {
 
        parent::__construct($operacion);
 
        $this->op1 = new Racional($this->op1);
 
        $this->op2 = new Racional($this->op2);
 
    }
 
 
    public function opera() {
 
    /*Escribe el código que consideres*/
 
    }
 
 
    public function __toString() {
 
        $r = parent::__toString();
 
        $r.= "=" . $this->opera();
 
        return $r;
 
    }
 
 
    public function describe() {
 
        $r = "<table border=1><tr><th>Cocepto</th> <th>Valores</th></tr>";
 
        $r .= parent::describe();
 
        $r.= "<tr><th>Resultado </th><th>" . $this->opera() . "</th></tr>";
 
        $r.= "</table>";
 
        return $r;
 
    }
 
 
}
 
 
 
</source>
 
}}
 
 
 
*A continuación el código del index.php que he usado yo
 
*A continuación el código del index.php que he usado yo
{{Plegable|hide|Código de index.php|
 
<source lang=php>
 
<!DOCTYPE html>
 
<html>
 
    <head>
 
        <meta charset="UTF-8">
 
        <title></title>
 
        <link rel="stylesheet" type="text/css" href="estilo.css" media="screen" />
 
    </head>
 
    <body>
 
        <fieldset id="ayuda">
 
            <legend>Reglas de uso de la calculadora</legend>
 
            <div id=texhelp> La calculadora se usa escribiendo la operación.</div>
 
            <div id=texhelp> La  operación será <strong>Operando_1 operación Operando_2</strong>.</div>
 
            <div id=texhelp> Cada operando puede ser número <strong>real  o racional.</strong></div>
 
            <div id=texhelp> Real p.e. <strong>5</strong> o <strong>5.12 </strong> Racional p.e <strong> 6/3 </strong>o<strong> 7/1</strong></div>
 
            <div id=texhelp> Los operadores reales permitidos son <strong><font size='5' color='red'> +  -  *  /</font></strong></div>
 
            <div id=texhelp> Los operadores racionales permitidos son <strong><font size='5' color='red'> +  -  *  :</font> </strong></div>
 
            <div id=texhelp> No se deben de dejar espacios en blanco entre operandos y operación</div>
 
            <div id=texhelp> Si un operando es real y el otro racional se considerará operación racional</label></div>
 
            <div id=texhelp> Ejemplo (Real)<strong>5.1+4</strong>  (Racional)<strong>5/1:2</strong>  (Error)<strong>5.2+5/1</strong> (Error)<strong>52214+</strong> </label></div>
 
           
 
 
        </fieldset>
 
        <?php
 
        spl_autoload_register(function($clase) {
 
            require"$clase.php";
 
        });
 
        if ($_POST['enviar']) {
 
            //Leemos la operacion
 
            $operacionCadena = $_POST['operacion'];
 
            switch (Operacion::tipoOperacion($operacionCadena)) {
 
                case Operacion::RACIONAL:
 
                    $operacionNum = new OperacionRacional($operacionCadena);
 
                    $descripcion = $operacionNum->describe();
 
                    break;
 
                case Operacion::REAL:
 
                    $operacionNum = new OperacionReal($operacionCadena);
 
                    $descripcion = $operacionNum->describe();
 
                    break;
 
                case Operacion::ERROR:
 
                    $descripcion = " La operación <br /><strong>$operacionCadena</strong><br /> No es una operación válida";
 
                    break;
 
            }
 
            echo "<fieldset id=rtdo><legend>Resultado</legend>";
 
            echo ("<label>$descripcion</label>");
 
            echo "</fieldset>";
 
        }
 
        ?>
 
        <fieldset>
 
            <legend>Establece la operación</legend>
 
            <form action="." method="post">
 
                <label for="operacion">Operacion</label>
 
                <input type="text" name="operacion" id="">
 
                <input type="submit" name="enviar" value="Calcular">
 
                <?php
 
                if (isset($_POST['enviar'])) {
 
                    echo "<label>$operacionNum</label>";
 
                }
 
                ?>
 
 
            </form>
 
        </fieldset>
 
    </body>
 
</html>
 
 
</source>
 
  
 +
*Para hacer este proyecto facilito un esqueleto con partes ya implementadas para facilitar su desarrollo y comprensión
 +
{{MRM_Objetivo|
 +
*El objetivo de esta práctica es familiarizarse con la programación orientada a objetos en php
 +
*A partir de ahora '''''todos''''' los desarrollos deberán de ser orientados a objetos
 +
*Cualquier duda planteadla en el foro
 +
{{MRM_Web|
 +
;https://github.com/MAlejandroR/Calculadora
 
}}
 
}}
 
====Código====
 
{{Plegable|hide|Clase Abstracta Operacion|
 
<source lang=php>
 
 
abstract class Operacion {
 
 
    //put your code here
 
    protected $op1;
 
    protected $op2;
 
    protected $operador;
 
    protected $operacion;
 
    static protected $tipo;
 
 
    const RACIONAL = 1;
 
    const REAL = 2;
 
    const ERROR = -1;
 
 
/**
 
    *
 
    * @param string $operacion es una cadena con la operacion
 
      * @return int indica el tipo de operaciion (ver constantes anteriores)
 
    */
 
    public static function tipoOperacion($operacion) {
 
//Implementa
 
 
 
    }
 
 
 
    /**
 
    *
 
    * @param string $operacion  La operación a realizar leída de una caja de texto
 
    * inicializa los atributos
 
    */
 
    public function __construct($operacion) {
 
 
    }
 
 
    private function obtenerOperador1($operacion) {
 
       
 
    }
 
 
    private function obtenerOperador2($operacion) {
 
       
 
    }
 
 
 
/** Cuidado con el carácter /, puede ser parte del operadorando en el caso racional
 
en el caso real es un posible opearador
 
*/   
 
private function obtenerOperador($operacion) {
 
       
 
    }
 
 
    public function getOp1() {
 
        return $this->op1;
 
    }
 
 
    public function getOp2() {
 
        return $this->op2;
 
    }
 
 
    public function getOperador() {
 
        return $this->operador;
 
    }
 
 
    public function getTipo() {
 
        return $this->tipo;
 
    }
 
 
    public function __toString() {
 
        return "<br />$this->op1$this->operador$this->op2 = ";
 
    }
 
 
    public function describe() {
 
        $operacion = "<tr><th>Operando 1 </th> <th> $this->op1</th></tr>";
 
        $operacion.="<tr><th>Operando 2 </th> <th> $this->op2</th></tr>";
 
        $operacion.="<tr><th>Operación </th> <th> $this->operador</th></tr>";
 
        if (self::$tipo == Operacion::RACIONAL)
 
            $tipo = "Racional";
 
        else
 
            $tipo = "Real";
 
        $operacion.="<tr><th>Tipo de operacion  </th> <th> $tipo</th></tr>";
 
        return $operacion;
 
    }
 
 
 
    //Este método convierte a la clase en abstracta
 
    //Se DEBE implementar en las clases que hereden de ella
 
    abstract public function opera();
 
    }
 
 
</source>
 
 
 
}}
 
}}
{{Plegable|hide|Clase OperacionRacional|
 
<source lang=php>
 
<?php
 
  
/**
 
* Description of OperacionRacional
 
*
 
* @author manuel
 
*/
 
class OperacionRacional extends Operacion {
 
 
    /**
 
    inicializa los operandos, ahora ya sabemos que es un Racional ....
 
*/
 
    public function __construct($operacion) {
 
//Implementa
 
    }
 
 
    //Realiza la operacion indicada
 
    public function opera() {
 
//Implementa
 
    }
 
 
    public function __toString() {
 
//Implementa
 
     
 
    }
 
 
 
    public function describe() {
 
        $r = "<table border=1><tr><th>Cocepto</th> <th>Valores</th></tr>";
 
        $r .= parent::describe();
 
        $r.= "<tr><th>Resultado </th><th>" . $this->opera() . "</th></tr>";
 
        $rtdo = $this->opera();
 
        $r.= "<tr><th>Resultado simplificado</th><th>" . $rtdo->simplificar() . "</th></tr>";
 
        $r.= "</table>";
 
        return $r;
 
    }
 
</source>
 
}}
 
 
 
 
{{Plegable|hide|Clase OperacionReal|
 
 
<source lang=php>
 
<?php
 
 
/*
 
* To change this license header, choose License Headers in Project Properties.
 
* To change this template file, choose Tools | Templates
 
* and open the template in the editor.
 
*/
 
 
/**
 
* Description of OperacionReal
 
*
 
* @author manuel
 
*/
 
class OperacionReal extends Operacion {
 
 
    public function __construct($operacion) {
 
        parent::__construct($operacion);
 
    }
 
 
    public function opera() {
 
 
        switch ($this->operador) {
 
            case '+':
 
                $resultado = $this->op1 + $this->op2;
 
                break;
 
            case '-':
 
                $resultado = $this->op1 - $this->op2;
 
                break;
 
            case '*':
 
                $resultado = $this->op1 * $this->op2;
 
                break;
 
            case '/':
 
                $resultado = $this->op1 / $this->op2;
 
                break;
 
            default :
 
                $resultado = FALSE;
 
        }
 
        return $resultado;
 
    }
 
 
    public function __toString() {
 
        $r = parent::__toString();
 
        $r.= $this->opera() . "<br />";
 
        return $r;
 
    }
 
 
    public function describe() {
 
        $r = "<table border=1><tr><th>Cocepto</th> <th>Valores</th></tr>";
 
        $r .= parent::describe();
 
        $r.= "<tr><th>Resultado </th><th>" . $this->opera() . "</th></tr>";
 
        $r.= "</table>";
 
        return $r;
 
    }
 
 
    //put your code here
 
}
 
 
</source>
 
 
}}
 
-->
 
 
</div>
 
</div>

Última revisión de 07:24 14 dic 2023



Calculadora Real/Racional

Puedes probar una posible solucion
http://manuel.infenlaces.com/contenido/practicas/calculadora/
Debes de descargarte el proyecto planteado y avanzar a partir de él
 git clone https://github.com/MAlejandroR/Calculadora.git
Enunciado
  • Se pide que realicemos una aplicación web que resuelva cálculos aritméticos con operadores reales o racionales
  • La operación se insertará en una caja de texto
  • La operación tendrá el siguiente formato
OP1 operador OP2
  • Donde
  1. OP1 es un operador real o racional
  2. operador es una operación que puede ser +,-,*,/,:.
    1. 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

PracticaCalculadoraIndex1.png

  • En el siguiente enlace se puede ver el funcionamiento esperado en esta prácticas


Icon inter.gif
Pŕactica de la calculadora Real - Racional

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



Icon casestudy.gif
Operaciones que se pueden insertar
9/8+4/7
9.4/2
9/6:6
9/5*5.6 (Éste es un caso de error)


  • Al presionar intro aparecerá un texto (en el primer caso 9/8+4/7)

PracticaCalculadoraUso1.png

  • En el segundo caso ( 9.4 / 2)

PracticaCalculadoraUso2.png

  • En el tercer caso ( 9/6:6)

PracticaCalculadoraUso3.png

  • En el cuarto caso es erróneo ( 9/5*5.6 )

PracticaCalculadoraUso4.png


  • Para realizar este ejercicio, tendremos que implementar las siguientes clases según aparece en el dibujo
  • Es obligatorio usar esta jerarquía de clase.

Racional.png

  • 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
  1. Num (p.e 10)
  2. Den (p.e 6)
Métodos
  1. 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
  1. simplifica() Simplifica si se puede numerador y denominador (Utilizar el método de Euclides (mcd))


  1. suma
  2. resta
  3. multiplica
  4. divide
  5. __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


Icon objectives.jpg
Objetivo
  • El objetivo de esta práctica es familiarizarse con la programación orientada a objetos en php
  • A partir de ahora todos los desarrollos deberán de ser orientados a objetos
  • Cualquier duda planteadla en el foro





</div>