Post on 18-Apr-2015
Domínios e Coesão 1
Domínios, Grau de Dependência
e Coesão
Domínios e Coesão 2
Domínios de Classes:
As classes têm complexidade e características diferentes. Variam com a área de negócios, área de indústria, etc.
Vamos tentar classificar as classes em grandes “domínios”
Domínios e Coesão 3
Classificação das Classes:
Domínio de Aplicação: Classes gerenciadoras de eventos Classes reconhecedoras de eventos
Domínio de negócios: Classes de relacionamento Classes de papel Classes de atributo
Domínios e Coesão 4
…
Domínio de arquitetura Classes de interface humana Classes de manipulação de banco de
dados Classes de comunicação de máquina
Domínio de base: Classes semânticas Classes estruturais Classes fundamentais
Domínios e Coesão 5
O domínio de base:
Utilizáveis em várias aplicações, em indústrias diferentes e em ampla faixa de arquiteturas de computador: fundamentais: Booleano, Char, Real, … estruturais: Pilha, Fila, Lista, Conjunto,
… semânticas: Data, Hora, Ângulo,
Dinheiro, Massa, …
Domínios e Coesão 6
O domínio de arquitetura:
Reutilização limitada a uma única arquitetura de computador: comunicação de máquina: Porta,
MáquinaRemota, … manipulação de banco de dados:
Negociação, Backup, … interface humana: Janela,
BotãoDeComando, …
Domínios e Coesão 7
O domínio de negócios:
Úteis em muitas aplicações, mas restritas a uma área de negócios: de atributos: Saldo,
TemperaturaDoCorpo, … de papel: Cliente, Paciente, … de relacionamento:
TitularidadeDeConta, SupervisãoDePaciente, …
Domínios e Coesão 8
O domínio de aplicação:
Utilizada em uma única aplicação ou em aplicações afins: reconhecedoras de eventos:
MonitorDeTemperaturaDePaciente, …
gerenciadoras de eventos: AquecimentoDePacienteHipotérmico, …
Domínios e Coesão 9
Domínio de classes e suas reutilizações:
Domínio de aplicação Gerenciadora de eventos Reconhecedora de eventos
Domínio de negócios Relacionamento Papel Atributo
Domínio de arquitetura Interface humana Banco de dados Comunicação de máquina
Domínio de base Semântica Estrutura Fundamental
Baixareutilização
Altareutilização
Médiareutilização
Domínios e Coesão 10
A origem das classes em cada domínio
De onde vêm as classes? Domínio de base >> “compradas” de
um distribuidor! [custo de desenvolver 1000 vezes maior!]
Eventualmente, podem ser acrescidas algumas classes próprias.
Domínios e Coesão 11
...
Domínio de arquitetura: Similar ao domínio de base, com as observações: Talvez você tenha de adquirir do fornecedor
da infra-estrutura de hardware e software Podem existir incompatibilidades de classes
provenientes dos diversos distribuidores A biblioteca de base pode ser incompatível
com as bibliotecas de arquitetura É provável que a bilbioteca de arquitetura
precise de modificações
Domínios e Coesão 12
...
Domínio de negócio: Bastante difíceis de comprar!
(distribuidores gerais não têm habilidade;mercado é difícel de contentar)
Boa análise e desenho resultarão em grau elevado de reutilização
Domínios e Coesão 13
…
Domínio de aplicação: Reutilização pequena! {não se preocupe
muito com isto} Podem ser implementadas como
procedimentos convencionais, ou pacote de utilidade.
Por ex: AquecimentoDePacienteHipotérmico: - procedimento; única operação de classe;
ou operação da classe Paciente.
Domínios e Coesão 14
Gráu de dependência:
O conjunto de classes referenciadas por uma determinada classe:
C é herdeira de D C tem atributo de D C tem argumento de
entrada de D C é uma variável de D C tem uma classe
amiga D (C++)
C tem um método que envia mensagem com argumento retornado de D
C tem método com variável local de D
C supre D com parâmetro de classe real em classe parametrizada
Domínios e Coesão 15
Conjunto classe-referência direto:
C
C2 C3C1
3
Domínios e Coesão 16
Conjunto classe-referência indireto:
C
C2 C3C1
C11 C12 C21 C31 C32
F1 F2 F3 F4 12
Domínios e Coesão 17
Utilização do grau de dependência:
Fornece uma medida da sofisticação da classe [quanto está acima do domínio de base!]
Classes de domínios mais altos tem alto grau de dependência indireto (mais baixos > baixo grau)
Grau inesperado pode indicar deficiência de desenho (coesão X desenho do nada)
Domínios e Coesão 18
Lei de Deméter [projeto --]
Para um obj da classe C, e qualquer op, cada objeto destinatário de mensagem deve ser:
1. O próprio obj (self /super; this; current)
2. Objeto referenciado na assinatura de op3. Objeto referenciado por variável de obj4. Objeto criado por op5. Objeto referenciado por variável global
Domínios e Coesão 19
Coesão de Classe:
É a medida da inter-relação das características (atributos e operações) da interface externa de uma classe
Baixa coesão: características disparatadas;Alta coesão: características contribuem para
abstração de tipo implementada pela classe
Domínios e Coesão 20
Critérios de desenho X Níveis de encapsulamento (nível 2)
PARA:DE:
NIVEL 0(linhas código)
NIVEL 1(operação)
NIVEL 2(classe)
NIVEL 0(linhas código)
Programação estruturada
Fan-out demensagem
__
NIVEL 1(operação)
Coesão Acoplamento
__
NIVEL 2(classe)
__ Coesão declasse
Acoplamento de classe
Domínios e Coesão 21
Anomalias de coesão:
Coesão de instância mista
Coesão de domínio misto
Coesão de papel misto
Domínios e Coesão 22
Coesão de instância mista:
Algumas características são indefinidas para alguns objetos da classe.
Por ex: Classe Vendedorfred é comissionado:fred.LançarPorcentagemComis;mary não é comissionada: X
mary.LançarPorcentagemComis;
Domínios e Coesão 23
solução:
Vendedor
Vendedor Comissionado
/porcentagemDeComis: .
Vendedor Não Comis.
Domínios e Coesão 24
Coesão de domínio misto:
Contém um elemento que cria dependência em relação a classe extrínseca de domínio diferente
Extrínseca: Elefante e PessoaIntrínseca: Data à Pessoa {data de
nascimento}
Domínios e Coesão 25
exemplo:
Real
arcTang: Ângulo equivalenteEmCelsius: TemperaturaEmCelsiusquantiaEmEuro: DinheiroEuropeu
Domínios e Coesão 26
Coesão de papel misto (a menos problemática!):
Contém um elemento que cria dependência com classe extrínseca no mesmo domínio
Ex: Pessoa e o atributo númeroDeCachorrosPossuidos
Domínios e Coesão 27
Problemas:
Se uma aplicação não trata com cachorros? – as pessoas continuam com o atributo númeroDeCachorrosPossuidos?
E, como proceder com:númeroDeBarcosPossuidos,númeroDeGatosPossuidos,númeroDeSaposPossuidos?