Encapsulação contra abstração?

Aqui estão as breves definições de encapsulação e abstração.

abstracção:

o processo de abstração em Java é usado para esconder certos detalhes e mostrar apenas as características essenciais do objeto. Por outras palavras:, ele lida com a vista exterior de um objeto (interface). O único bom exemplo que vejo para isso em diferentes sites é interface.

Encapsulamento:

É basicamente sobre esconder o estado. de objectos com a ajuda de modificadores como privados, públicos, protegidos, etc. nós expomos o estado através métodos públicos apenas se necessário.

O que conseguimos com modificadores como private, public também esconde detalhes desnecessários do mundo exterior que não é nada, mas também um conceito de abstração

Então, a partir da explicação acima parece que encapsulação é uma parte da abstração ou podemos dizer que é um subconjunto da abstração. Mas por que então o termo encapsulamento é inventado quando podemos lidar com isso só com abstracção? Estou certo de que deve haver uma grande diferença que os distinga, mas a maior parte do material na net diz quase a mesma coisa para ambos.

([3]) Embora esta questão tenha sido levantada neste fórum mais cedo, mas eu estou postando novamente com dúvidas específicas. Algumas respostas também dizem que abstração é um conceito e encapsulação é implementação. Mas eu não acredito nisso-se for verdade, então eu posso pensar que esses dois conceitos diferentes são fornecidos para confundir no.

Update: - Depois de 5 anos eu vim acima com minha própria resposta que é o gist baseado em Respostas neste post e Abaixo de uns

  1. diferença entre abstração e encapsulação?
  2. encapsulação vs abstração exemplo do mundo real
 122
Author: Community, 2012-01-22

14 answers

Encapsulamento é uma estratégia usada como parte da abstração. Encapsulamento refere - se ao estado dos objetos-objetos encapsulam seu estado e o escondem do exterior; usuários externos da classe interagem com ele através de seus métodos, mas não podem acessar o estado de classes diretamente. Assim, a classe abstrai os detalhes de implementação relacionados com o seu estado.

Abstracção é um termo mais genérico, também pode ser alcançado por (entre outros) subclassificação. Por exemplo, a interface List na biblioteca padrão é uma abstração para uma sequência de itens, indexada pela sua posição, exemplos concretos de um List são um ArrayList ou um LinkedList. Code that interacts with a {[[0]} abstracts over the detail of which kind of a list it is using.

A abstração muitas vezes não é possível sem esconder o estado subjacente por encapsulação - se uma classe expõe o seu estado interno, não pode mudar o seu funcionamento interno, e portanto não pode ser captado.
 92
Author: Martin Probst, 2015-01-03 11:04:53

Abstração é o conceito de descrever algo em termos mais simples, isto é, abstrair os detalhes, a fim de se concentrar no que é importante (isto também é visto na Arte abstrata, por exemplo, onde o artista se concentra nos blocos de construção de imagens, como a cor ou formas). A mesma ideia se traduz em OOP usando uma hierarquia de herança, onde conceitos mais abstratos estão no topo e ideias mais concretas, no fundo, se baseiam em suas abstrações. No seu máximo nível abstrato não há detalhes de implementação em tudo e talvez muito poucas commonalities, que são adicionados à medida que a abstração diminui.

Como um exemplo, no topo pode ser uma interface com um método único, então o próximo nível, fornece várias classes abstratas, que podem ou não preencher alguns dos detalhes sobre o nível superior, mas ramos adicionando seus próprios métodos abstratos, em seguida, para cada uma destas classes abstratas são classes concretas fornecendo implementações de todos os outros métodos.

Encapsulamento é uma técnica . Pode ou não ser para ajudar na abstração, mas é certamente sobre esconder informações e/ou organização. Exige que os dados e funções sejam agrupados de alguma forma - é claro que a boa prática da OOP exige que eles sejam agrupados por abstração. No entanto, existem outras utilizações que apenas auxiliam na manutenção, etc.

 110
Author: Robert, 2012-01-22 12:32:51
A encapsulação é uma parte da abstração ou podemos dizer que é um subconjunto de abstracção
São conceitos diferentes.
  • A abstracção é o processo de refinação de todas as atributos sem necessidade/sem importância de um objecto e manter apenas o características mais adequadas para o seu domínio.

    Por exemplo, para uma pessoa: você decide manter o primeiro e último nome e SSN. Idade, altura, peso etc são ignorados como irrelevantes.

    A abstracção é onde o teu design começa.

  • O encapsulamento é o próximo passo em que reconhece as operações adequadas na atributos que aceitou manter durante o processo de abstração. É a Associação dos dados com a operação que atua sobre eles.
    Ou seja, os dados e os métodos são agrupados.
 29
Author: Cratylus, 2012-01-22 12:22:17
A encapsulação está a esconder-se. dados desnecessários {[5] } numa cápsula ou unidade

A abstracção está a mostrar característica essencial de um objecto

A encapsulação é usada para esconder o seu membro de fora da classe e interface.Usando modificadores de acesso fornecidos em c#.como público, privado, protegido etc. exemplo:

Class Learn
{
  private int a;         // by making it private we are hiding it from other
  private void show()   //class to access it
  {
   console.writeline(a);
  }
}
Aqui temos dados embrulhados numa unidade ou cápsula, ou classe I. E.
A abstracção é exactamente o oposto de Encapsulamento.

A abstracção é usada para mostrar dados importantes e relevantes ao utilizador. melhor exemplo do mundo real Em um telefone celular, você vê seus diferentes tipos de funcionalidades como câmera, mp3 player, Função de chamada, função de gravação, multimídia etc. É abstração, porque você está vendo apenas informações relevantes em vez de sua Engenharia interna.

 abstract class MobilePhone
    {
        public void Calling();       //put necessary or essential data
        public void SendSMS();       //calling n sms are main in mobile
    }

    public class BlackBerry : MobilePhone   // inherited main feature
    {
        public void FMRadio();            //added new
        public void MP3();
        public void Camera();
        public void Recording();

    }
 23
Author: varsha, 2015-04-17 07:46:34

Abstração é um termo muito geral, e abstração em software não se limita a linguagens orientadas a objetos. Uma definição de dicionário:"o ato de considerar algo como uma qualidade geral ou característica, além de realidades concretas, objetos específicos, ou instâncias reais".

A linguagem de montagem pode ser considerada como uma abstração do Código da máquina -- a montagem expressa os detalhes essenciais e a estrutura do Código da máquina, mas liberta-o de ter que pensar sobre o código da máquina. opcodes usados, o layout do código na memória, fazendo saltos ir para o endereço certo, etc. A API do seu sistema operativo é uma abstração da máquina subjacente. O seu compilador fornece uma camada de abstração que o protege dos detalhes da linguagem de montagem. A pilha TCP/IP incorporada no seu sistema operativo abstrai os detalhes da transmissão de bits através de uma rede. Se você descer até o silício bruto, as pessoas que projetaram sua CPU fizeram isso usando circuito diagramas escritos em termos de "díodos" e "transístores", que são abstrações de como os elétrons viajam através de cristais de semicondutores.

No software, Tudo é uma abstração. Nós construímos programas que simulam ou modelam algum aspecto da realidade, mas por necessidade nossos modelos sempre abstraem alguns detalhes da "coisa real". Construímos camada sobre camada sobre camada de abstrações, porque é a única maneira de fazermos alguma coisa. (Imagine que você estava tentando fazer, digamos, um sudoku solucionador, e você teve que projetá-lo usando apenas cristais semicondutores. "OK, preciso de um pedaço de silício tipo N aqui...")

Em comparação, "encapsulação" é um termo muito específico e limitado. Algumas das outras respostas a esta pergunta já deram boas definições para ela.

 14
Author: Alex D, 2012-01-22 12:41:32

Respondendo à minha pergunta depois de 5 anos, pois sinto que ainda precisa de mais detalhes

Abstracção:

Definição Técnica: - Abstração é um conceito para esconder detalhes desnecessários (complexos ou simples) e apenas mostrar as características essenciais do objeto. Não existe execução aqui é apenas um conceito

O que significa praticamente: - Quando digo que a minha empresa precisa de algum meio/dispositivo para que os empregados possam ligar-se ao cliente . Este é o forma mais pura de abstracção(como a interface em java) como esse dispositivo / meio pode ser Telefone ou internet ou skype ou em pessoa ou e-mail, etc. Eu não vou entrar em detalhes de dispositivo/meio

Mesmo quando digo que a minha empresa precisa de um meio-dispositivo para que os empregados possam ligar-se ao cliente através de uma chamada de voz. Então também estou falando abstrato, mas em um nível um pouco mais baixo como dispositivo / meio pode ser Telefone ou skype ou algo mais etc Agora, quando digo que a minha empresa precisa de telefone para que os empregados pode se conectar ao cliente através de chamada de voz. Então também estou falando abstrato, mas em um nível um pouco mais baixo como o telefone pode ser de qualquer empresa como Iphone ou samsung ou Nokia etc

Encapsulação: - É basicamente sobre esconder o estado (Informação) do objeto com a ajuda de modificadores como privado,público,Protegido etc. expomos o estado através de métodos públicos apenas se necessário.

O que significa praticamente: Agora, quando digo que a minha empresa precisa de iphone para que os funcionários possam ligue-se ao cliente através de uma chamada de voz.Agora estou falando de algum objeto concreto (como o iphone). Mesmo eu não vou entrar em Pitty gritty de iphone aqui também, mas iphone tem algum estado / Concreto info / implementação associada a ele onde dispositivo / meio não tem. Quando eu disser objeto concreto, na verdade significa qualquer objeto que tenha alguma (Não completa como a classe abstrata java) implementação/informação associada a ele.

Então o iphone realmente usou aqui encapsulação como estratégia para esconder seu estado / informação e expor apenas aqueles que ele acha que devem ser expostos. Assim, tanto a abstracção como a encapsulação escondem alguns detalhes desnecessários, mas a abstracção no nível do conceito e encapsulamento efectivamente a nível da execução

Este é o essencial com base nas respostas neste post e abaixo das respostas

  1. diferença entre abstração e encapsulação?
  2. encapsulação vs abstração exemplo do mundo real
 11
Author: M Sach, 2017-05-23 12:18:22

Encapsulamento - o processo de esconder Componentes da classe para impedir o acesso direto do exterior. Ele é alcançado usando modificador "privado" para impedir o acesso direto a alguns membros da classe (campo de dados ou método) de outras classes ou objetos, enquanto isso, proporcionando acesso a esses membros privados por membros públicos (Interface). Isso torna os membros da classe protegidos como órgãos humanos escondidos/encapsulados sob a pele ou algum Escudo.

Abstracção - A princípio deve ser seguido por escrito programa OOP que diz"você deve incluir na classe apenas componentes que são interessantes na tarefa do programa". Por exemplo: o estudante objeto tem um monte de personagens como um humano: nome, idade, peso, cor do cabelo, cor dos olhos, etc. Mas, quando você cria uma classe no OOP para trabalhar com os alunos você deve incluir apenas aqueles personagens que realmente importam para a base de dados de estudantes: nome, idade, especialidade, nível, marcas ... etc. em C++ você pode criar classe abstrata por usando o modificador "virtual" com quaisquer métodos na classe e que vai torná-lo inutilizável em direto, mas você pode derivar outras classes a partir dele e criar implementação para seus membros com a adição de membros necessários com base na tarefa.

 5
Author: Red, 2015-12-12 13:50:06
Foi assim que percebi:

Na programação orientada a objectos, temos algo chamado classes . Para que servem? Eles são para armazenar o estado e para armazenar alguns métodos para alterar o estado i.e., eles são encapsulamento estado e de seus métodos.

Ele(classe) não se importa com a visibilidade do seu próprio ou do seu conteúdo. Se nós escolhemos esconder o estado ou alguns métodos, é informação esconder.

Agora, tome o cenário de uma herança. Temos uma classe base e um par de classes derivadas (herdadas). O que faz aqui a turma da base? É abstraindo algumas coisas das classes derivadas. Todos são diferentes, certo? Mas, nós os misturamos para escrever bons programas orientados a objetos. Espero que ajude.
 4
Author: abhilash, 2014-03-29 04:36:22

A abstração delineia uma representação simplificada e específica de contexto de algo; ignora detalhes contextualmente irrelevantes e inclui detalhes contextualmente importantes.

Encapsulamento restringe o acesso externo às partes de alguma coisa e pacotes o estado dessa coisa com os procedimentos que usam o estado.


Veja as pessoas, por exemplo. No contexto da cirurgia, uma abstração útil ignora as crenças religiosas de uma pessoa e inclui o corpo da pessoa. Além disso, as pessoas encapsulam suas memórias com os processos de pensamento que usam essas memórias. Uma abstração não precisa ter encapsulação; por exemplo, uma pintura de uma pessoa não esconde suas partes nem pacotes procedimentos com seu estado. E, encapsulação não precisa ter uma abstração associada; por exemplo, pessoas reais (não abstratas) encapsulam seus órgãos com seu metabolismo.
 3
Author: Shaun Luttin, 2017-01-29 00:21:38

Nota: estou a partilhar isto. Não significa que aqui não seja uma boa resposta, mas porque eu facilmente entendi.

Resposta:

Quando uma classe é conceptualizada, quais são as propriedades que podemos ter nela dado o contexto. Se estamos projetando um Animal de classe no contexto de um zoológico, é importante que tenhamos um atributo como animalType para descrever doméstico ou Selvagem. Este atributo pode não fazer sentido quando projetamos a classe em um diferente contexto.

Da mesma forma, Quais são os comportamentos que vamos ter na aula? A abstração também é aplicada aqui. O que é necessário ter aqui e o que será uma overdose? Depois cortamos algumas informações da turma. Este processo está aplicando abstração. Quando pedimos a diferença entre encapsulação e abstração, eu diria:, encapsulação usa a abstração como um conceito. Então, é apenas encapsulação. Não, abstração é mesmo um conceito aplicado como parte da herança e polimorfismo.

Vai. Aqui para mais explicações sobre este tópico.

 1
Author: Yubaraj, 2013-08-25 07:52:13
Vamos tentar entender de uma maneira diferente.

O que pode acontecer se a abstração não estiver lá e o que pode acontecer se a encapsulação não estiver lá.

Se a abstração não está lá, então você pode dizer que o objeto é usar menos. Você não pode identificar o objeto nem acessar qualquer funcionalidade dele. Tome um exemplo de uma TV, se você não tem uma opção para ligar, mudar de canal, aumentar ou diminuir o volume, etc. então para que serve a televisão e como a usas ?

Se Encapsulamento não está lá ou não está sendo implementado corretamente, então você pode usar mal o objeto. Os dados / componentes podem ser utilizados de forma abusiva. Tome o mesmo exemplo de TV, se não houver encapsulamento feito para o volume de TV, então o controlador de volume pode ser usado abusivamente, fazendo-o chegar abaixo ou ir além de seu limite (0-40/50).

 1
Author: satya, 2015-09-20 13:35:43

A encapsulação protege para colapsar o comportamento interno do objecto / instância de uma entidade externa. Assim, deve ser fornecido um controlo para confirmar que os dados que estão a ser fornecidos não irão prejudicar o sistema interno de instância/objecto para sobreviver à sua existência.

Bom exemplo, Divididor é uma classe que tem duas instância variável dividendo e divisor e um método getDividedValue.

Pode pensar por favor, se o divisor está definido para 0 então sistema/comportamento interno vou partir.

Então, o comportamento interno do objecto pode ser protegido abrindo excepções através de um método.
 1
Author: Ranjit Kumar, 2016-07-01 18:51:10

Encapsulação (dados de ligação e Código)

  • Encapsulação é o mecanismo que liga o código e os dados que ele manipula, e mantém ambos seguros de interferência externa e mau uso.

  • Em uma linguagem orientada a objetos, código e dados podem ser combinados de tal forma que uma "caixa negra" auto-contida é criada. Quando o código e os dados estão ligados desta forma, um objeto é criado. Em outras palavras, um objeto é o dispositivo que suporta encapsulação.

  • Encapsulamento leva ao conceito de esconder dados, mas o conceito de encapsulamento não deve ser restrito a esconder informações.

  • Encapsulamento representa claramente a capacidade de agrupar dados e funcionalidades relacionados dentro de uma única entidade autônoma chamada classe.

Abstracção (esconder a forma como os dados são armazenados e esconder a forma como a função é implementada)

  • A abstração de dados é um processo de representar as características essenciais sem incluir pormenores de execução.

  • A abstração é uma das mais poderosas e vitais características fornecidas pela programação orientada a objetos.

  • A idéia principal por trás da abstração de dados é dar uma separação clara entre propriedades do tipo de dados e os detalhes de implementação associados. Esta separação é alcançada a fim de que as propriedades do tipo de dados abstratos são visíveis para a interface de usuário e o os detalhes da implementação estão escondidos.

  • Abstração é separar as propriedades lógicas dos detalhes de implementação. Por exemplo, a condução do carro é uma propriedade lógica e design do motor é o detalhe de implementação.

 1
Author: Saurabh Raoot, 2018-03-13 08:45:37
Numa frase simples, posso dizer: a essência da abstração é extrair propriedades essenciais, omitindo detalhes inessenciais. Mas por que devemos omitir detalhes inessenciais? O principal motivador é a prevenção do risco de mudança. Você pode considerar abstração é o mesmo que encapsulação. Mas encapsulamento significa o ato de fechar um ou mais itens dentro de um recipiente, não escondendo detalhes. Se você fizer o argumento de que " tudo o que estava encapsulado também estava escondido."Isto é obviamente falso. Por exemplo, mesmo que a informação possa ser encapsulada dentro de estruturas de registro e arrays, esta informação não é geralmente escondida (a menos que escondida através de algum outro mecanismo).
 0
Author: Alireza Rahmani, 2018-10-02 10:54:38