Connascencia ( / k ə n eɪ s ən s / ) es una calidad del software métrica inventada por Meilir Page-Jones para permitir que el razonamiento sobre la complejidad causada por relaciones de dependencia en el diseño orientado a objetos muy parecido acoplamiento hizo por el diseño estructurado . En ingeniería de software , dos componentesson connascentes si un cambio en uno requiere que se modifique el otro para mantener la corrección general del sistema. Además de permitir la categorización de las relaciones de dependencia, connascence también proporciona un sistema para comparar diferentes tipos de dependencia. Estas comparaciones entre diseños potenciales a menudo pueden indicar formas de mejorar la calidad del software.
Fuerza
Se considera que una forma de connascencia es más fuerte si es más probable que requiera cambios compensatorios en los elementos connascentes. Cuanto más fuerte es la forma de connascencia, más difícil y costoso es cambiar los elementos de la relación.
La licenciatura
La aceptabilidad de la connascencia está relacionada con el grado de su aparición. La connascencia podría ser aceptable en un grado limitado pero inaceptable en gran medida. Por ejemplo, una función o método que toma dos argumentos generalmente se considera aceptable. Sin embargo, generalmente es inaceptable que las funciones o los métodos tomen diez argumentos. Los elementos con un alto grado de connascencia incurren en una mayor dificultad y costo de cambio que los elementos que tienen un grado más bajo.
Localidad
La localidad importa al analizar la connascencia. Las formas más fuertes de connascencia son aceptables si los elementos involucrados están estrechamente relacionados. Por ejemplo, muchos lenguajes utilizan argumentos posicionales al llamar a funciones o métodos. Esta connascencia de posición es aceptable debido a la cercanía de la persona que llama y la persona que llama. Pasar argumentos a un servicio web de manera posicional es inaceptable debido a la relativa falta de relación de las partes. La misma fuerza y grado de connascencia tendrá una mayor dificultad y costo de cambio, cuanto más distantes estén los elementos involucrados.
Tipos
Esta es una lista de algunos tipos de connascencia ordenados aproximadamente de formas débiles a fuertes.
Connascencias estáticas
Se dice que los connascenses son "estáticos" si se pueden encontrar examinando visualmente el código.
Connascencia de nombre (CoN)
La connascencia de nombre es cuando varios componentes deben estar de acuerdo con el nombre de una entidad. Los nombres de los métodos son un ejemplo de esta forma de connascencia: si el nombre de un método cambia, las personas que llaman a ese método deben cambiarse para usar el nuevo nombre.
Connascencia de tipo (CoT)
La connascencia de tipo es cuando múltiples componentes deben estar de acuerdo en el tipo de una entidad. En lenguajes de tipado estático, el tipo de argumentos de método es un ejemplo de esta forma de connascencia. Si un método cambia el tipo de su argumento de un número entero a una cadena, los llamadores de ese método deben cambiarse para pasar un argumento diferente al anterior.
Connascencia de significado (CoM) o connascencia de convención (CoC)
La connascencia de significado es cuando múltiples componentes deben estar de acuerdo en el significado de valores particulares. Devolver enteros 0 y 1 para representar falso y verdadero, respectivamente, es un ejemplo de esta forma de connascencia.
Connascencia de posición (CoP)
La connascencia de posición es cuando múltiples componentes deben estar de acuerdo en el orden de valores. Los parámetros posicionales en las llamadas a métodos son un ejemplo de esta forma de connascencia. Tanto el llamante como el destinatario deben estar de acuerdo con la semántica del primer, segundo, etc. parámetros.
Connascencia de algoritmo (CoA)
La connascencia del algoritmo es cuando varios componentes deben estar de acuerdo con un algoritmo en particular. Los códigos de autenticación de mensajes son un ejemplo de esta forma de connascencia. Ambos lados del intercambio deben implementar exactamente el mismo algoritmo hash o la autenticación fallará.
Connascencia dinámica
Se dice que los connascenses son "dinámicos" si solo se pueden descubrir en tiempo de ejecución.
Connascencia de ejecución (CoE)
La connascencia de ejecución es cuando el orden de ejecución de múltiples componentes es importante.
Connascencia de la sincronización (CoT)
La connascencia de la sincronización es cuando la sincronización de la ejecución de múltiples componentes es importante.
Connascencia de valores (CoV)
La connascencia de valores es cuando varios valores deben cambiar juntos.
Connascencia de identidad (CoI)
La connascencia de la identidad es cuando múltiples componentes deben hacer referencia a la entidad.
Reducir la connascencia
Reducir la connascencia reducirá el costo de cambio de un sistema de software. Una forma de reducir la connascencia es transformando formas fuertes de connascencia en formas más débiles. Por ejemplo, un método que toma varios argumentos podría cambiarse para usar parámetros con nombre . Esto cambiaría la connascencia de CoP a CoN . Reducir el grado y aumentar la localidad de los elementos involucrados constituyen otras formas de reducir la connascencia.
Referencias
- Gran teoría unificada del diseño de software, Jim Weirich
- Meilir Page-Jones, Comparación de técnicas mediante encapsulación y connascencia, Comunicaciones del ACM, Volumen 35, Número 9
- Lo que todo programador debe saber sobre el diseño orientado a objetos, Meilir Page-Jones, Dorset House Publishing, ISBN 0-932633-31-5
- Fundamentos del diseño orientado a objetos en UML, Meilir Page-Jones, Addison-Wesley Pub Co; ISBN 0-201-69946-X
- Manuel Riverio; 9 de agosto de 2018; Connascence: una mirada al diseño orientado a objetos en Java