Please enable JavaScript.
Coggle requires JavaScript to display documents.
Domínios, grau de dependência
e coesão - Coggle Diagram
Domínios, grau de dependência
e coesão
-
Grau de Dependência
- Conjunto classe-referência direto: classes referenciadas diretamente pela classe C
-
-
- C tem uma operação com argumento de D
-
- C tem um método que envia mensagem com argumento de D
- C tem um método com variável local de D
- C supre D como parâmetro de classe em classe parametrizada
- C tem uma classe amiga (friend) D (em C++)
Conjunto classe-referência indireto: união do conjunto classe-referência direto de C e conjuntos classe-referência indiretos das classes referenciadas por C1, C2,..., Cn
- Grau de dependência direto: tamanho do conjunto classe-referência direto
- Grau de dependência indireto: tamanho do conjunto classe-referência indireto
A Lei de Deméter
- Lei orientadora para limitar o grau de dependência direto de uma classe
- Proposta por Lieberherr e Holland
- Restringe referências arbitrárias a outras classes dentro de uma classe
- Expressão geral da Lei de Deméter:
-
- Objeto referenciado por argumento de uma operação
- Objeto referenciado por variável de obj (incluindo objetos em coleções referenciadas)
- Objeto criado pela operação
- Objeto referenciado por variável global
- Duas versões: Lei Forte e Lei Fraca
- Lei Forte: variável é apenas aquela definida na classe C
- Lei Fraca: variável é de C ou herdada de suas superclasses
Coesão de Classe
- Coesão de Instância Mista
- Características indefinidas para alguns objetos da classe
- Exemplo: classe
Vendedor
com vendedores comissionados e não comissionados
- Mensagem
lançarPorcentagemDeComissão
é adequada para vendedores comissionados, mas não para não comissionados
- Solução inadequada: fixar a comissão em zero para não comissionados
- Solução correta: criar subclasses refinadas
VendedorComissionado
e VendedorNãoComissionado
- Herdadas da superclasse
Vendedor
- Operação
lançarPorcentagemDeComissão
alocada para VendedorComissionado
- Contém elementos que criam dependência da classe em relação a uma classe extrínseca de um domínio diferente
- Uma classe B é extrínseca de A se A puder ser plenamente definida sem qualquer noção de B
- Exemplo: classe
NúmeroReal
com atributo arctang
(arco tangente)
- Desenho inadequado: cria dependência de
NúmeroReal
com classes do domínio de ângulo
- Desenho correto: evitar dependências com classes de domínio mais alto
- Exemplo prático: construção de uma classe
Ângulo
sem depender de NúmeroReal
, mas não o contrário
- Evite misturar classes de domínio mais alto em uma classe que está sendo desenhada, a menos que seja essencial
- Cria dependência da classe em relação a uma classe extrínseca no mesmo domínio
- Exemplo: classe
Pessoa
com atributo númeroDeCachorrosPossuídos
-
- Ambos
Pessoa
e Cachorro
estão no domínio de negócio
- Transgressão menos séria da coesão de classes, mas requer atenção para reutilização
- Pode resultar em bagagem extra e inútil na classe ao ser reutilizada em contextos sem cachorros
- Pode levar a dependências severas com outras classes e à necessidade de operações adicionais para atualização
- Embora atraente em alguns aspectos, a coesão de papel misto não deve distrair do objetivo de criar classes com coesão ideal, sem misturar papéis desnecessários