El principio de Acceso Uniforme (Uniform Access Principle) de Bertrand Meyer

Abel Rincón
4 min readApr 11, 2023

--

Imagen de vectorjuice en Freepik

En mi primer artículo en Medium, he decidido empezar con uno de los clásicos del diseño de software: el principio de Acceso Uniforme (Uniform Access) de Bertrand Meyer. Este concepto fundamental, que se encuentra en el libro “Object-Oriented Software Construction” (1997), ha sido crucial para el desarrollo de software moderno y ha influido en una generación de desarrolladores. A continuación, analizaremos la importancia del principio de acceso uniforme y cómo puede ser aplicado en la construcción de software fácil de mantener.

Bertrand Meyer: Un pionero en el diseño de software

Bertrand Meyer es un influyente investigador, escritor y consultor en el campo de los lenguajes de ordenador, creador del lenguaje de programación Eiffel. Su trabajo ha sido fundamental para establecer las bases del diseño de software moderno y ha influido en una generación de desarrolladores.

El principio de acceso uniforme de Meyer

El principio establece que las propiedades y operaciones de un objeto deben ser accesibles de manera uniforme, sin revelar si son atributos almacenados o resultados de operaciones. Esto permite que los clientes de un objeto se enfoquen en su funcionalidad y comportamiento, en lugar de preocuparse por su implementación.

Ejemplo que incumple principio

Para entender mejor este principio, es útil ver un ejemplo que no lo cumple. Consideremos la clase Square (cuadrado) que representa un cuadrado en un plano bidimensional. Esta clase tiene una propiedad pública $sideLength y dos métodos públicos getArea() y getPerimeter() que calculan el área y el perímetro del cuadrado, respectivamente.

class Square {
public $sideLength;

public function __construct($sideLength) {
$this->sideLength = $sideLength;
}

public function getArea() {
return pow($this->sideLength, 2);
}

public function getPerimeter() {
return 4 * $this->sideLength;
}
}

En este ejemplo, se muestra cómo se puede acceder directamente a la propiedad $sideLength, lo que viola el principio de Acceso Uniforme y expone la implementación interna de la clase a código externo. Esto puede provocar problemas de mantenibilidad y flexibilidad.

Ejemplo práctico en PHP

Para remediar este problema, se puede aplicar el principio utilizando métodos getter y setter para interactuar con los atributos y operaciones del objeto de manera uniforme. Por ejemplo, aquí está una nueva versión de la clase Square que cumple con el principio:

class Square {
private $sideLength;

public function __construct($sideLength) {
$this->sideLength = $sideLength;
}

public function getSideLength() {
return $this->sideLength;
}

public function getPerimeter() {
return 4 * $this->getSideLength();
}

public function getArea() {
return pow($this->getSideLength(), 2);
}
}

En este ejemplo, se han creado el método getSideLength para la propiedad $sideLength. Al hacer esto, se asegura que los cambios en la implementación interna de la clase no afecten a los usuarios externos.

Para demostrar la flexibilidad del principio, podemos modificar la clase Squarepara almacenar el perímetro en lugar de la longitud del lado:

class Square {
private $perimeter;

public function __construct($sideLength) {
$this->perimeter = $sideLength * 4;
}

public function getSideLength() {
return $this->getPerimeter() / 4;
}

public function getPerimeter() {
return $this->perimeter;
}

public function getArea() {
return pow($this->getSideLength(), 2);
}
}

En esta versión de la clase Square, se ha intercambiado la propiedad que almacena la información. Ahora se almacena el perímetro en lugar de la longitud del lado, y se ha modificado el método getter para devolver el valor correcto. A pesar de estos cambios internos en la implementación de la clase, los clientes pueden seguir interactuando con la clase de manera uniforme a través de los métodos getter y setter, sin conocer los cambios internos. Esto demuestra la flexibilidad y facilidad de mantenimiento que proporciona el principio.

Riesgos de uso incorrecto de los getters y los setters

Es importante recordar que el uso excesivo de getters puede llevar a problemas de diseño de software y violar el principio de encapsulamiento. Por lo tanto, es esencial seguir el principio “tell, don’t ask” al diseñar clases y objetos para proporcionar métodos que realicen la tarea deseada en lugar de acceder a la información interna de un objeto.

En mi próximo artículo, profundizaré sobre el principio “tell, don’t ask” y los riesgos de utilizar getters incorrectamente.

Conclusión

El principio de Acceso Uniforme es un concepto fundamental del diseño de software que ha sido clave para el desarrollo de software. Al aplicar este principio, se puede crear software más eficiente, fácil de mantener y flexible.

En futuros artículos, seguiré compartiendo información y aprendizajes sobre conceptos clásicos del diseño de software que puedan resultar útiles e interesantes.

--

--