Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Обзор [ править ]

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

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

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

Инкапсуляция [ править ]

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

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

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

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

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

История [ править ]

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

Пример [ править ]

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

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

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

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

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

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

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

См. Также [ править ]

  • Наследование реализации
  • Семантика наследования
  • Модульность (программирование)
  • Непрозрачный тип данных
  • Виртуальное наследование
  • Прозрачность (взаимодействие человека с компьютером)
  • Область применения (программирование)
  • Компартментализация (информационная безопасность)
  • Закон Деметры

Ссылки [ править ]

  1. ^ Роджерс, Wm. Пол (18 мая 2001 г.). «Инкапсуляция - это не сокрытие информации» . JavaWorld . Проверено 20 июля 2020 .
  2. ^ Б Гради Буч, Объектно-ориентированный анализ и проектирование с примерами приложений ,. Аддисон-Уэсли, 2007, ISBN 0-201-89551-X , стр. 51-52 
  3. ^ Скотт 2009 , стр. 173.
  • Парнас, DL (февраль 1971 г.). Чарльз В. Фрейман, Джон Э. Гриффит и Джек Л. Розенфельд (ред.). «Аспекты распространения информации в методологии проектирования» (PDF) . Труды МФОИ конгресса 1971 года . Северная Голландия. 1 : 339–344. DOI : 10,1184 / R1 / 6606470.V1 .
  • Парнас, DL (декабрь 1972 г.). «О критериях, которые будут использоваться при разложении систем на модули» (PDF) . Коммуникации ACM . 15 (12): 1053–58. DOI : 10.1145 / 361598.361623 .
  • Парнас, Дэвид Л. (2002). «Тайная история сокрытия информации». У Манфреда Броя и Эрнста Денерта (ред.). Пионеры программного обеспечения . Springer-Verlag Berlin Heidelberg. ISBN 978-0-12-374514-9.
  • Скотт, Майкл Л. (2009) [2000]. Прагматика языка программирования (Третье изд.). Издательство Морган Кауфманн. DOI : 10.1007 / 978-3-642-59412-0 . ISBN 978-3-540-43081-0.