Введение в системы БД (542480), страница 276
Текст из файла (страница 276)
Поэтому, например, точки ВЕ61К Р01КТ и ЕКВ Р01КТ будут физически реализованы в терминах их пекартовых координат. 3. Определение каждого атрибута автоматически приводит к определению одного оператора считывания — наблюдателя (проще говоря, оператора "яеГ"— "получить") и одного оператора изменения — мутатора (проще говоря, оператора з На самом деле второй нример неверный, носкольну ВЕЯЕНи ЕК — злю зарезервированные слава. 1045 Приложение Б. Обзор языка БДЛЗ "зе1" — "установить"), для которых используется синтаксис уточнения с помощью точкил. Пусть, например, Х, Р и ЕЯ вЂ” БОЬ-переменные типов РБОАТ, Р01МТ и ЫМЕЯЕЯ соответственно. Тогда допустимы следующие выражения. /в Получить значение компонента Х точки Р */ Р.Х /* Получить значение компонента Х з/ /* точки ВЕ61М сегмента линии БЯ */ ЬЯ.ВЕ61М.Х /* Установить значение Х для */ /+ компонента Х точки Р */ ЯЕТ Р.Х = Х ) ЯЕТ ЕБ.ВЕ61М.Х = 2 ; /* Установить значение Х для */ /* компонента Х точки ВЕ01М */ /* сегмента линии БЯ */ 4.
Поскольку какие-либо дополнительные операторы не были определены, из других операторов для этих типов допустимы лишь операторы сравнения на равенство и операторы присвоения, которые допустимы для всякого типа. В частности, отметим, что "операторы-селекторы" типов Р01МТ и ЫМЕЯЕЯ (в смысле главы 5) не определяются автоматически, поэтому нет и литералов типов Р01МТ и ЫМЕБЕЯ.
5. Уточнение Р1МА1 означает, что любая попытка определить другой тип как собственный подтип любого из этих типов приведет к ошибке (см. раздел Б.З), Иначе говоря, оба эти типа — листовые и будут такими оставаться всегда. б. Являются ли типы Р01МТ и ЫМЕЯЕЯ (или структурированные типы вообще) "инкапсулированными"? К сожалению, ответ на этот вопрос зависит от контекста. Например, если структурированный тип используется как тип некоторого столбца, ответ будет "Да" (пожалуй). Однако, если он используется как тип некоторой таблицы (см.
раздел Б.4), конечно, ответ будет УНет ". Замечание. В первом случае добавление "пожалуй" означает, что даже в этой ситуации операторы "получить" ("Бег") и "установить" ("зе1"), по существу, щзедоставляют атрибуты данного типа (как уже указывалось) и не могут быть замещены. Возможно, для первого случая уместно использовать термин "псевдоинкапсулированные типы" или псевдоскаляры. Приведем общий синтаксис для определения структурированного типа, который не является каким-либо подтипом (см.
раздел Б.З, где рассматривается случай определения подтипов). ОЕЕАТЕ ТУРЕ <имя типа> АБ [ <слисок определений атрибутов> ) [ <реализация ссялочвого типа> ] МОТ ] 1МЯТАМТ1АВ1 Е ) [ МОТ ] Р1МАЕ [ <список спецификаций методов> ] ) 1046 Приложения Следует отметить, что этот "мутатор" не является настоящим мутатором в смысле .лавы 5, т.е. типичным оператором обновления, поскольку по определению он возвращает значение.
Обсуждение последствий (неприятных/ этого факта, к сожалению, выходит за рамки данного короткого приложения. (Слс /З.З/, где этот вопрос обсуждается подробно) Пояснения 1. Параметр <слнсок определений атрибутов> не должен быть пустым.
2. Необязательный параметр <реаллзацня ссилочлото типа> подробно обсуждается в разделе Б.4. 3. Уточнение КОТ 1КЯТАКТ1АВЬЕ означает, что тип является фиктивным типом в смысле главы 19. По умолчанию заданным считается уточнение 1КЯТАИТ1АВЬЕ. 4. Уточнение КОТ Г1КАЬ означает, что тип может иметь собственные подтипы; в противном случае используется уточнение Р1КАЬ. 5. К значениям и переменным данного структурированного типа Т применяются следующие операторы.
а) Наблюдатели и мутаторы атрибутов, уже описанные выше. б) Операторы присвоения "=" и, возможно, сравнения "<" (оба оператора определяются с помощью отдельного оператора СКЕАТЕ ОКРЕК1КЯ РОК Т, хотя зачем требуется упорядочение, если нужно просто определить оператор присвоения "=", не совсем понятно). в) Процедуры и функции, которые определяются, чтобы получить параметр типа Т (или любой из его собственных подтипов; см. раздел Б,З). г) гьзетоды, которые определяются, чтобы получить специальный "целевой" параметр типа Т или любой из его собственных подтипов (опять же, см, раздел Б.З). Замечание.
Здесь под методами подразумеваются методы в традиционном объектном смысле (см, главу 24), т.е. они являются операторами, которые рассматривают один параметр как специальный. Если метод М определен для типа Т и Х вЂ” выражение типа Т, то специальный синтаксис точечного уточнения Х.М используется для вызова метода М для объекта Х. (Здесь для простоты подразумевается, что метод М никаких других параметров не имеет.) В параметре <слецлфлкацня иетоца> задаются "определения сигнатур" метода в смысле глав 19 и 24. Однако они также включают многое другое, что относится к реализации и, по мнению автора, здесь неуместно. реальный код, реализующий методы, определяется в другом месте. Б.З. Наследование типов В языке ЯОЬЗ поддержка наследования типов не полностью ортогональна, поскольку применяется только к структурированным типам, т.е.
не поддерживается наследование типов для типов встроенных, генерируемыхз и типов Р1ЯТ1КСТ. Кроме того, совсем не поддерживается множественное наследование типов. В атом разделе будет рассмотрено только наследование для "псевдоскалярных" структурированных типов, которое может считаться реализованным более или менее удовлетворительно. Обсуждение наследования неинкансулированных структурированных типов откладывается до раздела Б.5. З За исключением, мелеет быть, строчных тинов. Однако существуют некоторые нроблемы, связанные с наследованием строчных типов, которые здесь не освещаются, носкольку зто выходит за рамки данного нрилозкения. 1047 Приложение Б. Обзор языка БЬ)БЗ Перечислим самые сушественные различия между моделью наследования типов, которая была представлена в главе 19, и наследованием "псевдоскалярных'* типов в языке БОЬЗ.
° В языке БС(ЬЗ поддерживаются структурное наследование, а также наследование поведения. ° В языке Я()ЬЗ неверно различаются значения и переменные, и поэтому, в частности, не различаются заменимость значений и заменимость переменных. ° В языке ЯОЬЗ нет поддержки ограничений типа, и поэтому также нет поддержки специализации посредством ограничения. ° В языке БС(ЬЗ требуется, чтобы операторы обновления ("мутаторы") наследовались безусловно.
Вследствие этих различий в языке ЯОЬЗ допускаются '"некруглые окружности" и другие несуразности, которые обсуждались в главе 19. Кроме того, некоторые операции сравнения в языке ЯО: 3 в результате дают значение ложь, когда они должны бы давать значение истина (поскольку, например, значение менее конкретного типа ЕЬЫРЯЕ может иметь равные полуоси и, значит, соответствовать окружности в обычном понимании).
Ниже приводятся примеры описания типов эллипсов и окружностей на языке Я()ЬЗ. СКЕАТЕ ТТРН ЕЬЫРЯЕ АЯ ( й ЬЕНОТН, В ЬЕНОТН, СТК Р01НТ ) НОТ Р1йй1 СКЕАТЕ ТТРЕ СЬКСЬЕ НЕНЕК ЕЬЫРБЕ АЯ ( К ЬЕНОТН ) — нереалистично! (см. нние) НОТ Р1МАЬ Однако отметим, что в этих определениях физической реализации типа С1КСЬЕ используются четыре компонента — й, В и СТК (наследуемые от типа ЕЬЫРЯЕ) и К (указываемый только для типа С1КСЬЕ). Для любой данной окружности, конечно, три из этих компонентов будут иметь одинаковые значения.
В качестве альтернативы вместо атрибута К можно определить метод К для типа С1КСЬЕ. Тогда тип С1КСЬЕ будет иметь ту же физическую реализашпо, что и тип ЕЬЫРЯЕ, и эта реализация будет менее избыточна. С другой стороны, если С вЂ” переменная объявленного типа С1КСЬЕ, присвоение С.К будет допустимо в первом из этих проектов, но не допустимо во втором. И опять же, присвоение С.К, если оно поддерживается, будет„вообще говоря, давать такую "окружность", что С К Ф С.А( Ниже перечислены некоторые особенности в различии между моделью наследования типов, описанной в главе 19, и наследованием, которое поддерживается в языке Я( 1ЬЗ. ° В языке БОЬЗ используется термин "гйгесз" в понятии аугесг зибгуре для обозначения прямого непосредственного подтипа вместо более соответствуюшего случаю термина "(пцпед(а1е".
° В языке Я1 1ЬЗ вместо термина "корневой тип" используется термин "максимальный супертип". ° В языке ЯО 3 поддерживается оператор ТКЕАТ (аналог оператора ТКЕАТ 00НМ). Например, в этом языке аналогом выражения ТКЕйТ НОНН йЯ С1КСЬЕ(Е) будет выражение ТКЕйТ Е АБ С1КСЬЕ. 1048 Приложения ° В языке Б()ЬЗ также имеется оператор, который можно рассматривать как оператор ТЕЕАТ ОР. Приведем, например, следующую формулировку оператора. АИДА ( С АЯ ЕЬЬ|РБЕ ) Уточнение АБ ЕЬЬУРЯЕ обеспечивает вызов версии ЕЬИРБЕ лля оператора АЕЕА, даже если объявленный тип переменной С будет С1ЕСЬЕ.