En programación informática , la encapsulación de campos implica proporcionar métodos que se puedan utilizar para leer o escribir en el campo en lugar de acceder al campo directamente. A veces, estos métodos de acceso se denominan getX y setX (donde X es el nombre del campo), que también se conocen como métodos mutadores. Por lo general, los métodos de acceso tienen visibilidad pública, mientras que el campo que se está encapsulando tiene visibilidad privada ; esto permite que un programador restrinja las acciones que puede realizar otro usuario del código. [1] Compare la siguiente clase Java en la que el campo de nombre no se ha encapsulado:
clase pública NormalFieldClass { pública String nombre ; pública static void main ( String [] args ) { NormalFieldClass ejemplo1 = nueva NormalFieldClass ( ); ejemplo1.nombre = " miNombre " ; System.out.println ( " Mi nombre es " + ejemplo1.nombre ) ; } }
con el mismo ejemplo usando encapsulación:
clase pública EncapsulatedFieldClass { cadena privada nombre ; cadena pública getName () { devolver nombre ; } void público setName ( cadena nuevoNombre ) { nombre = nuevoNombre ; } void público estático main ( cadena [] args ) { EncapsulatedFieldClass ejemplo1 = nueva EncapsulatedFieldClass ( ) ; ejemplo1.setName ( " miNombre " ) ; System.out.println ( " Mi nombre es " + ejemplo1.getName ( ) ); } }
En el primer ejemplo, un usuario es libre de usar la variable de nombre público como crea conveniente; en el segundo, sin embargo, el escritor de la clase conserva el control sobre cómo se lee y escribe la variable de nombre privada , permitiendo el acceso al campo solo a través de sus métodos getName y setName .
El acceso a una subrutina implica una sobrecarga adicional que no existe cuando se accede directamente a los datos. Si bien esto se está volviendo menos preocupante con la amplia disponibilidad de procesadores rápidos de propósito general, puede seguir siendo importante en la codificación de algunos sistemas informáticos en tiempo real y sistemas que utilizan procesadores integrados relativamente lentos y simples . 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 como un acceso directo a un campo.