Articulo de referencia

encapsulación de campo

En programación informática , la encapsulación de campos implica proporcionar métodos que se pueden usar para leer o escribir en el campo en lugar de acceder a él directamente. ...

En programación informática , la encapsulación de campos implica proporcionar métodos que se pueden usar para leer o escribir en el campo en lugar de acceder a él directamente. A veces, estos métodos de acceso se denominan `getX` y `setX` (donde X es el nombre del campo), también conocidos como métodos modificadores. Por lo general, los métodos de acceso tienen visibilidad pública, mientras que el campo encapsulado tiene visibilidad privada ; esto permite al programador restringir las acciones que otro usuario del código puede realizar. [ 1 ] Compare la siguiente clase Java en la que el campo `name` no ha sido encapsulado:

public class NormalFieldClass { public String name ; public static void main ( String [] args ) { NormalFieldClass example1 = new NormalFieldClass (); example1 . name = "myName" ; System . out . println ( "Mi nombre es " + example1 . name ); } }

Con el mismo ejemplo usando encapsulación:

public class EncapsulatedFieldClass { private String _name ; public String getName () { return _name ; } public void setName ( String newName ) { _name = newName ; } public static void main ( String [] args ) { EncapsulatedFieldClass example1 = new EncapsulatedFieldClass (); example1 . setName ( "Alice" ); System . out . println ( "Mi nombre es " + example1 . getName ()); } }

En el primer ejemplo, el usuario puede utilizar la variable pública `name` como mejor le parezca; en el segundo, sin embargo, el autor de la clase conserva el control sobre cómo se lee y se escribe la variable privada `_name`, permitiendo el acceso al campo únicamente a través de sus métodos `getName` y `setName` .

Ventajas

  • El formato de almacenamiento interno de los datos está oculto; en el ejemplo, la previsión del uso de conjuntos de caracteres restringidos podría permitir la compresión de datos mediante la recodificación (por ejemplo, de caracteres de ocho bits a un código de seis bits). Un intento de codificar caracteres fuera del rango de los datos esperados podría entonces gestionarse mediante una conversión de tipo que genere un error en la rutina de configuración .
  • En general, los métodos get y set pueden presentarse en dos versiones: una versión eficiente que presupone que quien realiza la llamada proporciona datos adecuados y que estos se han almacenado correctamente, y una versión de depuración que, si bien es más lenta, realiza comprobaciones de validez en los datos recibidos y entregados. Esta detección resulta útil cuando se crean o modifican rutinas (tanto las que llaman como las que son llamadas) o formatos de almacenamiento internos.
  • La ubicación de los datos almacenados dentro de estructuras más grandes puede permanecer oculta, lo que permite realizar cambios en dicho almacenamiento sin necesidad de modificar el código que hace referencia a los datos. Esto también reduce la probabilidad de efectos secundarios inesperados derivados de dichos cambios. Resulta especialmente ventajoso cuando los accesores forman parte de un sistema operativo (SO), caso en el que el código de la aplicación que realiza la llamada puede no estar disponible para los desarrolladores del SO.

Desventajas

El acceso a una subrutina implica una sobrecarga adicional que no existe cuando se accede a los datos directamente. Si bien esto es cada vez menos preocupante debido a la amplia disponibilidad de procesadores rápidos de propósito general, puede seguir siendo importante al programar algunos sistemas de computación en tiempo real y sistemas que utilizan procesadores embebidos relativamente lentos y sencillos . En algunos lenguajes, como C++, los métodos getter/setter suelen ser funciones en línea , de modo que cuando se realiza la inserción en línea, el código se ve igual que el acceso directo a los campos.

Referencias

  1. Liang, Y. Daniel. "9.9 Encapsulación de campos de datos" . Revel para Introducción a la programación Java y estructuras de datos .