Абстракция VS Информация, скрывающая VS Encapsulation

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

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

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

Ответ 1

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

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

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

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

гр

Ответ 2

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

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

Абстракция:

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

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

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

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

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

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

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

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

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

Заключение:

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

Ответ 3

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

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

Encapsulation - это просто помещение всех похожих данных и функций в группу, например, в Class по программированию; Packet в сети.

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

Ответ 4

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

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

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

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

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

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

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

P.S.: Я также помню определение из книги под названием С++ Sumita Arora, которую мы читаем в 11-м классе;)

Ответ 5

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

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

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

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

Ответ 6

Абстракция

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

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

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

Ответ 7

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

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

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

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

Ответ 8

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

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

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

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

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

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

Ответ 9

См. сообщение Джоэля о законе лишенных абстракций

JoelOnsoftware

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

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

Ответ 10

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

Ответ 11

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

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

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

Ответ 12

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

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

Ответ 13

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

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

Ответ 14

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

Ответ 15

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

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

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

Ответ 16

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

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

Ответ 17

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

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

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

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

ссылка wiki

Ответ 18

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

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

Ответ 19

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

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

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

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

Ответ 20

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

абстракция

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

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

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

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

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

Ответ 21

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

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

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

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