Cohesion Acoplamiento
Cohesion Acoplamiento
Cohesion Acoplamiento
org
Historia[editar]
1
La métrica de software de acoplamiento y cohesión fue inventada por Larry Constantine a finales de
la década de 1960 como parte del diseño estructurado, basado en características de 'buenas'
prácticas de programación que reducen los costos de mantenimiento y modificación. El diseño
estructurado, incluyendo cohesión y acoplamiento, se publicó en el artículo Stevens, Myers y
Constantine (1974) y en el libro Yourdon y Constantine (1979), el último de los cuales posteriormente
se volvió un estándar.
Bajo acoplamiento[editar]
El bajo acoplamiento entre las unidades de software es el estado ideal que siempre se intenta
obtener para lograr una buena programación o un buen diseño. Cuanto menos dependiente sean las
partes que constituyen un sistema informático, mejor será el resultado. Sin embargo, es imposible un
desacoplamiento total de las unidades.
2
Por ello, el objetivo final del diseño de software es reducir al máximo el acoplamiento entre
componentes. Para ello, lo más importante es saber eliminar el acoplamiento que no sea funcional o
arquitectónico.
El caso del acoplamiento funcional, puede ser por ejemplo que un componente de cálculo de
probabilidades dependa de un componente de cálculo matemático básico, ya que para calcular
probabilidades será necesario aplicar fórmulas matemáticas.
Evitar el efecto onda, ya que un defecto en una unidad puede propagarse a otras, haciendo incluso
más difícil de detectar dónde está el problema.
Minimiza el riesgo de tener que cambiar múltiples unidades de software cuando se debe alterar una.
Tipos de acoplamiento[editar]
Programación estructurada[editar]
En programación estructurada, un módulo hace referencia a una subrutina de cualquier tipo. Por
ejemplo, un conjunto de una o más secciones de código que tiene un nombre y preferiblemente su
3
propio conjunto de nombres de variable.
4
una estructura de datos compuesta y usan solo una parte de ella, posiblemente una parte
diferente (por ejemplo, pasando un registro completo a una función que solo necesita un cambio
de dicho registro).
Esto podría llevar a cambiar la forma en la que un módulo lee un registro debido a que un
campo que el módulo no necesita ha sido modificado.
Acoplamiento de datos
El acoplamiento de datos ocurre cuando los módulos comparten datos entre ellos, por ejemplo,
parámetros. Cada dato es una pieza elemental y dicho parámetro es la única data compartida
(por ejemplo, pasando un entero a una función que calcula una raíz cuadrada).
Acoplamiento de mensajes (bajo)
Este es el más bajo tipo de acoplamiento. Se puede lograr por la descentralización de estados
(como en los objetos) y la comunicación de componentes se realiza mediante parámetros o
paso de mensajes.
Sin acoplamiento
Módulos que no se comunican para nada uno con otro.
Acoplamiento de subclases
Describe la relación entre una clase hija y su clase padre. La hija se conecta a su padre, pero el
padre no se conecta al hijo.
5
Acoplamiento temporal
Cuando dos acciones se agrupan en un módulo sólo porque suceden al mismo tiempo.
En un trabajo reciente varios otros conceptos de acoplamiento se han investigado y utilizado como
indicadores para diferentes principios de modularización utilizados en la práctica.[3]
Desventajas[editar]
2. El ensamble de módulos podría requerir más esfuerzo y tiempo debido a la interdependencia entre
módulos.
3. Un módulo particular podría ser más difícil de reusar o probar debido a que los módulos
dependientes deben incluirse.
Problemas de rendimiento[editar]
6
Transmisión de mensajes y rendimiento
Dado que un mensaje debe transmitirse completo para recuperar su información completa, la
transmisión de mensajes se debe optimizar. Mensajes más largos requieren más memoria para
transmitirse y recibirse. También, cuando es necesario, los receptores deben reensamblar el
mensaje a su estado original para completar su recepción. En ese sentido, para optimizar el
rendimiento en tiempo de ejecución, el tamaño del mensaje se debe minimizar, y la información
contenida se debe maximizar.
7
Soluciones[editar]
Un enfoque para disminuir el acoplamiento es el diseño funcional, el cual busca limitar las
resposabilidades de los módulos basándose en su funcionalidad. El acoplamiento se incrementa
entre dos clases A y B si:
El bajo acoplamiento se refiere a una relación en la cual un módulo interactúa con otro vía una
simple y estable interfaz y no necesita conocer la implementación interna del otro módulo (ver
encapsulamiento (informática)).
Sistemas como CORBA o COM permiten objetos que se comunican con los demás sin tener que
saber nada acerca de la implementación de los otros objetos. Estos dos sistemas incluso permiten la
comunicación entre objetos escritos en diferentes lenguajes.
Acoplamiento y cohesión son términos que ocurren juntos muy frecuentemente. El acoplamiento se
refiere a la interdependencia entre módulos, mientras que la cohesión describe cómo se relacionan
las funciones dentro de un módulo independiente. Baja cohesión implica que un módulo dado ejecuta
8
tareas que no están muy relacionadas unas a otras y por tanto pueden crear problemas como que el
módulo se vuelva muy grande.
Métricas[editar]
El acoplamiento en ingeniería de software[4] describe una versión de métricas asociadas con este
concepto.
9
Acoplamiento(C) hace que el valor sea más grande cuanto más acoplado esté el módulo. Este
número varía de aproximadamente 0,67 (bajo acoplamiento) a 1,0 (altamente acoplado).
Véase también[editar]
Cohesión (informática)
Ingeniería de software
Referencias[editar]
10
3. ↑ F. Beck, S. Diehl. On the Congruence of Modularity and Code Coupling. In Proceedings of the 19th
ACM SIGSOFT Symposium and the 13th European Conference on Foundations of Software
Engineering (SIGSOFT/FSE '11), Szeged, Hungary, September 2011. doi 10.1145/2025113.2025162
Bibliografía utilizada[editar]
Stevens, W.P.; Myers, G.J.; Constantine, L.L. (1974). IBM Systems Journal 13 (2): 115–139, ed.
Structured design (en inglés). doi:10.1147/sj.132.0115.
Yourdon, Edward; Constantine, Larry L. ((1979) 1975). Yourdon Press, ed. Structured Design:
Fundamentals of a Discipline of Computer Program and Systems Design (en inglés). ISBN 0138544719.
11