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

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

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

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

Ответы [ 20 ]

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

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

JoelOnsoftware

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

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

1 голос
/ 12 ноября 2009

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

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

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

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

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

1 голос
/ 28 июня 2016

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

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

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

1 голос
/ 20 апреля 2013

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

1 голос
/ 27 ноября 2016

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

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

0 голосов
/ 10 октября 2018

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

абстракция

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

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

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

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

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

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

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

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

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 голосов
/ 12 февраля 2018

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

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

0 голосов
/ 19 апреля 2015

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

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

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

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

ссылка вики

...