segunda-feira, 31 de março de 2008

Aulas 14 e 15

Padrão Controlador

Problema: quem controla os eventos acionados pelos atores externos a aplicação.
Solução: adicione responsabilidade a classe controladora quando:
A classe representa o próprio sistema ou um dispositivo.
A classe que representa um caso de uso.
Mecanismos:
A decisão de se optar por um controlador baseado em caso de uso ou de um dispositivo/sistema está associado aos padrões de baixo acoplamento e alta coesão.
Atenção quanto a controladores sobrecarregados.



Alta Coesão
Problema: como manter o objeto focado, gerenciado e entendível ao mesmo tempo que se mantém com baixo acoplamento.
Solução: atribua responsabilidade de forma a manter a coesão alta.
Mecanismos:
Concentre análise nas classe com muitos métodos desconectados uns dos outros.
Analise métodos que realizam “coisas” demais.
Coesão Alta e Baixo Acoplamento: Estes dois conceitos são complementares.


Coesão coincidental
· Há nenhuma (ou pouca) relação construtiva entre os elementos de um módulo
· No linguajar OO:
· Um objeto não representa nenhum conceito OO
· Uma coleção de código comumente usado e herdado através de herança (provavelmente múltipla)

Coesão lógica
· Módulo faz um conjunto de funções relacionadas, uma das quais é escolhida através de um parâmetro ao chamar o módulo
· Semelhante a acoplamento de controle
· Cura: quebrar em métodos diferentes

Coesão temporal
· Elementos estão agrupados no mesmo módulo porque são processados no mesmo intervalo de tempo
· Exemplos comuns:
· Método de inicialização que provê valores defaults para um monte de coisas diferentes
· Método de finalização que limpa as coisas antes de terminar
· Cura: depender de construtores e destrutores, outro exemplo: arquivo de configuração típico.

Coesão procedural
· Associa elementos de acordo com seus relacionamentos procedurais ou algorítmicos
· Um módulo procedural depende muito da aplicação sendo tratada
· Junto com a aplicação, o módulo parece razoável
· Sem este contexto, o módulo parece estranho e muito difícil de entender
· "O que está acontecendo aqui!!!????!!"
· Não pode entender o módulo sem entender o programa e as condições que existem quando o módulo é chamado Cura: reprojete o sistema.

Coesão de comunicação
· Todas as operações de um módulo operam no mesmo conjunto de dados e/ou produzem o mesmo tipo de dado de saída
· Cura: isole cada elemento num módulo separado
· "Não deveria" ocorrer em sistemas OO usando polimorfismo (classes diferentes para fazer tratamentos diferentes nos dados)

Coesão sequencial
· A saída de um elemento de um módulo serve de entrada para o próximo elemento
· Cura: decompor em módulos menores

Coesão funcional (a melhor)
· Um módulo tem coesão funcional se as operações do módulo puderem ser descritas numa única frase de forma coerente
· Num sistema OO:
· Cada operação na interface pública do objeto deve ser funcionalmente coesa
· Cada objeto deve representar um único conceito coeso
· Exemplo: um objeto que esconde algum conceito ou estrutura de dados ou recurso e onde todos os métodos são relacionados por um conceito ou estrutura de dados ou recurso
· Meyer chama isso de "information-strength module"

Consequências:
Melhor claridade e facilidade de compreensão do projeto
Simplificação da manutenção
Frequentemente vai mão na mão com acoplamento fraco
Com granularidade baixa e funcionalidade bem focada, aumenta o reuso.

Um comentário:

jbbf disse...

Caro Diogo Viana,
Ligeira dificuldade de síntese.
Não contém erros conceituais graves.
Não fez a totalidade das aulas.
Texto demonstra que aluno restringiu sua pesquisa ao conteúdo das aulas.
Texto, em geral, expressa o conteúdo das aulas.
Boa fluência na escrita do texto.
Escreveu usando as próprias palavras.
Texto demonstra, em certas, ocasiões, desconhecimento acerca daquilo que escreve.
Texto muito resumido!!!
Contém uma referência bibliográfica.

Nota:5,0
Destaque negativo:Percebí que postou várias aulas em um só dia. Blog é diário!!!!
Destaque positivo:Bom lay-out e agradável aos olhos