Clases y Objetos en PHP


blocksAntes de comenzar a trabajar con clases y objetos, debemos conocer primero la diferencia entre la programación tradicional y la programación orientada a objetos (POO). En la programación tradicional los problemas son resueltos ejecutando una acción tras otra, en otras palabras, escribes un programa donde las acciones son ejecutadas una por una para resolver un problema.

Por ejemplo, si deseas sumar dos números en PHP, basta con el siguiente código:

<?
// Define dos numeros
$a = 2;
$b = 3;
// Suma ambos numeros
$c = $a + $b;
echo "a+b=".$c;
?>

Programación Orientada a Objetos (POO)

En POO los problemas se resuelven desde otro punto de vista. Tienes que ver el problema (y su solución) como objetos con propiedades y comportamiento. Por ejemplo, puedes definir un objeto “escritorio” con algunas propiedades (ancho, alto, profundidad, color, etc) y comportamiento (estático). Si ahora piensas en un carro, algunas de las propiedades pueden ser el número de ruedas, modelo, año, etc, y su comportamiento puede ser “moviéndose” o “detenido”.

Ahora vamos a pensar en un ejemplo práctico. Imagina que quieres sumar dos números complejos. En PHP no hay una representación para los números complejos, es decir, no puedes ejecutar esta suma así no más:

2+3j
1+2j +
3+5J

Debes resolver este problema con objetos. Primero que nada, debes escribir una clase (la definición del objeto)  para los números complejos donde definirás sus propiedades y comportamiento. En este caso las propiedades son la parte real e imaginaria, y su comportamiento son las operaciones que puedes ejecutar con dos números (sumar, restar, multiplicar, dividir). Vamos a ver el código PHP:

<?
class Complejo{

    // Propiedades
    public $x;    // La parte real
    public $y;    // La parte imaginaria 

    // Constructor (Inicialización del objeto)
    public function __construct($a,$b){
        $this->x = $a;
        $this->y = $b;
    }

    // Comportamiento
    function sumar($a,$b){
        // Creamos un nuevo objeto: el número complejo (0,0)
        $c     = new Complejo(0,0);

        // Sumamos la parte real
        $c->x     = $a->x + $b->x;

        // Sumamos la parte imaginaria
        $c->y    = $a->y + $b->y;

        // Devolvemos el número complejo resultante
        return $c;

    }
    function restar($a,$b){
        // Aquí la parte real e imaginaria se restan y son
        // pasadas como argumentos para un nuevo objeto,
        // el cual será retornado como resultado
        return new Complejo($a->x-$b->x,$a->y-$b->y);
    }
}
?>

Ahora podemos guardar este código como Complejo.php. Aquí omití las otras dos operaciones (multiplicar y dividir).

Probando nuestros Números Complejos de PHP

Para probar si la clase funciona, podemos usarlo en un script como este:

<?
require "Complejo.php";

// Definimos un nuevo número complejo
$numero = new Complejo(3,5);

echo "Parte real: ".$numero->x;
echo "<br>";
echo "Parte imaginaria: ".$numero->y;
echo "<br>";

// Ahora vamos a probar la suma
$a = new Complejo(2,3);
$b = new Complejo(1,2);

// Suma $a y $b
$c = $a->sumar($a,$b);

// Mostrar el resultado
echo "La suma es: (".$c->x.",".$c->y.")";
?>

Referencias:


,

  1. #1 by Luis Gallardo on 04/11/2013 - 10:43

    @Manu esto es un ejemlpo, seguro que se pueden hacer cosas más complejas con las clases. Saludos!

  2. #2 by Manu on 04/11/2013 - 7:43

    La clase está fatal diseñada, hay una máxima en POO que es divide y vencerás, las clase tienen que estar ESPECIALIZADAS en hacer algo. Deberías crear una clase que guarde los números complejos y otra que fuera para hacer las operaciones con números complejos.

  3. #3 by Luis Gallardo on 25/04/2013 - 2:16

    @Mike es un ejemplo para sumar la parte real y la parte imaginara de dos números complejos. Saludos!

  4. #4 by Mike on 24/04/2013 - 8:16

    Hola, no entiendo el ejemplo. Se supone que el numero imaginario esta representado por el numero 5. Pero 5 es real. Suponiendo una ecuación cuadrática, ¿qué es lo que se pasa como parámetro? ¿El número negativo? ¿La raíz cuadrada ya resuelta?

    En el ejemplo que tienes, ¿del 5 se saca la raíz cuadrada negativa? ¿o se resuelve como si fuera un 5 entero y normal?

  5. #5 by Luis Gallardo on 05/09/2010 - 10:15

    Hola Soley, no entendí tu pregunta :)

  6. #6 by Soley on 04/09/2010 - 9:17

    Y cual es la de Orientada a objetos?

Los Comentarios están cerrados