12.8 Métodos de encapsulación y acceso (Getters y Setters): encapsulación en diferentes lenguajes de programación
La encapsulación es uno de los cuatro pilares fundamentales de la Programación Orientada a Objetos (POO), junto con la herencia, la abstracción y el polimorfismo. La encapsulación es el principio que le permite ocultar los detalles internos de cómo funciona un objeto, exponiendo solo las operaciones seguras y necesarias para interactuar con ese objeto. Esto se hace controlando el acceso a las variables y métodos internos de una clase, haciendo que algunos miembros sean privados y otros públicos.
Los métodos de acceso, conocidos como getters y setters, son la forma más común de implementar la encapsulación en muchos lenguajes de programación. Son métodos públicos que permiten leer (getters) y escribir (setters) propiedades privadas de una clase. A través de ellos es posible validar y controlar los valores que se están asignando a las variables, manteniendo la integridad y consistencia del estado interno del objeto.
Encapsulación en Java
En Java, la encapsulación se implementa utilizando modificadores de acceso: private
, protected
, public
y default
(no modificador). Normalmente, las variables de instancia se definen como privadas
, lo que significa que no se puede acceder a ellas directamente desde fuera de la clase. Para permitir el acceso a estas variables, se utilizan los métodos getters y setters.
Persona de clase pública { nombre de cadena privada; edad privada; cadena pública getName() { nombre de retorno; } setName público vacío (nombre de cadena) { this.nombre = nombre; } público int getAge() { edad de retorno; } setAge público vacío (int edad) { si (edad > 0) { this.age = edad; } } }
En este ejemplo, el método setAge
incluye validación para garantizar que la edad no sea un valor negativo. Esto ilustra cómo se pueden utilizar los definidores para hacer cumplir las reglas comerciales y mantener la integridad de los objetos.
Encapsulación en C#
C# es otro lenguaje orientado a objetos que admite la encapsulación de forma similar a Java. Sin embargo, C# ofrece una sintaxis más sencilla para declarar propiedades con getters y establecedores automáticos, conocidos como propiedades autoimplementadas.
Persona de clase pública { Nombre de cadena pública {obtener; colocar; } public int Edad { obtener { edad de retorno; } establecer {edad = valor> 0? valor: edad; } } edad privada; }
En este ejemplo, la propiedad Name
es una propiedad autoimplementada que crea automáticamente un campo privado subyacente. La propiedad Edad
tiene una lógica personalizada en el setter para garantizar que la edad no sea negativa.
Encapsulación en Python
Python no tiene modificadores de acceso explícitos como Java o C#. En cambio, la convención es utilizar un guión bajo (_
) antes del nombre de un atributo para indicar que debe tratarse como privado. Aunque esto no impide el acceso directo al atributo, es una señal para otros desarrolladores de que el atributo está pensado para uso interno de la clase. Los métodos getters y setters en Python a menudo se implementan usando los decoradores @property
, @attributo.setter
y
persona de clase: def __init__(yo, nombre, edad): self._name = nombre self._age = edad @propiedad nombre definido (yo): devolver self._name @nombre.setter nombre def (yo, valor): self._name = valor @propiedad edad def(yo): devolver self._age @idade.setter def edad(yo, valor): si valor > 0: self._age = valor
Los decoradores @property
y @name.setter
le permiten definir métodos que se comportan como atributos normales, pero con lógica adicional para lectura y escritura.
Encapsulación de JavaScript
JavaScript tradicionalmente no admitía la encapsulación de forma nativa, pero con la introducción de clases en ECMAScript 2015 (ES6), esto cambió. Aún así, los campos privados son una adición más reciente al lenguaje y se indican con un hash (#
) antes del nombre del campo.
clase Persona { #nombre; #edad; constructor(nombre,edad) { this.#nombre = nombre; this.#edad = edad; } obtener nombre() { devolver esto.#nombre; } establecer nombre (valor) { this.#nombre = valor; } obtener edad() { devolver esto.#edad; } establecer edad (valor) { si (valor > 0) { this.#edad = valor; } } }
Los métodos get
y set
funcionan como getters y setters y permiten el acceso controlado a campos privados.
Conclusión
La encapsulación es una práctica esencial para crear software sólido, seguro y fácil de mantener. Aunque los lenguajes de programación pueden variar en sus enfoques específicos para implementar la encapsulación, el concepto subyacente sigue siendo el mismo. Los métodos de acceso getters y setters son herramientas poderosas que permiten a los desarrolladores proteger el estado interno de los objetos y exponer una interfaz limpia y comprensible para los usuarios de estas clases. Al dominar la encapsulación y el uso adecuado de los métodos de acceso, los programadores pueden garantizar que su código sea más confiable y fácil de mantener a largo plazo.