Alta cohesión

Bajo acoplamiento


Manuel G. Ochoa
Cindy Vanessa Perez
Camilo A. Sampedro

Grado de Cohesión

El nivel en el que el contenido de la clase es coherente con respecto a las responsabilidades de esta.

¿Está bien enfocada la clase a su propósito?

Grado de acoplamiento

Nivel de dependencia de una clase con respecto a otras.
¿Qué tan susceptible es la clase a cambios hechos en otras clases?

Tipos de cohesión:

  • Cohesión coincidente.
  • Cohesión lógica.
  • Cohesión temporal.
  • Cohesión de procedimiento.
  • Cohesión de comunicación.
  • Cohesión de información.
  • Cohesión funcional.

Cohesión coincidente:

Sus tareas no tienen ningún tipo de relación entre sí.

Cohesión lógica:

Las tareas entran en una misma categoría, pero no se relacionan unas con otras.


Cohesión temporal:

Las tareas se relacionan al tener que ser ejecutadas al mismo tiempo.

Cohesión de procedimiento

Las tareas corresponden a una misma secuencia de acciones propia de la clase.

Cohesión de comportamiento

Las tareas tienen cohesión de procedimiento y además afectan a los mismos datos.


Cohesión de información

Las tareas tienen su propio punto de arranque, codificación independiente y trabajan sobre los mismos datos (ej: objetos)


Cohesión funcional

Se ejecutan llegando a un solo fin.

Tipos de acoplamiento

  • De contenido: Un módulo referencia directamente el contenido de otro.
  • Común: Dos o más módulos acceden y afectan a un mismo valor global.
  • De control: Un módulo envía a otro un elemento de control que determina la lógica de ejecución del mismo.

¿Para qué sirve?

Hace los módulos más fáciles de modificar posteriormente.

Permite a los módulos encargarse únicamente de sus responsabilidades, haciéndolas más sencillas.


Ejemplo alto acoplamiento.

class ProcesosImpuestos {
    float estimacion;
    float hacerEstimacion() {
        ValoresTasas vals = new ValoresTasas();
        estimacion = vals.estimacionVentas;//Debería haber sido llamado como un método. Por ejemplo obtenerEstimacionVentas("CO").
    }
}
class ValoresTasas {
    public float estimacionVentas;//Debería ser private.
    public float estimacionVentasAjustado;//Debería ser private.
    public float obtenerEstimacionVentas(String region) {
        estimacionVentas = new ProcesosImpuestos().hacerEstimacion(); //Se debería de hacer el cálculo directamente aquí.
        return estimacionVentasAjustado;
    }
}

Ejemplo baja cohesión

class InformePresupuesto {
    void conectarABaseDeDatos(){ }
    void generarInformeDePresupuesto() { }
    void guardarAArchivo() { }
    void mostrar() { }
}
class InformePresupuesto {
    Opciones obtenerOpcionesDeReporte() { }
    void generarInformeDePresupuesto(Opciones o) { }
}
 
class ConexionABaseDeDatos {
    ConexionDB obtenerRDBMS() { }
}
 
class MaterialImpresion {
    OpcionesImpresion obtenerOpcionesImpresion() { }
}
 
class ManejadorArchivo {
    OpcionesGuardado obtenerOpcionesDeGuardadoAArchivo() { }
}

Fuentes:

  • http://juan-garcia-carmona.blogspot.com/2012/09/grasp-a
    lta-cohesion-y-bajo-acoplamiento.html
  • http://kimeraweb.com.es/SCJP/tema17.php
  • http://cysingsoft.wordpress.com/2009/06/23/modularida
    d-cohesion-y-acoplamiento-carlos-fontela/
  • http://es.wikipedia.org/wiki/Dise%C3%B1o_estructurado
  • http://es.wikipedia.org/wiki/GRASP#Alta_cohesi.C3.B3n_y
    _bajo_acoplamiento

Alta cohesion, bajo acomplamiento

By Camilo Sampedro

Alta cohesion, bajo acomplamiento

  • 1,013