Что такое инкапсуляция

Объекты Pascal, классы Object Pascal, интерфейсы, наследование, инкапсуляция и т.д
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

13 окт 2009, 01:13

atavin-ta, прочитай теорию. Инкапсуляцию - это сокрытие данных. Никакого переиспользования кода это понятие не включает. Спор бессмысленен. Сколько бы ты буков не написал в подтверждение своей идеи, значение термина ты всё равно не изменишь, так как он был изобретён до тебя. Как вариант, можешь придумать свой термин и внести в него иной смысл. Например "сипулировать" (как в дневниках Иона Тихого) и дай определение, что сипулировать, это инкапсулировать или переиспользовать.


Airhand, в общем-то ты занял правильную позицию. Вот только в среди трёх китов ООП: наследования, инкапсуляции и полиморфизма, к сожалению, нет переиспользования кода. Переиспользование кода можно реализовать и без ООП, так что это относительно параллельные понятия.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
atavin-ta
Сообщения: 572
Зарегистрирован: 30 янв 2009, 06:38

13 окт 2009, 10:00

&quot писал(а): Инкапсуляцию - это сокрытие данных.
Согласен с определением.
&quot писал(а):Никакого переиспользования кода это понятие не включает.
Не "не включает", а не упомянуто за не надобностью. Но если не исспользовать для каждого объекта один и тот же код, то как вообще можно инкапсулировать (скрыть данные)? Следовательно сокрытие и возможность повторного исспользования кода - неотъемлемое свойсов (свойство, а не определение) инкапсуляции. А если говорить об английском слове Incapsulation, то там вообще не сказано, что именно упаковывается.
&quot писал(а):Вот только в среди трёх китов ООП: наследования, инкапсуляции и полиморфизма, к сожалению нет переиспользования кода.
А зачем? При инкапсуляции код уже упакован вместе с данными, а при полиморфизме ещё и выбирается в зависимости от фактического типа, кроме того
&quot писал(а):Переиспользование кода можно реализовать и без ООП
.
Согласен, можно includeом. И если ставить перед собой только цель повторного использования кода - тогда include и никаких гвоздёв. В книгах по c++у, по-моему, прямо написано, что классы придуманы для того, чтобы собрать в одно место данные и код и что данные индивидульны для каждого объекта, а код создаётся в одном экземпляре для всего класса, и используется всеми обектами. Разве это не повторность? А упаковка в одну запись только разнородных данных никогда инкапсуляцией не считалась, да и сокрытие данных места не имело. Именно объединение данных с кодом суть инкапсуляции. А определения надо ещё интерпретировать.
&quot писал(а):Например "сипулировать" (как в дневниках Иона Тихого) и дай определение, что сипулировать, это инкапсулировать или переиспользовать.
Зачем? термин "инкапсуляция" уже есть. Он означает "сокрытие". Но как он реализуется? В процедурном программировании были понятия локальных/глобальных данных и области их видимости. Однако локализация инкапсуляцией не называется. Сокрытие же данных в ООП реализуется путем объединением с кодом. А код объединяется с данными в любом классе. Следоватьено, если ты объявил класс, а от него объект, то основа для инкапсуляции (сокрытия данны) уже есть. Объяви класс с одним конструктором и десять его экземпляров. А потом сосчитай, сколько раз вызывается конструктор и сколько он имеет экземпляров кода. Сразу увидишь повторное исспользование. Я же не претендовал, на точное знание определения. Но где у меня явная ошибка? Я никогда не утверждал (и не считал), что инкапсуляция предназначена для повторного исспользования кода. Я лишь считаю что она, сама будучи основана на многократном обращении к коду, позволяет повторно его исспользовать. Не более того.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

13 окт 2009, 22:09

&quot писал(а):Но если не исспользовать для каждого объекта один и тот же код, то как вообще можно инкапсулировать (скрыть данные)?
Не нашёл смысла в высказывании. Как связано инкапсуляция и переиспользование кода? Не вижу даже слабой связи.
&quot писал(а):Согласен, можно includeом. И если ставить перед собой только цель повторного использования кода - тогда include и никаких гвоздёв
Переиспользование кода - это не include. Переиспользование кода, это когда нам нужно в двух разным местах сделать одни и те же действия и вместо того, чтобы копировать код из одного места в другое, мы выносим общий код в отдельную функцию/метод и вызываем её/его два раза в нужных местах.

То, что ты называешь переиспозованием, а именно то, что данные и методы "упакованы" в одной сущности, на самом деле является определением класса. У тебя в голове какая-то каша. Почитай об ООП - в интернете куча статей. Тогда всё станет на свои места.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
atavin-ta
Сообщения: 572
Зарегистрирован: 30 янв 2009, 06:38

14 окт 2009, 10:39

&quot писал(а):Переиспользование кода - это не include. Переиспользование кода, это когда нам нужно в двух разным местах сделать одни и те же действия и вместо того, чтобы копировать код из одного места в другое, мы выносим общий код в отдельную функцию/метод
. Согласен, если говорить именно о коде. А если о тексте, называя его кодом? Это явная терминологическая неточность, но разве при includeе нет повторного исспользования (хоть и текста). Вынести код в функцию - вообще не инструмент, но действительно путь повторного исспользования и именно кода.
&quot писал(а): Почитай об ООП
Уже читал. Герберт Шилдт Теоирия и практика С++.
&quot писал(а):То, что ты называешь переиспозованием, а именно то, что данные и методы "упакованы" в одной сущности
Не это, а то, что к одному экземпляру кода можно обращаться многократно в разных частях программы, применяя его для обработки разных объетов. Ты говоришь, что переиспользование кода - это создание функции. А разве член класса, содержащий код, не функция? Инкапсуляция невозмеожна без класса, а в клсассе всесь код собран в те самые функции, которые есть основа любого переиспользования. Соглашусь с тем, что не она это обеспечивает. Это делает класс. Понятия действительно смешались и это явня ошибка.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

14 окт 2009, 21:59

&quot писал(а):А разве член класса, содержащий код, не функция?
Именно поэтому я написал "...в отдельную функцию/метод". Я не говорю, что переиспользование кода не реализуемо с помощью ООП, я говорю, что оно реализуемо и без него.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

22 дек 2013, 03:20

Вот это заруба )
На самом деле есть только порождение (расщепление/разделение) и обобщение (объединение/обособление) все остальное демагогия. Не ограничивайте сами себя.

З.Ы. Извините за некрофилию - не удержался )
Нет религии выше истины
Ответить