quinta-feira, 25 de agosto de 2011

Coesão

Coesão mede a intensidade da associação funcional dos elementos de um módulo. Deseja-se módulos altamente coesos, cujos elementos são relacionados um com os outros.

Por outro lado, os elementos de um módulo não devem ser fortemente relacionados com os elementos de outros módulos, pois isto levaria a um forte acoplamento entre eles. Ter certeza de que todos os módulos tem boa coesão é a melhor forma de minimizar o acoplamento.

Os tipos de Coesão são:
- funcional;
- sequencial;
- comunicacional;
- procedural;
- temporal;
- lógica;
- coincidental.
Coesão Funcional

Um módulo apresenta Coesão Funcional quando suas funções internas contribuem para a execução de uma e apenas uma tarefa relacionada ao problema.
A figura a seguir ilustra módulos com Coesão Funcional.
Exemplo de Coesão Funcional

Coesão Sequencial
Um módulo apresenta Coesão Sequencial quando suas funções internas estão envolvidas em atividades de tal forma, que os dados de saída de uma atividade sirvam como dados de entrada para a próxima.

Este fluxo estabelece uma sequência de execução das funções, no entanto, não se pode caracterizar o conjunto delas como uma única tarefa.

A figura a seguir ilustra um módulo com Coesão Sequencial. No exemplo, verifica-se que Exibir Consulta executa duas atividades bem distintas e que poderiam ser representadas pelos módulos:
- obter registro;
- exibir dados.
Exemplo de Coesão Sequencial

Um módulo com Coesão Sequencial caracteriza-se por ser de fácil manutenção porém de baixa reutilização, pois contém atividades que são utilizadas juntas.
Coesão Comunicacional

Um módulo possui Coesão Comunicacional quando suas funções internas estão relacionadas por utilizarem as mesmas informações, ou seja, utilizam a mesma entrada ou mesma saída. Nesta situação o módulo fornece mais informações que o necessário.

A figura a seguir ilustra um módulo com Coesão Comunicacional. No exemplo Obter Detalhes Cliente recebe um mesmo parâmetro de entrada Num-Conta e executa duas atividades distintas que poderiam ser representadas pelos módulos:
- obter nome cliente;
- obter resultado empréstimo.
Exemplo de Coesão Comunicacional

Módulos com Coesão Comunicacional e Sequencial são semelhantes, pois ambos contém atividades organizadas em torno dos dados do problema original.

A principal diferença entre eles é que um módulo sequencialmente coeso opera como uma linha de montagem onde suas atividades são executadas em uma ordem específica. Já em um módulo com coesão comunicacional a ordem de execução não é importante.

Coesão Procedural

Um módulo possui Coesão Procedural quando suas funções internas executam atividades diferentes e não correlacionadas, exceto por serem executadas em uma mesma ordem, nas quais o controle flui (e não os dados) de uma atividade para outra.

É comum em um módulo com Coesão Procedural que os dados de entrada e saída tenham pouca relação. É típico também que tais módulos devolvam resultados parciais, tais como: flags, chaves, etc.
A figura a seguir ilustra o módulo Tratar Saque isolado (parte esquerda da figura) com Coesão Procedural, e sua fatoração para módulos funcionalmente coesos na parte mais a direita da figura.
Exemplo de Coesão Procedural

Coesão Temporal

Um módulo possui Coesão Temporal quando suas funções internas executam atividades que estão relacionadas apenas com o tempo (as atividades não estão relacionadas entre si). A ordem de execução de atividades é mais importante em módulos procedurais do que em módulos temporais.

A figura a seguir ilustra um módulo com Coesão Temporal.
Exemplo de Coesão Temporal

Coesão Lógica

Um módulo possui Coesão Lógica quando suas funções internas contribuem para atividades da mesma categoria geral, onde a atividade é selecionada fora do módulo.

Desta forma, módulos logicamente coesos apresentam uma interface descaracterizada.

A figura a seguir ilustra um módulo com Coesão Lógica.
Exemplo de Coesão Lógica
Coesão Coincidental

Um módulo possui Coesão Coincidental quando suas funções não possuem nenhuma correlação entre si, não há uma ordem específica de execução, nem sempre todas as funções são ativadas e a ativação das funções é decidida fora do módulo.
A figura a seguir ilustra uma Coesão Coincidental.
Exemplo de Coesão Coincidental

Determinação do Tipo de Coesão

A figura a seguir mostra uma estratégia para identificar o tipo de Coesão de um determinado módulo.
Estratégia para identificação dos tipos de Coesão
Comparando os tipos de Coesão, podemos classificá-los em ordem, como descrito abaixo (do melhor para o pior tipo):
1º. funcional;
2º. sequencial;
3º. comunicacional;
4º. procedural;
5º. temporal;
6º. lógica;
7º. coincidental.

1 comentários:

Postar um comentário