stringtranslate.com

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

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

Обзор

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

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

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

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

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

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

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

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

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

История

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

Пример

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

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

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

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

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

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

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

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

Примечания

  1. ^ Роджерс, Wm. Пол (18 мая 2001 г.). «Инкапсуляция — это не сокрытие информации». JavaWorld . Проверено 20 июля 2020 г.
  2. ^ Аб Буч, Грейди (2007). Объектно-ориентированный анализ и проектирование с приложениями . Аддисон-Уэсли. стр. 51–52. ISBN 978-0-201-89551-3.
  3. ^ Парнас, Дэвид Л. (1972). «О критериях разложения систем на модули». Коммуникации АКМ . 15 (12): 1053–58. дои : 10.1145/361598.361623 . S2CID  53856438.
  4. ^ Скотт, Майкл Л. (2009) [2000]. Брой, Манфред; Денерт, Эрнст (ред.). Прагматика языка программирования (Третье изд.). Издательство Морган Кауфманн. п. 173. дои : 10.1007/978-3-642-59412-0. ISBN 978-3-540-43081-0. S2CID  2698265.

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