Buscar

INF1301_Aula14_PrincipiosModularidade_Cont_2012_2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 9 páginas

Prévia do material em texto

1
Aula 14
Acoplamento e Coesão de Módulos
Estrutura de Funções
Francisco Dantas e Alessandro Garcia
LES/DI/PUC-Rio
Outubro 2012
Slides adaptados de: Staa, A.v. Notas de Aula em Programacao 
Modular; 2008.
Ago 2009 2 /26Alessandro Garcia © LES - DI/PUC-Rio
Especificação
• Objetivos dessa aula
– Estudar outros conceitos e princípios básicos de programação 
modular
• Referência básica:
– Capítulo 5 do livro texto
• Seções 5.2.1 a 5.2.5
• Slides adaptados de: Staa, A.v. Notas de Aula em 
Programacao Modular; 2008.
2
Ago 2009 3 /26Alessandro Garcia © LES - DI/PUC-Rio
Sumário
• Acoplamento
• Coesão
– Tipos de coesão (Coincidental, Lógica, Funcional, etc.)
Exemplos de Princípios de Modularidade...
• ... Discutidos até aqui:
– Cada módulo deveria implementar uma única abstração
– Separação de interface e implementação
– Definição explícita da sintaxe e semântica da interface
– Encapsulamento
– Módulos como tipos abstratos de dados
– Garantir corretude sintática e semântica em conexões entre 
funções/módulos
• nomes apropriados para funções e parâmetros
• o código do módulo cliente e/ou servidor deve checar tal corretude 
(garantia de contrato)
Ago 2009 4 /26Alessandro Garcia © LES - DI/PUC-Rio
3
5 /32Alessandro Garcia © LES/DI/PUC-Rio
Outros Princípios de Modularidade 
• Atributo: Acoplamento
– grau de interdependência entre módulos:
• entre um módulo cliente e um módulo servidor
• entre um módulo cliente e todos os outros módulos
• entre todos os módulos de um sistema todo
– princípio: minimizar acoplamento
• Atributo: Coesão
– grau de dependência entre elementos internos de um módulo:
• entre duas funções de um módulo
• entre dois blocos de código de uma função
• entre itens de uma interface
• etc....
– princípio: maximizar coesão
Set 2009 6 /32Alessandro Garcia © LES/DI/PUC-Rio
Acoplamento
• Uma forma básica de medir acoplamento é contabilizando o 
número de conectores estabelecidos em uma interface
– conectores
• declarações (protótipos) de funções, declarações de estruturas na 
interface, variável global, etc... 
– uma medida indireta da dificuldade de assegurar a corretude
• Por que esta estratégia não é uma análise tão precisa ou 
confiável do acoplamento real de um módulo?
4
Set 2009 7 /32Alessandro Garcia © LES/DI/PUC-Rio
Acoplamento
• Uma forma básica de medir acoplamento é contabilizando o 
número de conectores estabelecidos em uma interface
– conectores
• declarações (protótipos) de funções, declarações de estruturas na 
interface, variável global, etc... 
– uma medida indireta da dificuldade de assegurar a corretude
• Também é possível contabilizar cada instância de 
relacionamento (conexão)
– no caso de um módulo é um #include
– no caso de funções é uma chamada
– no caso de variáveis globais é um acesso a uma dessas variáveis
8 /32Alessandro Garcia © LES/DI/PUC-Rio
Influência de acoplamento no...
• O risco de erro e a dificuldade de assegurar corretude está 
relacionada com o esforço humano para assegurar a 
corretude
– será menos difícil quanto mais puder ser verificado pelo 
compilador ou por alguma ferramenta de verificação
– será mais difícil quanto mais depender da ação humana
– Exemplo, na função
double * OpMatriz( int dimLinhas, int dimColunas, 
int tamLinhas, int tamColunas, double * pMatriz )
• em uma chamada qualquer permutação dos quatro primeiros 
argumentos é válida do ponto de vista do compilador
• Qual a influência de acoplamento em manutenibilidade?
5
9 /32Alessandro Garcia © LES/DI/PUC-Rio
Influência de acoplamento no...
• O risco de erro e a dificuldade de assegurar corretude está 
relacionada com o esforço humano para assegurar a 
corretude
– será menos difícil quanto mais puder ser verificado pelo 
compilador ou por alguma ferramenta de verificação
– será mais difícil quanto mais depender da ação humana
– Exemplo, na função
double * OpMatriz( int dimLinhas, int dimColunas, 
int tamLinhas, int tamColunas, double * pMatriz )
• em uma chamada qualquer permutação dos quatro primeiros 
argumentos é válida do ponto de vista do compilador
• A manutenibilidade: qualquer mudança na implementação 
do servidor, afeta os módulos clientes
10 /32Alessandro Garcia © LES/DI/PUC-Rio
Outros Princípios de Modularidade 
• Atributo: Acoplamento
– grau de interdependência entre módulos:
• entre um módulo cliente e um módulo servidor
• entre um módulo cliente e todos os outros módulos
• entre todos os módulos de um sistema todo
– princípio: minimizar acoplamento
• Atributo: Coesão
– grau de dependência entre elementos internos de um módulo:
• entre todas funções de um módulo
• entre duas funções de um módulo
– princípio: maximizar coesão
6
11 /32Alessandro Garcia © LES/DI/PUC-Rio
Coesão
• ... relacionamento entre funções via chamadas entre elas ou 
acesso compartilhado a variáveis comuns do módulo
Módulo A Módulo B
Função
Chamada
Módulo C Módulo D
Coesão baixa Coesão alta
12 /32Alessandro Garcia © LES/DI/PUC-Rio
Coesão
• A coesão avalia o inter-relacionamento entre os elementos 
que constituem um módulo
– quanto mais forte for o inter-relacionamento, melhor será a 
coesão
– (co)incidental os elementos estão juntos somente por 
conveniência ou falta de cuidado do programador
– lógica os elementos possuem funcionalidades correlatas mas tais 
funcionalidades não operam sobre o mesmo conjunto de dados
– funcional os elementos definem uma única função ou módulo
que implementa exatamente um conceito (relação semântica)
• abstração de dados os elementos definem uma único TAD
7
13 /32Alessandro Garcia © LES/DI/PUC-Rio
Coesão
• A coesão avalia o inter-relacionamento entre os elementos 
que constituem um módulo
– quanto mais forte for o inter-relacionamento, melhor será a 
coesão
– (co)incidental os elementos estão juntos somente por 
conveniência ou falta de cuidado do programador
– lógica os elementos possuem funcionalidades correlatas mas tais 
funcionalidades não operam sobre o mesmo conjunto de dados
– funcional os elementos definem uma única função ou módulo
que implementa exatamente um conceito (relação semântica)
• abstração de dados os elementos definem uma único TAD
14 /32Alessandro Garcia © LES/DI/PUC-Rio
Coesão Coincidental
• Um módulo coincidentemente coeso é aquele cujos elementos 
contribuem para atividades sem qualquer relação significativa 
entre si
• Este tipo de coesão ocorre quando os procedimentos internos dos 
módulos estão dispostos de tal forma que não existe nenhuma 
ligação lógica entre eles
• Exemplo: Módulo X incorpora as seguintes funções...
– arrumar carro
– cozinhar bolo
– levar cachorro para passear
– preencher ficha de inscrição para o curso
– tomar uma cerveja
– levantar da cama
– reunir todo mundo
– ir ao cinema
8
Coesão Coincidental
Ago 2009 15 /26Alessandro Garcia © LES - DI/PUC-Rio
Modulo XPTO {
int AcharPadrao (char * texto, char * padrão) {
// ...
}
int ComputarMedia (int i1, int i2) {
// ...
}
void IniciarSistema (char * nome) {
// ...
}
void AbreArquivos (char * nome) {
// ...
}
}
16 /32Alessandro Garcia © LES/DI/PUC-Rio
Coesão Lógica
• Um módulo logicamente coeso é aquele cujos elementos 
contribuem para atividades da mesma categoria geral
– atividade ou as atividades a serem executadas são 
selecionadas fora do módulo
– Ou: a atividade escolhida será feita através de um parâmetro 
ao chamar o módulo 
• Isto ocorre, por exemplo, quando cada atividade é implementada 
como parte de um bloco switch ou de if’s 
• Um módulo com coesão lógica executa uma função de uma 
dada classede funções
• Imagine se você estiver planejando uma viagem, poderia 
pensar nos seguintes itens
– Ir de carro
– Ir de trem
– Ir de navio
– Ir de avião
O que relaciona estas atividades?
9
Coesão Lógica
Ago 2009 17 /26Alessandro Garcia © LES - DI/PUC-Rio
Modulo TratamentoErros {
int EmitirMensagemErro (int codigo_erro) {
// ...
}
int RecuperacaoEspecificaOrdenacao (int codigo_erro, int a []) {
// ...
}
int RecuperacaoEspecificaString (int codigo_erro, char * str) {
// ...
}
int RecuperacaoEspecificaArmazenamento (int codigo_erro, , char * str) {
// ...
}
void FinalizacaoErroFatal (int codigo_erro) {
// ...
}
}
18 /32Alessandro Garcia © LES/DI/PUC-Rio
Coesão Funcional
• Um módulo com coesão funcional contém elementos que 
contribuem para execução de uma e apenas uma tarefa 
relacionada ao problema 
• Um módulo funcionalmente coeso possui mais de um 
elemento (p.e. várias funções)
– porém todos eles necessários e suficientes para implementar 
um único conceito
• Pessoa, Professor, Aluno, Curso, etc...
• TADs: listas, árvores, etc...
• Cada módulo tem um propósito forte, único e funções 
operam sobre o mesmo conceito

Outros materiais