Aqui estão as breves definições de encapsulamento e abstração.
Abstração:
O processo de abstração em Java é usado para ocultar certos detalhes e mostrar apenas os recursos essenciais do objeto. Em outras palavras, ele lida com a visão externa de um objeto (interface). O único bom exemplo que vejo para isso em sites diferentes é a interface.
Encapsulamento:
Trata-se basicamente de ocultar o estado do objeto com a ajuda de modificadores como privado, público, protegido etc.
O que nós conseguimos com modificadores como private
, public
também esconde detalhes desnecessários de fora o mundo do lado que não é nada, mas também um conceito de abstração
Portanto, a partir da explicação acima, parece que o encapsulamento faz 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 apenas com abstração? Estou certo de que deve haver alguma diferença importante que os distinga, mas a maior parte do material na rede diz quase a mesma coisa para os dois.
Embora essa questão tenha sido levantada neste fórum também, mas estou postando novamente com dúvidas específicas. Algumas respostas também dizem que abstração é um conceito e encapsulamento é implementação. Mas eu não compro isso - se é verdade, posso pensar que esses dois conceitos diferentes são fornecidos para nos confundir.
Atualização: - Após 5 anos, criei minha própria resposta, qual é a essência com base nas respostas deste post e abaixo
private
public
, como eles fornecem apenas informações / ocultação de dados, o que fazemos porque é uma boa prática proteger os dados da instância.
An 'abstraction' (noun) is a concept that acts as a super-categorical noun for all subordinate concepts, and connects any related concepts as a group, field, or category.