Estou tentando entender a definição de 'abstração' no OOP.
Eu encontrei algumas definições principais. Eles são todos válidos? Um deles está errado? Estou confuso. (Reescrevi a definição com minhas próprias palavras).
Definição 1:
Abstração é o conceito de pegar um objeto do mundo real e convertê-lo em termos de programação. Tal como a criação de uma Human
classe e dando-lhe int health
, int age
, String name
, etc. propriedades, e eat()
métodos etc.
Definição 2:
Uma definição mais geral. Abstração é um conceito que ocorre em qualquer lugar de um sistema de software onde está envolvido 'tornar as coisas mais gerais / mais simples / abstratas' . Alguns exemplos:
Uma hierarquia de herança, onde as classes mais altas são mais simples ou mais gerais e definem uma implementação mais geral e abstrata. Enquanto as classes mais baixas na hierarquia são mais concretas e definem implementações mais detalhadas.
Usar o encapsulamento para ocultar os detalhes da implementação de uma classe de outras classes, tornando a classe mais 'abstrata' (mais simples) para o mundo externo do software.
Definição 3
Outra definição geral: Abstração é o conceito de mudar o foco dos detalhes e da implementação concreta de coisas, para os tipos de coisas (por exemplo, classes), as operações disponíveis (por exemplo, métodos), etc., tornando a programação mais simples, mais geral, e mais abstrato. (Isso pode ocorrer em qualquer lugar e em qualquer contexto do sistema de software). Ocorre, por exemplo, ao encapsular, porque encapsular significa ocultar os detalhes da implementação e mostrar apenas os tipos de coisas e suas definições mais gerais e abstratas. Outro exemplo seria usar um List
objeto em Java. esse objeto realmente usa os detalhes de implementação de um ArrayList
ou a LinkedList
, mas essas informações são abstraídas usando o nome mais geral List
.
Alguma dessas definições está correta? (Estou me referindo à definição mais convencional e aceita ).