Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.03;
Скачать: CL | DM;

Вниз

Инкапсуляция   Найти похожие ветки 

 
stream ©   (2003-06-14 14:11) [0]

Может ли кто-нибудь дать четкое, строгое определение понятия ООП "инкапсуляция". У Тейксейры с Пачеко оно характеризуется следующим образом:
работа с данными и детали ее реализации скрыты от внешнего
пользователя объекта. Достоинства инкапсуляции влючают
модульность и изоляцию кода разных объектов.
По-моему, в такой характеристике очень и очень мало смысла.
На лекциях по информатике нам предлагали следующее:
объединение данных и алгоритмов их обработки, что дает
объектам свойство самостоятельности
-что-то уже более понятное. С. Бобровский в своей книге про Delphi что-то упоминал про разделение данных и методов по областям видимости.
Вобщем, я в замешательстве. Помогите, пожалуйста (экзамен на носу а подобные вещи все-таки хочется знать...)


 
Sergey Masloff   (2003-06-14 14:20) [1]

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

Подойдет?


 
uw ©   (2003-06-14 14:21) [2]

Объедини Тейксейру с Пачеко с лекциями по информатике и получишь в точности то, что надо.


 
vuk ©   (2003-06-14 14:27) [3]

Я не зняю, что там у Тейксейры с Пачеко, не читал, но то, что Вы описали как цитату оттуда, вообще говоря, называется сокрытием bинформации (information hiding). То ли переводчик виноват, то ли не знаю кто... А вот второе определение как раз и будет определением инкапсуляции. Это именно объединение данных и кода в одной сущности.


 
uw ©   (2003-06-14 14:28) [4]

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

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


 
stream ©   (2003-06-14 14:34) [5]

Как вам такое комбинированное определение?

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


 
vuk ©   (2003-06-14 14:42) [6]

TSomeClass = class(TObject)
public
SomeField : integer;
procedure DoSomething;
end;

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


 
Юрий Зотов ©   (2003-06-14 14:44) [7]

> uw © (14.06.03 14:28)

В дословном переводе с английского InCapsulation - включение в единую капсулу. То есть, объединение даных и алгоритмов их обработки в общей оболочке. Как эта оболочка будет называться - объект, модуль, библиотека или как-то еще - это уже второй вопрос. Что из нее будет открыто, а что скрыто - третий вопрос.


 
stream ©   (2003-06-14 14:49) [8]

>vuk © (14.06.03 14:42)
я говорил о разделение информации на области видимости, а не о скрытии чего-либо. В вашем примере одна область видимости. Само собой, что областей может быть столько, сколько нужно разработчику


 
vuk ©   (2003-06-14 14:53) [9]

to stream:
А я говорю только про то, что инкапсуляция и сокрытие информации дополняют друг друга, но путать и смешивать в одно понятие их нельзя. Возможность и необходимость сокрытия информации является следствием инкапсуляции.


 
Anatoly Podgoretsky ©   (2003-06-14 15:23) [10]

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


 
vuk ©   (2003-06-14 15:34) [11]

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


 
panov ©   (2003-06-14 15:59) [12]

А как вам такое понятие "как инкапсуляция X25 в IP" ?
-))


 
uw ©   (2003-06-14 17:26) [13]

Короче так:

Три источника, три составные части объекта (класса) – инкапсуляция, наследование и полиморфизм :)


 
Suntechnic ©   (2003-06-14 17:51) [14]

>Юрий Зотов ©
InCapsulation в английском имеет ещё одно значение: "герметизация". И с этой точки зрения инкапсуляция имеет прямое отношение к сокрытию данных.

Я бы, например, не стал утверждать, что инкапсуляция это объединение кода и данных. Тут приводили в пример record, но это всего лишь частный случай для Паскаля. Инкапсуляция это термин из ООП и, скажем, в том же C++ мы можем иметь объединение кода и данных (с помощью структур), но инкапсуляцией там пахнуть не будет (конечно если не использовать спецификаторы доступа явно).

И в дополнение ссылка и цитата на статью, где этот вопрос обсуждается:

Последнее замечание по поводу термина. При подготовке этого материала автору пришлось просмотреть около 20 книг по объектной технологии и связанным темам. Удивительно, что ни в одной из них не удалось найти точное определение понятия инкапсуляции. (Лучшее разъяснение содержится в приведенной выше цитате из книги про Smalltalk; следует заметить, помимо прочего, что в этой книге вообще не используется термин "инкапсуляция", его нет даже в индексе.) Автор обнаружил, что некоторые авторы понимают под этим понятием физическое связывание определений представления данных и определений операций. Например, "Инкапсуляция - это понятие соединения обработки или поведения с экземплярами объектов, определенных в классах. Инкапуляция позволяет упаковывать вместе код и данные".(2) Но, по мнению автора, такая интерпретация термина приводит с перемешиванию модельных и реализационных вопросов. Пользователь не должен беспокоиться, у него не должно возникать поводов для беспокойства по поводу того, "упакованы ли вместе" код и данные. Убеждение автора состоит в том, что с точки зрения пользователя, т.е. с модельной точки зрения, инкапсуляция означает, что данные не содержат видимых пользователям компонентов и могут быть доступны только через посредство уместных операций.


http://www.citforum.ru/database/digest/dig_1409.shtml


 
Anatoly Podgoretsky ©   (2003-06-14 18:43) [15]

Suntechnic © (14.06.03 17:51)
Структуры в Си++ являются классами, они не стали вводить другой термин в язык.


 
Suntechnic ©   (2003-06-14 18:50) [16]

>Anatoly Podgoretsky © (14.06.03 18:43)
Вообще-то разница между структурой и классом в С++ имеется и эта разница, с моей точки зрения, как раз имеет непосредственное отношение к инкапсуляции, но я не об этом... я о том, что в С++ нет структуры данных, которая подпадает под Ваш пример с записями в Паскале от (14.06.03 15:23).


 
Anatoly Podgoretsky ©   (2003-06-14 18:55) [17]

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


 
uw ©   (2003-06-14 19:22) [18]

>Anatoly Podgoretsky © (14.06.03 18:55)

Разницы никакой, только в class по умолчанию private, а в struct - public.


 
Suntechnic ©   (2003-06-14 19:26) [19]

>uw © (14.06.03 19:22)
Разницы никакой, только в class по умолчанию private, а в struct - public.

А это по-Вашему не разница? ;)


 
Anatoly Podgoretsky ©   (2003-06-14 20:10) [20]

Это не существенное различие, мы то вроде бы как о классах и структура, аналогично Паскалю. А не об области видимости. В Паскале два отдельных конструкции, В Си++ одна, но возможно чистых структу уже в нем и нет, как в было в Си, вот здесь моих знаний не хватает, я читал, что и то и другое, но слово одно для этих двух сущностей.


 
uw ©   (2003-06-14 21:10) [21]

>Anatoly Podgoretsky © (14.06.03 20:10)

Да нет, просто struct осталась для совместимости, но она и расширена до возможностей class с указанным отличием.



Страницы: 1 вся ветка

Текущий архив: 2003.07.03;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.023 c
14-7717
Шурик
2003-06-17 17:26
2003.07.03
Indy and Attachments


1-7490
Rino
2003-06-21 01:25
2003.07.03
Button


3-7344
Anics
2003-06-10 12:27
2003.07.03
Знатоки, кто-нибудь добился нормальной работы TDBCheckBox


3-7341
Alek Aaz
2003-06-10 11:02
2003.07.03
Обработка исключительных операций


4-7755
mtihonov1954
2003-04-30 05:59
2003.07.03
hook