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 todos os detalhes de algo.
Atualização: Encontrei uma boa resposta para esses três conceitos. Veja a resposta separada abaixo para várias citações tiradas de lá .
Respostas:
Vá para a fonte! Grady Booch diz (em Análise e Design Orientado a Objetos, página 49, segunda edição):
Em outras palavras: abstração = o objeto externamente; encapsulamento (alcançado através da ocultação de informações) = o objeto internamente,
Exemplo: No .NET Framework, a
System.Text.StringBuilder
classe fornece uma abstração sobre um buffer de cadeia de caracteres. Essa abstração de buffer permite trabalhar com o buffer sem levar em consideração sua implementação. Assim, você pode anexar seqüências de caracteres ao buffer, sem levar em consideração como oStringBuilder
monitor controla internamente coisas como o ponteiro para o buffer e gerenciar a memória quando o buffer fica cheio (o que ocorre com o encapsulamento via ocultação de informações).rp
fonte
O OP atualizou sua pergunta com várias citações que ele havia encontrado, a saber em um artigo de Edward V. Berard intitulado "Abstração, encapsulamento e ocultação de informações" . Estou publicando novamente uma versão um pouco expandida e reformatada da atualização do OP, pois ela deve ser uma resposta por si só.
(Todas as citações são retiradas do artigo mencionado acima.)
Abstração:
Ocultar informações:
Encapsulamento:
Conclusão:
fonte
Information Hiding
(ou esconderijo de implementação), enquanto que um genéricoclass
alcança encapsulamento e abstração é conseguido através deprivate
acessoAbstraction
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. O usoprivate
epublic
vem com 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
na programação;Packet
em rede.Através do uso de Classes, vamos implementar todos os três conceitos -
Abstraction
,Information Hiding
eEncapsulation
fonte
Por favor, não complique conceitos simples.
Encapsulamento : agrupar dados e métodos em uma única unidade é encapsulamento (por exemplo, classe)
Abstração : É um ato de representar apenas as coisas essenciais sem incluir detalhes do plano 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
PS: Também me lembro da definição de um livro chamado C ++ de Sumita Arora que lemos na 11ª classe;)
fonte
O significado da 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 pode ser 'Representando os recursos essenciais de algo sem incluir detalhes de segundo plano ou detalhes não essenciais'.
Ocultar informações é o princípio de que os usuários de um componente de software (como uma classe) precisam conhecer apenas os detalhes essenciais de como inicializar e acessar o componente, e não precisam conhecer os detalhes da implementação.
Edit : Parece-me que a abstração é o processo de decidir quais partes da implementação devem ser ocultadas .
Portanto, não é abstração VERSUS ocultação de informações. São informações ocultando VIA abstração.
fonte
Abstração
Abstração é um ato de representar detalhes essenciais, sem incluir os detalhes do plano de fundo. Uma classe abstrata possui apenas assinaturas de métodos e a classe de implementação pode ter sua própria implementação, dessa maneira os detalhes complexos serão ocultados ao usuário. A abstração se concentra na visão externa. Em outras palavras, Abstração é a separação de interfaces da implementação real.
Encapsulamento
O encapsulamento explica a ligação dos membros e métodos dos dados em uma única unidade. Ocultar informações é o principal objetivo do encapsulamento. O encapsulamento é obtido usando especificadores de acesso como privado, público e protegido. As variáveis de membro da classe são tornadas privadas para que não possam ser acessíveis diretamente ao mundo externo. O encapsulamento se concentra na visão interna. Em outras palavras, Encapsulamento é uma técnica usada para proteger as informações em um objeto do outro objeto.
fonte
A abstração está ocultando detalhes da implementação como você o coloca.
Você abstrai algo a um ponto alto o suficiente para ter que fazer algo muito simples para executar uma ação.
Ocultar informações está ocultando detalhes de implementação. A programação é 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 acidentalmente algo usando uma variável ou método que você expôs publicamente.
Esses dois conceitos estão intimamente ligados na programação orientada a objetos.
fonte
Abstração - É o processo de identificar as características essenciais de um objeto sem incluir os detalhes irrelevantes e tediosos.
Encapsulamento - É o processo de inclusão de dados e funções que manipulam esses dados em uma única unidade.
Abstração e encapsulamento são conceitos relacionados, mas complementares.
Abstração é o processo. Encapsulamento é o mecanismo pelo qual a Abstração é implementada.
A abstração se concentra no comportamento observável de um objeto. O encapsulamento se concentra na implementação que dá origem a esse comportamento.
Ocultar informações - é o processo de ocultar os detalhes de implementação de um objeto. É um resultado do encapsulamento.
fonte
Encapsulamento: ligar os membros de dados e as funções de membro é chamado de encapsulamento. o encapsulamento é feito através da classe abstração: ocultar os detalhes da implementação do uso ou da visualização é chamado abstração. ex: int x; não sabemos como o int funcionará internamente. mas sabemos que int funcionará. isso é abstração.
fonte
Abstração: Abstração é o conceito / técnica usada para identificar qual deve ser a visão externa de um objeto. Disponibilizando apenas a interface necessária.
Ocultar informações: É complementar à abstração, pois através da ocultação de informações é obtida. Escondendo tudo o resto, exceto a visão externa.
Encapsulamento: vincula dados e funções relacionadas a 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 ocultação de abstração e informações
fonte
Veja o post de Joel sobre a Lei das Abstrações com Vazamento
JoelOnsoftware
Basicamente, abstrair oferece a liberdade de pensar em conceitos de nível superior. Uma analogia que não é de programação é que a maioria de nós não sabe de onde vem nossa comida ou como é 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 a interferência.
fonte
Em muito curto
Encapsulamento : - Esconder informações
Abstração : - Implementação oculta
Abstraction
permite que você se concentrewhat the object does
enquanto Encapsulation significahow an object works
fonte
A abstração permite tratar um processo complexo como um processo simples. Por exemplo, a abstração "arquivo" padrão 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.)
Ocultar informações é proteger suas abstrações contra usuários mal-intencionados / incompetentes. Ao restringir o controle de algum estado (alocações do disco rígido, por exemplo) ao desenvolvedor original, enormes quantidades de manipulação de erros se tornam 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 desse conceito é
private
eprotected
palavras - chave nos idiomas OO.)fonte
Para abstrair algo, precisamos ocultar os detalhes ou ocultar os detalhes de algo que precisamos abstrair. Mas, ambos podem ser alcançados por encapsulamento.
Portanto, ocultar informações é uma meta, abstração é um processo e encapsulamento é uma técnica.
fonte
Abstração significa simplesmente a técnica na qual apenas os detalhes essenciais do software são tornados visíveis para o usuário para ajudá-lo a usar ou operar com o software; portanto, os detalhes de implementação desse software não são mostrados (ficam invisíveis). Encapsulamento é a técnica que possui um pacote que contém um ou mais itens e, portanto, algumas informações (principalmente detalhes do programa) se tornaram visíveis e outras não visíveis para o usuário; portanto, o encapsulamento é alcançado através da ocultação de informações. Em suma. Abstração é para comportamento observável (externamente) e encapsulamento é para invisibilidade (internamente), mas esses dois são realmente complementares.
fonte
Apenas adicionando mais detalhes sobre InformationHiding , encontrado Este link é realmente uma boa fonte, com exemplos
fonte
Abstração e Encapsulamento são dois dos quatro conceitos básicos de POO que permitem modelar coisas do mundo real em objetos, para que você possa implementá-las em seu programa e código. Muitos iniciantes ficam confusos entre Abstração e Encapsulamento, porque ambos parecem muito semelhantes. Se você perguntar a alguém o que é Abstração, ele dirá que é um conceito de POO que se concentra em informações relevantes, ocultando detalhes desnecessários, e quando você pergunta sobre Encapsulamento, muitos dirão que é outro conceito de POO que oculta dados de outros países. As definições não estão erradas, pois a Abstração e o Encapsulamento ocultam algo, mas a principal diferença está na intenção.
A abstração oculta a complexidade, fornecendo uma imagem mais abstrata, uma espécie de visão de 10.000 pés, enquanto o Encapsulation oculta o trabalho interno para que você possa alterá-lo mais tarde. Em outras palavras, a abstração oculta detalhes no nível do design, enquanto o encapsulamento oculta os detalhes no nível da implementação.
fonte
Depois de ler todas as respostas acima, uma a uma, não consigo parar de postar
O encapsulamento é bem claro de cima, no entanto ->
wiki de referência
fonte
Eu também estava muito confuso sobre os dois conceitos de Abstração e Encapsulamento. Mas quando vi o artigo sobre 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á-las porque as duas são necessárias.
Encapsulamento é como o objeto é criado, e abstração é como o objeto é visualizado no mundo exterior.
fonte
Encapsulamento: dados de ligação e os métodos que atuam sobre ele. 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 da métodosadd
,remove
eremoveAll
agir de acordo com a lista (uma matriz privada) que não pode ser acessado diretamente a partir do exterior.Abstração: está ocultando dados e comportamento não relevantes. Como os itens são realmente armazenados, adicionados ou excluídos é oculto (abstraído). Meus dados podem ser mantidos em uma matriz simples, ArrayList, LinkedList e assim por diante. Além disso, como os métodos são implementados está oculto do lado de fora.
fonte
Encapsulamento - reforça o acesso aos dados internos de maneira controlada ou impede 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: -
Agora, para abstração, defina um método que só possa ser acessado e o usuário não saiba qual é o corpo do método e como está funcionando. Vamos considerar o exemplo acima, podemos definir uma área de método que calcula a área do retângulo.
Agora, sempre que um usuário usar o método acima, ele obterá a área e não a maneira como ela é 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 obter mais informações abstração vs encapsulamento
fonte
Vale a pena notar que esses termos padronizaram as definições do IEEE, que podem ser pesquisadas em https://pascal.computer.org/ .
abstração
ocultação de informações
encapsulamento
fonte