Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 07.10.2009, 21:46   #1
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
Вопрос Инкапсуляция

Вот, вроде прочитал что такое инкапсуляция, но до конца не могу понять. Вот определение Википедии.
Код:
Инкапсуля́ция — свойство языка программирования, позволяющее объединить данные и код в объект и скрыть реализацию объекта от пользователя.
-----------------------------------------------------------------------
Код:
позволяющее объединить данные и код в объект и скрыть реализацию объекта
ВОПРОС:
Инкапсуляция - это,когда я создал объект в закрытом разделе класса в функции мэин?
То есть например я объявил в привате функцию
Код:
class sova{
private:
void YRA(int x) 
{
   sqr(x);
}
};
[CODE]
А затем:
Код:

int main()
{ 
   sova T;
T.YRA(7);
 
}
Это называется инкапсуляция?

Последний раз редактировалось Syltan; 07.10.2009 в 21:57.
Syltan вне форума Ответить с цитированием
Старый 07.10.2009, 21:59   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Не совсем... Инкапсуляция это своего рода "сваливание в кучу" всех понятий связанных с некой сущностью. То есть, например, сущность "строка" может обладать такими свойствами как длина, представление(набор символов) и т.д. С другой стороны есть определённые операции, которые можно проводить над строкой. Можно всё это описать в обычном процедурном стиле, с использованием глобальных ф-ций и т.д., но лучше поместить всё это в отдельный контейнер(класс), который будет описывать все свойства сущности и методы их обработки. Для класса строки методами могут быть конкатенация, поиск в строке и т.д.
netrino вне форума Ответить с цитированием
Старый 08.10.2009, 12:06   #3
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

То есть, получается, что любой объект, созданный именем класса, является инкапсулированный? И не важно, этот объект создаётся, обратившись к закрытому разделу класса или открытому. Правильно?
Syltan вне форума Ответить с цитированием
Старый 08.10.2009, 12:11   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Нет. Любой набор обьектов, методов, полей, собранный по некому критерию (в данном случае по принадлежности к классу) есть инкапсуляция. Это когда ты для неких данных пишешь некий код, и код этот работает только для этих данных, причем остальным обьектам не важно как эти данные обрабатываются.

Ты когда на машине едишь не заглядываешь же как там поршни двигаются в цилиндрах - тебе важна сама езда, так вот поршни, каленвал, бензобак и прочее инкапсулированы в класс автомобиль.
И водила не обязан знать как все это работает.
Ясно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.10.2009, 12:14   #5
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,997
По умолчанию

Класс - это как тип переменной. Объект - это как сама переменная.
Эта "переменная" составная, состоящая из данных и функций. К некоторым данным нельзя обратиться напрямую, например так:

Timer1.Enabled = true;

но это можно сделать с помощью функций-посредников (которые также являются членами класса):

Timer1.Start();

Такое сокрытие переменных - очень важный аспект инкапсуляции. В основном блоке программы у тебя не будет 10000 глобальных переменных, которые придется как-то разруливать, а будет стройная иерархия.
ds.Dante вне форума Ответить с цитированием
Старый 08.10.2009, 12:16   #6
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Код:
Любой набор обьектов,есть инкапсуляция.
То есть, несколько объектов, созданных именем класса, есть инкапсуляция.
Например class P
Я создам P a,b,c;
Это есть инкапсуляция?
Syltan вне форума Ответить с цитированием
Старый 08.10.2009, 12:22   #7
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,997
По умолчанию

Нет, инкапсуляция это вот что:
Код:
class P
{
    int n;
public:
    int get()
    {
        return n;
    }
}
Тут во-первых, в одном классе объединяются данные (переменная n) и код (функция get()), во-вторых переменная n скрыта за пределами класса. Если где-то в программе ты захочешь получить значение n, то такой вариант выведет ошибку:

P a;
x = a.n;

а такой будет верный:

P a;
x = a.get();
ds.Dante вне форума Ответить с цитированием
Старый 08.10.2009, 12:28   #8
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Тоесть это когда я создал объект именем класса P, тоесть объект а, а затем обратился именно к закрытому полю класса, через функцию, которая является членом этого класса.
Syltan вне форума Ответить с цитированием
Старый 08.10.2009, 12:30   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,840
По умолчанию

Цитата:
Это есть инкапсуляция?
Когда ты пихаешь переменные в один класс - ты их инкапсулируешь, замыкаешь в этом классе, и они принадлежат только ему.
Переведи слово encapsulation - герметизация, запаковывание во что-то.

Когда ты купил пиво , батон, колбасу - ты ложешь их в пакет, ты их в пакет инкапсулируешь. Куда пакет туда и продукты.

Цитата:
затем обратился именно к закрытому полю класса, через функцию, которая является членом этого класса.
Вот-вот, это один из смыслов классов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.10.2009, 12:38   #10
Syltan
Заблокирован
 
Регистрация: 27.08.2009
Сообщений: 569
По умолчанию

Обращение объектов именно к закрытому полю privat,через функции-членны класса, есть инкапсуляция, или к открытому тоже?
Syltan вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инкапсуляция psycho-coder Общие вопросы Delphi 4 14.08.2009 12:04
Инкапсуляция пакетов TCP/IP bumerung Общие вопросы C/C++ 2 06.06.2009 22:19
ООП инкапсуляция albatros Общие вопросы Delphi 2 03.02.2009 08:28
Инкапсуляция Lyxor Общие вопросы Delphi 0 29.06.2008 12:06


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840