Сведения о вопросе

Ислам

07:05, 10th August, 2020

Абстракция против сокрытия информации против инкапсуляции

Просмотров: 636   Ответов: 20

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

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

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



  Сведения об ответе

lool

03:07, 21st August, 2020

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

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

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

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

армированный пластик


  Сведения об ответе

qwerty101

02:29, 9th August, 2020

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

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

Абстракция:

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

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

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

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

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

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

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

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

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

Вывод:

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


  Сведения об ответе

SILA

01:52, 21st August, 2020

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

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

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

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


  Сведения об ответе

nYU

02:36, 26th August, 2020

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

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

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

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

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

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

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

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


  Сведения об ответе

PROGA

09:58, 6th August, 2020

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

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

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

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


  Сведения об ответе

lesha

01:43, 28th August, 2020

Абстракция

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

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

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


  Сведения об ответе

prince

10:53, 9th August, 2020

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

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

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

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


  Сведения об ответе

piter

21:47, 26th August, 2020

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

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

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

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

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

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


  Сведения об ответе

PHPH

11:23, 26th August, 2020

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

JoelOnsoftware

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

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


  Сведения об ответе

+-*/

15:43, 11th August, 2020

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


  Сведения об ответе

lool

04:22, 13th August, 2020

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

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

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


  Сведения об ответе

appple

22:22, 25th August, 2020

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

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


  Сведения об ответе

dump

06:44, 8th August, 2020

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

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


  Сведения об ответе

davran

12:26, 4th August, 2020

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


  Сведения об ответе

qwerty101

15:42, 11th August, 2020

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

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

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


  Сведения об ответе

padenie

06:06, 24th August, 2020

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

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


  Сведения об ответе

dump

03:51, 25th August, 2020

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

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

Однако инкапсуляция вполне понятна сверху ->

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

ссылка wiki


  Сведения об ответе

pumpa

00:02, 2nd August, 2020

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

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


  Сведения об ответе

ASER

10:32, 8th August, 2020

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

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

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

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


  Сведения об ответе

FAriza

21:06, 1st October, 2020

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

абстракция

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

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

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться