Главная » SQL, Базы данных » ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ ОБ УТОЧНЕНИИ С ПОМОЩЬЮ ОГРАНИЧЕНИЙ

0

В данном разделе дано небольшое, но важное послесловие, которое необходимо добавить к описаниям, приведенным в предыдущих разделах. Оно касается таких примеров, как следующий: "Допустим, что тип CIRCLE имеет строгий подтип, называемый COLORED_CIRCLE" (под этим подразумевается, что определяемые этим подтипом

"цветные окружности" являются частным случаем окружностей в целом). Примеры такого общего характера часто можно встретить в литературе. Но следует отметить, что, по мнению автора, такие примеры, по некоторым важным причинам, являются крайне неубедительными и даже вносящими путаницу. А именно, в отношении, скажем, данного конкретного случая можно отметить, что  фактически не имеет смысла рассматривать цветные окружности как некоторый частный случай окружностей в целом. В конце концов, "цветные окружности" должны по определению представлять собой изображения, возможно, на экране дисплея, тогда как окружности в целом являются не изображениями, а  геометрическими фигурами. Поэтому представляется более разумным рассматривать тип COLORED_CIRCLE не как подтип типа CIRCLE, а скорее как полностью отдельный тип12. Этот отдельный тип вполне может иметь такое возможное представление, в котором один компонент относится к типу CIRCLE, а другой — к типу COLOR, но (еще раз отметим) он не должен определяться как подтип типа CIRCLE.

Наследование возможных представлений

Один из весомых доводов в поддержку изложенной выше позиции состоит в следующем. Прежде всего, вернемся на время к рассмотрению более привычного примера с эллипсами и окружностями. Ниже еще раз приведены определения типов (в виде набросков).

TYPE ELLIPSE …

POSSREP { А …, В …, CTR … } ;

TYPE CIRCLE …

POSSREP { R …, CTR … } ;

Здесь заслуживает внимания, в частности, то, что эллипсы и окружности имеют разные объявленные возможные представления. Но возможные представления для эллипсов (обязательно, хотя и неявно) являются  возможными представлениями также и для окружностей, поскольку окружности  представляют собой эллипсы. Это означает, что окружности, безусловно, "могут быть заданы" с указанием их полуосей а и Ь (и центра), даже несмотря на тот факт, что в окружностях обе полуоси, а и b, являются одинаковыми. Разумеется, обратное утверждение нельзя назвать истинным; это означает, что возможное представление для окружностей не обязательно должно быть возможным представлением для эллипсов.

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

12 Безусловно, COLORED_CIRCLE может быть подтипом типа CIRCLE точно в такой же степени, в какой он является подтипом типа COLOR (иначе говоря, он отнюдь не может быть подтипом типа CIRCLE).

13 Автор не рассматривает их под этим углом в предложенной им формальной модели; это означает, что здесь такие унаследованные возможные представления не рассматриваются как объявленные, по скольку такое утверждение, что они были объявлены, может привести к противоречию. А именно, если бы мы утверждали, что тип CIRCLE наследует возможное представление типа ELLIPSE, то согласно [3.3] для этого потребовалось бы, чтобы операция присваивания псевдопеременной ТНЕ_А или ТНЕ_В для переменной объявленного типа CIRCLE была бы допустимой, а нам, безусловно, известно, что дело обстоит иначе. Поэтому утверждение, что тип CIRCLE наследует возможное представление типа ELLIPSE, — это просто манера высказывания, которая не несет формального смысла.

обратимся к случаю окружностей и цветных окружностей) должно быть ясно, что объявленное возможное представление для типа CIRCLE не может служить возможным представлением для типа COLORED_CIRCLE, поскольку в нем нет ничего, что было бы способно представлять цвет! Этот факт становится убедительным свидетельством в пользу того, что цветные окружности нельзя рассматривать как подтипы обычных окружностей в том же смысле, в каком, например, окружности рассматриваются как подтипы эллипсов.

Точное определение понятия подтипа

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

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

TYPE ELLIPSE

IS PLANE_FIGURE

POSSREP { A LENGTH, В LENGTH, CTR POINT CONSTRAINT A > В } ;

TYPE CIRCLE

IS ELLIPSE

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

CTR = THE_CTR ( ELLIPSE ) } ;

Как известно, благодаря использованию уточнения с помощью ограничения спецификация CONSTRAINT для типа CIRCLE гарантирует, что эллипс со значениями а = b будет автоматически приведен к типу CIRCLE в результате уточнения. Но, вернувшись снова к примеру обычных окружностей и цветных  окружностей, мы не сможем найти такую спецификацию CONSTRAINT для типа COLORED_CIRCLE, которая аналогичным образом позволила бы привести обычную окружность к типу COLORED_CIRCLE в результате уточнения; иными словами, не существует возможности применить такое ограничение типа, выполнение  которого для данной конкретной окружности означало бы, что рассматриваемая окружность действительно является цветной окружностью.

Поэтому еще раз отметим, что более обоснованный подход, по-видимому, состоит в том, что типы COLORED_CIRCLE и CIRCLE должны рассматриваться как полностью различные и, в частности, тип COLORED_CIRCLE должен  рассматриваться как имеющий возможное представление, в котором один компонент относится к типу CIRCLE, а другой — к типу COLOR, поэтому может применяться следующее определение.

TYPE COLORED_CIRCLE POSSREP { CIR CIRCLE, COL COLOR } … ;

Здесь фактически мы коснулись гораздо более обширной темы. Дело обстоит таким образом, что, по мнению автора, определение подтипов должно всегда осуществляться по принципу уточнения с помощью ограничения! Это означает, что можно утверждать следующее:  если  Т’  —  подтип  типа  т,  то  всегда  должно  существовать такое ограничение типа, что если оно  удовлетворяется  для некоторого конкретного значения типа т, то это

рассматриваемое значение фактически является значением типа T1  (и  должно автоматически приводиться к типу T’ с помощью уточнения).  Поэтому допустим, что T и T1   -типы, а T’ — подтип типа т (фактически мы  можем предположить без потери точности, что T’ является непосредственным подтипом типа т). В таком случае справедливы приведенные ниже утверждения.

■     И тип т, и тип T’, по сути, представляют собой множества (именованные множе ства значений), причем T’ является подмножеством множества т.

■     Поэтому и тип т, и тип T’ имеют предикаты принадлежности к множеству; т.е. они имеют такие предикаты, что некоторое значение является элементом рассмат риваемого множества (и поэтому значением рассматриваемого типа) тогда и толь ко тогда, когда оно удовлетворяет рассматриваемому предикату. Допустим, что этими предикатами являются, соответственно, P и Р’.

■     Теперь отметим, что предикат Р’ по определению является таким предикатом, который может принимать значение TRUE только применительно к тем опреде ленным значениям, которые фактически представляют собой значения типа т. Поэтому в действительности этот предикат может быть сформулирован в терминах свойств значений типа т (а не в терминах свойств значений типа T’).

■     А предикат Р’, сформулированный в терминах свойств значений типа т, является не чем иным, как ограничением типа, которому должны отвечать значения типа T, для того чтобы стать значениями типа T’. Иными словами, любое значение типа Т приводится к типу T’ путем уточнения именно в том случае, если оно отвечает ог раничению P’.

Поэтому автор утверждает, что уточнение с помощью ограничения является единственным концептуально оправданным средством определения подтипов. Вследствие этого автор оспаривает возможность использования примеров, подобных приведенному выше, для доказательства того, что COLORED_CIRCLE может быть подтипом типа CIRCLE.

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

По теме:

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