Please enable JavaScript.
Coggle requires JavaScript to display documents.
Encapsulamento e Congeneridade - Coggle Diagram
Encapsulamento e Congeneridade
Níveis de Encapsulamento
Nível-0 (Level-0)
Código primário isento de encapsulamento.
Nível-1 (Level-1)
Encapsulamento da sub-rotina.
Classes (ou objetos) são uma reunião conjunta de sub-rotinas (operacoes).
Nível-2 (Level-2)
Introduzido pela orientação a objeto.
Classes estão no encapsulamento de nível-2.
Níveis Interativos de Encapsulamento
Critérios de Desenho
Coesão de Classe: Medida da coerência de um conjunto de operações (e atributos) para atingir o objetivo da classe.
Acoplamento de Classe: Medida do número e da resistência das ligações entre classes.
Outros critérios: A serem nomeados em níveis mais altos de encapsulamento.
Congeneridade
Significa que uma mudança em A pediria que B fosse mudado (ou verificado) para preservar a exatidão global.
Também significa que uma mudança pediria que tanto A quanto B mudassem juntos para preservar a exatidão global.
Variedades da Congeneridade
Congeneridade Explícita
Exemplo: Linhas de código A e B com congeneridade de tipo e nome.
Congeneridade Implícita
Exemplo: Congeneridade de posição entre instruções em uma rotina de montagem.
Clareza da Congeneridade
Quanto mais implícita a congeneridade, mais difícil é detectá-la.
Direcionalidade
Alguns tipos de congeneridade são direcionais, enquanto outros são não direcionais.
Tipos de Congeneridade
Estática
Congeneridade de nome, tipo, convenção, algoritmo, posição.
Dinâmica
Congeneridade de execução, temporal, valor, identidade.
Contrageneridade
Herança múltipla em ambientes orientados a objeto
Variáveis com nomes diferentes
Congeneridade e Fronteiras de Encapsulamento
Orientação a Objeto e Congeneridade
O encapsulamento em níveis mais altos (nível-2 ou superior) controla a congeneridade.
Congeneridade encapsulada dentro da fronteira de um único elemento (como uma classe).
Congeneridade e Manutenção
Importância da Congeneridade na Manutenção
Congeneridade oferece diretrizes para aprimorar a manutenção de sistemas:
Minimizar a congeneridade total, incluindo a contrageneridade, fragmentando o sistema em elementos encapsulados.
Minimizar qualquer congeneridade remanescente que cruze as fronteiras de encapsulamento.
Maximizar a congeneridade dentro das fronteiras de encapsulamento.
Essas diretrizes aplicam-se a qualquer abordagem de construção de software com encapsulamento, não apenas à orientação a objeto.
Abusos de Congeneridade em Sistemas Orientados a Objeto
Função Amigável da Linguagem C++
Definição
: A função amigável permite acesso aos elementos internos de uma classe de fora das suas fronteiras de encapsulamento.
Exemplo de Violência na Congeneridade
:
Uma função amiga pode acessar e modificar elementos internos de uma classe, criando uma congeneridade alta entre a função e a classe.
Uso Autêntico
:
A função amigável pode ser útil para inspeção interna de objetos durante testes.
Herança sem Restrição
Problema
:
Herança pode introduzir uma grande quantidade de congeneridade se permitir acesso irrestrito aos elementos da superclasse, tanto internamente quanto externamente.
Exemplo
:
Uma equipe de análise/desenho permitiu que subclasses tivessem acesso irrestrito a variáveis de programação nas superclasses, resultando em uma congeneridade desenfreada entre as classes.
Contando com Acidentes de Implementação
Exemplo
:
Um programador utilizou uma classe Conjunto em suas aplicações, contando com um comportamento acidental (a ordem de recuperação de elementos) que não estava documentado.
Quando a implementação da classe Conjunto mudou e esse comportamento acidental não foi mais mantido, as aplicações que dependiam disso falharam.