|
-47 / 3 / 0
Регистрация: 31.12.2017
Сообщений: 204
|
|
Зачем скрывать данные?19.12.2018, 16:46. Показов 3413. Ответов 41
Метки нет (Все метки)
Я не понимаю, зачем в языке С++ предусмотрены private данные. От кого их нужно скрывать? Зачем хорошему программисту сокрытие, если и без него можно написать правильный код и организовать в нём правильное разграничение доступа к данным?
Отдельный вопрос по поводу констант: константы не могут быть перезаписаны. Но ведь и переменную можно тоже не перезаписывать до конца работы программы, если в этой переменной требуется сохранить некоторое константное значение. Эти возможности языка представляются мне избыточными.
0
|
|
| 19.12.2018, 16:46 | |
|
Ответы с готовыми решениями:
41
сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в смысле, можно же без этого? так зачем жизнь усложнять? Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? скрывать заголовок группы, если в отчете отсутствуют данные |
|
309 / 221 / 74
Регистрация: 23.05.2011
Сообщений: 981
|
||
| 29.12.2018, 01:35 | ||
|
В общем, Вы со мной согласились, и это хорошо.
0
|
||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
|
| 29.12.2018, 10:37 | |
|
0
|
|
|
Комп_Оратор)
|
||
| 29.12.2018, 11:17 | ||
|
Ещё можно бы сказать об отделении реализации от интерфейса. Это один из путей локализации по сути. То есть, если Вы понимаете почему глобальная переменная хуже локальной ( Кроме всего есть, также и разделение кода разработчика и клиентского кода (авторское право, лицензирование, деньги), хотя в этом случае и применяется поставка объектных файлов, но запрет на доступ внутрь остается и он становится более трудно устраним.
0
|
||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
||
| 29.12.2018, 11:48 | ||
|
"Сокрытие" же преследует цель "скрыть данные (и/или код). Инкапсуляция здесь скорее просто побочный эффект. Никогда не задумывались: почему приватная часть класса отсвечивает в хедерах? И совсем никак не скрывается где-то в недрах "реализации" ?
1
|
||
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
|
| 29.12.2018, 12:48 | |
|
Только потому что для создания объекта нужно знать его размер. Вообще-то, лучше было бы как раз скрыть приватную часть класса, но это оказалось слишком сложно технически.
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||
| 29.12.2018, 13:24 | |||
|
А скрывать недра хедера нельзя по той причине, что компилятору обязательно нужно знать размер класса и смещения всех полей класса вне зависимости от того, можно их трогать или нельзя.Добавлено через 18 минут С const - аналогично. Если есть уверенность, что данное поле никем никогда изменяться не будет и не должно (только задаваться при инициализации) - ставим const, иначе не ставим.
1
|
|||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
|||||||
| 29.12.2018, 13:28 | |||||||
|
2. Скрыть приват из хедера можно уже сегодня: С++ идиомы - обсуждение С поддержкой компилятора было бы веселее. 3. В своей книге "Дизайн и эволюция с++", Бьярн Страуструп особенное внимание уделяет такому аспекту: "Нет задачи скрывать что либо от программистов. В этом нет смысла. Смысл в том, что бы защитить данные и код от случайных поломок, но при этом не мешать программисту с ними работать" (ц) Вольная цитата по памяти. Что примечательно, Страуструп вообще, проектируя дизайн синтаксиса, думал, что в начале будет идти самая важная - приватная часть, и только затем публичная. Поэтому для классов по умолчанию [b]private[b]
И почти весь мир начинает описание класса со слова public Если бы изначально для классов по умолчанию поля были бы открыты - сэкономили бы целых 7 букв на каждый класс в исходниках.
1
|
|||||||
|
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
|
||
| 29.12.2018, 13:53 | ||
|
Добавлено через 2 минуты Иногда за (Идиома "reference to implementation" (rImpl)) платить никто не хочет.
0
|
||
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
|||
| 29.12.2018, 14:44 | |||
|
Реализация на уровне языка могла бы решить эти проблемы, но, похоже, оказалась слишком сложной, либо терялась совместимость с Си. Да и видимость приватных данных не настолько серьезная проблема чтобы переписывать кучу кода.
0
|
|||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||
| 29.12.2018, 14:50 | |||
|
0
|
|||
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
||
| 29.12.2018, 16:00 | ||
|
1. Раз речь идет об объекте, можно модифицировать оператор new чтобы он возвращал объем занимаемой памяти. 2. Отказаться от совместимости с Си-шным стилем многофайловых программ и использовать вместо пары *.h+*.o что-то более сложное, где будет храниться объем объекта. И оба эти варианта сложны в реализации и грозят потерей совместимости, то есть это будет уже не С++.
0
|
||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
|||||||
| 29.12.2018, 16:22 | |||||||
|
Как добавление подобной фичи может нарушить совместимость с языком си? Как добавление подобной фичи может сломать уже написанный код? Вы вообще понимаете что такое "обратная совместимость"? Вы это о чем? Который внезапно именно для того и существует, чтобы сказать компилятору: "выдели мне память под объект, я пока ещё не знаю, какой именно" И о боже! это - работает.
0
|
|||||||
|
Комп_Оратор)
|
|||
| 29.12.2018, 16:37 | |||
|
Не по теме: в альпинизме френды тоже очень классные помощники. В хороших руках.
0
|
|||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 29.12.2018, 16:49 | ||
|
Ну либо можно сделать выделение в специально зарезервированном месте в классе с помощью placement new, но тут проверка размеров и прочее остаётся уже на программисте. Добавлено через 6 минут
0
|
||
|
Комп_Оратор)
|
|
| 29.12.2018, 16:54 | |
|
TRam_, eva2326 я конечно не хочу вмешиваться, но тем не менее. Вопрос состоял в том, где искать смысл сокрытия, а не в том как оно реализовано. Глядя в начало топика и в то что он сейчас собой представляет, непонятно как они связаны.
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 29.12.2018, 17:16 | |
|
IGPIGP, ну например в предоставлении вместе с библиотекой не её полные исходники, а только часть хэдеров для линкования и собственно dll-ку или файл библиотеки. Или для того, чтобы можно было, сохраняя эти хэдеры, полностью перерабатывать внутренности библиотеки, сохраняя бинарную совместимость (т.к. пользователь всё равно не знает, а потому не может привязываться к текущим внутренностям). То есть более глубокий способ разделения нежели просто разграничение по доступу.
0
|
|
|
4070 / 2704 / 433
Регистрация: 09.09.2017
Сообщений: 12,023
|
||||
| 29.12.2018, 17:32 | ||||
|
0
|
||||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||
| 29.12.2018, 17:40 | |||
|
Только не void *, а всё же некий указатель на объявленный, но не определённый класс.
0
|
|||
|
1685 / 513 / 107
Регистрация: 17.05.2015
Сообщений: 1,524
|
||||||||
| 29.12.2018, 18:31 | ||||||||
|
Что бы можно было вынести в отдельный класс детали реализации. В c++ нет понятия "компиляции хедеров" 2. Вы вообще следите за нитью своего рассуждения? Выше вы писали: > скрывать недра хедера нельзя по той причине, что компилятору обязательно нужно знать размер класса и смещения всех полей класса Теперь внезапно оказывается, что скрыть недра хедера очень даже просто. Потому нет никаких проблем ни с размерами классов, ни со смещениями их полей. Сложно искать смыслы, когда каша в голове. Или на чем основаны такие высказывания?
0
|
||||||||
|
Комп_Оратор)
|
||||||
| 29.12.2018, 19:03 | ||||||
Ваши манеры леди выше всяких похвал. В адрес других участников тоже много чего лестного. Мы не следим за вашей мыслью леди. Простите, но это частенько не реализуемо.
0
|
||||||
| 29.12.2018, 19:03 | |
|
Зачем повторно засылать данные? Зачем нужно кодировать данные? Зачем закрывать поток чтобы записать данные в файл? Зачем в .NET в 2014 г. строгая типизация? Зачем нужно писать Convert.ToInt32(), ToString(), Int32.Parse()?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения:
- добавлена многоязычность
- добавлено снятие скриншотов
- добавлено поддержание бафов хождения по воде (для жреца, дк и шамана)
- и так, по. . .
|
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу)))
Критические ошибки, мешающие компиляции и. . .
|
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата)
Этот документ предназначен для того, чтобы новый чат Claude мог продолжить
работу без необходимости заново разбираться в. . .
|
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса
Калибровка параметров симбиотической модели: технический обзор
Содержание:
Введение
Постановка проблемы
Технические аспекты реализации
Процесс внедрения изменений
|
|
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0»
https:/ / ibb. co/ NnkGpfMd
Представленная интегрированная схема описывает непрерывную нелинейную. . .
|
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы
### Аннотация
Представлено исследование по разработке агентной модели микоризной. . .
|
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики
Контекст
Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
|
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии
Введение
Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
|