🙏Tight Coupling

Alto Acoplamiento 🤝:

  • Definición: Cuando dos clases o módulos están fuertemente interconectados, es decir, un cambio en uno podría requerir cambios en el otro.

  • Problemas:

    • Efecto dominó 🎳: Un cambio en un módulo afecta a muchos otros.

    • Difícil de reutilizar 🔄: No puedes usar un módulo sin arrastrar sus dependencias.

    • Pruebas complicadas 🧪: Probar un módulo aisladamente se vuelve un desafío.

Ejemplo:

public class Usuario
{
    public Perfil perfil; // Alto acoplamiento aquí
    public void ActualizarPerfil() 
    {
        perfil.ActualizarDatos();
    }
}

Aquí, Usuario está fuertemente acoplado a Perfil porque directamente manipula y depende de la clase Perfil.

Baja Cohesión 🌀:

  • Definición: Una clase intenta hacer demasiado, manejando múltiples responsabilidades que no están estrechamente relacionadas.

  • Problemas:

    • Difícil de mantener 🛠️: Cambios en una responsabilidad pueden afectar otras.

    • Complejidad incrementada 🤯: Más difícil de entender lo que hace la clase.

Ejemplo:

public class Administrador
{
    public void CrearUsuario() { /*...*/ }
    public void EnviarCorreo() { /*...*/ }
    public void GenerarReporte() { /*...*/ }
}

La clase Administrador tiene baja cohesión porque maneja responsabilidades variadas que podrían estar mejor separadas en distintas clases.

Lo Ideal: Bajo Acoplamiento 🛠️ y Alta Cohesión ✨

  • Bajo Acoplamiento 🛠️:

    • Las clases o módulos son independientes y la interacción entre ellos es mínima.

    • Facilita las pruebas unitarias 🧪, el mantenimiento 🛠️, y la reutilización 🔄.

  • Alta Cohesión ✨:

    • Una clase se enfoca en una única responsabilidad o área de interés.

    • Hace que el código sea más comprensible 📖, mantenible 🛠️, y escalable 📈.

    // Bajo acoplamiento
    public interface IPerfil
    {
        void ActualizarDatos();
    }
    
    public class Perfil : IPerfil
    {
        public void ActualizarDatos() { /*...*/ }
    }
    
    public class Usuario
    {
        private IPerfil perfil;
        public Usuario(IPerfil perfil)
        {
            this.perfil = perfil;
        }
    
        public void ActualizarPerfil() 
        {
            perfil.ActualizarDatos();
        }
    }
    
    // Alta cohesión
    public class GestorUsuarios
    {
        public void CrearUsuario() { /*...*/ }
    }
    
    public class ServicioCorreo
    {
        public void EnviarCorreo() { /*...*/ }
    }
    
    public class GeneradorReportes
    {
        public void GenerarReporte() { /*...*/ }
    }

Aquí, la separación de responsabilidades mejora la cohesión y el uso de interfaces reduce el acoplamiento, facilitando un diseño más limpio y mantenible.

Última actualización