Абстракция VS Скрытие информации VS Инкапсуляция

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

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

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

«Инкапсуляция - это метод упаковки информации таким образом, чтобы скрыть то, что должно быть скрыто, и сделать видимым то, что должно быть видимым». ; помня, что инкапсуляция достигается за счет сокрытия информации.
wulfgarpro 20.10.2011 23:21:41
NoNaMe 28.11.2012 04:30:32
цитата сломана
Rishi Dua 15.11.2014 13:16:16
21 ОТВЕТ
РЕШЕНИЕ

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

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

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

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

Р.П.

149
7.01.2014 06:30:53
Вы бы сказали, что таким же образом абстракция и инкапсуляция дополняют друг друга, инкапсуляция и сокрытие информации также дополняют друг друга? Конечно, инкапсуляция достигается за счет сокрытия информации, но ... разве инкапсуляция не является механизмом, посредством которого осуществляется сокрытие информации?
wulfgarpro 17.09.2011 23:38:05
Другой реальный пример определения Буча доступен здесь
lifebalance 4.02.2014 00:13:30
Не могли бы вы сказать мне, правильно ли было бы сказать, что абстракция лучше всего понимается с точки зрения клиентского кода, а инкапсуляция лучше всего понимается с точки зрения сервисного кода (то есть самого инкапсулированного класса)?
user1338998 28.09.2015 13:51:04
Пример реального мира для приведенного выше определения поясняется здесь: stackoverflow.com/a/635755/3181500
user3181500 24.03.2016 06:29:06

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

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

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

Так что не абстракция против информации скрывается. Это информация, скрывающая абстракцию VIA.

6
23.08.2008 22:27:04

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

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

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

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

3
1.10.2012 14:21:38

Смотрите пост Джоэла о Законе Утечки Абстракций

JoelOnsoftware

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

Что касается сокрытия информации, я согласен с помехами.

2
14.09.2017 14:21:37

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

Под сокрытием информации подразумевается защита ваших абстракций от злонамеренных / некомпетентных пользователей. Ограничивая контроль над некоторым состоянием (например, выделением жесткого диска) первоначальному разработчику, огромные объемы обработки ошибок становятся избыточными. Если никто, кроме драйвера файловой системы, не может записать данные на жесткий диск, то драйвер файловой системы точно знает, что было записано на жесткий диск и куда. (Обычным проявлением этого понятия являются privateи protectedключевые слова в ОО-языках.)

1
24.08.2008 00:29:47

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

Таким образом, скрытие информации - это цель, абстракция - это процесс, а инкапсуляция - это техника.

1
12.11.2009 09:17:24
Можете ли вы предоставить пример Java для того же?
Chinmay 3.12.2017 13:47:48

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

2
17.08.2011 12:50:56

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

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

Абстракция:

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

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

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

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

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

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

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

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

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

Заключение:

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

80
10.10.2018 13:18:00
отличное объяснение практически. было бы здорово привести конкретные примеры в Java. мне кажется, что setter / getter в java скрывает реализацию, следовательно, достигая Information Hiding(или скрывая реализацию), тогда как универсальный classдостигает инкапсуляции, а абстракция достигается через privateдоступ
abarik 7.10.2018 01:46:04

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

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

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

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

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

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

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

PS: я также помню определение из книги под названием C ++ Сумиты Арора, которую мы читали в 11-м классе;)

32
9.08.2012 05:32:38

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

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

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

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

55
12.12.2018 12:09:20

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

1
19.04.2013 20:20:26

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

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

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

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

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

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

3
12.05.2013 10:16:55

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

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

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

2
22.07.2015 00:17:10

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

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

Инкапсуляция совершенно ясна сверху ->

Термин «инкапсуляция» относится к сокрытию деталей состояния, но расширение концепции типов данных с более ранних языков программирования для более сильной связи поведения с данными и стандартизация способа взаимодействия различных типов данных - это начало абстракции.

справочная вики

0
19.04.2015 20:18:50

Просто добавив более подробную информацию о InformationHiding , найдено Эта ссылка действительно хороший источник с примерами

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

Инкапсуляция - это особенность языка программирования.

1
28.06.2016 10:48:58

абстракция

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

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

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

4
29.06.2016 07:43:05

Я также был очень смущен двумя понятиями Абстракция и Инкапсуляция. Но когда я увидел статью об абстракции на myjavatrainer.com, мне стало ясно, что абстракция и инкапсуляция - это яблоки и апельсины, вы не можете их реально сравнить, потому что оба требуются.

Инкапсуляция - это то, как создается объект, а абстракция - это то, как объект рассматривается во внешнем мире.

1
27.11.2016 14:27:50

Инкапсуляция: связывание данных и методы, которые на них воздействуют. это позволяет скрывать данные от всех других методов в других классах. Пример: MyListкласс , который может добавить элемент, удалить элемент, и удалить все элементы методы add, removeи removeAllдействовать в списке (частный массив) , которые не могут быть доступны непосредственно с внешней стороны.

Абстракция: скрывает несоответствующее поведение и данные. Как элементы хранятся, добавляются или удаляются, скрыто (абстрагировано). Мои данные могут храниться в простом массиве, ArrayList, LinkedList и так далее. Кроме того, как методы реализованы, скрыто извне.

0
12.03.2018 10:27:11

Инкапсуляция - обеспечение контролируемого доступа к внутренним данным или предотвращение прямого доступа к членам.

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

Давайте разберемся с помощью примера:

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 (), мы просто знаем, что он используется для печати, и мы не знаем, как он печатает данные. Я написал блог подробно, вы можете увидеть ссылку ниже для получения дополнительной информации абстракции против инкапсуляции

0
5.08.2018 14:46:15

Стоит отметить, что эти термины имеют стандартизированные определения IEEE, которые можно найти по адресу https://pascal.computer.org/ .

абстракция

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

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

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

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

  1. методика разработки программного обеспечения, которая состоит из выделения системной функции или набора данных и операций с этими данными в модуле и предоставления точных спецификаций для модуля
  2. Концепция, согласно которой доступ к именам, значениям и ценностям обязанностей класса полностью отделен от доступа к их реализации.
  3. Идея, что модуль имеет внешнюю сторону, отличную от его внутренней, что он имеет внешний интерфейс и внутреннюю реализацию
0
10.10.2018 13:34:55

Очень коротко

Инкапсуляция : - скрытие информации

Абстракция : - Реализация сокрытия

Abstractionпозволяет сосредоточиться на what the object doesто, что означает инкапсуляцияhow an object works

1
26.06.2019 07:21:07