Инкапсуляция
Идея инкапсуляции происходит (а) из потребности отчетливо различать спецификации и реализации операций и (б) из потребности в модульности. Модульность необходима для структурирования сложных приложений, разрабатываемых и реализуемых группой программистов. Она также необходима как средство защиты и авторизации.
Имеются две точки зрения на проблему инкапсуляции: точка зрения с позиций языка программирования (это исходная точка зрения, поскольку отсюда ведет свое начало сама концепция) и адаптация этой точки зрения применительно к базам данных.
Идея инкапсуляции в языках программирования происходит от абстрактных типов данных. С этой точки зрения объект делится на интерфейсную и реализационную части. Интерфейсная часть является спецификацией набора допустимых над объектом операций. Только эта часть объекта видима (для пользователя объекта). Реализационная часть состоит из части данных и процедурной части. Часть данных – это представление (representation ), или состояние объекта, а в процедурной части на некотором языке программирования описывается реализация каждой операции.
Адаптация этого принципа применительно к базам данных состоит в том, что объект инкапсулирует и программу, и данные. В мире баз данных не вполне ясно, является или нет структурная часть типа частью интерфейса (это зависит от системы), в то время как в мире языков программирования структура данных явно является частью реализации, а не интерфейса.
В реляционных системах прикладные программы обычно пишутся на императивном языке программирования с включением в него операторов языка манипулирования данными или на языке четвертого поколения и хранятся в обычной файловой системе, а не в базе данных. Таким образом, при таком подходе имеются кардинальные различия между программой и данными, а также между языком запросов (для незапланированных запросов) и языком программирования (для прикладных программ). 4
В объектно-ориентированных системах имеется единая модель для данных и операций, и информация может быть скрыта.
Никакие иные операции, помимо указанных в интерфейсе, не выполняются. Это ограничение справедливо как для операций изменения, так и для операций выборки.
Инкапсуляция обеспечивает что-то вроде “логической независимости данных”: можно изменить реализацию типа, не меняя каких-либо программ, использующих этот тип. Таким образом, прикладные программы защищены от реализационных изменений на нижних слоях системы.
По мнению авторов Первого манифеста, правильной инкапсуляцией является такая, когда видны только операции, а данные и реализация операций скрыты в объектах. Однако имеются случаи, когда инкапсуляция не нужна, и использование системы может быть значительно упрощено, если система допускает нарушение инкапсуляции при некоторых условиях. Например, при незапланированных запросах инкапсуляция является не столь необходимой, так как такие вопросы, как сопровождаемость, в этом случае не являются важными. Таким образом, ООСБД должна обеспечивать механизм инкапсуляции, но имеются случаи, когда его принудительное использование неуместно.