Можете ли вы сказать мне, в чем разница между абстракцией и сокрытием информации при разработке программного обеспечения?
Я смущен. Абстракция скрывает детали реализации, а информация скрывает абстрагирует все детали чего-либо.
Обновление: я нашел хороший ответ для этих трех понятий. Смотрите отдельный ответ ниже для нескольких цитат, взятых оттуда .
Ответы:
Перейти к источнику! Грэди Буч говорит (в «Объектно-ориентированном анализе и проектировании», стр. 49, второе издание):
Другими словами: абстракция = объект извне; инкапсуляция (достигается за счет сокрытия информации) = объект внутри,
Пример: в .NET Framework
System.Text.StringBuilder
класс предоставляет абстракцию над строковым буфером. Эта абстракция буфера позволяет работать с буфером без учета его реализации. Таким образом, вы можете добавлять строки в буфер без учета того, какStringBuilder
internally keeps track of things such the pointer to the buffer and managing memory when the buffer gets full (which it does with encapsulation via information hiding).Р.П.
источник
The OP updated his question with several citations that he had found, namely in an article by Edward V. Berard titled, "Abstraction, Encapsulation, and Information Hiding". I am re-posting a slightly expanded and reformatted version of the OP's update, since it should be an answer in its own right.
(All citations are taken from the article mentioned above.)
Abstraction:
Сокрытие информации:
Инкапсуляция:
Вывод:
источник
Information Hiding
(или скрывая реализацию), тогда как универсальныйclass
достигает инкапсуляции, а абстракция достигается черезprivate
доступAbstraction
скрывает детали реализации, предоставляя слой поверх основной функциональности.Information Hiding
скрывает данные, на которые влияет эта реализация. Использованиеprivate
иpublic
подпадает под это. Например, скрытие переменных классов.Encapsulation
просто помещает все подобные данные и функции в группу, например,Class
в программирование;Packet
в сети.Благодаря использованию классов, мы реализуем все три понятия -
Abstraction
,Information Hiding
иEncapsulation
источник
Пожалуйста, не усложняйте простые понятия.
Инкапсуляция : Объединение данных и методов в единый блок - это Инкапсуляция (например, Класс)
Абстракция : это представляет собой представление только самых важных вещей, не включая второстепенных деталей. (например, интерфейс)
ПРИМЕРЫ И ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ GOTO:
http://thecodekey.com/C_VB_Codes/Encapsulation.aspx
http://thecodekey.com/C_VB_Codes/Abstraction.aspx
Утвержденные определения здесь
PS: я также помню определение из книги под названием C ++ Сумиты Арора, которую мы читали в 11-м классе;)
источник
Значение абстракции, данное Оксфордским словарем английского языка (OED), наиболее близким к значению, которое здесь подразумевается, - «Акт разделения в мышлении». Лучшим определением может быть «Представление основных характеристик чего-либо без учета фона или несущественных деталей».
Сокрытие информации - это принцип, согласно которому пользователи программного компонента (такого как класс) должны знать только основные детали того, как инициализировать и получать доступ к компоненту, и не должны знать детали реализации.
Редактировать : мне кажется, что абстракция - это процесс принятия решения о том, какие части реализации следует скрыть .
Так что не абстракция против информации скрывается. Это информация, скрывающая абстракцию VIA.
источник
абстракция
Абстракция - это акт представления основных деталей без включения деталей фона. Абстрактный класс имеет только сигнатуры методов, а реализующий класс может иметь собственную реализацию, таким образом, сложные детали будут скрыты от пользователя. Абстракция ориентирована на внешний вид. Другими словами, абстракция - это отделение интерфейсов от фактической реализации.
Инкапсуляция
Инкапсуляция объясняет связывание элементов данных и методов в единый блок. Сокрытие информации является основной целью инкапсуляции. Инкапсуляция достигается с помощью спецификаторов доступа, таких как private, public, protected. Переменные-члены класса являются закрытыми, поэтому они не могут быть доступны напрямую для внешнего мира. Инкапсуляция фокусируется на внутреннем виде. Другими словами, инкапсуляция - это метод, используемый для защиты информации в объекте от другого объекта.
источник
Абстракция скрывает детали реализации, как вы выразились.
Вы абстрагируете что-то до достаточно высокой точки, чтобы вам было нужно сделать что-то очень простое, чтобы выполнить действие.
Сокрытие информации скрывает детали реализации. Программирование сложно. Вы можете иметь много вещей, чтобы иметь дело и обрабатывать. Могут быть переменные, которые вы хотите / должны отслеживать очень внимательно. Сокрытие информации гарантирует, что никто случайно не сломает что-либо, используя переменную или метод, который вы публично представили.
Эти 2 понятия очень тесно связаны в объектно-ориентированном программировании.
источник
Абстракция - это процесс определения основных характеристик объекта без включения не относящихся к делу и утомительных деталей.
Инкапсуляция - это процесс объединения данных и функций, манипулирующих этими данными в единое целое.
Абстракция и инкапсуляция являются взаимосвязанными, но взаимодополняющими понятиями.
Абстракция - это процесс. Инкапсуляция - это механизм реализации Абстракции.
Абстракция фокусируется на наблюдаемом поведении объекта. Инкапсуляция фокусируется на реализации, которая порождает такое поведение.
Сокрытие информации - это процесс сокрытия деталей реализации объекта. Это результат инкапсуляции.
источник
Инкапсуляция: связывание элементов данных и функций-членов называется инкапсуляцией. Инкапсуляция осуществляется через класс. абстракция: скрытие деталей реализации реализации от вида или из вида называется абстракцией. пример: int x; мы не знаем, как int будет работать внутри. но мы знаем, что int будет работать. это абстракция.
источник
Абстракция: абстракция - это концепция / техника, используемая для определения того, каким должен быть внешний вид объекта. Сделать доступным только необходимый интерфейс.
Сокрытие информации: это дополнение к Абстракции, так как с помощью сокрытия информации достигается Абстракция. Скрытие всего остального, кроме внешнего вида.
Encapsulation : Is binding of data and related functions into a unit. It facilitates Abstraction and information hiding. Allowing features like member access to be applied on the unit to achieve Abstraction and Information hiding
источник
See Joel's post on the Law of Leaky Abstractions
JoelOnsoftware
Basically, abstracting gives you the freedom of thinking of higher level concepts. A non-programming analogy is that most of us do not know where our food comes from, or how it is produced, but the fact that we (usually) don't have to worry about it frees us up to do other things, like programming.
As for information hiding, I agree with jamting.
источник
In very short
Encapsulation:– Information hiding
Abstraction :– Implementation hiding
Abstraction
lets you focus onwhat the object does
while Encapsulation meanshow an object works
источник
Abstraction allows you to treat a complex process as a simple process. For example, the standard "file" abstraction treats files as a contiguous array of bytes. The user/developer does not even have to think about issues of clusters and fragmentation. (Abstraction normally appears as classes or subroutines.)
Information hiding is about protecting your abstractions from malicious/incompetent users. By restricting control of some state (hard drive allocations, for example) to the original developer, huge amounts of error handling becomes redundant. If nobody else besides the file system driver can write to the hard drive, then the file system driver knows exactly what has been written to the hard drive and where. (The usual manifestation of this concept is
private
andprotected
keywords in OO languages.)источник
Чтобы абстрагировать что-то, нам нужно скрыть детали или скрыть детали того, что нам нужно абстрагировать. Но оба они могут быть достигнуты путем инкапсуляции.
Таким образом, скрытие информации - это цель, абстракция - это процесс, а инкапсуляция - это техника.
источник
Абстракция просто означает технику, в которой пользователю видны только существенные детали программного обеспечения, чтобы помочь пользователю использовать программное обеспечение или работать с ним, таким образом, детали реализации этого программного обеспечения не отображаются (становятся невидимыми). Инкапсуляция - это метод, при котором пакет содержит один или несколько элементов, и, следовательно, некоторая информация (в частности, сведения о программе) стала видимой, а часть - невидимой для пользователя, поэтому инкапсуляция достигается за счет сокрытия информации. В итоге. Абстракция предназначена для наблюдаемого поведения (внешне), а инкапсуляция - для невидимости (внутренне), но эти два действительно дополняют друг друга.
источник
Просто добавив более подробную информацию о InformationHiding , найдено Эта ссылка действительно хороший источник с примерами
источник
И Абстракция, и Инкапсуляция являются двумя из четырех основных концепций ООП, которые позволяют вам моделировать реальные вещи в объекты, чтобы вы могли реализовать их в своей программе и коде. Многие новички путаются между абстракцией и инкапсуляцией, потому что они оба очень похожи. Если вы спросите кого-то, что такое абстракция, он скажет, что это концепция ООП, которая фокусируется на соответствующей информации, скрывая ненужные детали, а когда вы спрашиваете об инкапсуляции, многие скажут, что это другая концепция ООП, которая скрывает данные от внешнего мира. Определения не ошибочны, поскольку и абстракция, и инкапсуляция действительно что-то скрывают, но ключевое отличие заключается в намерении.
Абстракция скрывает сложность, предоставляя вам более абстрактную картину, своего рода вид на 10 000 футов, в то время как Encapsulation скрывает внутреннюю работу, чтобы вы могли изменить ее позже. Другими словами, Abstraction скрывает детали на уровне разработки, а Encapsulation скрывает детали на уровне реализации.
источник
Прочитав все приведенные выше ответы один за другим, я не могу удержаться от публикации
Инкапсуляция совершенно ясна сверху ->
справочная вики
источник
Я также был очень смущен двумя понятиями Абстракция и Инкапсуляция. Но когда я увидел статью об абстракции на myjavatrainer.com, мне стало ясно, что абстракция и инкапсуляция - это яблоки и апельсины, вы не можете их реально сравнить, потому что оба требуются.
Инкапсуляция - это то, как объект создается, а абстракция - это то, как объект рассматривается во внешнем мире.
источник
Инкапсуляция: связывание данных и методов, которые на них воздействуют. это позволяет скрывать данные от всех других методов в других классах. Пример:
MyList
класс , который может добавить элемент, удалить элемент, и удалить все элементы методыadd
,remove
иremoveAll
действовать в списке (частный массив) , которые не могут быть доступны непосредственно с внешней стороны.Абстракция: скрывает несоответствующее поведение и данные. То, как элементы хранятся, добавляются или удаляются, скрыто (абстрагировано). Мои данные могут храниться в простом массиве, ArrayList, LinkedList и так далее. Кроме того, как методы реализованы, скрыто извне.
источник
Инкапсуляция - обеспечение контролируемого доступа к внутренним данным или предотвращение прямого доступа к членам.
Абстракция - скрытие деталей реализации определенных методов называется абстракцией.
Давайте разберемся с помощью примера:
Теперь для абстракции определите метод, к которому можно получить доступ, и пользователь не знает, что является телом метода и как он работает. Давайте рассмотрим приведенный выше пример, мы можем определить область метода, которая вычисляет площадь прямоугольника.
Теперь, когда пользователь использует вышеуказанный метод, он просто получает площадь, а не способ, которым она рассчитывается. Мы можем рассмотреть пример метода println (), мы просто знаем, что он используется для печати, и мы не знаем, как он печатает данные. Я написал блог подробно, вы можете увидеть ссылку ниже для получения дополнительной информации абстракции против инкапсуляции
источник
Стоит отметить, что эти термины имеют стандартизированные определения IEEE, которые можно найти по адресу https://pascal.computer.org/ .
абстракция
сокрытие информации
инкапсуляция
источник