Введение в системы БД (542480), страница 249
Текст из файла (страница 249)
Одни объекты являются неизменяемыми; в качестве примера можно привести числа (например, 3, 42) и символьные строки (например, "Мохап", "Экономика и бизнес"). Другие объекты — изменяемые; примерами могут служить объекты, представляющие отделы и служащих, которые упоминались в начале раздела 24.1.
Согласно традиционной терминологии неизменяемые объекты соответствуют значениям, а изменяемые — переменным' с произвольной внутренней сложностью (т.е. такие объекты могут содержать любое количество типов данных, имеющихся в обычных языках программирования, и конструкторов этих типов — чисел, строк, списков, массивов, стеков и т.д.).
Замечание. В некоторых системах термин объект употребляется только для изменяемого объекта, а термин значение, или иногда литерач, — для неизменяемого объекта. Даже в тех системах, в которых термин "объект" используется как в первом, так и во втором случаях, следует помнить о том, что неформально, за исключением особо оговоренных ситуаций, под ним подразумевается изменяемый объект, если явно не указано обратное. Каждый объект имеет тип (в объектной терминологии — класс). Отдельные объекты иногда называются экземплярами объектов, чтобы их можно было отличить от соответствующего объектного типа или класса.
Обратите внимание, что термин тип здесь используется в смысле, принятом в традиционном программировании (как в главе 5), в частности этот термин включает в себя и набор операторов (в объектной терминологии— методов), которые могут применяться для объектов данного типа. Замечание.
На самом деле в некоторых объектных системах понятия типов и классов различаются. Такие системы кратко будут рассмотрены в разделе 24.3; однако пока мы будем использовать эти понятия как взаимозаменяемые. Объекты инкапсулированы. Это означает, что физическое представление, т.е. внутренняя структура объекта, например объекта 0ЕРТ (Отдел), остается скрытой от пользователей. В действительности пользователю известно только то, что объект в состоянии выполнять неко- ( Заметиъч однако, что термин переменная без дополнительного уточнения в объектном контексте часта используется для обозначения такай переменной, которая содержит идентификатор объекта (а чем пойдет речь долее в этом разделе). 949 Глава 24.
Объектные базы данных торые операции ("методы")з. Например, к объектам йЕРТ могут применяться методы Н1ЕЕ ЕНР (Нанять сотрудника), Р1КЕ ЕИР (Уволить сотрудника), СНТ Вт)йбЕТ (Урезать бюджет) и т.д. Также обратите внимание, чта к данным обьвнтам могут причвняться ТОЛЬКО тв операции, которые упомянуты среди этих методов.
Доступ к внутреннему представлению таких объектов разрешен только коду, с помощью которого эти методы реализованы, т.еэ употребляя жаргон, можно сказать, что эти и только эти методы мотут "взломать инкапсулированный объект"з, если, конечно, данный код также невидим для пользователей. Преимушество инкапсуляции состоит в том, что она позволяет изменять внутреннее представление объектов, исключая необходимость переделывать приложения, в которых эти объекты используются. Конечно, это возможно при условии, что любое такое изменение внутреннего представления сопровождается соответствующим изменением кода, с помощью которого реализуются применяемые к объекту методы.
Иначе говоря, инкапсуляция подразумевает физическую независимость данных. Теперь опишем инкапсуляцию в терминах независимости данных, что имеет смысл с точки зрения баз данных, хотя в литературе по обьектной технологии это понятие обычно описывается иначе, Мы определим инкапсулированные объекты как имеющие закрытую память и открытый интерфейс. ° Закрытая память состоит из переменных экземпляра, которые также иногда называются членами или атрибутами. Их значения представляют внутреннее состояние данного объекта.
В истинно объектной системе переменные экземпляра являются полностью защищенными и скрытыми от пользователей, однако, как было сказано выше, они доступны для методов. Здесь следует добавить, что многие объектные системы нв являются "чистыми" в этом смысле, поскольку разрешают пользователям доступ к некоторым переменным экземпляра. К этому вопросу мы еще возвратимся в следующем подразделе.
В литературе многа путаницы связана с понятиям инкапсуляции. Точка зрения, которая нажитая наиболее разумной и которая предлагается в настоящей книга, фармулирувтся тан. Говорят, чта абьвит иниапсулираван, если и талька если эта скаляр в смысле, подразумеваемом в ыавв 5 (т.в, если и только если ан нв имеет никаких видимых пользователем кампанвнтав); поэтому инкапсуяироваиный объект и скаяяр аэначают одна и та жв. Отчвтим, чта определенные "коллекции" объектов (см. раздел 24.3), бесспорна, не являются сналярами, поэтому согласна предыдущему определению ани нв иниапсулираваны. Некоторые авторы, напротив, категарически утверждают, чта все объекты инкапсулираваны, и такая точка зрения неизбежно приводит к апрвделвнны.м противоречиям. Опиальныв хгв считают, чта, кроме требования, чтобы внутренняя структура бъиа скрыта, эта понятие подразумевает вщг и трвбаванив, чтобы соответств>юшие методы были физически связаны с абъвнтач или нлассач данного объекта, т.в.
физически являлис~ вга част~ю. Мы считаем, чта в последней трантавне смешиваются понятия мадгии и ее реализации. И эта, кипенна, вще одна причина, па которой, «ан указывалось в главе 5, мы предпочли бы савсем не испальэавать тврмин "инкапсулированный". Однако в данной главе мы все жв будем вынуждены время ат времени и нему обращаться.
З Мы бы рекомендовали следовать более строгим трвбаваниям, приведенным в (З.З). Допустимы только выборки и аператары ТНЕ (см. главу 5), которым раэрешвна нарушать инкапсуляцию в этом смысле. Всв другие операторы должны быть реализованы в терминах данных выборок и операторов ТНЕ . Иными словами, используется защита нада. На в объектных систвчах обычно предоставляются нв операторы ТНЕ нак таковые, а операторы "Евт ат(ввт" (получить и установить), которые не являются их точными аналогами (см, раздел 24.4 и статью (24.22)).
950 Часть й7. Объектные и объектно-реляционные базы данных ° Открытый интерфейс состоит из определений интерфейсов лля методов данного объекта. Этн определения соответствуют тому, что в главе ! 9 мы называли сигнатураии опредеяений. Однако, как будет показано ниже, в объектных системах обычно требуется, чтобы такие сигнатуры были связаны лишь с одним конкретным "целевым" типом или классом. А в главе! 9 ни о чем подобном не было и речи, но мы ие считаем, что такое требование необходимо или обязательно (см.
(3.3)). Как уже отмечалось, код, который реализует методы объекта, как и переменные экземпляра, скрыт от пользователя. Замечание. Точнее говоря, открытый интерфейс представляет собой часть определения класса рассматриваемого объекта, а не часть самого этого объекта.
(Как бы там ни было, открытый интерфейс является общим для всех объектов данного класса, а не конкретным кодом в некотором отдельном объекте.) И для определения класса данный объект является его отдельным экземпляром (как элемент каталога в обычной реляционной системе). Методы вызываются с помощью сообщений, которые, по сути, являются вызовами функций и имеют единственный синтаксически выделенный аргумент — получатель, или цель. Например, ниже приводится сообщение, записанное с использованием гипотетического синтаксиса и предназначенное для передачи указания о приеме сотрудника Е на работу в отдел Еч 0 Н1НЕ ЕМР ( Е ) Аргументы й и Е будут рассмотрены в подразделе "Классы, экземпляры и коллекции". Получателем в этом примере является объект отдела, указанный как аргумент ц.
Согласно синтаксису традиционных языков программирования это же сообщение следовало сформулировать иначея. Н?ЕЕ ЕМР ( (!, Е ) Для удобства в любой объектной системе обычно содержится некоторый набор встроенных классов и методов. В частности, в ней почти всегда присутствуют числовые (с методами "=", "<", "+", "-" и т.д.), символьные (с методами "=", "<", "))", Я!)ВЯТН и т,д.) и другие классы. Конечно, предоставляются возможности и для опытных пользователей, которые могут создать собственные классы и методы.