Абстракция VS Скрытие информации VS Инкапсуляция - PullRequest
158 голосов
/ 24 августа 2008

Можете ли вы сказать мне, в чем разница между абстракцией и информацией, скрывающей в разработке программного обеспечения?

Я в замешательстве. Абстракция скрывает детали реализации и сокрытие информации абстрагирует все детали чего-либо.

Обновление: Я нашел хороший ответ для этих трех понятий. См. Отдельный ответ ниже для нескольких цитат, взятых из там .

Ответы [ 20 ]

146 голосов
/ 24 августа 2008

Перейти к источнику! Грэди Буч говорит (в «Объектно-ориентированном анализе и проектировании», стр. 49, второе издание):

Абстракция и инкапсуляция являются дополнительными понятиями: абстракция фокусируется на наблюдаемом поведении объекта ... инкапсуляция фокусируется на реализации, которая порождает такое поведение ... Инкапсуляция чаще всего достигается с помощью сокрытия информации, которое это процесс сокрытия всех секретов объекта, которые не внести свой вклад в его основные характеристики.

Другими словами: абстракция = объект извне; инкапсуляция (достигается за счет сокрытия информации) = внутренний объект,

Пример: В .NET Framework класс System.Text.StringBuilder обеспечивает абстракцию над строковым буфером. Эта абстракция буфера позволяет работать с буфером без учета его реализации. Таким образом, вы можете добавлять строки в буфер, не обращая внимания на то, как StringBuilder внутренне отслеживает такие вещи, как указатель на буфер и управление памятью, когда буфер заполнен (что он делает с инкапсуляцией через скрытие информации).

гр

74 голосов
/ 01 января 2012

ОП обновил свой вопрос несколькими цитатами, которые он нашел, а именно в статье Эдварда В. Берара под названием "Абстракция, инкапсуляция и сокрытие информации" . Я повторно публикую немного расширенную и переформатированную версию обновления ОП, поскольку она должна быть ответом сама по себе.

(Все цитаты взяты из статьи, упомянутой выше.)

Абстракт:

"Одна из путаниц в отношении абстракции заключается в том, что она используется как в качестве процесса, так и в качестве сущности. Абстракция, как процесс, обозначает извлечение важных деталей об элементе или группе элементов, игнорируя при этом несущественные подробности. Абстракция как сущность обозначает модель, представление или какое-либо другое сфокусированное представление для фактического элемента. "

Сокрытие информации:

«Его интерфейс или определение были выбраны так, чтобы как можно меньше раскрывать его внутреннюю работу». & mdash; [Parnas, 1972b]

«Абстракция может быть […] использована в качестве метода для определения того, какую информацию следует скрыть.»

«Путаница может возникать, когда люди не могут различить сокрытие информации и методику (например, абстракцию), которая используется для определения того, какая информация должна быть скрыта».

Инкапсуляция:

«Это […] относится к созданию капсулы, в случае концептуального барьера, вокруг некоторой коллекции вещей.» & mdash; [Wirfs-Brock et al., 1990]

"Как процесс, инкапсуляция означает акт включения одного или нескольких элементов в контейнер […]. Инкапсуляция как сущность относится к пакету или вложению, которое содержит (содержит, включает в себя) один или больше предметов. "

«Если инкапсуляция - это« то же самое, что скрытие информации », то можно привести аргумент, что« все, что было инкапсулировано, также было скрыто ». Это явно не соответствует действительности. "

Вывод:

"Абстракция, сокрытие информации и инкапсуляция очень разные, но тесно связанные понятия. Можно утверждать, что абстракция - это метод, который помогает нам определить, какая конкретная информация должна быть видимой, а какая информация должна быть скрыта. Инкапсуляция - это метод упаковки информации таким образом, чтобы скрыть то, что должно быть скрыто, и сделать видимым то, что должно быть видимым. "

50 голосов
/ 01 октября 2012

Abstraction скрывает детали реализации, предоставляя слой поверх основных функций.

Information Hiding скрывает данные, на которые влияет эта реализация. Использование private и public подпадает под это. Например, скрытие переменных классов.

Encapsulation просто помещает все подобные данные и функции в группу, например, Class в программировании; Packet в сети.

Используя классы, мы реализуем все три концепции - Abstraction, Information Hiding и Encapsulation

30 голосов
/ 09 августа 2012

Пожалуйста, не усложняйте простые понятия.

Инкапсуляция : Объединение данных и методов в один блок - это Инкапсуляция (например, Класс)

Абстракция : Это представляет собой представление только самых важных вещей, не включая второстепенных деталей. (например, интерфейс)

ДЛЯ ПРИМЕРОВ И ДОПОЛНИТЕЛЬНОЙ ИНФОРМАЦИИ GOTO:

http://thecodekey.com/C_VB_Codes/Encapsulation.aspx

http://thecodekey.com/C_VB_Codes/Abstraction.aspx

Утвержденные определения здесь

П.С .: Я также помню определение из книги Сумита Арора "С ++", которую мы читали в 11 классе;)

6 голосов
/ 24 августа 2008

Значение абстракции, данное Оксфордским словарем английского языка (OED), наиболее близким к значению, намеченному здесь, - «Акт разделения в мышлении». Лучшим определением может быть «Представление основных характеристик чего-либо без учета фона или несущественных деталей».

Под сокрытием информации является принцип, согласно которому пользователи компонента программного обеспечения (такого как класс) должны знать только основные детали того, как инициализировать и получать доступ к компоненту, и не должны знать детали реализации.

Редактировать : Мне кажется, что абстракция - это процесс определения того, какие части реализации должны быть скрытыми .

Так что это не абстракция ПРОТИВ скрытия информации. Это информация, скрывающая абстракцию VIA.

4 голосов
/ 29 июня 2016

Абстракция

Абстракция - это представление деталей существенного хвоста без включения деталей фона. Абстрактный класс имеет только сигнатуры методов, а реализующий класс может иметь собственную реализацию, таким образом, сложные детали будут скрыты от пользователя. Абстракция ориентирована на внешний вид. Другими словами, абстракция - это отделение интерфейсов от фактической реализации.

Инкапсуляция

Инкапсуляция объясняет связывание элементов данных и методов в единый блок. Сокрытие информации является основной целью инкапсуляции. Инкапсуляция достигается с помощью спецификаторов доступа, таких как private, public, protected. Переменные-члены класса становятся закрытыми, поэтому они не могут быть доступны напрямую для внешнего мира. Инкапсуляция фокусируется на внутреннем виде. Другими словами, инкапсуляция - это метод, используемый для защиты информации в объекте от другого объекта.

3 голосов
/ 12 мая 2013

Абстракция - Это процесс определения основных характеристик объекта без учета неактуальных и утомительных деталей.

Инкапсуляция - Это процесс объединения данных и функций, манипулирующих этими данными в единое целое.

Абстракция и инкапсуляция - это взаимосвязанные, но взаимодополняющие понятия.

  1. Абстракция - это процесс. Инкапсуляция - это механизм реализации Абстракции.

  2. Абстракция фокусируется на наблюдаемом поведении объекта. Инкапсуляция фокусируется на реализации, которая порождает такое поведение.

Сокрытие информации - Это процесс сокрытия деталей реализации объекта. Это результат инкапсуляции.

3 голосов
/ 24 августа 2008

Абстракция скрывает детали реализации, как вы выразились.

Вы абстрагируете что-то до достаточно высокой точки, чтобы вам было нужно сделать что-то очень простое для выполнения действия.

Сокрытие информации скрывает детали реализации. Программирование сложно. Вы можете иметь много вещей, чтобы иметь дело и обрабатывать. Могут быть переменные, которые вы хотите / должны отслеживать очень внимательно. Сокрытие информации гарантирует, что никто случайно не сломает что-либо, используя переменную или метод, который вы публично представили.

Эти два понятия очень тесно связаны в объектно-ориентированном программировании.

2 голосов
/ 09 августа 2013

Абстракция: Абстракция - это концепция / метод, используемый для определения того, каким должен быть внешний вид объекта. Доступен только необходимый интерфейс.

Сокрытие информации: Это дополнение к Абстракции, так как достигается абстракция с помощью сокрытия информации. Скрытие всего остального, кроме внешнего вида.

Инкапсуляция: Связывает данные и связанные функции в единицу. Это облегчает абстракцию и сокрытие информации. Разрешение таких функций, как доступ к элементам, на устройстве для достижения абстракции и сокрытия информации

2 голосов
/ 17 августа 2011

Инкапсуляция: связывание элементов данных и функций-членов вместе называется инкапсуляцией. Инкапсуляция осуществляется через класс. абстракция: сокрытие использования формы реализации или от представления называется абстракцией. например: int x; мы не знаем, как int будет работать внутри. но мы знаем, что int будет работать. это абстракция.

...