Скрытие информации
Эта статья нуждается в дополнительных цитатах для проверки . ( ноябрь 2008 г. ) |
В информатике . сокрытие информации — это принцип разделения проектных решений в компьютерной программе , которые с наибольшей вероятностью изменятся, таким образом защищая другие части программы от обширных модификаций, если проектное решение будет изменено Защита предполагает предоставление стабильного интерфейса , который защищает остальную часть программы от реализации (детали которой могут измениться). Другими словами, сокрытие информации — это возможность предотвратить аспектам класса или программного компонента доступ клиентов к определенным , используя либо функции языка программирования (например, частные переменные), либо явную политику экспорта.
Обзор
[ редактировать ]Термин «инкапсуляция» часто используется как синоним сокрытия информации. Однако не все согласны с различиями между ними; можно считать сокрытие информации принципом, а инкапсуляцию — методом. Программный модуль скрывает информацию, инкапсулируя ее в модуль или другую конструкцию, представляющую интерфейс. [1]
Обычно сокрытие информации используется для сокрытия структуры физического хранилища данных, чтобы в случае ее изменения изменение ограничивалось небольшим подмножеством всей программы. Например, если трехмерная точка ( x , y , z ) представлена в программе тремя переменными с плавающей запятой скалярными и позже, представление изменяется на одну переменную -массив размером три, модуль, разработанный со скрытием информации. в виду защитит остальную часть программы от таких изменений.
В объектно-ориентированном программировании сокрытие информации (путем вложения кода типов) снижает риск разработки программного обеспечения за счет смещения зависимости от неопределенной реализации (проектного решения) на четко определенный интерфейс . Клиенты интерфейса выполняют операции исключительно через интерфейс, поэтому в случае изменения реализации клиенты не должны меняться.
Инкапсуляция
[ редактировать ]об объектно-ориентированном проектировании В своей книге Грэди Буч определил инкапсуляцию как «процесс разделения элементов абстракции, составляющих ее структуру и поведение; инкапсуляция служит для разделения договорного интерфейса абстракции и ее реализации». [2]
Целью является достижение потенциала к изменению: внутренние механизмы компонента можно улучшить без влияния на другие компоненты, либо компонент можно заменить другим, поддерживающим тот же общедоступный интерфейс. Инкапсуляция также защищает целостность компонента, не позволяя пользователям переводить внутренние данные компонента в недопустимое или противоречивое состояние. Еще одним преимуществом инкапсуляции является то, что она снижает сложность системы и, таким образом, повышает ее надежность за счет ограничения взаимозависимостей между программными компонентами. [2]
В этом смысле идея инкапсуляции является более общей, чем то, как она применяется в объектно-ориентированном программировании. Например, реляционная база данных инкапсулирована в том смысле, что ее единственным общедоступным интерфейсом является язык запросов (такой как SQL ), который скрывает все внутренние механизмы и структуры данных системы управления базой данных. Таким образом, инкапсуляция является основным принципом хорошей архитектуры программного обеспечения на каждом уровне детализации.
Инкапсуляция программного обеспечения за интерфейсом позволяет создавать объекты, имитирующие поведение и взаимодействие объектов в реальном мире. Например, простой цифровой будильник — это реальный объект, который может использовать и понимать непрофессионал (неспециалист). Они могут понять, что делает будильник и как его использовать, через предоставленный интерфейс (кнопки и экран), без необходимости разбираться во всех деталях внутри часов. Аналогично, если бы часы были заменены на другую модель, непрофессионал мог бы продолжать использовать их таким же образом, при условии, что интерфейс работает так же.
В более конкретной ситуации объектно-ориентированного языка программирования это понятие используется для обозначения либо механизма сокрытия информации, либо механизма объединения, либо их комбинации. ( см. Инкапсуляция (объектно-ориентированное программирование) Подробнее .)
История
[ редактировать ]Концепция сокрытия информации была впервые описана Дэвидом Парнасом в 1972 году. [3] [4] До этого модульность обсуждалась Ришаром Готье и Стивеном Понтом в их книге «Проектирование системных программ» 1970 года, хотя само по себе модульное программирование уже много лет назад использовалось на многих коммерческих сайтах – особенно в ввода-вывода подсистемах и библиотеках программного обеспечения – без приобретения тег «скрытие информации», но по тем же причинам, а также по более очевидной причине повторного использования кода . [ нужны разъяснения ]
Пример
[ редактировать ]Сокрытие информации служит эффективным критерием разделения любого оборудования, программного или аппаратного обеспечения на функциональные модули. Например, автомобиль – это сложное оборудование. Чтобы сделать проектирование, производство и обслуживание автомобиля разумным, сложное оборудование разделено на модули с конкретными интерфейсами, скрывающими проектные решения. Разработав автомобиль таким образом, производитель автомобилей может также предложить различные варианты, сохраняя при этом экономичный в производстве автомобиль.
Например, у производителя автомобилей может быть как роскошная, так и стандартная версия автомобиля. Роскошная версия оснащена более мощным двигателем, чем стандартная версия. Инженеры, разрабатывающие два разных автомобильных двигателя: один для роскошной версии, другой для стандартной версии, обеспечивают одинаковый интерфейс для обоих двигателей. Оба двигателя помещаются в моторный отсек автомобиля, который у обеих версий одинаков. Оба двигателя оснащены одинаковой трансмиссией, одинаковыми опорами двигателя и одинаковыми органами управления. Различия в двигателях заключаются в том, что более мощная люксовая версия имеет больший рабочий объем с системой впрыска топлива, запрограммированной на подачу топливно-воздушной смеси, необходимой двигателю большего объема.
В дополнение к более мощному двигателю, роскошная версия может также предлагать другие опции, такие как лучшее радио с проигрывателем компакт-дисков, более удобные сиденья, лучшую систему подвески с более широкими шинами и другие цвета окраски. Несмотря на все эти изменения, большая часть автомобиля в стандартной и роскошной версиях одинакова. Радио с проигрывателем компакт-дисков представляет собой модуль, который заменяет стандартное радио, также модуль, в модели класса люкс. Более удобные сиденья устанавливаются в те же крепления, что и сиденья стандартного типа. Неважно, кожаные или пластиковые сиденья, есть ли поясничная поддержка или нет.
Инженеры проектируют автомобиль, разделяя задачу на части, которые распределяются между командами. Затем каждая группа проектирует свой компонент в соответствии с определенным стандартом или интерфейсом, что обеспечивает гибкость при проектировании компонента и в то же время гарантирует, что все компоненты будут сочетаться друг с другом.
Производители автомобилей часто используют одну и ту же базовую структуру для нескольких разных моделей, отчасти в целях контроля затрат. Такая « платформа » также является примером сокрытия информации, поскольку план этажа можно построить, не зная, будет ли он использоваться в седане или хэтчбеке.
Как видно из этого примера, сокрытие информации обеспечивает гибкость. Эта гибкость позволяет программисту изменять функциональность компьютерной программы в ходе ее нормального развития, поскольку компьютерная программа изменяется, чтобы лучше соответствовать потребностям пользователей. Когда компьютерная программа хорошо спроектирована и решение исходного кода разбивается на модули с использованием принципа сокрытия информации, эволюционные изменения происходят намного проще, поскольку изменения обычно являются локальными, а не глобальными изменениями.
Автомобили представляют собой еще один пример того, как они взаимодействуют с водителями. Они представляют собой стандартный интерфейс (педали, руль, переключатель, сигналы, датчики и т. д.), на котором люди обучаются и получают лицензии. Таким образом, людям остается только научиться водить машину; им не нужно учиться совершенно новому способу вождения каждый раз, когда они водят новую модель. (Конечно, существуют механические и автоматические коробки передач и другие подобные различия, но в целом автомобили имеют единый интерфейс.)
См. также
[ редактировать ]- Наследование реализации
- Семантика наследования
- Модульность (программирование)
- Непрозрачный тип данных
- Виртуальное наследование
- Прозрачность (взаимодействие человека и компьютера)
- Область применения (программирование)
- Компартментализация (информационная безопасность)
- Закон Деметры
Примечания
[ редактировать ]- ^ Роджерс, Вм. Пол (18 мая 2001 г.). «Инкапсуляция — это не сокрытие информации» . JavaWorld . Проверено 20 июля 2020 г.
- ^ Перейти обратно: а б Буч, Грейди (2007). Объектно-ориентированный анализ и проектирование с приложениями . Аддисон-Уэсли. стр. 51–52. ISBN 978-0-201-89551-3 .
- ^ Парнас, Дэвид Л. (1972). «О критериях разложения систем на модули» . Коммуникации АКМ . 15 (12): 1053–58. дои : 10.1145/361598.361623 . S2CID 53856438 .
- ^ Скотт, Майкл Л. (2009) [2000]. Брой, Манфред; Денерт, Эрнст (ред.). Прагматика языков программирования (Третье изд.). Издательство Морган Кауфманн. п. 173. дои : 10.1007/978-3-642-59412-0 . ISBN 978-3-540-43081-0 . S2CID 2698265 .
Ссылки
[ редактировать ]- Парнас, Дэвид Л. (1971). «Аспекты распределения информации в методологии проектирования» (PDF) . В Чарльзе В. Фреймане, Джоне Э. Гриффите и Джеке Л. Розенфельде (ред.). Обработка информации, материалы Конгресса ИФИП 1971 г., Том 1 - Основы и системы, Любляна, Югославия, 23–28 августа 1971 г. Конгресс ИФИП 1971 г. Том. 1. Северная Голландия. стр. 339–344. дои : 10.1184/R1/6606470.V1 .
- Парнас, Дэвид Л. (2002). «Тайная история сокрытия информации». В Манфреде Брое и Эрнсте Денерте (ред.). Пионеры программного обеспечения . Шпрингер-Верлаг Берлин Гейдельберг. ISBN 978-0-12-374514-9 .