Абстракция VS Скрытие информации VS Инкапсуляция
Можете ли вы сказать мне, в чем разница между абстракцией и информацией, скрывающейся в разработке программного обеспечения?
Я сбит с толку. Абстракция скрывает детали реализации, а информация скрывает абстрагирует все детали чего-либо.
Обновление: я нашел хороший ответ для этих трех понятий. Смотрите отдельный ответ ниже для нескольких цитат, взятых оттуда.
20 ответов
Перейти к источнику! Грэди Буч говорит (в "Объектно-ориентированном анализе и проектировании", стр. 49, второе издание):
Абстракция и инкапсуляция являются взаимодополняющими понятиями: абстракция фокусируется на наблюдаемом поведении объекта... инкапсуляция фокусируется на реализации, которая порождает такое поведение... инкапсуляция чаще всего достигается с помощью сокрытия информации, то есть процесса сокрытия всех секреты объекта, не способствующие его существенным характеристикам.
Другими словами: абстракция = объект извне; инкапсуляция (достигается за счет сокрытия информации) = объект внутри,
Пример: в.NET Framework System.Text.StringBuilder
Класс обеспечивает абстракцию над строковым буфером. Эта абстракция буфера позволяет работать с буфером без учета его реализации. Таким образом, вы можете добавлять строки в буфер без учета того, как StringBuilder
внутренне отслеживает такие вещи, как указатель на буфер и управление памятью, когда буфер заполнен (что он делает с инкапсуляцией через сокрытие информации).
Р.П.
ОП обновил свой вопрос несколькими цитатами, которые он нашел, а именно в статье Эдварда В. Берара под названием "Абстракция, инкапсуляция и сокрытие информации". Я повторно публикую немного расширенную и переформатированную версию обновления ОП, поскольку она должна быть ответом сама по себе.
(Все цитаты взяты из статьи, упомянутой выше.)
Абстракция:
"Одной из причин путаницы в отношении абстракции является ее использование как процесса и сущности. Абстракция, как процесс, обозначает извлечение существенных деталей об элементе или группе предметов, игнорируя при этом несущественные детали. Абстракция как сущность, обозначает модель, представление или какое-либо другое сфокусированное представление для фактического элемента ".
Сокрытие информации:
"Его интерфейс или определение были выбраны, чтобы показать как можно меньше о его внутренней работе". - [Парнас, 1972b]
"Абстракция может быть […] использована в качестве метода для определения того, какая информация должна быть скрыта".
"Путаница может возникнуть, когда люди не могут различить сокрытие информации и методику (например, абстракцию), которая используется, чтобы помочь определить, какая информация должна быть скрыта".
Инкапсуляция:
"Это […] относится к созданию капсулы, в случае концептуального барьера, вокруг некоторой коллекции вещей". - [Wirfs-Brock et al, 1990]
"Как процесс, инкапсуляция означает действие по включению одного или нескольких элементов в […] контейнер. Инкапсуляция, как объект, относится к пакету или вложению, которое содержит (содержит, включает в себя) один или несколько элементов".
"Если инкапсуляция была" тем же самым, что и сокрытие информации ", то можно утверждать, что" все, что было инкапсулировано, также было скрыто ". Это явно не правда ".
Заключение:
"Абстракция, сокрытие информации и инкапсуляция - это очень разные, но тесно связанные понятия. Можно утверждать, что абстракция - это метод, который помогает нам определить, какая конкретная информация должна быть видимой, а какая информация должна быть скрыта. Инкапсуляция является техникой. для упаковки информации таким образом, чтобы скрыть то, что должно быть скрыто, и сделать видимым то, что должно быть видимым ".
Abstraction
скрывает детали реализации, предоставляя слой поверх основной функциональности.
Information Hiding
скрывает данные, на которые влияет эта реализация. Использование private
а также public
подпадает под это. Например, скрытие переменных классов.
Encapsulation
просто группирует все похожие данные и функции в группу, например Class
в программировании; Packet
в сети.
Используя классы, мы реализуем все три понятия - Abstraction
, Information Hiding
а также Encapsulation
Пожалуйста, не усложняйте простые понятия.
Инкапсуляция: Объединение данных и методов в единый блок - это Инкапсуляция (например, Класс)
Абстракция: это представляет собой представление только самых важных вещей, не включая второстепенных деталей. (например, интерфейс)
ПРИМЕРЫ И ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ GOTO:
http://thecodekey.com/C_VB_Codes/Encapsulation.aspx
http://thecodekey.com/C_VB_Codes/Abstraction.aspx
Утвержденные определения здесь
PS: я также помню определение из книги под названием C++ Сумиты Арора, которую мы читали в 11-м классе;)
Значение абстракции, данное Оксфордским словарем английского языка (OED), наиболее близким к значению, которое здесь подразумевается, - "Акт разделения в мышлении". Лучшим определением может быть "Представление основных характеристик чего-либо без учета фона или несущественных деталей".
Сокрытие информации - это принцип, согласно которому пользователи программного компонента (такого как класс) должны знать только основные детали того, как инициализировать и получать доступ к компоненту, и не должны знать детали реализации.
Редактировать: мне кажется, что абстракция - это процесс принятия решения, какие части реализации следует скрыть.
Так что не абстракция против информации скрывается. Это информация, скрывающая абстракцию VIA.
абстракция
Абстракция является актом представления основных деталей без включения деталей фона. Абстрактный класс имеет только сигнатуры методов, а реализующий класс может иметь собственную реализацию, таким образом, сложные детали будут скрыты от пользователя. Абстракция ориентирована на внешний вид. Другими словами, абстракция - это отделение интерфейсов от фактической реализации.
Инкапсуляция
Инкапсуляция объясняет связывание элементов данных и методов в единый блок. Сокрытие информации является основной целью инкапсуляции. Инкапсуляция достигается с помощью спецификаторов доступа, таких как private, public, protected. Переменные-члены класса являются закрытыми, поэтому они не могут быть доступны напрямую для внешнего мира. Инкапсуляция фокусируется на внутреннем виде. Другими словами, инкапсуляция - это метод, используемый для защиты информации в объекте от другого объекта.
Абстракция: абстракция - это концепция / техника, используемая для определения того, каким должен быть внешний вид объекта. Сделать доступным только необходимый интерфейс.
Сокрытие информации: это дополнение к Абстракции, так как с помощью сокрытия информации достигается Абстракция. Скрытие всего остального, кроме внешнего вида.
Инкапсуляция: это связывание данных и связанных функций в единое целое. Это облегчает абстракцию и сокрытие информации. Возможность применения таких функций, как доступ к элементу, на устройстве для достижения абстракции и сокрытия информации
Очень коротко
Инкапсуляция: - Скрытие информации
Абстракция: - Скрытие реализации
Abstraction
позволяет сосредоточиться на what the object does
в то время как инкапсуляция означает how an object works
Абстракция - это процесс определения основных характеристик объекта без включения не относящихся к делу и утомительных деталей.
Инкапсуляция - это процесс объединения данных и функций, манипулирующих этими данными в единое целое.
Абстракция и инкапсуляция являются взаимосвязанными, но взаимодополняющими понятиями.
Абстракция - это процесс. Инкапсуляция - это механизм реализации Абстракции.
Абстракция фокусируется на наблюдаемом поведении объекта. Инкапсуляция фокусируется на реализации, которая порождает такое поведение.
Сокрытие информации - это процесс сокрытия деталей реализации объекта. Это результат инкапсуляции.
Абстракция скрывает детали реализации, как вы выразились.
Вы абстрагируете что-то до достаточно высокой точки, что вам нужно будет сделать что-то очень простое, чтобы выполнить действие.
Сокрытие информации скрывает детали реализации. Программирование сложно. Вы можете иметь много вещей, чтобы иметь дело и обрабатывать. Могут быть переменные, которые вы хотите / должны отслеживать очень внимательно. Сокрытие информации гарантирует, что никто случайно не сломает что-либо, используя переменную или метод, который вы публично представили.
Эти 2 понятия очень тесно связаны в объектно-ориентированном программировании.
Инкапсуляция: связывание элементов данных и функций-членов называется инкапсуляцией. Инкапсуляция осуществляется через класс. абстракция: сокрытие использования формы реализации детали или от представления называется абстракцией. пример: int x; мы не знаем, как int будет работать внутри. но мы знаем, что int будет работать. это абстракция.
Стоит отметить, что эти термины имеют стандартизированные определения IEEE, которые можно найти по адресу https://pascal.computer.org/.
абстракция
- вид объекта, который фокусируется на информации, относящейся к конкретной цели, и игнорирует остальную часть информации
- процесс формулирования представления
- процесс подавления несущественных деталей для создания упрощенной модели, или результат этого процесса
сокрытие информации
- методика разработки программного обеспечения, при которой интерфейсы каждого модуля раскрывают как можно меньше информации о внутренней работе модуля, а другим модулям запрещено использовать информацию о модуле, которая не указана в спецификации интерфейса модуля.
- Содержит решение о разработке или реализации в одном модуле, чтобы решение было скрыто от других модулей.
инкапсуляция
- методика разработки программного обеспечения, которая заключается в выделении системной функции или набора данных и операций с этими данными в модуле и предоставлении точных спецификаций для модуля
- Концепция, согласно которой доступ к именам, значениям и ценностям обязанностей класса полностью отделен от доступа к их реализации.
- Идея, что модуль имеет внешнюю сторону, отличную от его внутренней, что он имеет внешний интерфейс и внутреннюю реализацию
Смотрите пост Джоэла о Законе Утечки Абстракций
По сути, абстрагирование дает вам свободу мысли о концепциях более высокого уровня. Непрограммная аналогия заключается в том, что большинство из нас не знает, откуда берется наша еда или как она производится, но тот факт, что нам (как правило) не приходится беспокоиться об этом, освобождает нас от необходимости заниматься другими вещами, такими как программирование.
Что касается сокрытия информации, я согласен с помехами.
Я также был очень смущен двумя понятиями Абстракция и Инкапсуляция. Но когда я увидел статью по абстракции на myjavatrainer.com, мне стало ясно, что абстракция и инкапсуляция - это яблоки и апельсины, вы не можете их сравнить, потому что оба требуются.
Инкапсуляция - это то, как создается объект, а абстракция - это то, как объект рассматривается во внешнем мире.
И абстракция, и инкапсуляция - это две из четырех основных концепций ООП, которые позволяют моделировать реальные вещи в объектах, чтобы вы могли реализовать их в своей программе и коде. Многие новички путаются между абстракцией и инкапсуляцией, потому что они оба очень похожи. Если вы спросите кого-нибудь, что такое абстракция, он ответит, что это концепция ООП, которая фокусируется на соответствующей информации, скрывая ненужные детали, и когда вы спросите об инкапсуляции, многие скажут, что это еще одна концепция ООП, которая скрывает данные от внешнего мира. Определения не ошибочны, поскольку и абстракция, и инкапсуляция что-то скрывают, но ключевое различие заключается в намерении.
Абстракция скрывает сложность, давая вам более абстрактную картину, своего рода вид на 10000 футов, в то время как инкапсуляция скрывает внутреннюю работу, чтобы вы могли изменить ее позже. Другими словами, абстракция скрывает детали на уровне дизайна, а инкапсуляция скрывает детали на уровне реализации.
Абстракция просто означает технику, в которой пользователю видны только существенные детали программного обеспечения, чтобы помочь пользователю использовать программное обеспечение или работать с ним, таким образом, детали реализации этого программного обеспечения не отображаются (становятся невидимыми).Инкапсуляция - это метод, при котором пакет содержит один или несколько элементов, и, следовательно, некоторая информация (особенно детали программы) стала видимой, а другая - невидимой для пользователя, поэтому инкапсуляция достигается за счет сокрытия информации. В итоге. Абстракция предназначена для наблюдаемого поведения (внешне), а инкапсуляция - для невидимости (внутренне), но эти два действительно дополняют друг друга.
Абстракция позволяет рассматривать сложный процесс как простой процесс. Например, стандартная "файловая" абстракция обрабатывает файлы как непрерывный массив байтов. Пользователь / разработчик даже не должен думать о проблемах кластеров и фрагментации. (Абстракция обычно отображается в виде классов или подпрограмм.)
Под сокрытием информации подразумевается защита ваших абстракций от злонамеренных / некомпетентных пользователей. Ограничивая контроль над некоторым состоянием (например, выделением жесткого диска) первоначальному разработчику, огромные объемы обработки ошибок становятся избыточными. Если никто, кроме драйвера файловой системы, не может записать на жесткий диск, то драйвер файловой системы точно знает, что было записано на жесткий диск и куда. (Обычное проявление этой концепции private
а также protected
ключевые слова на ОО языках.)
Чтобы абстрагировать что-то, нам нужно скрыть детали или скрыть детали того, что нам нужно абстрагировать. Но оба они могут быть достигнуты путем инкапсуляции.
Таким образом, скрытие информации - это цель, абстракция - это процесс, а инкапсуляция - это техника.
Просто добавив более подробную информацию о InformationHiding, найдено Эта ссылка действительно хороший источник с примерами
Информационное сокрытие - это идея о том, что проектное решение должно быть скрыто от остальной системы, чтобы предотвратить непреднамеренное соединение. InformationHiding - это принцип дизайна. InformationHiding должен сообщать, как вы инкапсулируете вещи, но, конечно, это не обязательно.
Инкапсуляция - это особенность языка программирования.
Инкапсуляция: связывание данных и методы, которые на них воздействуют. это позволяет скрывать данные от всех других методов в других классах. пример: MyList
класс, который может добавить элемент, удалить элемент и удалить все элементы методами add
, remove
, а также removeAll
действовать по списку (частному массиву), к которому нельзя получить доступ напрямую извне.
Абстракция: скрывает несоответствующее поведение и данные. То, как элементы хранятся, добавляются или удаляются, скрыто (абстрагировано). Мои данные могут храниться в простом массиве, ArrayList, LinkedList и так далее. Кроме того, как методы реализованы, скрыто извне.
Инкапсуляция - обеспечение контролируемого доступа к внутренним данным или предотвращение прямого доступа к членам.
Абстракция - скрытие деталей реализации определенных методов называется абстракцией.
Давайте разберемся с помощью примера:
class Rectangle
{
private int length;
private int breadth;// see the word private that means they cant be accesed from
outside world.
//now to make them accessed indirectly define getters and setters methods
void setLength(int length)
{
// we are adding this condition to prevent users to make any irrelevent changes
that is why we have made length private so that they should be set according to
certain restrictions
if(length!=0)
{
this.length=length
}
void getLength()
{
return length;
}
// same do for breadth
}
Теперь для абстракции определите метод, к которому можно получить доступ, и пользователь не знает, что является телом метода и как он работает. Давайте рассмотрим приведенный выше пример, мы можем определить область метода, которая вычисляет площадь прямоугольника.
public int area()
{
return length*breadth;
}
Теперь, когда пользователь использует вышеуказанный метод, он просто получает площадь, а не способ, которым она рассчитывается. Мы можем рассмотреть пример метода println(), мы просто знаем, что он используется для печати, и мы не знаем, как он печатает данные. Я написал блог подробно, вы можете увидеть ссылку ниже для получения дополнительной информации абстракции против инкапсуляции
Прочитав все приведенные выше ответы один за другим, я не могу удержаться от публикации
абстракция включает в себя средство для определения объектов, которые представляют абстрактных "актеров", которые могут выполнять работу, сообщать о состоянии и изменять их, а также "общаться" с другими объектами в системе.
Инкапсуляция совершенно ясна сверху ->
Термин "инкапсуляция" относится к сокрытию деталей состояния, но расширение концепции типов данных с более ранних языков программирования для более сильной связи поведения с данными и стандартизация способа взаимодействия различных типов данных является началом абстракции.
справочная вики