Абстракция ПРОТИВ Сокрытия информации Против Инкапсуляции

StackOverflow https://stackoverflow.com/questions/24626

Вопрос

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

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

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

Это было полезно?

Решение

Идите к источнику!Грейди Буч говорит (в книге "Объектно-ориентированный анализ и проектирование", стр. 49, второе издание):

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

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

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

rp

Другие советы

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

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

Абстракция:

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

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

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

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

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

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

"Это [...] относится к созданию капсулы, в данном случае концептуального барьера, вокруг некоторой коллекции вещей". — [Вирфс-Брок и др., 1990]

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

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

Заключение:

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

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

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

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

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

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

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

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

ДЛЯ ПОЛУЧЕНИЯ ПРИМЕРОВ И ДОПОЛНИТЕЛЬНОЙ ИНФОРМАЦИИ ПЕРЕЙДИТЕ По ССЫЛКЕ :

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

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

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

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

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

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

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

Так что это не абстракция ПРОТИВ сокрытия информации.Это сокрытие информации С ПОМОЩЬЮ абстракции.

Абстракция

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Программное обеспечение JoelOnSoftware

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Однако инкапсуляция совершенно ясна из приведенного выше ->

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

ссылка Вики

Инкапсуляция: привязка данных и методов, которые воздействуют на них.это позволяет скрывать данные от всех других методов в других классах.пример: 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
}

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

 public int area()
 {
  return length*breadth;
 }

Теперь, всякий раз, когда пользователь использует описанный выше метод, он просто получит площадь не так, как она рассчитана.Мы можем рассмотреть пример метода println(), мы просто знаем, что он используется для печати, и мы не знаем, как он печатает данные.Я подробно написал в блоге, вы можете посмотреть ссылку ниже для получения дополнительной информации абстракция против инкапсуляции

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

абстракция

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

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

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

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

  1. метод разработки программного обеспечения, который заключается в выделении системной функции или набора данных и операций над этими данными внутри модуля и предоставлении точных спецификаций для модуля.
  2. концепция, согласно которой доступ к именам, значениям и ценностям обязанностей класса полностью отделен от доступа к их реализации
  3. идея о том, что модуль имеет внешнюю оболочку, отличную от его внутренней, что у него есть внешний интерфейс и внутренняя реализация
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top