Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.07.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.021 c
14-7631
Vlad Oshin
2003-06-18 10:08
2003.07.03
Почти Евдокимов


7-7730
Piero
2003-04-07 10:25
2003.07.03
Как закрыть чужой exe-шник из своей проги


3-7322
abc
2003-06-09 18:31
2003.07.03
как запретить ячейки TDBGrid переводиться в режим редактирования?


7-7739
sashak
2003-04-23 18:22
2003.07.03
считать данные ссom-порта


11-7372
SPeller
2002-10-10 15:54
2003.07.03
ShowModal





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский