УТОЧНЕННЯ З ДОПОМОГОЮ ОБМЕЖЕННЯ

Розглянемо наступний приклад виклику селектора для типу ELLIPSE

ELL IP SE ( L ENG TH ( 5 0 ), L E N G T H ( 5 0 ) , PO INT ( ) )

Це вираз повертає еліпс з рівними півосями Але в реальному світі еліпс з рівними півосями фактично являє собою коло, тому можна розраховувати на те, що даний вираз поверне результат найбільш конкретного типу CIRCLE, а не просто найбільш конкретного типу ELLIPSE

Питання, подібні цьому, викликали публікацію в літературі численних відгуків, часто виражають протилежні думки (а фактично ця дискусія все ще триває [206]) Після ретельних роздумів автор у визначенні своєї власної моделі вирішив наполягати на тому, що вказане вираз повинен повертати результат найбільш конкретного типу CIRCLE Більш загальне визначення цього підходу полягає в наступному: якщо тип T являє собою підтип типу т, а виклик селектора для типу Т повертає значення, яке задовольняє обмеження типу для типу T, то (у розглянутій моделі) результат цього виклику селектора відноситься до типу T . Тепер (до часу написання даної книги) лише небагато з сучасних комерційних продуктів (якщо взагалі такі є) фактично діють зазначеним чином, але автор розглядає цей факт як недогляд з боку розробників даних продуктів Зокрема, в [33] показано, що внаслідок даного упущення подібні системи змушені підтримувати некруглі колу , неквадратні квадрати та аналогічні абсурдні обєкти, тоді як ці критичні зауваження не належать до пропонованого автором підходу

Примітка Див також опис другий серйозного омани в главі 26

З наведеного вище випливає, що жодне значення найбільш конкретного типу ELLIPSE не повинно характеризуватися таким значенням довжин півосей а і b, при якому а = b (щонайменше, у запропонованій автором моделі) іншими словами, значення найбільш конкретного типу ELLIPSE ПОВИННІ ТОЧНО відповідати тим еліпсам реального світу, які дійсно не є колами На відміну від цього, в інших моделях спадкування значення найбільш конкретного типу ELLIPSE відповідають таким

еліпсам реального світу, які можуть бути або не бути окружностями Тому автор сподівається, що запропонована ним модель трохи ближче до такого визначення, як достовірна модель реального світу.

Нарешті, ідея про те, що, наприклад, еліпс з півосями а = b повинен ставитися до типу CIRCLE, відома під назвою уточнення з допомогою обмеження (specialization

by constraint) [33], але ми зобовязані попередити читача, що інші автори використовують цей термін або дуже близький до нього для позначення зовсім іншого поняття

(Див, наприклад, [2010], [2014])

Додаткові відомості про псевдопеременних ТНЕ_

Як було описано в розділі 5, псевдопеременние ТНЕ_ надають спосіб оновлення одного компонента змінної, притому що інші компоненти залишаються незмінними (під компонентами тут маються на увазі компоненти деякого можливого подання, а не обовязково фізичного представлення) Наприклад, припустимо, що змінна Е відноситься до оголошеного типу ELLIPSE, а поточне значення Е являє собою еліпс (скажімо) з полуосью а, рівний пяти, і полуосью Ь, рівний трьом У такому випадку наведений нижче оператор присвоювання оновлює значення довжини півосі b змінної Е (після чого ця довжина стає рівною чотирьом), не змінюючи значення півосі або положення центру

ТНЕ_В (Е): = LENGTH (4 0)  

Отже, з цього випливає висновок, що псевдопеременние ТНЕ_ фактично не вимагаються вони насправді представляють собою просто скорочення (що було також відзначено в розділі 5) Наприклад, наведений вище оператор присвоювання, в якому використовується псевдопеременная ТНЕ_, еквівалентний наступному, в якому вона не використовується

Е: = ELLIPSE (ТНЕ_А (Е), LENGTH (40), THE_CTR (E))

Тому розглянемо наступний оператор присвоювання

ТНЕ _ В (Е): = LE NG T H                                          (   5      0   )

За визначенням цей оператор присвоювання еквівалентний наведеному нижче Е: = ELLIPSE (ТНЕ_А (Е), LENGTH (50), THE_CTR (E)) Таким чином, набуває чинності принцип уточнення за допомогою обмеження

(Оскільки вираз в правій частині повертає еліпс з півосями а = b), і загальний

ефект полягає в тому, що після присвоювання типом MST (E) стає CIRCLE, а не

ELLIPSE

Потім розглянемо наступний оператор присвоювання

ТНЕ_В (Е): = LENGTH (4 0)

Тепер змінна Е містить еліпс з полуосью а, рівний пяти, і полуосью b, рівний чотирьом, а тип MST (Е) знову стає типом ELLIPSE, тобто по суті відбувається дія, яке автор називає узагальненням за допомогою обмеження (generalization by constraint)

Примітка Припустимо, що (як і наприкінці розділу 204) тип CIRCLE має строгий підтип O_CIRCLE (де О-окружність представляє собою коло з центром на початку координат) з наведеним нижче визначенням

TYPE O_CIRCLE IS CIRCLE

CONSTRAINT THE_CTR ( CIRCLE ) = POINT ( 00, 00 ) POSSREP { R = THE_R ( CIRCLE ) }

У такому випадку поточне значення змінної Е в деякий заданий момент часу може ставитися до найбільш конкретному типу O_CIRCLE, а не просто до типу CIRCLE Припустимо, що так воно і є, і розглянемо наведену нижче послідовність операторів прісваіванія7

ТНЕ_А (Е): = LENGTH (70)

ТНЕ_В (Е): = LENGTH (70)

Після першого з цих присвоювань Е містить просто еліпс завдяки узагальнення за допомогою обмеження Але після другого присвоювання вона знову містить окружність, але чи є остання саме О-окружністю або просто окружністю? Безумовно, бажано, щоб це була саме О-коло І зрозуміло, так воно і є, оскільки дане значення задовольняє обмеження типу O_CIRCLE (Включаючи обмеження, успадковане цим типом від типу CIRCLE)

Побічні слідства зміни типів

Знову припустимо, що Е – мінлива оголошеного типу ELLIPSE Вище було описано, як змінити тип Е, щоб ця змінна розглядалася як що знаходиться на нижчому рівні ієрархії типів (Наприклад, якщо її поточним найбільш конкретним типом є ELLIPSE, ТО значення цієї змінної можна оновити таким чином, щоб її поточним найбільш конкретним типом став CIRCLE) Крім того, в цій главі було показано, як змінити тип змінної Е, щоб вона розглядалася як що знаходиться на більш високому рівні ієрархії типів (Наприклад, якщо її поточним найбільш конкретним типом є CIRCLE, значення цієї змінної можна оновити таким чином, щоб її поточним найбільш конкретним типом став ELLIPSE) А якіпобічні ефекти викликає таку зміну типу Припустимо, що даний приклад буде доповнений таким чином, що тип ELLIPSE має два безпосередніх подтіпа8, CIRCLE і NONCIRCLE, зміст яких є очевидним

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

■ Якщо поточне значення змінної Е відноситься до типу CIRCLE (тому а = b), таке оновлення Е, в результаті якого стає істинним умова а> b, спричинить за собою те, що MST (Е) стане рівним NONCIRCLE

■ Якщо поточне значення змінної Е відноситься до типу NONCIRCLE (тому а> b), таке оновлення Е, в результаті якого стає істинним умова а = b, по тягне за собою те, що MST (E) стане рівним CIRCLE

Таким чином, при конкретизації за допомогою обмежень враховуються також побічні ефекти зміни типів

7 Якби підтримувалося множинне присвоювання, можна було б виконати цю послідовність ність операцій у вигляді однієї операції

8 До речі, слід зазначити, що тепер тип ELLIPSE стає обєднаним типом Див розділ 207

Примітка Якщо читач задумався над наступним питанням, але не знайшов на нього відповідь, відзначимо, що таке оновлення Е, при якому виконується умова а < Ь, є неможливим (воно порушує обмеження, що накладається на тип ELLIPSE).

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

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*