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

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

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

Обзор

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

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

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

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

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

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

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

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

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

История

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

Пример сокрытия информации

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

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

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

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

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

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

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

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

Рекомендации

  1. ^ Роджерс, Вм. Пол (18 мая 2001 г.). «Инкапсуляция - это не сокрытие информации». JavaWorld. Получено 2020-07-20.
  2. ^ а б Грейди Буч, Объектно-ориентированный анализ и дизайн с приложениями,. Эддисон-Уэсли, 2007, ISBN  0-201-89551-X, п. 51-52
  3. ^ Скотт 2009, п. 173.