Hablando de encapsulación, encapsulamiento o propiamente dicho: “Encapsulation”

Encapsulación

En la programación Orientada a Objetos utilizamos un término denominado “Encapsulación o encapsulamiento”, palabras que en el diccionario de la real academia de la lengua no existen pero en nuestra insistencia de darle nombre en español a los conceptos que se originan de la lengua inglesa hemos adoptado. De dicho concepto vamos a hablar y vamos a llamarle encapsulación y no encapsulation, que sería lo correcto (ya me acostumbré a la palabrita y san google lo dice). En este punto es importante mencionar que algunos autores le llaman ocultamiento de datos ya que limita el acceso a atributos y métodos de los objetos.

Bien, retomaré el ejemplo planteado en “Entendiendo la POO” que plantea a las bicicletas como objetos. El diagrama del objeto bicicleta muestra las variables objeto en el núcleo o centro del objeto y los métodos rodeando el núcleo y protegiéndolo de otros objetos del programa. Este hecho de empaquetar o proteger las variables miembro con los métodos miembro se denomina encapsulación.

Diagrama del objeto bicicleta
Diagrama del objeto bicicleta

 

Esta encapsulación de las variables y las funciones miembro relacionadas proporciona importantes beneficios a los programadores como:

  1. Capacidad de crear módulos: El código fuente de un objeto puede escribirse y mantenerse independiente del código fuente del resto de los objetos.
  2. Protección del diseño de la clase: Un objeto tendrá una interfaz pública perfectamente definida que otros objetos podrán usar para comunicarse con él y elementos privados que solamente conoce la clase.

¿Quedó claro? Sino, voy a explicarles lo mismo pero enfocando dicha explicación al lenguaje PHP a ver si les queda más claro. En PHP existe un concepto llamado visibilidad. La visibilidad de una propiedad o método se define anteponiendo en la declaración una de las siguientes palabras:

  • public, con la que los métodos y/o atributos pueden ser accedidos desde cualquier lado; veamos un ejemplo:
class Bicicleta{
public $velocidad;
public $cadencia;
public $marcha; // Es public por lo que se accede desde cualquier parte</pre>
public function __construct($vel, $cad, $mar){
$this->velocidad = $vel;
$this->cadencia= $cad;
$this->marcha = $mar;
}
public function imprimir(){
return $this->marcha;
}
}
$bicicleta1 = new Bicicleta('100','90',5);
echo $bicicleta1->marcha;
echo $bicicleta1->imprimir();

En este ejemplo tenemos una clase bicicleta, creamos el objeto bicicleta1 y accedemos directamente a la marcha, lo que nos imprimirá un 5, después por medio del método imprimir() también estamos accediendo al dato.

  • protected, con esta palabra los métodos y/o atributos solo pueden ser accedidos desde la misma clase, desde las clases que hereden de ella y desde las clases parent. En el anterior ejemplo si cambiamos public por protected en el atributo marcha nadamas, nos dará un error ya que con protected no podremos acceder a la propiedad directamente sino a través de métodos de la misma clase, herencia o con el parent. Para que no nos marque error debemos comentar la línea 15 utilizando //.
  • private, permite a los atributos y/o métodos  únicamente ser accedidos desde la clase que los definió. Para este caso solo podemos acceder las propiedades a través de la misma clase. Entonces veamos un ejemplo:
class Bicicleta{
public $velocidad;
public $cadencia;
private $marcha;
public function __construct($vel, $cad, $mar){
$this->velocidad = $vel;
$this->cadencia= $cad;
$this->marcha = $mar;
}
public function imprimir(){
return $this->marcha;
}
}
class mountanbike extends Bicicleta
{
public $carreras;

public function carrerascorridas($tipo)
{
$this->carreras=$tipo;
}

public function imprimir(){
return 'Las capacidades máximas de la bicicleta son '.$this->velocidad.' '.$this-> cadencia.' y '.$this->marcha.' Ideal para carreras de tipo '.$this->carreras;
}
}

$bicicleta1 = new Bicicleta('100','90',5);
echo $bicicleta1->imprimir();

Este código no nos va a dejar acceder a la propiedad marcha de la clase Bicicleta desde mountanbike porque es privada, si fuera protected nos dejaría solo por los métodos o parent.

Así, los atributos y/o métodos pueden ser encapsulados para solamente ser accedidos desde donde sean necesarios utilizando en PHP las palabras reservadas correspondientes al concepto de visibilidad. ¿Más claro?

!Esto es encapsulación!

 

Deja un comentario

2 ideas sobre “Hablando de encapsulación, encapsulamiento o propiamente dicho: “Encapsulation””

  • Avatar
  • Avatar
A %d blogueros les gusta esto: