¿Qué son la cohesión y el acoplamiento en programación?
sobes.tech AI
Respuesta de la IA
La cohesión (Cohesion) es una medida de qué tan estrechamente están relacionados los elementos dentro de un módulo (clase, función). Una alta cohesión significa que los elementos del módulo están enfocados en realizar una sola tarea o concepto. Un módulo bien diseñado tiene una alta cohesión.
Ejemplos de niveles de cohesión (de baja a alta):
- Coincidental (Coincidental): Los elementos están relacionados por azar, sin una conexión lógica.
- Lógica (Logical): Los elementos realizan un conjunto de acciones relacionadas lógicamente, pero la selección se realiza mediante código externo.
- Temporal (Temporal): Los elementos están relacionados por ejecutarse en el mismo tiempo.
- Procedimental (Procedural): Los elementos siguen un procedimiento de ejecución.
- De comunicación (Communicational): Los elementos trabajan con los mismos datos.
- Secuencial (Sequential): La salida de un elemento es la entrada de otro.
- Funcional (Functional): Todos los elementos contribuyen a la realización de una función claramente definida.
El acoplamiento (Coupling) es una medida de dependencia entre diferentes módulos. Un bajo acoplamiento significa que los módulos son relativamente independientes entre sí. Reducir el acoplamiento hace que el sistema sea más flexible, mantenible y testeable.
Ejemplos de niveles de acoplamiento (de alto a bajo):
- Por contenido (Content): Un módulo accede directamente a los datos internos o implementación de otro módulo.
- Común (Common): Los módulos usan un área de datos global compartida.
- Por control (Control): Un módulo pasa una bandera de control que determina el comportamiento de otro módulo.
- Por estampado (Stamp): Transferencia de datos compuestos (objetos, estructuras), pero el módulo usa solo una parte de ellos.
- Por datos (Data): Transferencia de datos simples como parámetros.
- Por mensajes (Message): Los módulos intercambian mensajes (por ejemplo, a través de eventos, interfaces). Es la forma más débil de acoplamiento.
El objetivo de un buen diseño: alta cohesión (dentro de los módulos) y bajo acoplamiento (entre módulos).
<?php
// Ejemplo de alta cohesión (Cohesión funcional)
// Esta clase está enfocada solo en el manejo de usuarios
class UserManager {
private array $users = [];
public function addUser(string $name): void {
$this->users[] = $name;
}
public function getUsers(): array {
return $this->users;
}
public function deleteUser(string $name): void {
$this->users = array_filter($this->users, fn($user) => $user !== $name);
}
}
// Ejemplo de bajo acoplamiento (Acoplamiento de datos)
// 'processOrder' depende solo de los datos pasados ($orderId, $amount)
class OrderProcessor {
public function processOrder(int $orderId, float $amount): bool {
// Lógica de procesamiento del pedido...
// No depende directamente de la implementación de otras clases,
// solo de los datos de entrada.
echo "Procesando pedido ID $orderId con monto $amount\n";
return true;
}
}
// Ejemplo donde UserManager y OrderProcessor no tienen una dependencia fuerte entre sí.
// Pueden ser utilizados de manera independiente o juntos, pero sus cambios internos
// no afectan mucho uno al otro.
?>