ІЄРАРХІЇ ТИПІВ

У цьому розділі представлений робочий приклад, який використовується протягом всієї іншої частини цієї глави Цей приклад відноситься до безлічі геометричних типів (PLANE_FIGURE, ELLIPSE, CIRCLE, POLYGON і тд), упорядкованих у вигляді так званої ієрархії типів (Рис 201) Нижче наведені начерки визначень для

Рис 201 Приклад ієрархії типів

деяких з цих геометричних типів на мові 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 фактично являє собою обєднаний тип (А на са мом справі він ставиться до особливого роду обєднаного типу, який називається фіктивним типом Але докладний опис фіктивних типів виходить за рамки даної глави додаткова інформація на цю тему приведена в [33])

■ Що стосується типу 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&nbsp&nbsp&nbsp Підтип будь-якого підтипу сам є підтипом, наприклад, 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 – листовий тип

Примітка Це визначення нескольку спрощено, але є підходящим для поточних цілей (якщо мова йде про множинне спадкування, то воно вимагає невеликого доповнення [33])

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

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

10 Якщо дотримуються такі умови, що, по-перше, є щонайменше один тип, і по-друге, відсутні цикли (тобто не існує послідовність типів

Т1, Т2, ТЗ, .., Тп, така що Т1 є безпосереднім підтипом типу Т2, Т2 – безпосереднім підтипом типу ТЗ, .., а Тп – безпосереднім підтипом Т1), то хоча б один тип обовязково повинен бути кореневим типом Примітка У дійсності, ніяких циклів і не може бути (поясніть, чому)

Припущення про відсутність перетину

У цій главі застосовується ще одне спрощує допущення, яке формулюється таким чином: якщо Т1 і Т2 – різні кореневі типи або різні безпосередні підтипи деякого супертіпа (з цього, в Зокрема, слід, що жоден з них не є підтипом іншого), то передбачається, що вони є непересічними це означає, що жодне значення не відноситься одночасно до типів Т1 і Т2 Наприклад, жодне значення не є одночасно еліпсом і багатокутником

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

11 Ієрархії різних типів є непересічними

12 Різні листові типи є непересічними

13 Кожне значення відноситься до одного і лише одному найбільш конкретному типу

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

У дійсності твердження про те, що найбільш конкретним типом некото

рого значення v є Т, рівносильно саме такому твердженню, що мно дружність типів, якими володіє значення v, – це безліч всіх супертіпа т (Безліч, яке за визначенням включає сам тип T)

Одна з причин, по яких бажано прийняти припущення про відсутність перетину, полягає в тому, що воно дозволяє уникнути деяких неоднозначностей, які могли б виникнути в іншому випадку Наприклад, припустимо, що деяке значення v може ставитися до двох типів, Т1 і Т2, але жодне з них не є підтипом іншого Крім того, припустимо, що для типу Т1 визначений деякий оператор Ор, а для типу Т2 визначений інший оператор з тим же імям – Ор (іншими словами, оператор Ор є перевантаженим – див розділ 203) У такому випадку виклик оператора Ор з фактичним параметром v міг би одночасно ставитися до двох різних типів, тобто був би неоднозначним

Примітка Припущення про відсутність перетину є доцільним лише за тієї умови, що предметом нашої уваги є тільки одинарне спадкування, а якщо мова йде про множинне спадкування, то від цього припущення необхідно відмовитися Детальний опис даної теми наведено в [33]

Кілька слів про фізичне поданні

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

З того факту, що в є підтипом типу А, не следует3, що приховане фізичне уявлення значень типу в є таким же, як для значень типу А Наприклад, еліпси можуть бути фізично представлені із зазначенням їх центру і піввісь, а кола можуть бути фізично представлені із зазначенням їх центру і радіуса (хоча в загальному не предявляється така вимога, щоб будь-яка фізична подання було таким же, як будь-яке з оголошених можливих подань) Важливість цього зауваження стане очевидною після вивчення деяких з наступних розділів

Джерело: Дейт К Дж, Введення в системи баз даних, 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>

*

*