Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.01.2010, 22:03   #1
ddr9225
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 21
По умолчанию Проявление инкапсуляции

Скажите, в этой небольшо программе проявляется смысл скрытия данных от пользователя,принцип инкапсуляции, если да, то в каком месте?

Код:
#include <iostream>
using namespace std;

class part
{
private:
	int modelnumber;
	int partnumber;
	float cost;
public:
	void setpart(int mn, int pn, float c)
	{
       modelnumber = mn;
	   partnumber = pn;
	   cost = c;
	}
	void showpart()
	{
		cout<<"Модель"<<modelnumber;
		cout<<". деталь"<<partnumber;
		cout<<". стоимость $"<<cost<<endl;
	}
};

int main()
{
	part part1;
	part1.setpart(6244,373,217.55F);
	part1.showpart();
	cin.get();
}
ddr9225 вне форума Ответить с цитированием
Старый 27.01.2010, 22:07   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

part part1; - объект, это он поддерживает инкапсуляцию. Он объединяет в себе данные и методы для обработки этих данных.
Вот это и есть инкапсуляция.
profi вне форума Ответить с цитированием
Старый 27.01.2010, 22:39   #3
ddr9225
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 21
По умолчанию

Хорошо ,скажите. Зачем здесь описуются именно в закрытом разделе класса трое данных, что это показывает или даёт?
Ещё, скажите, если бы здесь не было описания трёх данных в закрытом разделе класса,а они были в паблике, и в главной функции МЭИН создан объект класса парт, это уже не была бы инкапсуляция, так как эти 3 данных были заданы не в привате, а в паблике? Ответьте на оба вопроса.

Последний раз редактировалось ddr9225; 27.01.2010 в 22:43.
ddr9225 вне форума Ответить с цитированием
Старый 27.01.2010, 22:52   #4
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
Хорошо ,скажите. Зачем здесь описуются именно в закрытом разделе класса трое данных, что это показывает или даёт?
Но это один из главных принципов инкапсуляции, что бы данные были скрыты от других частей программы, и что бы только методы этого класса могли бы их обрабатывать. Например, вам бы понравилось, если вы бы купили чай, и каждый пришел и выпил по чуть-чуть вашего личного чая.

Цитата:
Ещё, скажите, если бы здесь не было описания трёх данных в закрытом разделе класса,а они были в паблике, и в главной функции МЭИН создан объект класса парт, это уже не была бы инкапсуляция,
Если они были бы в public то это была бы тоже инкапсуляция. Но стараются придерживаться правила: данные закрыты (private), методы открыты(public).
profi вне форума Ответить с цитированием
Старый 27.01.2010, 23:02   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от ddr9225 Посмотреть сообщение
Хорошо ,скажите. Зачем здесь описуются именно в закрытом разделе класса трое данных, что это показывает или даёт?
Ещё, скажите, если бы здесь не было описания трёх данных в закрытом разделе класса,а они были в паблике, и в главной функции МЭИН создан объект класса парт, это уже не была бы инкапсуляция, так как эти 3 данных были заданы не в привате, а в паблике? Ответьте на оба вопроса.
Здесь это ничего не даёт. Вообще идея инкапсуляции не в сокрытии данных, а именно в сборе всех данных и функций одной и той же сущности в единый объект. Сокрытие деталей реализации даёт возможность предоставлять единый публичный интерфейс и закрытую реализацию. Это, в свою очередь, даёт возможность в последствии изменить реализацию на более эффективную/стабильную при этом не изменяя интерфейс, то есть в уже написанных программах не придётся ничего менять, а лишь перекомпилировать их с новой версией библиотеки
netrino вне форума Ответить с цитированием
Старый 27.01.2010, 23:05   #6
ddr9225
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 21
По умолчанию

В привате были описанны 3-ое данных, чтоб нельзя было к ним получить доступ никак,доступ можно получить к привату только одним путём ,через методы описанные именно в разделе паблик именно этого класса?Ещё вопросик. Если откомпилировать данную программу и сохранить как dll, и программист ,который захочет использовать мою библиотеку, он не сможет получить доступа к 3 переменным?
Код:
int modelnumber;
int partnumber;
float cost;
Всё остальные методы этого класса ему будут доступны для использования?

Последний раз редактировалось ddr9225; 27.01.2010 в 23:07.
ddr9225 вне форума Ответить с цитированием
Старый 27.01.2010, 23:12   #7
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Смотря в какой блок ты их поместиш: public или private. В первом случае доступ - только через методы класса, во-втором - просто через объект напрямую.
profi вне форума Ответить с цитированием
Старый 27.01.2010, 23:25   #8
ddr9225
Пользователь
 
Регистрация: 13.01.2010
Сообщений: 21
По умолчанию

Если вот это будет в привате:
Код:
int modelnumber;
int partnumber;
float cost;
Тогда подключив библиотеку, с кодом, который я описал в само 1-ом посте. И к этим данным описанным в привате, я могу получить доступ к примеру так?
Код:
part part1;
part1.setpart(7,8,11);
part1.showpart();
И на экран выведется уже результат не стеми числами, которые были созданны в этой сохранённой откомпилированной библиотеке, а выведется уже с числами:
7,8,11? Я имею ввиду если создать новую программу и воспользоватся это библиотекой изменив значения.

Последнее. Когда я подключил библиотеку, я не смогу изменять имена переменных, что-то переделывать в ней ,вызвав эту библиотеку. Или я могу получить доступ только к паблику(т.е. интерфейсу класса) и пользоватся всему тому, что в паблике описанно, то есть пользоватся интерфейсо библиотеки могу?
ddr9225 вне форума Ответить с цитированием
Старый 28.01.2010, 00:03   #9
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

На первый вопрос я уже ответил. Последний вопрос просто бомба . Могу ответить только на это:
Цитата:
Когда я подключил библиотеку, я не смогу изменять имена переменных, что-то переделывать в ней ,вызвав эту библиотеку
Нет.
profi вне форума Ответить с цитированием
Старый 28.01.2010, 00:06   #10
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от ddr9225 Посмотреть сообщение
Если вот это будет в привате:
Код:
int modelnumber;
int partnumber;
float cost;
Тогда подключив библиотеку, с кодом, который я описал в само 1-ом посте. И к этим данным описанным в привате, я могу получить доступ к примеру так?
Код:
part part1;
part1.setpart(7,8,11);
part1.showpart();
И на экран выведется уже результат не стеми числами, которые были созданны в этой сохранённой откомпилированной библиотеке, а выведется уже с числами:
7,8,11? Я имею ввиду если создать новую программу и воспользоватся это библиотекой изменив значения.

Последнее. Когда я подключил библиотеку, я не смогу изменять имена переменных, что-то переделывать в ней ,вызвав эту библиотеку. Или я могу получить доступ только к паблику(т.е. интерфейсу класса) и пользоватся всему тому, что в паблике описанно, то есть пользоватся интерфейсо библиотеки могу?
Вы неправильно всё это понимаете. DLL тут вообще не при чём, разграничение доступа нужно только для отлова ошибок на этапе написания кода и компиляции. В DLL никаких ограничений, равно как и имён переменных, классов уже нет, это бинарный код, в общем совершенно другое дело. Приватные данные существуют для того, чтобы их не использовали разработчики, при пользовании этим классом, иначе при малейших изменениях в классе все написанные программы, использующие этот класс, перестанут быть работоспособными. Приватные данные - данные, необходимые для реализации класса. Публичные данные - данные, которые являются интерфейсом взаимодействия с классом. Защищённые(protected) данные - данные, которые нужны для реализации этого класса и производных от него классов
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц