Pergunta

Como a ocultação de informações ajuda a dissociar os módulos que compõem um sistema?

Foi útil?

Solução

Encapsulation (ocultamento de informações) permite expor apenas o mínimo absoluto para o mundo exterior. Isto significa que você pode mudar os bits não expostos a conteúdo do seu coração, sem afetar os clientes.

Um caso em questão. Digamos que você tenha implementado uma estrutura de dados que contém cordas em uma matriz. Se você expor a matriz, os usuários de sua estrutura de dados pode apenas usar str[7] para obter a seqüência na posição 7.

Agora, o que acontece se você decidir voltar a implementar a sua estrutura de dados como uma árvore equilibrada para acelerar as pesquisas para strings. Você faz isso movendo as cordas em uma árvore e mudar a sua matriz para ser, não cordas, mas ponteiros para locais dentro da árvore.

Isso vai quebrar seus clientes, porque eles vão estar esperando cordas, não ponteiros. Cada cliente teria que mudar para obter os ponteiros da matriz, em seguida, procurar aqueles em cima da árvore.

No entanto, se você tivesse totalmente escondido a implementação e apenas forneceu uma função:

String getStringAt (int n);

você teria apenas que mudar a estrutura de dados e a função para ficar compatível.

Os clientes não pausa porque sua interface de programação de aplicativo (API) não mudou.

Uma das mais importantes regras que eu sigo com aulas é apontar para coerência máxima, mínima de acoplamento . Em outras palavras, uma única classe deve ter tudo o que precisa (nada mais) e deve ter o mínimo de partilha de informação possível com o mundo exterior.

Isso significa que todas que os clientes podem fazer é chamar a API. Sem expor métodos não-API ou permitir acesso irrestrito a variáveis ??públicas -. Tudo deve ser feito com setters e getters

Outras dicas

Os dados Esconder, não tanto desacopla módulos, que isso ajuda a limitar o acoplamento entre eles.
Isso é porque nenhum dos elementos escondidos pode ser usado por qualquer outro módulo que não aquele onde eles são definidos, portanto, limitando a possível tie-ins / dependências / call-it-que-você-maio, que "casal" os módulos juntos.

Em outras palavras, ele limita as trocas entre os módulos para estes que são especificamente definidas na API , e este fato ajuda muito quando a implementação de um determinado módulo é modificado, porque tanto tempo como a API permanece o mesmo, o módulo de interoperabilidade vai funcionar. (Não há necessidade de olheiro através do código para descobrir se alguma forma módulo A, utilizado a variável x do módulo B (se esconde B x, é o único a usá-lo!)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top