Главная » SQL, Базы данных » ИЕРАРХИИ ТИПОВ

0

В этом разделе представлен рабочий пример, который используется на протяжении всей остальной части этой главы. Этот пример относится к множеству геометрических типов (PLANE_FIGURE, ELLIPSE, CIRCLE, POLYGON и  т.д.), упорядоченных в виде так называемой иерархии типов (рис. 20.1). Ниже приведены наброски определений для

Рис. 20.1. Пример иерархии типов

некоторых из этих геометрических типов на языке Tutorial D (здесь заслуживают особого внимания ограничения типов).

TYPE PLANE_FIGURE … ; TYPE ELLIPSE

IS PLANE_FIGURE

POSSREP { A LENGTH, В LENGTH, CTR POINT

TYPE CIRCLE

IS ELLIPSE

CONSTRAINT A > В } ;

CONSTRAINT THE_A ( ELLIPSE ) = THE_B ( ELLIPSE ) POSSREP { R = THE_A ( ELLIPSE ) ,

CTR = THE_CTR ( ELLIPSE ) } ;

Рассмотрим эти определения более внимательно. Прежде всего, для  упрощения в этой главе предполагается, что эллипсы всегда расположены в пространстве таким образом, что их большая ось а является горизонтальной, а малая ось b — вертикальной; кроме того, принято допущение, что большая полуось а всегда больше или равна меньшей полуоси b (иными словами, наши эллипсы — "низкие и полные", а не "высокие и худые"). Итак, для представления эллипсов достаточно знать размеры их полуосей а и b (и местонахождение их центра). В  отличие от эллипсов, для представления окружностей достаточно знать их радиус r (и местонахождение их центра).

Затем необходимо сделать приведенные ниже уточнения.

■     Тип PLANE_FIGURE (плоская фигура) вообще не имеет объявленного возможного представления; в ходе дальнейшего изложения в данной главе будет показано, что тип PLANE_FIGURE фактически представляет собой объединенный тип. (А на са мом деле он относится к особому роду объединенного типа, который называется фиктивным типом. Но подробное описание фиктивных типов выходит за рамки данной главы; дополнительная информация на эту тему приведена в [3.3].)

■     Что касается типа ELLIPSE, то выше было указано, что каждый эллипс представ ляет собой плоскую фигуру; кроме того, в его объявлении обычным образом зада но возможное представление {a,b,ctr} с учетом действующего ограничения, согласно которому а > b.

Примечание. Для полноты определения фактически следовало бы также  ввести  ограничение, согласно которому значение b должно быть больше  нуля. Но здесь это ограничение исключено в целях сокращения объема изложения. ■ В отличие от этого, для типа CIRCLE указано, что каждая окружность представляет собой эллипс, а также задано  ограничение,  согласно   которому  а  =  b.  Кроме  того,  в  рамках  этого ограничения было определено возможное представление {r, ctr} для окружностей и указано, как это возможное представление связано с возможным представлением для эллипсов.   Обратите   внимание   на   то,   каким   образом   в   контексте   подобного ограничения  может  использоваться  имя  супертипа  для  указания  на  произвольное значение рассматриваемогосупертипа.

Теперь система обладает сведениями, например, о том, что тип CIRCLE является подтипом ELLIPSE и поэтому операторы (и ограничения), которые относятся к эллипсам в целом, относятся и к окружностям в частности. Ниже приведены наброски определений некоторых из этих операторов.

OPERATOR AREA ( E ELLIPSE ) RETURNS AREA ;

/* Оператор "вычисления площади указанного объекта" следует отметить, */ /* что словом AREA обозначены и имя самого оператора, и тип результата */

END OPERATOR ;

OPERATOR THE_A ( Е ELLIPSE ) RETURNS LENGTH ;

/* Оператор "определения полуоси а указанного объекта" */

… ; END OPERATOR ;

OPERATOR THE_B ( Е ELLIPSE ) RETURNS LENGTH ;

/* Оператор "определения полуоси Ь указанного объекта" */

… ; END OPERATOR ;

OPERATOR THE_CTR ( E ELLIPSE ) RETURNS POINT ;

/* Оператор "определения центра указанного объекта" */

… ; END OPERATOR ;

OPERATOR THE_R ( С CIRCLE ) RETURNS LENGTH ;

/* Оператор "определения радиуса указанного объекта" */

… ; END OPERATOR ;

Все эти операторы, кроме THE_R, относятся к значениям типа ELLIPSE, а, следовательно, в силу самого этого обстоятельства, и к значениям типа CIRCLE; но, в отличие от других операторов, действие оператора THE_R распространяется только на значения типа CIRCLE.

Терминология

К сожалению, нам придется ввести еще несколько терминов и определений, прежде чем мы сможем приступить к дальнейшему изложению. Но рассматриваемые ниже понятия в основном являются несложными.

.1.  Супертип  любого  супертипа  сам  является  супертипом,  например,   POLYGON (Многоугольник) — это супертип типа SQUARE (Квадрат).

Каждый тип представляет собой супертип по отношению к самому себе, например, ELLIPSE — ЭТО СуперТИП ТИПа ELLIPSE.

2.    Если А — супертип типа B, причем типы А и B  отличаются друг от друга, то А — строгий супертип (proper supertype) типа в, например, POLYGON — строгий супертип типа SQUARE. Если же А — строгий супертип типа B, то тип А должен также быть строгим надмножеством типа B; это означает, что должно существовать по меньшей мере одно значение типа А, не являющееся значением типа B.

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

3.    Подтип любого подтипа сам является подтипом, например, SQUARE — это подтип типа POLYGON.

4.    Каждый тип представляет собой подтип самого себя, например, ELLIPSE — это подтип типа ELLIPSE.

5.    Если в является подтипом типа А, причем типы в и А отличаются друг от друга, то в представляет собой строгий  подтип типа А; это означает,  что,  например, SQUARE — это строгий подтип типа POLYGON. Если же в — строгий подтип типа А, то тип в должен быть также строгим подмножеством типаА.

Кроме того, справедливы приведенные ниже утверждения.

6.    Если А — супертип типа в и не существует тип с, который был бы строгим подти пом типа А и строгим супертипом типа в, то А является непосредственным супер типом типа в, а в — непосредственным подтипом типа А, например, RECTANGLE (Прямоугольник) — непосредственный супертип типа SQUARE, a SQUARE — непо средственный подтип типа RECTANGLE. Поэтому заслуживает внимания то, что в синтаксисе языка Tutorial D, применяемом в данной главе, ключевое слово IS (Является) означает именно то, что указанный тип "является непосредственным подтипом" другого указанного типа.

7.    Корневым типом (root type) называется тип, не имеющий строгого супертипа, на пример, PLANE_FIGURE является корневым типом.

Примечание. Мы не исходим из предположения, что существует только один корневой тип. Но если имеется два или несколько таких типов, то всегда можно придумать своего рода "системный" тип, который будет служить  непосредственным супертипом для них всех, поэтому без потери общности можно предположить, что существует только один корневой тип.

8.    Листовым типом (leaf type) называется тип без строгого подтипа, например, в рас сматриваемой иерархии CIRCLE — листовой тип.

Примечание. Это определение нескольку упрощено, но является подходящим для текущих целей (если речь идет о множественном наследовании, то оно требует небольшого дополнения [3.3]).

9.       Каждый строгий подтип имеет один и только один непосредственныйсупертип.

Примечание. В данном случае мы просто явно подчеркиваем принятое ранее пред положение, что в настоящей главе рассматривается только одинарное наследова ние. Как было отмечено выше, в [3.3] подробно описано, к каким последствиям приводит отказ от этого предположения.

10.   Если соблюдаются такие условия, что, во-первых, имеется по меньшей мере один тип, и во-вторых, отсутствуют циклы (т.е. не существует последовательность типов

Т1,   Т2,   ТЗ,   …,  Тп, такая что Т1 является непосредственным подтипом типа Т2, Т2 — непосредственным подтипом типа ТЗ,…, а Тп — непосредственным подтипом Т1), то хотя бы один тип обязательно должен быть корневым типом. Примечание. В действительности, никаких циклов и не может быть (объясните, почему).

Предположение об отсутствии пересечения

В этой главе применяется еще одно упрощающее допущение, которое формулируется следующим образом: если Т1 и Т2 — разные корневые типы или разные непосредственные подтипы некоторого супертипа (из этого, в частности, следует, что ни один из них не является подтипом другого), то предполагается, что они являются непересекающимися; это означает, что ни одно значение не относится одновременно к типам Т1 и Т2. Например, ни одно значение не является одновременно эллипсом и многоугольником.

Из этого непосредственно следуют описанные ниже дополнительные свойства типов.

11.    Иерархии различных типов являются непересекающимися.

12.    Различные листовые типы являются непересекающимися.

13.    Каждое значение относится к одному и только одному наиболее конкретному типу.

Например, некоторое значение может представлять собой "просто эллипс", а не окружность; это означает, что для него наиболее конкретным типом служит ELLIPSE (в реальном мире некоторые эллипсы не являются окружностями).

В действительности утверждение о том, что наиболее конкретным типом некото

рого значения v является Т, равносильно именно такому утверждению, что мно жество типов, которыми обладает значение v, — это множество всех супертипов т (множество, которое по определению включает сам тип T).

Одна из причин, по которым желательно принять предположение об отсутствии пересечения, состоит в том, что оно позволяет избежать некоторых неоднозначностей, которые могли бы возникнуть в ином случае. Например, предположим, что некоторое значение v может относиться к двум типам, Т1 и Т2, но ни одно из них не является подтипом другого. Кроме того, допустим, что для типа Т1 определен некоторый оператор Ор, а для типа Т2 определен другой оператор с тем же именем — Ор (иными словами, оператор Ор является перегруженным — см. раздел 20.3). В таком случае вызов оператора Ор с фактическим параметром v мог бы одновременно относиться к двум разным типам, т.е. был бы неоднозначным.

Примечание. Предположение об отсутствии пересечения является  целесообразным лишь при том условии, что предметом нашего внимания является только одинарное наследование, а если речь идет о множественном наследовании, то от этого предположения необходимо отказаться. Подробное описание данной темы приведено в[3.3].

Несколько слов о физическом представлении

Несмотря на то, что нас интересует в основном модель наследования, а не вопросы реализации, ниже приведены некоторые замечания, касающиеся  реализации, которые нужно в определенной степени учитывать, чтобы правильно понять всю концепцию на следования.

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

Источник: Дейт К. Дж., Введение в системы баз данных, 8-е издание.: Пер. с англ. — М.: Издательский дом «Вильямс», 2005. — 1328 с.: ил. — Парал. тит. англ.

По теме:

  • Комментарии