Вопрос:

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

encapsulation abstraction glossary ooad information-hiding

127910 просмотра

21 ответа

5367 Репутация автора

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

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

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

Автор: popopome Источник Размещён: 23.08.2008 09:41

Ответы (21)


6 плюса

1240 Репутация автора

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

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

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

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

Автор: jamting Размещён: 23.08.2008 09:46

3 плюса

67163 Репутация автора

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

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

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

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

Автор: Dan Herbert Размещён: 23.08.2008 09:47

2 плюса

7094 Репутация автора

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

JoelOnsoftware

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

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

Автор: Jason Z Размещён: 23.08.2008 10:53

1 плюс

9419 Репутация автора

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

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

Автор: Zooba Размещён: 24.08.2008 12:29

146 плюса

12726 Репутация автора

Решение

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

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

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

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

Р.П.

Автор: rp. Размещён: 24.08.2008 12:57

1 плюс

19 Репутация автора

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

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

Автор: Selo Размещён: 12.11.2009 09:17

2 плюса

21 Репутация автора

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

Автор: Siva Prasad Размещён: 17.08.2011 12:50

72 плюса

62701 Репутация автора

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

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

Абстракция:

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

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

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

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

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

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

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

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

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

Заключение:

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

Автор: stakx Размещён: 01.01.2012 07:06

29 плюса

708 Репутация автора

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

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

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

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

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

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

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

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

Автор: Rashy Размещён: 09.08.2012 05:32

45 плюса

1453 Репутация автора

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

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

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

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

Автор: Shashwat Размещён: 01.10.2012 12:22

1 плюс

11 Репутация автора

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

Автор: MOBITI MAHENGE Размещён: 19.04.2013 08:20

2 плюса

21 Репутация автора

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

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

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

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

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

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

Автор: Aatish Agarwal Размещён: 12.05.2013 10:16

2 плюса

21 Репутация автора

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

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

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

Автор: Vikram Размещён: 09.08.2013 07:47

0 плюса

632 Репутация автора

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

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

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

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

ссылка wiki

Автор: user666 Размещён: 19.04.2015 08:06

1 плюс

4779 Репутация автора

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

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

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

Автор: Abhijeet Размещён: 28.06.2016 10:40

4 плюса

351 Репутация автора

абстракция

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

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

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

Автор: Harleen Размещён: 29.06.2016 07:43

1 плюс

490 Репутация автора

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

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

Автор: Navin Israni Размещён: 27.11.2016 02:27

0 плюса

224 Репутация автора

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

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

Автор: Ammar Samater Размещён: 12.02.2018 12:48

0 плюса

169 Репутация автора

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

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

Поясним с помощью примера: -

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

Автор: Rohan Sharma Размещён: 05.08.2018 02:46

0 плюса

4366 Репутация автора

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

абстракция

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

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

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

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

  1. который состоит из изолирования системной функции или набора данных и операций с этими данными в модуле и предоставления точных спецификаций для модуля
  2. что доступ к именам, значениям и значениям обязанностей класса полностью отделен от доступа к их реализации
  3. идея, что модуль имеет внешнюю среду, отличную от ее внутренней, что он имеет внешний интерфейс и внутреннюю реализацию
Автор: jaco0646 Размещён: 10.10.2018 01:34

0 плюса

407 Репутация автора

Я дам объяснение инкапсуляции и скрытию данных, как я понял из полной книги кода

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

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

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

Автор: Mis94 Размещён: 25.11.2018 02:12
Вопросы из категории :
32x32