Esconder informações - Information hiding

Na ciência da computação , a ocultação de informações é o princípio de segregação das decisões de design em um programa de computador que têm maior probabilidade de mudar, protegendo assim outras partes do programa de modificações extensas se a decisão de design for alterada. A proteção envolve o fornecimento de uma interface estável que protege o restante do programa da implementação (cujos detalhes provavelmente serão alterados). Escrito de outra forma, o ocultamento de informações é a capacidade de impedir que certos aspectos de uma classe ou componente de software sejam acessíveis a seus clientes , usando recursos de linguagem de programação (como variáveis ​​privadas) ou uma política de exportação explícita.

Visão geral

O termo encapsulamento é freqüentemente usado como sinônimo de ocultação de informações. Nem todos concordam com as distinções entre os dois; pode-se pensar que a ocultação de informações é o princípio e o encapsulamento é a técnica. Um módulo de software oculta informações encapsulando as informações em um módulo ou outra construção que apresente uma interface.

Um uso comum da ocultação de informações é ocultar o layout de armazenamento físico dos dados de forma que, se for alterado, a alteração seja restrita a um pequeno subconjunto do programa total. Por exemplo, se um ponto tridimensional ( x , y , z ) é representado em um programa com três variáveis escalares de ponto flutuante e, posteriormente, a representação é alterada para uma única variável de matriz de tamanho três, um módulo projetado com informações ocultas em mente protegeria o restante do programa de tal mudança.

Na programação orientada a objetos , o ocultamento de informações (por meio do aninhamento de tipos) reduz o risco de desenvolvimento de software, mudando a dependência do código de uma implementação incerta (decisão de design) para uma interface bem definida . Os clientes da interface executam operações puramente por meio da interface, portanto, se a implementação mudar, os clientes não precisam mudar.

Encapsulamento

Em seu livro sobre design orientado a objetos , Grady Booch definiu o encapsulamento como "o processo de compartimentar os elementos de uma abstração que constituem sua estrutura e comportamento; o encapsulamento serve para separar a interface contratual de uma abstração e sua implementação".

O objetivo é atingir o potencial de mudança: os mecanismos internos do componente podem ser melhorados sem impacto nos outros componentes, ou o componente pode ser substituído por um diferente que suporte a mesma interface pública. O encapsulamento também protege a integridade do componente, evitando que os usuários configurem os dados internos do componente em um estado inválido ou inconsistente. Outro benefício do encapsulamento é que ele reduz a complexidade do sistema e, portanto, aumenta a robustez, ao limitar as interdependências entre os componentes de software.

Nesse sentido, a ideia de encapsulamento é mais geral do que como ela é aplicada na programação orientada a objetos. Por exemplo, um banco de dados relacional é encapsulado no sentido de que sua única interface pública é uma linguagem de consulta (como SQL ), que oculta todo o maquinário interno e estruturas de dados do sistema de gerenciamento de banco de dados. Como tal, o encapsulamento é um princípio fundamental de uma boa arquitetura de software, em todos os níveis de granularidade.

O encapsulamento de software por trás de uma interface permite a construção de objetos que imitam o comportamento e as interações de objetos no mundo real. Por exemplo, um despertador digital simples é um objeto do mundo real que um leigo pode usar e entender. Eles podem entender o que o despertador faz e como usá-lo através da interface fornecida (botões e tela), sem ter que entender todas as partes do relógio. Da mesma forma, se o relógio fosse substituído por um modelo diferente, o leigo poderia continuar a usá-lo da mesma forma, desde que a interface funcionasse da mesma forma.

No cenário mais concreto de uma linguagem de programação orientada a objetos, a noção é usada para significar um mecanismo de ocultação de informações, um mecanismo de empacotamento ou a combinação dos dois. (Consulte Encapsulamento (programação orientada a objetos) para obter detalhes.)

História

O conceito de ocultação de informações foi descrito pela primeira vez por David Parnas em Parnas (1972) . Antes disso, a modularidade foi discutida por Richard Gauthier e Stephen Pont em seu livro de 1970 Designing Systems Programs embora a própria programação modular tenha sido usada em muitos sites comerciais por muitos anos - especialmente em subsistemas de E / S e bibliotecas de software - sem adquirir o tag 'ocultação de informações' - mas por motivos semelhantes, bem como o motivo de reutilização de código mais óbvio .

Exemplo

A ocultação de informações serve como um critério eficaz para dividir qualquer peça de equipamento, software ou hardware em módulos de funcionalidade. Por exemplo, um carro é um equipamento complexo. Para tornar o projeto, a fabricação e a manutenção de um carro razoáveis, a complexa peça do equipamento é dividida em módulos com interfaces específicas que ocultam as decisões de design. Ao projetar um carro dessa maneira, um fabricante de automóveis também pode oferecer várias opções, ao mesmo tempo em que mantém um veículo econômico de fabricar.

Por exemplo, um fabricante de automóveis pode ter uma versão de luxo do carro, bem como uma versão padrão. A versão de luxo vem com um motor mais potente do que a versão padrão. Os engenheiros que projetam os dois motores de carro diferentes, um para a versão de luxo e outro para a versão padrão, fornecem a mesma interface para ambos os motores. Ambos os motores se encaixam no compartimento do motor do carro, que é o mesmo entre as duas versões. Ambos os motores têm a mesma transmissão, os mesmos suportes de motor e os mesmos controles. As diferenças nos motores são que a versão de luxo mais potente tem um deslocamento maior com um sistema de injeção de combustível programado para fornecer a mistura ar-combustível necessária para o motor de cilindrada maior.

Além do motor mais potente, a versão luxo também pode oferecer outras opções como um melhor rádio com CD player, bancos mais confortáveis, melhor sistema de suspensão com pneus mais largos e várias cores de pintura. Com todas essas mudanças, a maior parte do carro é igual entre a versão padrão e a versão de luxo. O rádio com CD player é um módulo que substitui o rádio padrão, também módulo, do modelo luxo. Os assentos mais confortáveis ​​são instalados nas mesmas montagens dos assentos que os tipos padrão de assentos. Se os assentos são de couro ou plástico, oferecem suporte lombar ou não, não importa.

Os engenheiros projetam o carro dividindo a tarefa em partes do trabalho que são atribuídas às equipes. Cada equipe, então, projeta seu componente de acordo com um determinado padrão ou interface, o que permite a flexibilidade da equipe no projeto do componente e, ao mesmo tempo, garante que todos os componentes se encaixem.

Os fabricantes de veículos automotores freqüentemente usam a mesma estrutura central para vários modelos diferentes, em parte como uma medida de controle de custos. Essa " plataforma " também fornece um exemplo de ocultação de informações, uma vez que a planta baixa pode ser construída sem saber se será usada em um sedã ou um hatchback.

Como pode ser visto por este exemplo, a ocultação de informações fornece flexibilidade. Essa flexibilidade permite que um programador modifique a funcionalidade de um programa de computador durante a evolução normal à medida que o programa de computador é alterado para melhor atender às necessidades dos usuários. Quando um programa de computador é bem projetado, decompondo a solução do código-fonte em módulos usando o princípio de ocultação de informações, as mudanças evolutivas são muito mais fáceis porque as mudanças são tipicamente locais em vez de mudanças globais.

Os carros fornecem outro exemplo disso em como eles se relacionam com os motoristas. Eles apresentam uma interface padrão (pedais, roda, câmbio, sinais, medidores, etc.) na qual as pessoas são treinadas e licenciadas. Assim, as pessoas só precisam aprender a dirigir um carro; eles não precisam aprender uma maneira completamente diferente de dirigir cada vez que dirigem um novo modelo. (Concedido, existem transmissões manuais e automáticas e outras diferenças semelhantes, mas, no geral, os carros mantêm uma interface unificada.)

Veja também

Notas

Referências