Posted in

Trabajando con programación orientada a objetos (parte 2)

Mejorando el ejemplo dado en el post anterior (parte 1) vamos a añadir unas buenas prácticas enviando datos a nuestro objeto.

Diferentes situaciones para pasar un dato a una clase:

– Al crear el objeto, con su método constructor
– Al ejecutar cualquiera de sus otros métodos
– Definir una propiedad pública

Al ejecutarse con su método constructor

class Square
{
    private $number;
 
    public function __construct($value)
    {
        $this->number = $value;
    }
 
    public function area()
    {
        return $this->number * $this->number;
    }
}

Ahora para pasarle el valor dinámicamente solo tendremos que cambiar un poco la instacia de nuestra clase:

include 'Square.php';
 
$side = 10;
$instance = new Square($side);
 
echo $instance->area();

Mediante un método

La segunda manera de pasar un dato es en el momento de ejucatar otro de sus métodos, en este caso lo más práctico sería que hiciara al momento de llamar al método area(), así que para el ejemplo eliminaremos el método “construct” y modificaremos la clase.

Square.php
 
class Square
{
    private $number;
 
    public function area($value)
    {
        $this->number = $value * $value;
        return $this->number;
    }
}

Y en nuestro archivo index.php

include 'Square.php';
$instance = new Square();
 
echo $instance->area(10);

Propiedad pública

Square.php
 
class Square
{
    public $number;
 
    public function area()
    {
        return $this->number * $this->number;
    }
}

El archivo index.php

include 'Square.php';
 
$instance = new Square();
$instance->number = 12;
 
echo $instance->area();

Importante: con este último ejemplo se está violando una de las reglas básicas de la POO, la encapsulación de los datos internos. Desde el código de nuestra implementación no se debería dar un valor a una propiedad directamente, y tampoco leer datos directamente, para ello existon los getter y setter, para realizar estas tareas tan comunes.

Getters y Setters

La estrucutra de un método getter normalmente es muy sencilla, no recibe parámetros y limita a devolver mediante return el valor de una propiedad.

public function getNumber()
{
    return $this->number;
}

Por el contrario, la estructura de un método setter sí debe recibir un parámetro obligatoriamente, que será el valor que se le asignará a la propiedad. No devolverá nada.

public function setNumber($value)
{
    $this->number = $value;
}

Debemos modificar nuestra clase para agregar estos dos nuevos conceptos y tener un ejemplo sencillo pero bien realizado.

class Square
{
    private $number;
 
    public function setNumber($value)
    {
        $this->number = $value;
    }
 
    public function getNumber()
    {
        return $this->number;
    }
 
    public function area()
    {
        return $this->number * $this->number;
    }
}

Archivo index.php

include 'Square.php';
 
$instance = new Square();
$instance->setNumber(12);
 
echo $instance->area();

Se debe intentar no caer en el error de definir un getter y un setter para todas las propiedades de un objeto, iría en contra de la idea principal de la POO que es esconder la mayor cantidad de información posible.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *


The reCAPTCHA verification period has expired. Please reload the page.