Pergunta

Você pode me dizer qual é a diferença entre abstração e ocultação de informações no desenvolvimento de software?

Estou confuso.A abstração oculta a implementação de detalhes e A ocultação de informações abstrai detalhes inteiros de algo.

Atualizar: Encontrei uma boa resposta para esses três conceitos. Veja a resposta separada abaixo por diversas citações retiradas de .

Foi útil?

Solução

Vá para a fonte!Grady Booch diz (em Object Oriented Analysis and Design, página 49, segunda edição):

Abstração e encapsulamento são conceitos complementares:abstração concentra-se no comportamento observável de um objeto...encapsulação foca na implementação que dá origem a esse comportamento...O encapsulamento é mais frequentemente obtido através da ocultação de informações, que é o processo de esconder todos os segredos do objeto que não o fazem contribuem para suas características essenciais.

Em outras palavras:abstração = o objeto externamente;encapsulamento (conseguido através da ocultação de informações) = o objeto internamente,

Exemplo:No .NET Framework, o System.Text.StringBuilder classe fornece uma abstração sobre um buffer de string.Essa abstração de buffer permite trabalhar com o buffer sem levar em conta sua implementação.Assim, você pode anexar strings ao buffer sem levar em conta como o StringBuilder monitora internamente coisas como o ponteiro para o buffer e gerencia a memória quando o buffer fica cheio (o que acontece com o encapsulamento por meio da ocultação de informações).

rp

Outras dicas

O OP atualizou a sua pergunta com várias citações que encontrou, nomeadamente num artigo de Edward V.Berard intitulado "Abstração, encapsulamento e ocultação de informações".Estou postando novamente uma versão ligeiramente expandida e reformatada da atualização do OP, uma vez que deveria ser uma resposta por si só.

(Todas as citações foram retiradas do artigo mencionado acima.)

Abstração:

"Um ponto de confusão em relação à abstração é o seu uso tanto como processo quanto como entidade.A abstração, como processo, denota a extração dos detalhes essenciais sobre um item, ou grupo de itens, ignorando os detalhes não essenciais.A abstração, como entidade, denota um modelo, uma visão ou alguma outra representação focada para um item real.”

Ocultação de informações:

"Sua interface ou definição foi escolhida para revelar o mínimo possível sobre seu funcionamento interno." — [Parnas, 1972b]

“A abstração pode ser [...] usada como técnica para identificar quais informações devem ser ocultadas.”

"A confusão pode ocorrer quando as pessoas não conseguem distinguir entre a ocultação de informações e uma técnica (por exemplo, abstração) que é usada para ajudar a identificar quais informações devem ser ocultadas."

Encapsulamento:

“[...] refere-se à construção de uma cápsula, no caso uma barreira conceitual, em torno de algum conjunto de coisas.” - [Wirfs-Brock et al, 1990]

“Como processo, encapsulamento significa o ato de encerrar um ou mais itens dentro de um […] contêiner.Encapsulamento, como entidade, refere-se a um pacote ou invólucro que contém (contém, encerra) um ou mais itens.

"Se encapsulamento fosse 'a mesma coisa que esconder informações', então alguém poderia argumentar que 'tudo o que foi encapsulado também estava oculto'. Isso obviamente não é verdade."

Conclusão:

"Abstração, ocultação de informações e encapsulamento são conceitos muito diferentes, mas altamente relacionados.Pode-se argumentar que a abstração é uma técnica que nos ajuda a identificar quais informações específicas devem ser visíveis e quais informações devem ser ocultadas.O encapsulamento é então a técnica para empacotar a informação de forma a esconder o que deveria ser escondido e tornar visível o que se pretende que seja visível.”

Abstraction está ocultando os detalhes da implementação, fornecendo uma camada sobre a funcionalidade básica.

Information Hiding está ocultando os dados que estão sendo afetados por essa implementação.Uso de private e public vem sob isso.Por exemplo, ocultando as variáveis ​​das classes.

Encapsulation está apenas colocando todos os dados e funções semelhantes em um grupo, por exemplo Class em programação; Packet em redes.

Através do uso de Classes, implementamos todos os três conceitos - Abstraction, Information Hiding e Encapsulation

Por favor, não complique conceitos simples.

Encapsulamento :O agrupamento de dados e métodos em uma única unidade é o encapsulamento (por exemplo,Aula)

Abstração :É um ato de representar apenas as coisas essenciais, sem incluir detalhes de fundo.(por exemplo.Interface)

PARA EXEMPLOS E MAIS INFORMAÇÕES GOTO:

http://thecodekey.com/C_VB_Codes/Encapsulation.aspx

http://thecodekey.com/C_VB_Codes/Abstraction.aspx

Definições aprovadas aqui

P.S.:Também me lembro da definição de um livro chamado C++ de Sumita Arora que lemos na 11ª aula;)

O significado de abstração dado pelo Oxford English Dictionary (OED) mais próximo do significado pretendido aqui é 'O ato de separar no pensamento'.Uma definição melhor poderia ser “Representar as características essenciais de algo sem incluir antecedentes ou detalhes não essenciais”.

A ocultação de informações é o princípio de que os usuários de um componente de software (como uma classe) precisam saber apenas os detalhes essenciais de como inicializar e acessar o componente, e não precisam saber os detalhes da implementação.

Editar:Parece-me que a abstração é a processo de decidir quais partes da implementação devem ser escondido.

Portanto, não é abstração versus ocultação de informações.São informações que escondem a abstração VIA.

Abstração

Abstração é um ato de representar detalhes essenciais sem incluir os detalhes de fundo.Uma classe abstrata possui apenas assinaturas de métodos e a classe de implementação pode ter sua própria implementação, desta forma os detalhes complexos ficarão ocultos do usuário.A abstração concentra-se na visão externa.Em outras palavras, Abstração é a separação das interfaces da implementação real.

Encapsulamento

O encapsulamento explica a ligação dos membros de dados e métodos em uma única unidade.A ocultação de informações é o principal objetivo do encapsulamento.O encapsulamento é obtido usando especificadores de acesso como privado, público e protegido.As variáveis ​​dos membros da classe tornam-se privadas para que não possam ser acessadas diretamente pelo mundo externo.O encapsulamento concentra-se na visão interna.Em outras palavras, Encapsulamento é uma técnica usada para proteger as informações de um objeto de outro objeto.

Abstração está ocultando detalhes de implementação conforme você diz.

Você abstrai algo a um ponto tão alto que só precisa fazer algo muito simples para executar uma ação.

Ocultar informações é ocultar detalhes de implementação.Programar é difícil.Você pode ter muitas coisas para lidar e lidar.Pode haver variáveis ​​​​que você deseja/precisa acompanhar de perto.Ocultar informações garante que ninguém quebre algo acidentalmente usando uma variável ou método que você expôs publicamente.

Esses 2 conceitos estão intimamente ligados na programação orientada a objetos.

Abstração - É o processo de identificação das características essenciais de um objeto sem incluir os detalhes irrelevantes e tediosos.

Encapsulamento - É o processo de incluir dados e funções que manipulam esses dados em uma única unidade.

Abstração e Encapsulamento são conceitos relacionados, mas complementares.

  1. Abstração é o processo.O encapsulamento é o mecanismo pelo qual a abstração é implementada.

  2. A abstração se concentra no comportamento observável de um objeto.O encapsulamento concentra-se na implementação que dá origem a esse comportamento.

Ocultação de informações - É o processo de ocultar os detalhes de implementação de um objeto.É resultado do encapsulamento.

Encapsulamento:vincular os membros de dados e as funções de membro é chamado de encapsulamento.o encapsulamento é feito por meio de classe.abstração:ocultar os detalhes da implementação do uso ou da visualização é chamado de abstração.ex:interno x;não sabemos como int funcionará internamente.mas sabemos que int funcionará.isso é abstração.

Abstração: Abstração é o conceito/técnica utilizada para identificar qual deve ser a visão externa de um objeto.Disponibilizando apenas a interface necessária.

Ocultação de informações: É complementar à Abstração, pois através da ocultação de informações a Abstração é alcançada.Escondendo tudo o resto, menos a visão externa.

Encapsulamento: É a vinculação de dados e funções relacionadas em uma unidade.Facilita a abstração e a ocultação de informações.Permitir que recursos como acesso de membros sejam aplicados na unidade para obter abstração e ocultação de informações

Veja a postagem de Joel sobre a Lei das Abstrações com Vazamento

JoelOnsoftware

Basicamente, abstrair dá a você a liberdade de pensar em conceitos de nível superior.Uma analogia sem programação é que a maioria de nós não sabe de onde vem nossa comida ou como ela é produzida, mas o fato de que (geralmente) não precisamos nos preocupar com isso nos libera para fazer outras coisas, como programação.

Quanto à ocultação de informações, concordo com o bloqueio.

A abstração permite tratar um processo complexo como um processo simples.Por exemplo, a abstração padrão de "arquivo" trata os arquivos como uma matriz contígua de bytes.O usuário/desenvolvedor nem precisa pensar em questões de clusters e fragmentação.(A abstração normalmente aparece como classes ou sub-rotinas.)

A ocultação de informações visa proteger suas abstrações de usuários mal-intencionados/incompetentes.Ao restringir o controle de algum estado (alocações de disco rígido, por exemplo) ao desenvolvedor original, grandes quantidades de tratamento de erros tornam-se redundantes.Se ninguém além do driver do sistema de arquivos puder gravar no disco rígido, o driver do sistema de arquivos saberá exatamente o que foi gravado no disco rígido e onde.(A manifestação usual deste conceito é private e protected palavras-chave em idiomas OO.)

Para abstrair algo precisamos ocultar o detalhe ou para ocultar o detalhe de algo precisamos abstraí-lo.Porém, ambos podem ser alcançados por encapsulamento.

Portanto, ocultar informações é um objetivo, abstrair é um processo e encapsular é uma técnica.

Abstração significa simplesmente a técnica na qual apenas detalhes essenciais do software ficam visíveis ao usuário para ajudá-lo a usar ou operar o software, portanto, os detalhes de implementação desse software não são mostrados (tornam-se invisíveis).Encapsulamento é a técnica que possui pacotes que contêm um ou mais itens e, portanto, algumas informações (principalmente detalhes do programa) tornam-se visíveis e outras não visíveis para o usuário, portanto o encapsulamento é obtido através da ocultação de informações.Resumindo. Abstração é para comportamento observável (externamente) e encapsulamento é para invisibilidade (internamente), mas esses dois são realmente complementares.

Apenas adicionando mais detalhes ao redor InformaçõesOcultar, encontrado Este link é uma fonte realmente boa com exemplos

InformaçõesOcultar é a ideia de que uma decisão de projeto deve ser ocultada do resto do sistema para evitar acoplamentos não intencionais.Ocultar informações é um princípio de design. InformaçõesOcultar deve informar a maneira como você encapsular coisas, mas é claro que não precisa.

Encapsulamento é um recurso de linguagem de programação.

Eu também fiquei muito confuso sobre os dois conceitos de Abstração e Encapsulamento.Mas quando eu vi o artigo de abstração em myjavatrainer.com, ficou claro para mim que Abstração e Encapsulamento são Maçãs e Laranjas, você não pode realmente compará-los porque ambos são necessários.

O encapsulamento é como o objeto é criado e a abstração é como o objeto é visto no mundo exterior.

Depois de ler todas as respostas acima, uma por uma, não consigo parar de postar isso

a abstração envolve a facilidade de definir objetos que representam "atores" abstratos que podem realizar trabalho, relatar e alterar seu estado e "comunicar-se" com outros objetos no sistema.

No entanto, o encapsulamento é bastante claro visto de cima ->

O termo encapsulamento refere-se à ocultação de detalhes de estado, mas estender o conceito de tipo de dados de linguagens de programação anteriores para associar o comportamento mais fortemente aos dados e padronizar a maneira como os diferentes tipos de dados interagem é o início da abstração.

referência wiki

Encapsulamento: dados vinculativos e os métodos que atuam sobre eles.isso permite ocultar dados de todos os outros métodos em outras classes.exemplo: MyList classe que pode adicionar um item, remover um item e remover todos os itens os métodos add, remove, e removeAll atue na lista (um array privado) que não pode ser acessado diretamente de fora.

Abstração: está ocultando o comportamento e os dados não relevantes.A forma como os itens são realmente armazenados, adicionados ou excluídos é ocultada (abstraída).Meus dados podem ser mantidos em um array simples, ArrayList, LinkedList e assim por diante.Além disso, a forma como os métodos são implementados fica oculta do exterior.

Encapsulamento – impor o acesso aos dados internos de forma controlada ou impedir que os membros sejam acessados ​​diretamente.

Abstração – Ocultar os detalhes de implementação de certos métodos é conhecido como abstração

Vamos entender com a ajuda de um exemplo: -

class Rectangle
{
private int length;
private int breadth;// see the word private that means they cant be accesed from 
outside world.
 //now to make them accessed indirectly define getters and setters methods
void setLength(int length)
{  
// we are adding this condition to prevent users to make any irrelevent changes 
  that is why we have made length private so that they should be set according to 
   certain restrictions
if(length!=0)
{
 this.length=length
 }
void getLength()
{
 return length;
 }
 // same do for breadth
}

Agora para abstração defina um método que só pode ser acessado e o usuário não sabe qual é o corpo do método e como ele está funcionando Vamos considerar o exemplo acima, podemos definir uma área de método que calcula a área do retângulo.

 public int area()
 {
  return length*breadth;
 }

Agora, sempre que um usuário usar o método acima, ele obterá apenas a área e não a forma como foi calculada.Podemos considerar um exemplo do método println(), apenas sabemos que ele é usado para impressão e não sabemos como ele imprime os dados.Eu escrevi um blog em detalhes, você pode ver o link abaixo para mais informaçõesabstração vs encapsulamento

Vale a pena notar que esses termos têm definições padronizadas do IEEE, que podem ser pesquisadas em https://pascal.computer.org/.

abstração

  1. visão de um objeto que se concentra nas informações relevantes para um propósito específico e ignora o restante das informações
  2. processo de formulação de uma visão
  3. processo de supressão de detalhes irrelevantes para estabelecer um modelo simplificado, ou o resultado desse processo

ocultação de informações

  1. técnica de desenvolvimento de software em que as interfaces de cada módulo revelam o mínimo possível sobre o funcionamento interno do módulo e outros módulos são impedidos de usar informações sobre o módulo que não estão na especificação da interface do módulo
  2. contenção de uma decisão de design ou implementação em um único módulo, de modo que a decisão fique oculta de outros módulos

encapsulamento

  1. técnica de desenvolvimento de software que consiste em isolar uma função do sistema ou um conjunto de dados e operações sobre esses dados dentro de um módulo e fornecer especificações precisas para o módulo
  2. conceito de que o acesso aos nomes, significados e valores das responsabilidades de uma classe é totalmente separado do acesso à sua realização
  3. ideia de que um módulo possui um exterior distinto de seu interior, que possui uma interface externa e uma implementação interna
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top