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.
Esta encapsulación de las variables y las funciones miembro relacionadas proporciona importantes beneficios a los programadores como:
- 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.
- 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!
2 ideas sobre “Hablando de encapsulación, encapsulamiento o propiamente dicho: «Encapsulation»”
Reblogueó esto en y comentado:
Amena introducción al encapsulamiento y su aplicación mediante Data hiding en php
Reblogueó esto en Pensando en Objetosy comentado:
Excelente intrdocucción al concepto de encapsulamiento y su implemetación con data hiding en php