Coesão A coesão é a medida da força relativa de um módulo. Quanto maior for a coesão, menor será o nível de acoplamento de um módulo. A coesão pode se definida como uma medida qualitativa que apresenta os seguintes tipos:
Acidental (pior): partes de um módulo ou classes são agrupados de forma arbitrária (aleatória), onde as partes não possuem relacionamento relacionado.
Lógica: partes de um módulo ou classes são agrupados por agrupamento lógico (fazem a mesma coisa), mesmo se estes forem diferentes por natureza (agrupamento de rotinas E/S).
Temporal: partes de um módulo ou classes são agrupados quando estes forem processados – partes são processadas em um tempo específico na execução do programa (Ex. uma função que será chamada após capturar uma exceção que fecha o arquivo, criar um log de erros e notifica o usuário).
Procedural: partes de um módulo ou classes são agrupados porque seguem uma sequência específica de execução (Ex. uma função que verifica as permissões do arquivo e após disto abre o mesmo).
Comunicação: partes de um módulo ou classes sáo agrupados porque operam sobre os mesmos dados (Ex. módulo que opera sobre o mesmo registro de informações).
Sequencial: partes de um módulo ou classes são agrupados porque a saída de uma parte é a entrada de outra parte, similar à uma linha de montagem (Ex: função que lêe os dados de um arquivo e processa os dados). Sequential cohesion Funcional (melhor): partes de um módulo ou classes são agrupados porque todos contribuem a uma única tarefa definida do módulo.
Gabarito: D
A coesão é uma propriedade atribuída às características internas de um módulo, classe ou subsistema. As responsabilidades ou funcionalidades que fazem parte de um componente de software são coesos quando possuem um relacionamento direto entre si e entre o propósito do componente. Assim, uma classe com alta coesão possui um propósito claro e bem definido e seus métodos são claramente relacionados a esse propósito. Uma classe com baixa coesão acaba por misturar funcionalidades pouco relacionadas e há significativa diversidade de assuntos sendo trabalhados.
Existe uma divisão dos tipos de coesão que podem ser encontradas:
- Coincidental: há nenhuma ou pouca relação entre os elementos parte de um componente;
- Lógica: há métodos que realizam diversas operações diferentes, selecionadas através de um parâmetro (como um switch/case);
- Temporal: há um agrupamento de funcionalidades pouco relacionadas mas que devem ser executadas no mesmo momento;
- Procedimental: os elementos de um componente de software são agrupados de acordo com a familiaridade de algoritmos ou procedimentos;
- Comunicacional: as operações do componente afetam o mesmo conjunto de dados e/ou produzem um mesmo tipo de saída;
- Sequencial: as operações são organizadas sequencialmente, com a saída de uma servindo para a entrada de outra;
- Funcional: todas as operações do componente podem ser descritas por uma única ideia ou conceito.
Essa lista está partindo da pior forma de coesão (Coincidente) para a melhor (Funcional). Comento abaixo cada uma das alternativas e seus tipos.
A) ERRADO. A sequência apresentada não segue a ordem da pior para a melhor e sim da melhor para a pior.
B) ERRADO. Não há a ordem crescente de qualidade dos tipos listados.
C) ERRADO. O tipo lógico é pior do que o temporal.
D) CERTO. Essa é uma sequência crescente na qualidade de coesão.
E) ERRADO. O tipo lógico é o pior entre os listados.