Точное объяснение инкапсуляции, абстракции данных и сокрытия данных - PullRequest
3 голосов
/ 06 января 2012

Объектно-ориентированные понятия: encapsulation, data abstraction и data hiding - это 3 разных понятия, но очень тесно связанные друг с другом.Так что у меня возникают трудности с полным пониманием концепций путем чтения информации из Интернета.Информация, доступная в одном месте, противоречит информации в другом месте в Интернете.Может ли кто-нибудь направить меня к учебнику, который четко объясняет три понятия и выявляет разницу между ними?

Ответы [ 2 ]

3 голосов
/ 15 января 2012

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

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

" data abstraction " перегруппирует разные типы данных в одну и ту же абстракцию. Это близко к идее протокола. Вы не знаете, как реализован объект, но вы знаете, что он соблюдает общеизвестный протокол, то есть набор методов, которые работают с различными типами данных. В Python хорошим примером является файловый объект. В Java используются интерфейсы. Это хорошо, потому что вам нужно меньше учиться, а также потому, что вы можете проверить некоторые свойства на уровне абстракции, т. Е. Для всех видов данных, перегруппированных по этой абстракции.

" encapsulation " - это создание оболочки вокруг объектов, которая упрощает их использование. это связано с идеей, что объекты в кодовой базе могут быть перегруппированы в слои все более низкого уровня. Один объект в слое вызывает только те, что находятся под ним. Например, если вы хотите нарисовать линию на экране, объект obkect может инкапсулировать только контекст openGL, блок пикселей и другие элементы. Эти низкоуровневые объекты инкапсулированы строковым объектом. Обратите внимание, что инкапсуляция может быть применена к одному и тому же объекту, когда он является частью разных слоев одновременно, не очень хорошо, но иногда неизбежно. Например, файлоподобный объект в python имеет метод высокого уровня / инкапсуляции (открытый, закрытый, чтение) и низкоуровневый (поиск).

Вот и все. Очевидно, что определение каждого из них может быть более широким, но они делают эти три понятия немного более разными.

0 голосов
/ 24 января 2013

Объединение данных и функций в единый блок (называемый класс) известен как инкапсуляция. Инкапсуляция данных является наиболее Яркая особенность класса. Данные не доступны для внешний мир, и только те функции, которые обернуты в класс, может получить к нему доступ. Эти функции обеспечивают интерфейс между данными объекта и программой. Это изоляция данные от прямого доступа программой называются скрытием данных или скрытие информации. Абстракция относится к акту представления существенных признаков без включения деталей фона или объяснений. Классы используют понятие абстракции и определяются как список абстрактных атрибутов, таких как размер, вес и стоимость, и функции для работы с этими атрибутами. Они инкапсулируют все основные свойства объектов, которые должны быть созданы. атрибуты иногда называют членами данных, потому что они содержат Информация. Функции, которые работают с этими данными иногда вызываемые методы или функции-члены. Так как классы используют концепцию абстракции данных, они известный как Абстрактные типы данных (ADT

...