11. Сокрытие информации
11. Сокрытие информации
Резюме
Не выпускайте внутреннюю информацию за пределы объекта, обеспечивающего абстракцию.
Обсуждение
Для минимизации зависимостей между вызывающим кодом, который работает с абстракцией, и реализацией абстракции, внутренние данные такой реализации должны быть скрыты. В противном случае вызывающий код может обратиться к этой информации (или, что еще хуже, изменить ее), и такая утечка предназначенной сугубо для внутреннего использования информация делает вызывающий код зависимым от внутреннего представления абстракции. Открывать следует абстракции (предпочтительно из соответствующей предметной области, но, как минимум, абстракцию get/set), а не данные.
Сокрытие информации уменьшает стоимость проекта, сроки разработки и/или риск двумя основными путями.
• Оно локализует изменения. Сокрытие информации снижает область "эффекта волны" вносимого изменения и, соответственно, его стоимость.
• Оно усиливает инварианты. Сокрытие информации ограничивает код, ответственный за сохранение (и, в случае ошибки, за нарушение) инвариантов программы (см. рекомендацию 41).
Не позволяйте "засветиться" данным из любого объекта, который обеспечивает абстракцию (см. также рекомендацию 10). Данные — всего лишь одно из воплощений абстракции, концептуальное состояние. Если вы сконцентрируетесь на концепции, а не на ее представлениях, вы сможете предложить вдумчивый интерфейс, а "вылизать" реализацию можно и позже — например, путем применения кэширования вместо вычисления "на лету", или использования различных оптимизирующих представлений (например, полярных координат вместо декартовых).
Распространенный пример состоит в том, что члены-данные классов никогда не делаются доступными извне при помощи спецификатора public (см. рекомендацию 41) или посредством указателей или дескрипторов (см. рекомендацию 42). Этот принцип в той же степени применим и к большим сущностям — например, таким, как библиотеки, которые также не должны разрешать доступ к внутренней информации извне. Модули и библиотеки должны предоставлять интерфейсы, которые определяют абстракции и работу с ними, и таким образом обеспечивают большую безопасность для вызывающего кода и меньшую связность, чем при применении совместно используемых данных.
Исключения
Тестирование кода зачастую требует возможности обращения ко "внутренностям" тестируемого класса или модуля.
Совокупности значений (struct в стиле С), которые представляют собой просто набор данных без предоставления каких-либо абстракций, не требуют сокрытия своих данных, которые в этом случае являются интерфейсом (см. рекомендацию 41).
Ссылки
[Brooks95] §19 • [McConnell93] §6.2 • [Parnas02] • [Stroustrup00] §24.4 • [SuttHysl04a]
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
1.2. Анонимайзеры: сокрытие IP-адреса
1.2. Анонимайзеры: сокрытие IP-адреса Представим, что вы собрались разово скрыть свой IP-адрес. Зачем это вам, мне дела нет. Снимаю с себя всякую ответственность, если ваши цели идут вразрез с существующим законодательством. Все мы помним, что Раскольников сделал с помощью
Сокрытие изображение стрелки на ярлыках
Сокрытие изображение стрелки на ярлыках Для того чтобы убрать изображение стрелки на ярлыках, создайте следующие два ключа:[HKEY_CLASSES_ROOTpiffile] "IsShortcut"="" [HKEY_CLASSES__ROOTlnkfile]
Сокрытие приставки "Ярлык для…"
Сокрытие приставки "Ярлык для…" Для того чтобы у создаваемых ярлыков не было приставки "Ярлык для…", измените следующий
Сокрытие пункта Пуск→Найти
Сокрытие пункта Пуск?Найти Ключ:[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer]
Сокрытие пункта Пуск→Документы
Сокрытие пункта Пуск?Документы Ключ:[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer] Значение:
Сокрытие пункта Пуск→Выполнить
Сокрытие пункта Пуск?Выполнить Ключ:[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPolicies Explorer] Значение:
Сокрытие дисков в папке Мой компьютер
Сокрытие дисков в папке Мой компьютер В папке Мой компьютер можно скрывать диски. Ниже представлены имена дисков и соответствующий ключ для их сокрытия. Для того чтобы скрыть сразу несколько дисков, суммируйте значения ключей:[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorer]A:
Сокрытие вкладки Оформление
Сокрытие вкладки Оформление Ключ:[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem] Значение:
Сокрытие вкладки Фон
Сокрытие вкладки
Сокрытие вкладки Заставка
Сокрытие вкладки Заставка Ключ:[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesSystern] Значение:
Сокрытие вкладки Параметры
Сокрытие вкладки Параметры Ключ:[HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesSystem]
12.2. Запись информации в файлы и считывание информации из файлов
12.2. Запись информации в файлы и считывание информации из файлов Постановка задачи Требуется сохранить на диске информацию (например, текст, данные, изображения и
4.3.3 Сокрытие Данных
4.3.3 Сокрытие Данных Используя заголовочные файлы пользователь может опредлять явный интерфейс, чтобы обеспечить согласованное исползование типов в программе. С другой стороны, пользователь может обойти интерфейс, задаваемый заголовочным файлом, вводя в .c файлы
1.2. Понятие информации. Общая характеристика процессов сбора, передачи, обработки и накопления информации
1.2. Понятие информации. Общая характеристика процессов сбора, передачи, обработки и накопления информации Вся жизнь человека так или иначе связана с накоплением и обработкой информации, которую он получает из окружающего мира, используя пять органов чувств – зрение,
Анализ поправок, принятых Госдумой, к закону «Об информации, информационных технологиях и о защите информации» Сергей Голубицкий
Анализ поправок, принятых Госдумой, к закону «Об информации, информационных технологиях и о защите информации» Сергей Голубицкий Опубликовано 26 июня 2013 21 июня Государственная Дума РФ приняла сразу во втором и третьем чтении Федеральный Закон «О
Сокрытие информации
Сокрытие информации Возьмите листок дорогой гербовой бумаги, посмотрите его на свет и вы сможете увидеть водяные знаки – узор, получаемый путем прижатия к бумаге в процессе сушки фигурной конструкции. Водяные знаки были изобретены в Италии в XIII веке. Итальянские