wpjr2’s Weblog

Artigos e tutoriais úteis

Coesão e Acoplamento

Posted by wpjr2 em abril 22, 2008

Em toda atividade de modelagem de um sistema orientado por objetos, as propriedades de coesão e acoplamento devem ser consideradas. Mas o que significa cada uma destas? Segue abaixo um resumo que descreve cada uma destas características e sua importância na modelagem de sistemas de software orientados por objetos.

Acoplamento

Para a computação, acoplamento é o nível de inter-dependência entre os módulos de um software. O acoplamento está diretamente relacionado com a coesão, pois quanto maior for o acoplamento menor será o nível de coesão. Isto se deve ao fato de que, quando um módulo ou classe possui uma dependência muito forte por outro módulo ou classe, ele não é “forte” o suficiente para desepenhar suas tarefas de forma individual, dificultando, por exemplo, alterações no código da sua dependência (módulo ou classe de serviço).

Tipos de Acoplamento:

Conteúdo (alto): quando um módulo ou classe altera ou depende de uma funcionalidade interna de outro módulo (Ex. acessando dados locais de um módulo). Uma alteração no modulo de serviço acarretará alterações no módulo dependente.

Comum: quando dois módulos ou classes compartilham os mesmos dados globais (Ex. uma variável global). Mudanças nos recursos compiartilhados implicará mudanças em todos os módulos que os utilizam.

Externo: quando dois módulos ou classes compartilham um formato de dados externo, protoloco de comunicação ou interface de dispositivo (Ex XML, HTTP).

Controle: quando um módulo ou classe controla a lógica de outro, passando informações de que operações executar.

Selo (dados estruturados): quando módulos ou classes compartilham uma estrutura de dados composta e utilizam apenas uma parte da mesma, possivelmente partes diferentes.

Dados: quando módulos ou classes compartilham dados via parâmetros. Cada parâmetro é uma parte elementar, send esta o unico dado compartilhado entre módulos ou classes (Ex. passando um inteiro para uma função que calcula aus raiz quadrada).

Mensagem (baixa): provê a menor acoplagem onde módulos ou classes não possuem dependências entre si. Ao invés, utilizam uma interface pública para a troca de mensagens ou eventos.

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.

Conclusão

Ambas características são utilizadas para a medição qualitativa de um software orientado por objetos. A grande meta na modelagem de um sistema orientado a objetos é prover uma alta coesão e um baixo acoplamento, garantindo assim um software de boa qualidade e facilitando assim mudanças em suas estruturas de dados e de funcionalidades internas.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: