Скрытие информации - Information hiding

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

Обзор

Термин инкапсуляция часто используется как синоним сокрытия информации. Однако не все согласны с различиями между ними; можно думать, что сокрытие информации является принципом, а инкапсуляция - техникой. Программный модуль скрывает информацию, инкапсулируя информацию в модуль или другую конструкцию, которая представляет интерфейс.

Обычно скрытие информации используется для того, чтобы скрыть структуру физического хранилища данных, чтобы в случае ее изменения изменение ограничивалось небольшим подмножеством всей программы. Например, если трехмерная точка ( x , y , z ) представлена ​​в программе с тремя скалярными переменными с плавающей запятой и более поздними версиями, представление изменяется на одну переменную массива размером три, модуль, разработанный с информацией, скрытой в разум защитит оставшуюся часть программы от такого изменения.

В объектно-ориентированном программировании сокрытие информации (посредством вложения типов) снижает риск разработки программного обеспечения за счет смещения зависимости кода от неопределенной реализации (проектного решения) на четко определенный интерфейс . Клиенты интерфейса выполняют операции исключительно через интерфейс, поэтому при изменении реализации клиенты не должны меняться.

Инкапсуляция

В своей книге на объектно-ориентированном проектировании , Гради Буч определяется инкапсуляцию как «процесс compartmentalizing элементы абстракции , которые составляют его структуру и поведение, инкапсуляция служит для разделения договорную интерфейс абстракции и ее реализации.»

Цель состоит в том, чтобы реализовать потенциал для изменений: внутренние механизмы компонента могут быть улучшены без воздействия на другие компоненты, или компонент может быть заменен другим, который поддерживает тот же открытый интерфейс. Инкапсуляция также защищает целостность компонента, не позволяя пользователям переводить внутренние данные компонента в недопустимое или несогласованное состояние. Еще одно преимущество инкапсуляции состоит в том, что она снижает сложность системы и, таким образом, повышает надежность за счет ограничения взаимозависимостей между программными компонентами.

В этом смысле идея инкапсуляции более общая, чем то, как она применяется в объектно-ориентированном программировании. Например, реляционная база данных инкапсулирована в том смысле, что ее единственный общедоступный интерфейс - это язык запросов (например, SQL ), который скрывает все внутренние механизмы и структуры данных системы управления базами данных. Таким образом, инкапсуляция является основным принципом хорошей архитектуры программного обеспечения на всех уровнях детализации.

Инкапсуляция программного обеспечения за интерфейсом позволяет создавать объекты, имитирующие поведение и взаимодействие объектов в реальном мире. Например, простой цифровой будильник - это реальный объект, который непрофессионал может использовать и понимать. Они могут понять, что делает будильник и как им пользоваться, через предоставленный интерфейс (кнопки и экран), не разбираясь во всех деталях часов. Точно так же, если бы часы были заменены другой моделью, непрофессионал мог бы продолжать использовать их таким же образом, при условии, что интерфейс работает так же.

В более конкретной настройке объектно-ориентированного языка программирования это понятие используется для обозначения либо механизма сокрытия информации, либо механизма связывания, либо их комбинации. (Подробнее см. Инкапсуляция (объектно-ориентированное программирование) .)

История

Концепция сокрытия информации была впервые описана Дэвидом Парнасом в « Парнас» (1972) . До этого модульность обсуждалась Ричардом Готье и Стивеном Понтом в их книге 1970 года « Проектирование системных программ», хотя само модульное программирование уже много лет назад использовалось на многих коммерческих сайтах, особенно в подсистемах ввода - вывода и программных библиотеках, без приобретения тег скрытия информации - но по схожим причинам, а также по более очевидной причине повторного использования кода .

Пример

Скрытие информации служит эффективным критерием для разделения любого оборудования, программного или аппаратного обеспечения на функциональные модули. Например, автомобиль - это сложное оборудование. Чтобы сделать проектирование, производство и обслуживание автомобиля разумным, сложное оборудование разделено на модули с определенными интерфейсами, за которыми скрываются конструктивные решения. Создавая автомобиль таким образом, производитель автомобилей также может предлагать различные варианты, сохраняя при этом экономичный в производстве автомобиль.

Например, производитель автомобилей может иметь как роскошную версию автомобиля, так и стандартную версию. Роскошная версия оснащена более мощным двигателем, чем стандартная версия. В инженеров проектирование двух различных автомобильных двигателей, один для роскошной версии и один для стандартной версии, обеспечивают один и тот же интерфейс для обоих двигателей. Оба двигателя устанавливаются в моторный отсек автомобиля, который одинаков для обеих версий. Оба двигателя подходят к одной и той же трансмиссии, одинаковым опорам двигателя и одинаковым органам управления. Различия в двигателях заключаются в том, что более мощная роскошная версия имеет больший рабочий объем с системой впрыска топлива, которая запрограммирована на обеспечение топливно-воздушной смеси, необходимой для двигателя с большим рабочим объемом.

В дополнение к более мощному двигателю роскошная версия может также предложить другие опции, такие как улучшенное радио с CD-плеером, более удобные сиденья, лучшая система подвески с более широкими шинами и другие цвета окраски. Со всеми этими изменениями большая часть автомобиля в стандартной и роскошной версии остается неизменной. Радио с проигрывателем компакт-дисков - это модуль, который заменяет стандартное радио, а также модуль в роскошной модели. Более удобные сиденья устанавливаются в те же крепления, что и сиденья стандартных типов. Не имеет значения, кожаные или пластиковые сиденья, поясничная поддержка или нет.

Инженеры проектируют автомобиль, разделяя задачу на части работы, которые передаются командам. Затем каждая группа разрабатывает свой компонент в соответствии с конкретным стандартом или интерфейсом, что позволяет группе гибко проектировать компонент, в то же время обеспечивая совместимость всех компонентов.

Производители автомобилей часто используют одну и ту же основную структуру для нескольких разных моделей, отчасти в качестве меры контроля над затратами. Такая « платформа » также представляет собой пример сокрытия информации, поскольку план этажа можно построить, не зная, будет ли он использоваться в седане или хэтчбеке.

Как видно из этого примера, скрытие информации обеспечивает гибкость. Эта гибкость позволяет программисту изменять функциональные возможности компьютерной программы во время нормального развития, поскольку компьютерная программа изменяется, чтобы лучше соответствовать потребностям пользователей. Когда компьютерная программа хорошо спроектирована, разлагая решение исходного кода на модули с использованием принципа сокрытия информации, эволюционные изменения намного проще, потому что изменения обычно являются локальными, а не глобальными.

Автомобили являются еще одним примером того, как они взаимодействуют с водителями. Они представляют собой стандартный интерфейс (педали, руль, переключатель, сигналы, датчики и т. Д.), По которому люди проходят обучение и получают лицензии. Таким образом, людям нужно только научиться водить машину; им не нужно изучать совершенно новый способ вождения каждый раз, когда они водят новую модель. (Конечно, есть механическая и автоматическая трансмиссии и другие подобные отличия, но в целом автомобили поддерживают единый интерфейс.)

Смотрите также

Примечания

использованная литература