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