Я пытаюсь понять определение «абстракции» в ООП.
Я столкнулся с несколькими основными определениями. Они все действительны? Один из них не прав? Я не совсем понимаю. (Я переписал определение своими словами).
Определение 1:
Абстракция - это концепция взятия какого-либо объекта из реального мира и преобразования его в термины программирования. Такие , как создание Human
класса и придав ему int health
, int age
, String name
и т.д. свойства и eat()
т.д. методы.
Определение 2:
Более общее определение. Абстракция - это концепция, которая имеет место в любой части программной системы, где требуется «сделать вещи более общими / простыми / абстрактными» . Несколько примеров:
Иерархия наследования, где более высокие классы являются более простыми или более общими и определяют более общую и абстрактную реализацию. В то время как низшие классы в иерархии являются более конкретными и определяют более подробные реализации.
Использование инкапсуляции, чтобы скрыть детали реализации класса от других классов, что делает класс более «абстрактным» (более простым) для внешнего мира программного обеспечения.
Определение 3
Другое общее определение: абстракция - это концепция переноса фокуса с деталей и конкретной реализации вещей на типы вещей (то есть классов), доступные операции (то есть методы) и т. Д., Что делает программирование более простым, более общим, и более абстрактно. (Это может иметь место в любом месте и в любом контексте в программной системе). Это происходит, например, при инкапсуляции, потому что инкапсуляция означает скрывать детали реализации и показывать только типы вещей и их более общие и абстрактные определения. Другой пример - использование List
объекта на Java. этот объект на самом деле использует детали реализации a ArrayList
или a LinkedList
, но эта информация абстрагируется с использованием более общего имени List
.
Является ли какое-либо из этих определений правильным? (Я имею в виду наиболее общепринятые и принятые определения).