🙏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