Ésta es una traducción de un articulo inglés. Puedes encontrar el articulo original en inglés aquí.
Has decidido aprender la programación orientada a objetos, pero no sabes donde comenzar. La programación orientada a objetos tiene tantos conceptos y características. Toda la cosa puede sentirse abrumador a veces. Vamos a ayudarte a comenzar con el pie derecho.
¿Dónde está un buen lugar para comenzar? Es con la característica que asocias el más con la programación orientada a objetos. Se llama “encapsulamiento“. La mayoría de las lenguas de programación modernas apoya el encapsulamiento usando las clases.
¿Por qué debería aprender sobre esto en primero?
Si no sabes nada sobre las clases, el encapsulamiento es una manera excelente de aprender sobre ellas. Es porque, en teoría, pones tu código en una clase y es todo. ¡Es mágico!
El problema es que es difícil de ver el valor de hacer eso. Eso es porque el encapsulamiento es la fundación de la programación orientada a objetos. Todas otras características dependen de él, pero, por sí mismo, no hace mucho.
¿Qué es el encapsulamiento?
El encapsulamiento es todo sobre la información almacenada dentro tu objeto. Es sobre controlar el acceso a él. De esa manera, otros no pueden modificarlo. En lugar, usas métodos de clase para interactuar con él. El resultado es que tu código es más sólido y menos complejo.
¿Por qué es importante?
Cuando estableces tu horno a 400 centígrados, esperas que la temperatura desplegada ser precisa. No quieres saber cómo el horno obtenía la información ni como la procesaba. Sólo quieres la habilidad de establecer y mirar la temperatura del horno.
Es eso que el encapsulamiento quiere hacer también. Cuando usas una clase, esperas un comportamiento consistente. Esperas que la información dentro ser preciso y sin modificaciones no deseadas.
Pero como el objeto maneja la información internamente no es importante para ti. Lo importante es el resultado que obtengas cuando le usas. El resto no te importa.
Como programador, es más fácil de codificar un objeto si puedes controlar como el objeto maneja su información interna. Al esconderse la información interna del objeto, estás seguro de que nadie puede tocarla. La única manera de tocarla es usar los métodos que hace accesible a otros. De esa manera limitas problemas futuros ya que hay una manera específica de usar tu objeto.
¿Cómo clases apoyan encasulamiento?
Clases en PHP tienen tres características para apoyar encapsulamiento.
## Propiedades
Variables que son específicas a una clase se llama propiedades. Las usamos para almacenar información dentro un objeto.
Métodos
Funciones específicas a una clase se llama métodos. Estos métodos tienen acceso a las propiedades de una clase. Mediante el uso de métodos, puedes controlar la interacción con esas propiedades.
Visibilidad
Visibilidad es la característica más importante que las clases ofrecen. Es como una clase controla el acceso a sus propiedades y métodos. Hay tres niveles posibles de acceso:
- Public
- Private
- Protected
“Public” da acceso a una propiedad o método de donde sea. “Private” solo da acceso a una propiedad o método en la clase que la definía. “Protected” es casi el mismo que private. La diferencia es que da acceso a su propiedad o método en las clases heredadas y padres también.
La diferencia entre “private” y “protected” no es importante cuando discute encapsulamiento. La distinción deviene relevante cuando comienzas a usar herencia. Sin embargo, eso es un tema por otro artículo y, por el momento, puedes verlos como lo mismo.
En PHP, establecer la visibilidad de una propiedad o método es opcional. Por defecto, PHP va a establecer la visibilidad a public.
Cómo se ve en la práctica
En otro artículo, creábamos la clase WP_Filtros
como un ejemplo. El objetivo de la clase era encapsular toda la funcionalidad de WordPress por los ganchos y filtros. Puedes ver todos los elementos del encapsulamiento en ese ejemplo reproducido debajo :
class WP_Filtros { protected $filtros = array(); /** * Engancha una función o método a un filtro específico. * * @param string $etiqueta * @param mixed $funcion * @param integer $prioridad * @param integer $args_aceptados */ public function anada($etiqueta, $funcion, $prioridad = 10, $args_aceptados = 1) { } /** * Llama todas las funciones añadidas a un filtro. * * @param string $etiqueta * @param mixed $valor */ public function aplique($etiqueta, $valor) { } /** * Elimina todas las funciones de un filtro. * * @param string $etiqueta */ public function despeje($etiqueta) { } /** * Elimina una función de un filtro específico. * * @param string $etiqueta * @param mixed $funcion * @param integer $prioridad */ public function elimine($etiqueta, $funcion, $prioridad = 10) { } /** * Crea una identificación única para el almacenamiento y la recuperación de una función. * * @param string $etiqueta * @param mixed $funcion * @param integer $prioridad */ protected function cree_identificacion_unica($etiqueta, $funcion, $prioridad) { } }
La propiedad filtros
es protected
. Significa que la propiedad no es accesible fuera la clase. Para interactuar con ella, necesito usar métodos “public”.
La clase usa el método cree_identificacion_unica
internamente. Es por eso el método es definido como protected
. Desde fuera, no es importante cómo la clase crea una identificación única. Y no hay necesito usar el método fuera la clase también.
Es solo el principio
Encapsulamiento hace tu código más fuerte, pero es solo un primer paso. Por combinando eso con otras características de la programación orientada a objetos, podrás hacer cosas más mejores que antes. Eso es cuando la programación orientada a objetos comienza a brillar.