Форум: "Потрепаться";
Текущий архив: 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.007 c