Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инкапсуляция 
:(
    Опции темы
Syltan
Дата 7.10.2009, 22:15 (ссылка)    | (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Вот, вроде прочитал что такое инкапсуляция, но до конца не могу понять. Вот определение Википедии.
Код

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

-----------------------------------------------------------------------
Код

позволяющее объединить данные и код в объект и скрыть реализацию объекта

ВОПРОС:
Инкапсуляция - это,когда я создал объект в закрытом разделе класса в функции мэин?
То есть например я объявил в привате функцию 
Код

class sova{
private:
void YRA(int x) 
{
   sqr(x);
}
};
 

А затем:


Код


int main()

   sova T;
T.YRA(7);
 
}
 

Это называется инкапсуляция?

Это сообщение отредактировал(а) Syltan - 7.10.2009, 22:17
PM MAIL   Вверх
NightmareZ
Дата 7.10.2009, 22:29 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 0
Всего: 13



Убейте меня тапком  smile  smile  smile  smile  smile 


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
jonie
Дата 7.10.2009, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118





--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
FortMax
Дата 8.10.2009, 02:11 (ссылка) |    (голосов:8) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 2.10.2006
Где: Россия, г. Бироби джан ЕАО

Репутация: нет
Всего: 5



Syltan,  инкапсуляция подразумевает разделение програмистов на разработчиков классов(те кто их разрабатывает) и пользователей(те кто используют эти классы: их методы и свойства). Так вот инкопсуляция это когда, пользователю не надо вникать, что "внутри" класса и как он раюотает, он просто использует документированный интерфейс этого класса, т.е. разработчик класса регламентирует какие свойства и методы что делают, а пользователь их просто использует ...

если приводить аналогию с реальной жизнью, то можно для примера взять телевизор(класс), есть разработчик и конечный пользователь, и есть инструкция как им пользоваться(документация) и есть пользовательский интерфейс(наприметр пульт ду), так вот мы хотим включить телевизор(применить метод), для этого нам не надо разбираться что при этом будет происходить внутри телевизора!!! мы просто берем пульт ду и жмем кнопку(применяем метод) 

примерно так  smile 

Это сообщение отредактировал(а) FortMax - 8.10.2009, 08:10


--------------------
user posted image
PM MAIL ICQ   Вверх
zim22
Дата 8.10.2009, 08:27 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Syltan @  7.10.2009,  22:15 Найти цитируемый пост)
Это называется инкапсуляция?

интересно будет посмотреть на полиморфизм и наследование в исполнении Syltan smile


--------------------
PM MAIL   Вверх
Anikmar
Дата 8.10.2009, 09:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(FortMax @  8.10.2009,  02:11 Найти цитируемый пост)
если приводить аналогию с реальной жизнью, то можно для примера взять телевизор(класс), есть разработчик и конечный пользователь, и есть инструкция как им пользоваться(документация) и есть пользовательский интерфейс(наприметр пульт ду), так вот мы хотим включить телевизор(применить метод), для этого нам не надо разбираться что при этом будет происходить внутри телевизора!!! мы просто берем пульт ду и жмем кнопку(применяем метод) 

Аналогию, наверное надо проводить так: Разработка микросхем (каждая представляет собой класс) - далее разработчик телевизора (состоит из микросхем).

А вот чел, которых жамкает на пульте кнопки - это наш конечный пользователь собственно программы. Ему воообще обсалютно все по барабану - и микросхемы и узлы - ему нужна картинка и звук.

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

Если бы еще на практике так всегда было - чтобы классы, которыми пользуешься, так хорошо работали, чтобы было не нужно в них ковыряться.  smile 
PM MAIL ICQ   Вверх
xvr
Дата 8.10.2009, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Syltan @ 7.10.2009,  22:15)
Вот, вроде прочитал что такое инкапсуляция, но до конца не могу понять. 
То есть например я объявил в привате функцию 
Код

class sova{
private:
void YRA(int x) 
{
   sqr(x);
}
};
 

А затем:


Код


int main()

   sova T;
T.YRA(7);
 
}
 

Это называется инкапсуляция?

Это называется Compile Error (попытка обратится к private методу). 
Заинкапсулировали, понимаешь, сову Юру по самое нехочу  smile 

PM MAIL   Вверх
Syltan
Дата 8.10.2009, 12:02 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



То есть, получается, что любой объект, созданный именем класса, является инкапсулированный? И не важно, этот объект создаётся, обратившись к закрытому разделу класса или открытому. Правильно?

Это сообщение отредактировал(а) Syltan - 8.10.2009, 12:05
PM MAIL   Вверх
zim22
Дата 8.10.2009, 12:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Syltan @  7.10.2009,  22:15 Найти цитируемый пост)
Вот, вроде прочитал что такое инкапсуляция, но до конца не могу понять

user posted image


--------------------
PM MAIL   Вверх
cutwater
Дата 8.10.2009, 12:31 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 2
Всего: 10



Цитата(Syltan @  8.10.2009,  11:02 Найти цитируемый пост)
То есть, получается, что любой объект, созданный именем класса, является инкапсулированный? И не важно, этот объект создаётся, обратившись к закрытому разделу класса или открытому. Правильно?



Syltan, сначала научитесь формулировать мысли и излагать их на русском языке. Тогда отпадет необходимость в вопросе. То что вы пишете - несвязный бред. Определение Вам дали выше, попытайтесь все таки разобраться хотя бы в терминологии и тогда уже задать корректный вопрос.

// у меня складывается ощущение что человек видит язык второй раз и сразу полез в ООП. постановка вопроса как бы намекает.

Это сообщение отредактировал(а) cutwater - 8.10.2009, 12:33


--------------------
user posted image
PM MAIL   Вверх
Anikmar
Дата 8.10.2009, 12:33 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(cutwater @  8.10.2009,  12:31 Найти цитируемый пост)
Syltan, сначала научитесь формулировать мысли и излагать их на русском языке. Тогда отпадет необходимость в вопросе. То что вы пишете - несвязный бред. Определение Вам дали выше, попытайтесь все таки разобраться хотя бы в терминологии и тогда уже задать корректный вопрос. 

Не спешите возмущаться, мы еще до полиморфизма не дошли.  smile 

Интерсено, какую картинку zim22 на эту тему пришлет?  smile 

PM MAIL ICQ   Вверх
Syltan
Дата 8.10.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Извиняюсь просто писал сразу, без формулировки.
Обращение объектов именно к закрытому полю privat,через функции-членны класса, есть инкапсуляция, или к открытому тоже?
PM MAIL   Вверх
zim22
Дата 8.10.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Anikmar @  8.10.2009,  12:33 Найти цитируемый пост)
Интерсено, какую картинку zim22 на эту тему пришлет?

эту smile


--------------------
PM MAIL   Вверх
Syltan
Дата 8.10.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



То есть,всё что описано в закрытом и открытом разделе класса, есть инкапсуляция. А когда мы создаём экземпляр класса, тоесть объект, он является инкапсулированный. Может так?
PM MAIL   Вверх
kemiisto
Дата 8.10.2009, 13:22 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 5
Всего: 160



Инкапсуляция - один из механизмов сокрытия информации (сокрытия деталей реализации). Механизм этот работает на уровне классов. В нормальных языках программирования существует ещё качественный механизм сокрытия информации на уровне модулей. Но в С++ нет модулей... smile 

Полезной аналогией будет модель клиент-сервер. Есть некий модуль/класс, уже написанный Вами или третьим лицом. Будем называть его серверным. Код, который Вы пишете в данный момент будем называть клиентским.

user posted image

Сокрытие деталей реализации - квинтэссенция неимоверно важного принципа, используемого при проектировании (и не только ПО) - принципа абстракции. Серверный класс/модуль представляет из себя ничто иное, как "чёрный ящик". Механизм его работы не важен при написании клиентского кода. Важно лишь знать что нужно получить "на выходе" и что для этого нужно подать "на вход". При этом зависимость результатов от входных данных известна. Именно её и описывает интерфейс. Именно перечисленные в нём экспортируемые элементы и есть "входы" и "выходы". Только через них мы может "общаться" с нашим "чёрным ящикок".

Как то так...


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Syltan
Дата 8.10.2009, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



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

Это сообщение отредактировал(а) Syltan - 8.10.2009, 13:38
PM MAIL   Вверх
Syltan
Дата 8.10.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Инкапсуляция - это объединение данных и кода в объект, и скрытие от пользователя, того, как я реализовывал этот объект, когда он будет взаимодействовать с этим объектом ,через интерфейс, который я создам,через свойства этого объекта.
PM MAIL   Вверх
Anikmar
Дата 8.10.2009, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(Syltan @  8.10.2009,  16:00 Найти цитируемый пост)
Инкапсуляция - это объединение данных и кода в объект, и скрытие от пользователя, того, как я реализовывал этот объект, когда он будет взаимодействовать с этим объектом ,через интерфейс, который я создам,через свойства этого объекта. 

Проще было отсюда скопипастить
PM MAIL ICQ   Вверх
Syltan
Дата 8.10.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2



Правильно ли я создал определение?
PM MAIL   Вверх
zim22
Дата 8.10.2009, 17:08 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Syltan @  8.10.2009,  16:35 Найти цитируемый пост)
Правильно ли я создал определение?

правильно/не правильно. какая разница? тебя на экзамене спрашивать будут?


--------------------
PM MAIL   Вверх
Syltan
Дата 8.10.2009, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 31.8.2009

Репутация: -1
Всего: -2




Я вообще для себя учу. Так правильно ли я понял и дал опеределение, или нет?
PM MAIL   Вверх
zim22
Дата 8.10.2009, 17:31 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Syltan @  8.10.2009,  17:20 Найти цитируемый пост)
Я вообще для себя учу.

ты не учишь. фигнёй страдаешь. лучше решай задачки.


--------------------
PM MAIL   Вверх
bems
Дата 10.10.2009, 23:52 (ссылка) |   (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(Syltan @  8.10.2009,  13:35 Найти цитируемый пост)
Код - это функции-члены класса, в которых описан код.
Это не инкапсуляция, это рекурсия.



--------------------
Обижено школьников: 8
PM MAIL   Вверх
bsa
Дата 12.10.2009, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Syltan, ты смысл понял неправильно. Тебе уже раз 10 объяснили, что такое инкапсуляция, в т.ч. на примерах с телевизором и котом. Перечитывай их, пока не поймешь смысл.
Кстати, protected/private тут не самые главные вещи. Это лишь средства, которыми добиваются инкапсуляцию.

Имхо, с такими способностями усваивать информацию в программировании делать нечего...
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1346 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.