Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.91
limelight
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112
#1

Для чего было придумано сокрытие данных в ООП? - C++

02.06.2010, 22:14. Просмотров 4091. Ответов 11
Метки нет (Все метки)

Кто может понятно объяснить это? Т.е. для чего мы объявляем поля класса как private , почему обычно не объявляют их как public ? для чего было придумано сокрытие данных, каково его предназначение и в чем смысл?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2010, 22:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Для чего было придумано сокрытие данных в ООП? (C++):

Потоки и сокрытие данных - C++
Всем доброго времени суток. Появился вопрос, касающийся потоков. Есть класс, в котором имеются функции для вывода внутренних данных в...

Инкапсуляция и сокрытие данных не одно и тоже? - C++
Вопрос:защита данных от несанкционированного доступа другими функциями называется?я ответил инкапсуляция,а в ответе сокрытие данных.Это не...

Для чего нужно писать в int main() в скобках всякие args потом объявлять переменные, и прочее. Для чего если можно в сборках это все обьявлять. - C++
Для чего нужно писать в int main() в скобках всякие args потом объявлять переменные, и прочее. Для чего если можно в сборках это все...

Какие SQL запросы нужны для того, чтобы можно было отображать материал базы данных в комбоксе. - C++
Помогите пожалуйста, какие SQL запросы нужны для того чтобы можно было отображать материал базы данных в комбоксе. если можно сделайте...

ООП.Разработать структуру элементов данных класса в виде динамической структуры данных - C++
Здравствуйте, получил задание, но немного недопонимаю как это сделать, с чего начать. Помогите пожалст или объясните образно как сделать, а...

Для чего функции поместили в "тип данных"? - C++
Вопрос про функции. Для чего функции поместили в "тип данных"?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Oleg462
31 / 30 / 3
Регистрация: 18.01.2010
Сообщений: 123
02.06.2010, 22:43 #2
читай книжки там все есть
Применение методов доступа позволяет скрыть от пользователя детали хранения данных в обектах и, в то же время, снабжает их методами использования этих данных. изменяя способы хранения и обработки данных в классе не придется изменять его методы
0
Nazz
WEB-developer
896 / 727 / 11
Регистрация: 12.03.2009
Сообщений: 2,802
Записей в блоге: 2
02.06.2010, 22:47 #3
например: естли нескольо разных програмистов пишут одну програму по частям, и на зывают переменные однаковыми именами, то естли они огласят их ка паблик, при компиляции программы будут ошыбки, а естли же они огласят их как приват, то никаких ошыбок и збоев программа не даст...
вот такое основное назначение типов скрытости переменных..
2
limelight
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112
03.06.2010, 00:27  [ТС] #4
Вот!
Nazz, спасибо!
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
03.06.2010, 00:44 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Nazz Посмотреть сообщение
например: естли нескольо разных програмистов пишут одну програму по частям, и на зывают переменные однаковыми именами, то естли они огласят их ка паблик, при компиляции программы будут ошыбки, а естли же они огласят их как приват, то никаких ошыбок и збоев программа не даст...
вот такое основное назначение типов скрытости переменных..
бред какой...
допустим есть класс, описывающий целочисленный массив. в нем есть собственно указатель на данные и переменная хранящая размер. в нормальной реализации эти данные естественно будут объявлены как private, либо protected. есть так же метод, который допустим сортирует этот массив.
C++
1
2
3
4
5
6
7
8
class array
{
public:
   void sort();
private:
   size_t size;
   int * ptr;
};
допустим их объявили как public.
C++
1
2
3
4
5
6
7
class array
{
public:
   void sort();
   int * ptr;
   size_t size;
};
все мы знаем, что для сортировки массива необходимо знать его размер. а так как размер этого класса определен и автоматически корректируется, то метод sort можно вызывать без дополнительных данных.
так как сейчас доступ к переменной size открыт, пользователь класса может безнаказанно ее изменять.
C++
1
2
array a;
a.size = 15;
после чего при выполнении сортировки программа "успешно рушится", например по причине выхода за пределы массива.
так же и сами данные (ptr) лежат в открытом виде. что также позволяет провести такие операции как например.
C++
1
delete [] a.ptr
что вообще освобождает память.
если данные лежат в private области ничего подобного сделать не получится. компилятор начнет ругаться.
плюс к этому с помощью функций можно обеспечивать доступ к данным в любом режиме:
- только чтение
- чтение и запись
- только запись!

в общем вдумывайтесь. и действительно читайте книги.
5
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
03.06.2010, 01:39 #6
Nazz, написал немного не то.
Если несколько программёров пишут прогу, то тогда уж им все переменные придётся объявлять privat, что ли?

А вообще я уже говорил где-то.
Использование классов и, сооответственно private это блажь

Единственный выигрыш- сокращение кода за счёт перегрузки функций.
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
03.06.2010, 09:02 #7
Цитата Сообщение от kravam Посмотреть сообщение
Если несколько программёров пишут прогу, то тогда уж им все переменные придётся объявлять privat, что ли?
я вообще не понимаю, как с помощью классов/структур вы собираетесь защититься от дублирования имен. для этого есть нэймспейсы.
Цитата Сообщение от kravam Посмотреть сообщение
А вообще я уже говорил где-то.
Использование классов и, сооответственно private это блажь
а об этом говорить с вами больше не хочется.
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
04.06.2010, 09:22 #8
В реальном мире все большие и сложные системы устроены примерно одинаково. Они состоят из довольно однотипных сложных подсистем, которые обмениваются друг с другом довольно простыми сигналами. Примеры: армия, муравейник, многоклеточный организм.
Когда программные системы стали большими и сложными, они поневоле стали устраиваться так же, потому что иначе не работает.
Объект класса - это сложная подсистема сложной программы, обменивающаяся с другими подсистемами простыми сообщениями в виде интерфейсных функций.
1
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
04.06.2010, 11:25 #9
В принципе согласен, только говорить, что "иначе не работает" неправомерно.
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
04.06.2010, 11:29 #10
Цитата Сообщение от kravam Посмотреть сообщение
В принципе согласен, только говорить, что "иначе не работает" неправомерно.
Достаточно большие и достаточно сложные системы иначе не работают.
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
04.06.2010, 11:31 #11
Сказать всё, что угодно можно...
0
snake32
1386 / 1029 / 139
Регистрация: 26.02.2009
Сообщений: 3,851
Записей в блоге: 5
15.09.2011, 19:22 #12
Цитата Сообщение от kravam Посмотреть сообщение
Сказать всё, что угодно можно...
Это всмысле что достаточно большие и сложные проекты без продуманной архитектуры работают?
Возможно, другое дело КАК работают? Дорабатывать и развивать такой проект очень и очень....и очень и очень сложно. Бесконечные, неочевидные баги (иногда очень примитивные) если внимательно всмотрется хаос кода. Чужим, непосвящёным программистам в баго-архитектуре сложно связать концы с концами. Повторное использование кода невозможно.
В итоге, конкурировать на рынке такой продукт сможет только если цена упадёт в несколько раз.

Не по теме:

Если мне вдруг повезёт, и я открою свою софтверную компанию, то первым делом всех программеров... ну не то что бы заставлю.... это условие будет при приёме на работу) прочитать Чистый код. Далее, продумать архитектуру проекта. И только после чательного продумывания программировать. А не наоборот.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2011, 19:22
Привет! Вот еще темы с ответами:

Очистка полей ввода данных и сокрытие группы объектов набора данных - C#
Добавьте в обработчик button2 очистку полей ввода данных и сокрытие группы объектов набора данных, как это сделано в обработчике button3....

Сокрытие повторяющихся данных при постороении - PHP
Здравствуйте уважаемые! Моя проблема проста, но тупиковая. А может и наоборот. Значит, есть данные из БД. На их основе формируется...

Не знаю с чего начать в ООП - PHP ООП
Народ, вообщем дело такое, вроде бы прочел не одну книгу по ооп на php теоритически вроде все знаю, но не знаю как начать писать сайт....

Такое уже придумано или еще нет? - Сети
Не знаю в какой раздел пихнуть чтобы найти того кто хоть чего то знает У меня несколько работающих экранов - 3 компа, 3 экрана, 3...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.09.2011, 19:22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru