|
-47 / 3 / 0
Регистрация: 31.12.2017
Сообщений: 204
|
|
Зачем скрывать данные?19.12.2018, 16:46. Показов 3587. Ответов 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
|
||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,097
|
|
| 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
|
||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,097
|
|||
| 29.12.2018, 14:44 | |||
|
Реализация на уровне языка могла бы решить эти проблемы, но, похоже, оказалась слишком сложной, либо терялась совместимость с Си. Да и видимость приватных данных не настолько серьезная проблема чтобы переписывать кучу кода.
0
|
|||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||
| 29.12.2018, 14:50 | |||
|
0
|
|||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,097
|
||
| 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
|
|
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,097
|
||||
| 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()?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|