fbpx
Wikipedia

Acoplamiento (informática)

En informática, el acoplamiento es la forma y nivel de interdependencia entre módulos de software; una medida de qué tan cercanamente conectados están dos rutinas o módulos de software;[1]​ así como el grado de fuerza de la relación entre módulos.[2]​ Un ejemplo simple de acoplamiento es cuando un componente accede directamente a un dato que pertenece a otro componente. En ese caso, el resultado del comportamiento del componente A dependerá del valor del componente B, por lo tanto, están acoplados.

El acoplamiento está comúnmente contrastado con la cohesión. Un bajo acoplamiento normalmente se correlaciona con una alta cohesión, y viceversa. El bajo acoplamiento es frecuentemente una señal de un sistema bien estructurado y de un buen diseño de software.

Historia

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.

 
Modelo conceptual de acoplamiento

El acoplamiento puede ser "bajo" (también "débil") o "alto" (también "fuerte").

Bajo acoplamiento

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.

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.

El bajo acoplamiento permite:

  • Mejorar el mantenimiento de las unidades de software.
  • Aumentar la reutilización de las unidades de software.
  • 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

Algunos tipos de acoplamiento, de mayor a menor, son los siguientes:

Programación estructurada

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 propio conjunto de nombres de variable.

Acoplamiento de contenido (alto)
El acoplamiento de contenido (también conocido como Acoplamiento patológico) ocurren cuando un módulo modifica o se apoya en el funcionamiento interno de otro módulo (por ejemplo, accediendo a datos locales de otro módulo).
Por lo tanto, cambiar la forma en que el segundo módulo produce datos (ubicación, tipo, velocidad) conducirá a cambiar el módulo dependiente.
Acoplamiento común
El acoplamiento común (también conocido como Acoplamiento global) ocurre cuando dos módulos comparten las mismos datos globales (por ejemplo, una variable global).
Cambiar el recurso compartido implica cambiar todos los módulos que lo usen.
Acoplamiento externo
El acoplamiento externo ocurre cuando dos módulos comparten un formato de datos impuesto externamente, protocolo de comunicación, o interfaz de dispositivo. Esto está básicamente relacionado con la comunicación a herramientas externas y dispositivos.
Acoplamiento de control
El acoplamiento de control es un módulo controlando el flujo de otro, mediante el paso de información sobre lo que debe hacer (por ejemplo, pasándole una bandera tipo what-to-do flag).
Acoplamiento sellado (Acoplamiento por estructura de datos)
El acomplamiento sellado (Stamp coupling en inglés) ocurre cuando los módulos comparten 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.

Programación orientada a objetos

En programación orientada a objetos tenemos:

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.
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

Sistemas estrechamente acoplados tienden a presentar las siguientes características de desarrollo, que a menudo son vistos como desventajas:

  1. Un cambio en un módulo usualmente fuerza un efecto dominó de cambios en otros módulos.
  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 reutilizar o probar debido a que los módulos dependientes deben incluirse.

Problemas de rendimiento

Ya sea con alto o bajo acoplamiento, el rendimiento de un sistema se ve afectado la creación de mensajes y parámetros, transmisión, traducción (por ejemplo, el cálculo de referencias) y la interpretación de mensajes (que podría ser una referencia a una cadena, matriz o estructura de datos), o incluso mensajes más complejos como SOAP.

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.
Traducción de mensajes y rendimiento
Los protocolos de mensajes y los mensajes mismos muchas veces contienen información extra (por ejemplo, paquete, estructura, definición e información del lenguaje). Por lo tanto, el receptor muchas veces necesita traducir un mensaje en otro más refinado removiendo caracteres extra y estructuras de información y convirtiendo valores de un tipo a otro. Cualquier tipo de traducción incrementa el uso de CPU y memoria. Para optimizar el rendimiento en tiempo de ejecución, los mensajes y sus contenidos se deben reducir y refinar para maximizar la información contenida y reducir la traducción.
Interpretación de mensajes y rendimiento
El receptor debe interpretar todos los mensajes. Mensajes simples como enteros no deberían requerir procesamiento adicional para interpretarse. No obstante, mensajes complejos como mensajes SOAP requieren parseo y transformación de cadenas de caracteres para exhibir su significado interno. Para optimizar el rendimiento en tiempo de ejecución, los mensajes se deben refinar y reducir para minimizar la sobrecarga por interpretación.

Soluciones

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:

  • A tiene un atributo que refiere a (es del tipo) B.
  • A llama a un servicio de un objeto B.
  • A tiene un método que referencia a B (vía tipos return o parámetros).
  • A es una subclase de (o implementa) la clase B.

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 versus Cohesión

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 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

El acoplamiento en ingeniería de software[4]​ describe una versión de métricas asociadas con este concepto.

Para el acoplamiento de datos y flujo de control:

  • di: número de parámetros de entrada
  • ci: número de parámetros de control
  • do: número de parámetros de salida
  • co: número de parámetros de control de salida

Para el acoplamiento global:

  • gd: número de variables globales usadas como data
  • gc: número de variables globales usadas como control

Para acomplamiento de entorno:

  • w: número de módulos llamados (fan-out)
  • r: número de módulos llamantes bajo consideración (fan-in)

 

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).

Por ejemplo, si un módulo tiene un solo parámetro de entrada y datos de salida,

 

Si un módulo tiene 5 parámetros de entrada y salida de datos , el mismo número de parámetros de control y accede a 10 elementos de datos globales , con un fan-in de 3 y un fan-out de salida de 4,

 

Métrica CBO

En Programación Orientada a Objetos la métrica CBO (Coupling Between Object Classes) obtiene un nivel de acoplamiento entre clases mediante el cómputo de ligas de una clase a otra. Es decir, el número de clases ligadas a otra, excluyendo constantes, llamadas a APIS, y herencia.

Véase también

Referencias

  1. ISO/IEC/IEEE 24765:2010 Systems and software engineering — Vocabulary
  2. ISO/IEC TR 19759:2005, Software Engineering — Guide to the Software Engineering Body of Knowledge (SWEBOK)
  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
  4. Pressman, Roger S. Ph.D. (1982). Software Engineering - A Practitioner's Approach - Fourth Edition. 0-07-052182-4

Bibliografía utilizada

  • 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. 
  • Acomplamiento y Cohesión - Blog Disrupción tecnológica
  •   Datos: Q253448

acoplamiento, informática, informática, acoplamiento, forma, nivel, interdependencia, entre, módulos, software, medida, qué, cercanamente, conectados, están, rutinas, módulos, software, así, como, grado, fuerza, relación, entre, módulos, ejemplo, simple, acopl. En informatica el acoplamiento es la forma y nivel de interdependencia entre modulos de software una medida de que tan cercanamente conectados estan dos rutinas o modulos de software 1 asi como el grado de fuerza de la relacion entre modulos 2 Un ejemplo simple de acoplamiento es cuando un componente accede directamente a un dato que pertenece a otro componente En ese caso el resultado del comportamiento del componente A dependera del valor del componente B por lo tanto estan acoplados El acoplamiento esta comunmente contrastado con la cohesion Un bajo acoplamiento normalmente se correlaciona con una alta cohesion y viceversa El bajo acoplamiento es frecuentemente una senal de un sistema bien estructurado y de un buen diseno de software Indice 1 Historia 2 Bajo acoplamiento 3 Tipos de acoplamiento 3 1 Programacion estructurada 3 2 Programacion orientada a objetos 4 Desventajas 5 Problemas de rendimiento 6 Soluciones 7 Acoplamiento versus Cohesion 8 Metricas 8 1 Metrica CBO 9 Vease tambien 10 Referencias 11 Bibliografia utilizadaHistoria EditarLa metrica de software de acoplamiento y cohesion fue inventada por Larry Constantine a finales de la decada de 1960 como parte del diseno estructurado basado en caracteristicas de buenas practicas de programacion que reducen los costos de mantenimiento y modificacion El diseno estructurado incluyendo cohesion y acoplamiento se publico en el articulo Stevens Myers y Constantine 1974 y en el libro Yourdon y Constantine 1979 el ultimo de los cuales posteriormente se volvio un estandar Modelo conceptual de acoplamiento El acoplamiento puede ser bajo tambien debil o alto tambien fuerte Bajo acoplamiento EditarEl bajo acoplamiento entre las unidades de software es el estado ideal que siempre se intenta obtener para lograr una buena programacion o un buen diseno Cuanto menos dependiente sean las partes que constituyen un sistema informatico mejor sera el resultado Sin embargo es imposible un desacoplamiento total de las unidades Por ello el objetivo final del diseno de software es reducir al maximo el acoplamiento entre componentes Para ello lo mas importante es saber eliminar el acoplamiento que no sea funcional o arquitectonico El caso del acoplamiento funcional puede ser por ejemplo que un componente de calculo de probabilidades dependa de un componente de calculo matematico basico ya que para calcular probabilidades sera necesario aplicar formulas matematicas El bajo acoplamiento permite Mejorar el mantenimiento de las unidades de software Aumentar la reutilizacion de las unidades de software Evitar el efecto onda ya que un defecto en una unidad puede propagarse a otras haciendo incluso mas dificil de detectar donde esta el problema Minimiza el riesgo de tener que cambiar multiples unidades de software cuando se debe alterar una Tipos de acoplamiento EditarAlgunos tipos de acoplamiento de mayor a menor son los siguientes Programacion estructurada Editar En programacion estructurada un modulo hace referencia a una subrutina de cualquier tipo Por ejemplo un conjunto de una o mas secciones de codigo que tiene un nombre y preferiblemente su propio conjunto de nombres de variable Acoplamiento de contenido alto El acoplamiento de contenido tambien conocido como Acoplamiento patologico ocurren cuando un modulo modifica o se apoya en el funcionamiento interno de otro modulo por ejemplo accediendo a datos locales de otro modulo Por lo tanto cambiar la forma en que el segundo modulo produce datos ubicacion tipo velocidad conducira a cambiar el modulo dependiente Acoplamiento comun El acoplamiento comun tambien conocido como Acoplamiento global ocurre cuando dos modulos comparten las mismos datos globales por ejemplo una variable global Cambiar el recurso compartido implica cambiar todos los modulos que lo usen Acoplamiento externo El acoplamiento externo ocurre cuando dos modulos comparten un formato de datos impuesto externamente protocolo de comunicacion o interfaz de dispositivo Esto esta basicamente relacionado con la comunicacion a herramientas externas y dispositivos Acoplamiento de control El acoplamiento de control es un modulo controlando el flujo de otro mediante el paso de informacion sobre lo que debe hacer por ejemplo pasandole una bandera tipo what to do flag Acoplamiento sellado Acoplamiento por estructura de datos El acomplamiento sellado Stamp coupling en ingles ocurre cuando los modulos comparten una estructura de datos compuesta y usan solo una parte de ella posiblemente una parte diferente por ejemplo pasando un registro completo a una funcion que solo necesita un cambio de dicho registro Esto podria llevar a cambiar la forma en la que un modulo lee un registro debido a que un campo que el modulo no necesita ha sido modificado Acoplamiento de datos El acoplamiento de datos ocurre cuando los modulos comparten datos entre ellos por ejemplo parametros Cada dato es una pieza elemental y dicho parametro es la unica data compartida por ejemplo pasando un entero a una funcion que calcula una raiz cuadrada Acoplamiento de mensajes bajo Este es el mas bajo tipo de acoplamiento Se puede lograr por la descentralizacion de estados como en los objetos y la comunicacion de componentes se realiza mediante parametros o paso de mensajes Sin acoplamiento Modulos que no se comunican para nada uno con otro Programacion orientada a objetos Editar En programacion orientada a objetos tenemos Acoplamiento de subclases Describe la relacion entre una clase hija y su clase padre La hija se conecta a su padre pero el padre no se conecta al hijo Acoplamiento temporal Cuando dos acciones se agrupan en un modulo solo 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 modularizacion utilizados en la practica 3 Desventajas EditarSistemas estrechamente acoplados tienden a presentar las siguientes caracteristicas de desarrollo que a menudo son vistos como desventajas Un cambio en un modulo usualmente fuerza un efecto domino de cambios en otros modulos El ensamble de modulos podria requerir mas esfuerzo y tiempo debido a la interdependencia entre modulos Un modulo particular podria ser mas dificil de reutilizar o probar debido a que los modulos dependientes deben incluirse Problemas de rendimiento EditarYa sea con alto o bajo acoplamiento el rendimiento de un sistema se ve afectado la creacion de mensajes y parametros transmision traduccion por ejemplo el calculo de referencias y la interpretacion de mensajes que podria ser una referencia a una cadena matriz o estructura de datos o incluso mensajes mas complejos como SOAP Transmision de mensajes y rendimiento Dado que un mensaje debe transmitirse completo para recuperar su informacion completa la transmision de mensajes se debe optimizar Mensajes mas largos requieren mas memoria para transmitirse y recibirse Tambien cuando es necesario los receptores deben reensamblar el mensaje a su estado original para completar su recepcion En ese sentido para optimizar el rendimiento en tiempo de ejecucion el tamano del mensaje se debe minimizar y la informacion contenida se debe maximizar Traduccion de mensajes y rendimiento Los protocolos de mensajes y los mensajes mismos muchas veces contienen informacion extra por ejemplo paquete estructura definicion e informacion del lenguaje Por lo tanto el receptor muchas veces necesita traducir un mensaje en otro mas refinado removiendo caracteres extra y estructuras de informacion y convirtiendo valores de un tipo a otro Cualquier tipo de traduccion incrementa el uso de CPU y memoria Para optimizar el rendimiento en tiempo de ejecucion los mensajes y sus contenidos se deben reducir y refinar para maximizar la informacion contenida y reducir la traduccion Interpretacion de mensajes y rendimiento El receptor debe interpretar todos los mensajes Mensajes simples como enteros no deberian requerir procesamiento adicional para interpretarse No obstante mensajes complejos como mensajes SOAP requieren parseo y transformacion de cadenas de caracteres para exhibir su significado interno Para optimizar el rendimiento en tiempo de ejecucion los mensajes se deben refinar y reducir para minimizar la sobrecarga por interpretacion Soluciones EditarUn enfoque para disminuir el acoplamiento es el diseno funcional el cual busca limitar las resposabilidades de los modulos basandose en su funcionalidad El acoplamiento se incrementa entre dos clases A y B si A tiene un atributo que refiere a es del tipo B A llama a un servicio de un objeto B A tiene un metodo que referencia a B via tipos return o parametros A es una subclase de o implementa la clase B El bajo acoplamiento se refiere a una relacion en la cual un modulo interactua con otro via una simple y estable interfaz y no necesita conocer la implementacion interna del otro modulo ver encapsulamiento informatica Sistemas como CORBA o COM permiten objetos que se comunican con los demas sin tener que saber nada acerca de la implementacion de los otros objetos Estos dos sistemas incluso permiten la comunicacion entre objetos escritos en diferentes lenguajes Acoplamiento versus Cohesion EditarAcoplamiento y cohesion son terminos que ocurren juntos muy frecuentemente El acoplamiento se refiere a la interdependencia entre modulos mientras que la cohesion describe como se relacionan las funciones dentro de un modulo independiente Baja cohesion implica que un modulo dado ejecuta tareas que no estan muy relacionadas unas a otras y por tanto pueden crear problemas como que el modulo se vuelva muy grande Metricas EditarEl acoplamiento en ingenieria de software 4 describe una version de metricas asociadas con este concepto Para el acoplamiento de datos y flujo de control di numero de parametros de entrada ci numero de parametros de control do numero de parametros de salida co numero de parametros de control de salidaPara el acoplamiento global gd numero de variables globales usadas como data gc numero de variables globales usadas como controlPara acomplamiento de entorno w numero de modulos llamados fan out r numero de modulos llamantes bajo consideracion fan in A c o p l a m i e n t o C 1 1 d i 2 c i d o 2 c o g d 2 g c w r displaystyle mathrm Acoplamiento C 1 frac 1 d i 2 times c i d o 2 times c o g d 2 times g c w r Acoplamiento C hace que el valor sea mas grande cuanto mas acoplado este el modulo Este numero varia de aproximadamente 0 67 bajo acoplamiento a 1 0 altamente acoplado Por ejemplo si un modulo tiene un solo parametro de entrada y datos de salida C 1 1 1 0 1 0 0 0 1 0 1 1 3 0 67 displaystyle C 1 frac 1 1 0 1 0 0 0 1 0 1 frac 1 3 0 67 Si un modulo tiene 5 parametros de entrada y salida de datos el mismo numero de parametros de control y accede a 10 elementos de datos globales con un fan in de 3 y un fan out de salida de 4 C 1 1 5 2 5 5 2 5 10 0 3 4 0 98 displaystyle C 1 frac 1 5 2 times 5 5 2 times 5 10 0 3 4 0 98 Metrica CBO Editar En Programacion Orientada a Objetos la metrica CBO Coupling Between Object Classes obtiene un nivel de acoplamiento entre clases mediante el computo de ligas de una clase a otra Es decir el numero de clases ligadas a otra excluyendo constantes llamadas a APIS y herencia Vease tambien EditarCohesion informatica Ingenieria de softwareReferencias Editar ISO IEC IEEE 24765 2010 Systems and software engineering Vocabulary ISO IEC TR 19759 2005 Software Engineering Guide to the Software Engineering Body of Knowledge SWEBOK 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 Pressman Roger S Ph D 1982 Software Engineering A Practitioner s Approach Fourth Edition 0 07 052182 4Bibliografia utilizada EditarStevens W P Myers G J Constantine L L 1974 IBM Systems Journal 13 2 115 139 ed Structured design en ingles 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 ingles ISBN 0138544719 Acomplamiento y Cohesion Blog Disrupcion tecnologica Datos Q253448Obtenido de https es wikipedia org w index php title Acoplamiento informatica amp oldid 132789530, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos