Você está na página 1de 5

Acoplamento

 É o grau de dependência entre dois módulos.


 Objetivo: minimizar o acoplamento
 tornar os módulos tão independentes quanto possível
grandes sistemas devem ser segmentados em  Alteração em um módulo  mínimo de risco de se ter que alterar outros

módulos simples
 O acoplamento baixo pode ser obtido de três maneiras:
 A qualidade do projeto será avaliada pelo  Eliminando-se comunicação desnecessária.
grau de modularização do sistema.  Reduzindo-se o n°° de comunicações necessárias.
 Enfraquecendo a dependência das relações necessárias.
 Critérios para medir modularização:
 Acoplamento
 Coesão
 Outros fan-in, fan-out, etc
1 2

Tipos de acoplamento Acoplamento por dados


 Dois módulos são acoplados por dados se eles se
comunicam por parâmetros
Acoplamento Qualidade Estrutura de software

Dado Boa Flexível  parâmetro  um único dado ou uma tabela homogênea


Imagem
Controle
Comum
 A ligação por dados é inevitável e é boa desde que
Conteúdo Ruim Rígida mantida em taxas mínimas
Evitar dados migrantes
 Grupo de informações que anda pelo sistema

 Indesejável e sem sentido para a maioria dos módulos pelos quais


ele passa

3 4

Acoplamento por dados


Acoplamento por imagem
Exemplo
Calcular a conta  Dois módulos são ligados por imagem se eles se
total do cliente
referem à mesma estrutura de dados
Quantidade emprestada
 Problemas
Taxa de juros
Taxa de reembolso  o módulo recebe mais dados do que necessita.
prazo
 Qualquer alteração na estrutura afetará todos os módulos
que a utilizam

Calcular  Solução
reembolso do
empréstimo  passar apenas os dados necessários ao módulo

5 6

1
Acoplamento por imagem Acoplamento por imagem
Exemplo Solução mais adequada
Gerar conta de Registro de aluguel de carro = no. da
aluguel de carro licença + clube de serviço + tipo de combustível + Gerar conta de
Registro de tipo de carro + Km rodados + dias de uso aluguel de carro
aluguel de tipo de carro
carro Taxa de Registro de
clube de serviços Taxa de tipo de carro
aluguel aluguel de carro
consumo aluguel
dias usados Km rodado
Calcular taxa básica consumo
Calcular consumo Calcular taxa básica
de aluguel Calcular consumo
de combustível de aluguel
de combustível
•Calcular taxa básica de aluguel  requer: clube de serviço+tipo de carro+dias de uso Gerar conta de aluguel de carro X Calcular taxa básica de aluguel acoplamento
•Calcular consumo de combustível  requer: tipo de carro + Km rodados Gerar conta de aluguel de carro X Calcular consumo de combustível por dados

Problema  Alterações nos outros campos  alterações nesses módulos

7 8

Acoplamento por controle


 Dois módulos são acoplados por controle se um passa Acoplamento por controle
para o outro dados destinados a controlar a lógica interna Uma forma de melhorar a qualidade no exemplo1
Exemplo1: Juntar registros Módulo: Juntar registros de clientes
Juntar registros Módulo: Juntar registros de clientes de clientes Início
Início Como
de clientes Obter como_proceder
Obter como_proceder proceder
Caso como_proceder
Como Registro de transação Executar Controlar E/S do sistema Registro de “1”: Executar Obter registro mestre
proceder Registro
Como enviando como_proceder transação recebendo registro mestre
recebendo registro mestre e/ou mestre
proceder Registro mestre “2”: Executar Obter registro de transação
registro de transação Obter registro Obter registro de recebendo registro de transação
Obter
Fim “3”: begin
Obter Controlar E/S do opção mestre transação
opção sistema Executar Obter registro mestre
recebendo registro mestre
Executar Obter registro de transação
Como proceder: 1  obter próximo registro mestre recebendo registro de transação
2  obter próximo registro de transação fim
3  obter ambos Fim

9 10

Acoplamento comum
Acoplamento por conteúdo
 Dois módulos possuem acoplamento comum se eles se
referem à mesma área de dados (EX: à mesma tabela)  Dois módulos apresentam acoplamento por conteúdo se um
faz referência ao interior do outro.
tabela
Exemplo: se um módulo desvia a seqüência de instruções
Produzir tabela ordenada para dentro de outro ou se um módulo altera um comando
Tabela do outro
Tabela ordenada
Ordenar tabela ordenada Exibir tabela
 Tal acoplamento torna o conceito de caixa preta, sem
Acoplamentos: sentido.
Produzir tabela ordenada X Ordenar tabela  acoplamento comum
Produzir tabela ordenada X Exibir tabela  acoplamento por imagem  Em geral isso só pode ser implementado em linguagem de
Ordenar tabela X Exibir tabela  acoplamento por imagem baixo nível.

11 12

2
Determinação do nível de acoplamento Exercício
Para fazer agora:
 Quando dois módulos estão acoplados de mais
de uma maneira, o acoplamento entre eles é  Exerc 1 – Pg 147
definido pelo pior tipo que apresentam.  Exerc2 – Pg 147
Exemplo: Se dois módulos estão acoplados por imagem e
por conteúdo, deve-se classificar o acoplamento como
sendo por conteúdo.

13 14

Coesão funcional
Coesão
 A coesão de um módulo é o grau de relacionamento  Um módulo com coesão funcional contém
entre suas atividades.
somente elementos que contribuem para a
 Quanto maior o grau de coesão melhor
execução de uma, e apenas uma, tarefa
relacionada com o sistema.
 A coesão e o acoplamento estão inter relacionados, pois a
coesão de um módulo geralmente determina o quanto ele
será acoplado a outros módulos.
Exemplos: Calcular seno
 Boa coesão é uma forma de minimizar acoplamento
Ler registro de cliente
Calcular salário líquido

15 16

Coesão seqüencial
Coesão de comunicação
 Um módulo tem coesão seqüencial se suas atividades
estão relacionadas de forma que os dados de saída de  Um módulo tem coesão de comunicação quando suas
uma atividade servem como dados de entrada para a atividades estão relacionadas pelo uso da mesma
próxima entrada ou da mesma saída
Exemplo: Formatar e consistir registro tem coesão
seqüencial
Exemplo: Manter catálogo tem coesão de
Registro ok registro
comunicação
Formatar e consistir registro Inf livro
Registro Registro ok
registro Registro Manter catálogo
formatado formatado Inf livro Inf livro
Inf livro
Formatar registro Consistir registro
Inf livro
Módulos com esse tipo de coesão são de fácil manutenção, mas não são
tão reutilizáveis Cadastrar Gerar ficha de Cadastrar autor Gerar identificação
livro catálogo do exemplar

17 18

3
Coesão de procedimento
 As atividades de um módulo com coesão de procedimento Coesão temporal
são diferentes e possivelmente não relacionadas, mas com
o controle fluindo de uma para outra  Um módulo com coesão temporal tem suas
Ex: Coesão do módulo Gerar nova tabela
atividades relacionadas pelo tempo.
 Tem alto acoplamento com vários outros módulos
Nova tabela
Tabela atual
editada
 Módulo de difícil reutilização
Gerar nova tabela Exemplos clássicos de coesão temporal são módulos de inicialização.
Nova tabela
Tabela atual Nova editada
Nova Inf. atualizações
tabela tabela
Gravar tabela atual Obter nova tabela Formatar nova tabela
Controlar inicializações
Nomes das variáveis
Nomes dos mensagens
Devolve resultados pouco relacionados com os dados de entrada.
arquivos
 Esse nível de coesão cruza a fronteira dos módulos de fácil manutenção. Inicializar variáveis Emitir mensagens iniciais
Abrir arquivos

19 20

Coesão lógica
 Um módulo tem coesão lógica se o relacionamento entre suas Coesão coincidente
atividades é ter a mesma categoria geral, onde as atividades
a serem executadas são selecionadas fora do módulo.  Um módulo coincidentemente coeso é aquele
Exemplo: O módulo imprimir relatório tem coesão lógica cujas atividades não tem relação significativa
Relatório=[rel vendas | rel compras | balanço] entre si.
 Ele é similar a um módulo logicamente coeso pois suas atividades não
Imprimir relatório estão relacionadas por fluxo de dados ou fluxo de controle, no
entanto, suas atividades não são da mesma categoria.

Imprimir vendas Imprimir compras Imprimir balanço


As atividades possuem semelhanças e diferenças, mas são forçadas a
compartilhar da mesma interface. Serviços diversos

cada parâmetro depende da atividade que será utilizada; e para


algumas atividades certos parâmetros podem ser deixados em branco.
Gravar sugestão Fazer back-up Fazer conexão filial Imprimir fatura
21 22

O grau de coesão de um módulo


“ O módulo pode ser considerado como executando O grau de coesão de um módulo
apenas uma função relacionada ao problema ? “
 Todas as atividades de um módulo têm mais de um nível
Sim Não de coesão  nível mais forte de coesão
O que relaciona as atividades do módulo?

Dados nenhum  atividades tem diferentes níveis de coesão  nível mais


fluxo de deles fraco de coesão
controle
A seqüência é
Importante? A seqüência é As atividades estão na  EX: módulo A com atividades: a1, a2, a3 e a4
importante? mesma categoria geral?
Sim Não Sim Não Sim Não  se todas têm níveis de coesão seqüencial e temporal
módulo A tem coesão seqüencial
Funcional Seqüencial Comunicacional Procedural Temporal Lógica Coincidente  se a1 e a2 tiverem nível seqüencial e a3 e a4 nível temporal
melhor Tipos de coesão pior  módulo A tem coesão temporal.

23 24

4
Fan-out da segmentação
Outros critérios de qualidade O fan-out de um módulo é o número de subordinados imediatos
daquele módulo
 Fan-out da segmentação Sistema de controle acadêmico
serviço
 Fan-in da segmentação
Obter Emitir lista Classificar Atualizar nota Controlar
serviço da classe alunos e freq matrícula

Sistema de controle acadêmico

Opção E

Controlar Controlar serviços professor Outro nível de


Obter opção
de entrada matrícula controle
Opção S

Emitir lista Atualizar Classificar


Obter opção
alunos
25 serviço prof da classe nota e freq 26

Fan-in da segmentação
O fan-in de um módulo é o número de superiores imediatos Exercícios
que ele possui
Para fazer agora:
A  Exerc EXTRA

B C a

a
a
Gravar reg-
cliente

Regras que restringem candidatos a alto fan-in


 Ter boa coesão (funcional ou pelo menos de comunicação ou seqüencial)
 Cada interface para o módulo deve ter o mesmo número e tipo de parâmetros.
27 28