| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Инкапсуляция |
| Автор: Syltan 7.10.2009, 22:15 | ||||||||
Вот, вроде прочитал что такое инкапсуляция, но до конца не могу понять. Вот определение Википедии.
-----------------------------------------------------------------------
ВОПРОС: Инкапсуляция - это,когда я создал объект в закрытом разделе класса в функции мэин? То есть например я объявил в привате функцию
А затем:
Это называется инкапсуляция? |
| Автор: NightmareZ 7.10.2009, 22:29 |
| Убейте меня тапком |
| Автор: jonie 7.10.2009, 23:30 |
| Syltan, http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%BA%D0%B0%D0%BF%D1%81%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29 |
| Автор: FortMax 8.10.2009, 02:11 |
| Syltan, инкапсуляция подразумевает разделение програмистов на разработчиков классов(те кто их разрабатывает) и пользователей(те кто используют эти классы: их методы и свойства). Так вот инкопсуляция это когда, пользователю не надо вникать, что "внутри" класса и как он раюотает, он просто использует документированный интерфейс этого класса, т.е. разработчик класса регламентирует какие свойства и методы что делают, а пользователь их просто использует ... если приводить аналогию с реальной жизнью, то можно для примера взять телевизор(класс), есть разработчик и конечный пользователь, и есть инструкция как им пользоваться(документация) и есть пользовательский интерфейс(наприметр пульт ду), так вот мы хотим включить телевизор(применить метод), для этого нам не надо разбираться что при этом будет происходить внутри телевизора!!! мы просто берем пульт ду и жмем кнопку(применяем метод) примерно так |
| Автор: zim22 8.10.2009, 08:27 |
интересно будет посмотреть на полиморфизм и наследование в исполнении Syltan |
| Автор: xvr 8.10.2009, 11:35 | ||||||
Это называется Compile Error (попытка обратится к private методу). Заинкапсулировали, понимаешь, сову Юру по самое нехочу |
| Автор: Syltan 8.10.2009, 12:02 |
| То есть, получается, что любой объект, созданный именем класса, является инкапсулированный? И не важно, этот объект создаётся, обратившись к закрытому разделу класса или открытому. Правильно? |
| Автор: zim22 8.10.2009, 12:10 | ||
http://xmages.net/show.php/533687_Untitled.jpg.html |
| Автор: cutwater 8.10.2009, 12:31 | ||
Syltan, сначала научитесь формулировать мысли и излагать их на русском языке. Тогда отпадет необходимость в вопросе. То что вы пишете - несвязный бред. Определение Вам дали выше, попытайтесь все таки разобраться хотя бы в терминологии и тогда уже задать корректный вопрос. // у меня складывается ощущение что человек видит язык второй раз и сразу полез в ООП. постановка вопроса как бы намекает. |
| Автор: Anikmar 8.10.2009, 12:33 | ||
Не спешите возмущаться, мы еще до полиморфизма не дошли. Интерсено, какую картинку zim22 на эту тему пришлет? |
| Автор: Syltan 8.10.2009, 12:39 |
| Извиняюсь просто писал сразу, без формулировки. Обращение объектов именно к закрытому полю privat,через функции-членны класса, есть инкапсуляция, или к открытому тоже? |
| Автор: zim22 8.10.2009, 12:41 |
http://technofriends.files.wordpress.com/2008/02/polymorphism.gif |
| Автор: Syltan 8.10.2009, 13:02 |
| То есть,всё что описано в закрытом и открытом разделе класса, есть инкапсуляция. А когда мы создаём экземпляр класса, тоесть объект, он является инкапсулированный. Может так? |
| Автор: kemiisto 8.10.2009, 13:22 |
| Инкапсуляция - один из механизмов сокрытия информации (сокрытия деталей реализации). Механизм этот работает на уровне классов. В нормальных языках программирования существует ещё качественный механизм сокрытия информации на уровне модулей. Но в С++ нет модулей... Полезной аналогией будет модель клиент-сервер. Есть некий модуль/класс, уже написанный Вами или третьим лицом. Будем называть его серверным. Код, который Вы пишете в данный момент будем называть клиентским. ![]() Сокрытие деталей реализации - квинтэссенция неимоверно важного принципа, используемого при проектировании (и не только ПО) - принципа абстракции. Серверный класс/модуль представляет из себя ничто иное, как "чёрный ящик". Механизм его работы не важен при написании клиентского кода. Важно лишь знать что нужно получить "на выходе" и что для этого нужно подать "на вход". При этом зависимость результатов от входных данных известна. Именно её и описывает интерфейс. Именно перечисленные в нём экспортируемые элементы и есть "входы" и "выходы". Только через них мы может "общаться" с нашим "чёрным ящикок". Как то так... |
| Автор: Syltan 8.10.2009, 13:35 |
| Код - это функции-члены класса, в которых описан код. Данные - это переменные, описанные в самом классе, а не в функциях. Инкапсуляция - это использование экземпляра класса, то есть объекта, который мы получили из-за объеденения даных и код в класс, и скрываем реализацию этого объекта? А так правильно? |
| Автор: Syltan 8.10.2009, 16:00 |
| Инкапсуляция - это объединение данных и кода в объект, и скрытие от пользователя, того, как я реализовывал этот объект, когда он будет взаимодействовать с этим объектом ,через интерфейс, который я создам,через свойства этого объекта. |
| Автор: Anikmar 8.10.2009, 16:23 | ||
Проще было http://ru.wikipedia.org/wiki/%D0%98%D0%BD%D0%BA%D0%B0%D0%BF%D1%81%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) скопипастить |
| Автор: Syltan 8.10.2009, 16:35 |
| Правильно ли я создал определение? |
| Автор: zim22 8.10.2009, 17:08 |
правильно/не правильно. какая разница? тебя на экзамене спрашивать будут? |
| Автор: Syltan 8.10.2009, 17:20 |
Я вообще для себя учу. Так правильно ли я понял и дал опеределение, или нет? |
| Автор: zim22 8.10.2009, 17:31 |
ты не учишь. фигнёй страдаешь. лучше решай задачки. |
| Автор: bems 10.10.2009, 23:52 |
| Это не инкапсуляция, это рекурсия. |
| Автор: bsa 12.10.2009, 10:09 |
| Syltan, ты смысл понял неправильно. Тебе уже раз 10 объяснили, что такое инкапсуляция, в т.ч. на примерах с телевизором и котом. Перечитывай их, пока не поймешь смысл. Кстати, protected/private тут не самые главные вещи. Это лишь средства, которыми добиваются инкапсуляцию. Имхо, с такими способностями усваивать информацию в программировании делать нечего... |