Pergunta

" Abstraction e encapsulamento são conceitos complementares: abstração centra-se no comportamento observável de um objeto ... encapsulamento incide sobre a implementação que dá origem a este comportamento ... encapsulamento é mais freqüentemente alcançado através de informações esconderijo , que é o processo de esconder todos os segredos do objeto que não contribuem para as suas características essenciais " -. Grady Booch em Object Oriented Analysis and design

Você pode me mostrar alguns exemplos poderosamente convincentes sobre os benefícios do encapsulamento através de ocultação de informações?

Foi útil?

Solução

O exemplo dado na minha primeira classe OO:

Imagine um media player. É resumos os conceitos de jogo, pausa, avanço rápido, etc. Como usuário, você pode usar isso para operar o dispositivo.

O seu VCR implementadas desta interface e HID ou encapsulada os detalhes dos discos mecânicos e fitas.

Quando um novo aplicação de um media player chega (dizer um leitor de DVD, que utiliza discos em vez de fitas) pode substituir a implementação encapsulada no media player e os usuários podem continuar a usá-lo apenas como fizeram com o seu VCR (mesmas operações como play, pause, etc ...).

Este é o conceito de informações esconderijo a abstração . Ela permite a detalhes de implementação para a mudança sem que os utilizadores têm de saber e promove baixo acoplamento de código.

Outras dicas

A abstração * nix de fluxos de caracteres (arquivos de disco, Canos, ttys, etc.) em uma única entidade (o "tudo é um arquivo") modelo permite uma ampla gama de ferramentas para ser aplicado a uma ampla gama de fontes de dados / pias de uma forma que simplesmente não seria possível sem o encapsulamento.

Da mesma forma, o conceito de fluxos em várias línguas, abstraindo sobre listas, matrizes, arquivos, etc.

Além disso, conceitos como números (abstraindo sobre números inteiros, meia dúzia de tipos de carros alegóricos, racionais, etc.) imaginar o que um pesadelo este seria se o código de nível superior foi dado o formato mantissa e assim por diante e deixados à própria .

Eu sei que já existe uma resposta aceita, mas eu queria jogar mais um lá fora: OpenGL / DirectX

Nenhum destes de API são implementações completas (embora DirectX é certamente um pouco top-pesado mais a esse respeito), mas os métodos em vez de genéricos de comunicação tornam comandos para uma placa gráfica.

Os vendedores de cartão são os que fornecem a implementação (driver) para um cartão específico, que em muitos casos é muito específico hardware, mas você como a necessidade do usuário não se importa que um usuário está executando uma GeForce ABC eo outro um Radeon XYZ porque a implementação exata está escondido por trás da API de alto nível. Se não fosse, você precisa ter um caminho de código em seus jogos para cada cartão no mercado que você queria apoiar, o que seria totalmente incontrolável do dia 1. Outra grande vantagem dessa abordagem é que a Nvidia / ATI pode liberar um versão mais recente e mais eficiente dos seus condutores e você se beneficia automaticamente sem nenhum esforço de sua parte.

O mesmo princípio está em vigor para som, rede, mouse, teclado ... basicamente qualquer componente do seu computador. Se o encapsulamento acontece no nível do hardware ou em um driver de software, em algum momento todos os detalhes do dispositivo estão escondidos para permitir que você tratar qualquer teclado, por exemplo, como apenas um teclado e não a Microsoft Ergonomic Media Explorer luxo Revisão 2 .

Quando você olha para ele dessa forma, torna-se rapidamente evidente que sem alguma forma de computadores encapsulamento / abstração como os conhecemos hoje simplesmente não iria funcionar em tudo. É que brilhante o suficiente para você?

Quase todas as Java, C #, e base de código C ++ no mundo tem ocultação de informações: É tão simples quanto os privados:. Sectores das classes

O mundo exterior não pode ver os membros privados, assim que um desenvolvedor pode alterá-los sem a necessidade de se preocupar com o resto do código não compilar.

O quê? Ainda não está convencido?

É mais fácil mostrar o contrário. Nós utilizado para escrever código que não tinha controle sobre quem pode acessar detalhes de sua implementação. Que tornou quase impossível às vezes para determinar o código modificado uma variável.

Além disso, você algo que não pode realmente abstract se cada pedaço de código no mundo pode, eventualmente, ter dependia da implementação de classes concretas específicas.

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