El patrón alta cohesión se aplica en conjunción con el patrón bajo acoplamiento (en realidad son patrones complementarios que siempre deberían aplicarse conjuntamente). El patrón alta cohesión nos indica que los datos y responsabilidades de una entidad están fuertemente ligados a la misma, en un sentido lógico. En otras palabras, la información que maneja una entidad software debe estar fuertemente ligada a lo que la entidad software representa lógicamente. Pongamos un ejemplo para aclarar el concepto:

Imaginemos que vamos a desarrollar la clase Persona y nos planteamos determinar cuáles son las responsabilidades y la información que debemos asignarle. En este momento debemos razonar de la siguiente forma con tal de aplicar el patrón alta cohesión: la información que contenga la clase Persona debe estar relacionada con la entidad que se intenta representar, es decir, una clase Persona (entidad lógica) sólo debe contener información y responsabilidades referentes a una Persona (física).Así pues, podríamos asignar como atributo de la clase Persona los atributos siguientes:

– Nombre

– Apellidos

– Año de Nacimiento

– Peso

– Estatura

– Estado civil

– Color del cabello

– Color de ojos

– Sexo

Pero no podemos asignar estos otros, puesto que es información no referente a una Persona:

– Código postal

– Demarcación

– Regalo

– Asignaturas

– Clase

Asimismo, a la hora de asignar las responsabilidades de la clase Persona, deberíamos plantearnos la misma pregunta: ¿es responsabilidad de esta clase?

Otro ejemplo:

La clase Persona puede tener las siguientes responsabilidades (o métodos):

– EstablecerNombre

– EstablecerApellidos

– Edad

– AsignarPareja

Pero no sería lógico que tuviera una de las siguientes:

– EstablecerCodigoPostal

– CalcularNomina

– AsignarClase

-EnviarRegalo

Si cumplimos este pequeño patrón, obtendremos clases que son fácilmente mantenibles y reutilizables lo cual hará nuestro código y nuestra vida más simples.

Resumiendo: Una entidad debe tener relacionados aquellos datos y responsabilidades que tengan lógica en la vida real. Para saber si un dato o responsabilidad debe ser asignada a una clase, además de consultar patrones tales como Experto en Información, Patrón Creador, etc.. podríamos intentar relacionar el atributo que estamos intentando asignar con el nombre de la clase. Por ejemplo: la relación entre Persona y Demarcación no parece demasiado obvia. Sin embargo la relación entre Jugador y Demarcación ya nos resulta más lógica (Jugador puede ser una clase que deriva de Persona, con lo que ya lo tendríamos todo relacionado).

Y eso es todo! Nos vemos pronto por aquí!🙂