Acoplamiento aferente, acoplamiento eferente, inestabilidad y abstracción II

Continuando con el estudio del grado de estabilidad (o inestabilidad) de un paquete en función de sus valores de acoplamiento y acoplamiento eferente, tal y como fueron enunciados por Robert Cecil Martin, toca establecer su relación con una de las características de la programación orientada a objetos como es la abstracción.

El mismo Robert Cecil Martin especificó que un paquete con una estabilidad máxima (o inestabilidad = 0) debería ser abstracto al máximo y que un paquete con estabilidad mínima tiene que ser concreto al máximo.

El razonamiento resulta lógico, ya que un paquete con inestabilidad 0 quiere decir que tiene no tiene acoplamiento eferente, es decir, no depende de ninguna clase de otro paquete y que como mucho tendrá valores de acoplamiento aferente o lo que es lo mismo hay clases de otro paquete que dependen de clases de este paquete, las cuales “fuerzan” a los desarrolladores a minimizar los cambios en el paquete por sus posibles consecuencias en dichas clases externas. ¿Cómo se consigue llevar la estabilidad a su máxima expresión? Pues forzando a que el mayor número de clases del paquete sean abstractas.

Recordemos que una clase abstracta es aquella que tiene al menos un método abstracto y que un método abstracto es aquel que solo presenta su especificación pero no su implementación. Una clase abstracta no puede ser instanciada y las clases que heredan de ella tienen que implementar los métodos abstractos definido en la superclase o volver a declararlos como abstractos, lo que daría lugar a que dicha subclase también sería abstracta.

El grado de abstracción de un paquete se define mediante la siguiente fórmula:

Abstracción = Clases Abstractas / (Clases Abstractas + Clases no Abstractas)

De esta manera, al igual que sucede con la inestabilidad, los valores de abstracción se encontrarán también en el rango de 0 a 1, de manera que tendremos el valor 1 cuando el paquete tenga todas las clases abstractas (o lo que es lo mismo no tenga clases no abstractas) y 0 cuando el paquete no tenga clases abstractas.

Robert Cecil Martin expone una relación interesante entre el grado de abstracción y el grado de estabilidad, pero como se puede apreciar ese grado se tiene que forzar, ya que ni la abstracción no la estabilidad son función del otro. Esto provoca que se puedan producir situaciones en cierto modo paradójicas como por ejemplo las siguientes:

– Inestabilidad = 1 y Abstracción = 1. Esto querría decir que nos encontramos con un paquete con clases de las cuales no depende ninguna clase de otro paquete y sin embargo todas las clases del paquete son abstractas y por tanto no instanciables. Esta situación es tan paradójica que será difícil de encontrar en un programa, ya que vendría a decir que no se estaría utilizando el paquete para nada.

– Inestabilidad = 0 y Abstracción = 0. En este caso nos encontramos con un paquete cuyas clases no dependen de ninguna clase de otro paquete y que además ninguna de sus clases es abstracta. Esta circunstancia es menos paradójica y por supuesto posible en un programa, vendría a hacer referencia a un paquete estable y concreto y por tanto rígido, siendo un paquete a vigilar si el acoplamiento aferente es alto, debido a que las posibilidades de efectos colaterales puede ser alta.

Tal y como enunció Robert Cecil Martin, los valores más deseables para cada paquete serían Inestabilidad = 1 y Abstracción = 0 e Inestabilidad = 0 y Abstracción = 1, no obstante, cualquier paquete que se encuentre en la recta que une ambos puntos se considera que tiene unos valores de estabilidad y abstracción compensados o equilibrados.

De lo anterior se puede deducir una nueva métrica que es la distancia de un paquete respecto a esa recta ideal, que se calcula mediante la siguiente fórmula:

D = ABS((Abstracción + Inestabilidad – 1) / SQRT(2))

devolviendo unos valores que se encontrarían en el rango entre 0 y 0’707, que indicarían que el paquete se encuentra sobre la recta o en el punto más extremo posible.

También hay cálculos de dicha distancia estableciendo el rango entre 0 y 1, aplicando la siguiente fórmula:

D = ABS(Abstracción + Inestabilidad – 1)

Por tanto, con lo estudiado en el anterior artículo y éste, basado en los enunciados de Robert Cecil Martin, es posible tener una serie de métricas que nos permitan servir de referencia a la hora de estudiar la calidad en el diseño de paquetes (y en general del diseño) de una determinada aplicación.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: