Спадкування типів

■&nbsp Тип – Це іменоване безліч значень (під цим маються на увазі всі можливі значення розглянутого типу), поряд зі звязаним з ним безліччю операторів, які можуть застосовуватися до значень і змінним розглянутого типу

Крім того, необхідно враховувати наведені нижче властивості типів

■ Кожен конкретний тип може бути визначений системою або користувачем

■ До складу визначення будь-якого конкретного типу входить специфікація безлічі всіх допустимих значень цього типу (дана специфікація являє собою відповідне обмеження типу, як описано в розділах 5 і 9)

■ Подібні значення можуть мати довільну складність

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

■ Операції зі значеннями і змінними конкретного типу можуть здійснюватися виключно за допомогою операторів, визначених для розглянутого типу

■ Крім уже згаданих операторів ТНЕ_, до них відносяться також такі опе ратора:

■ щонайменше один оператор селектора (Точніше, по одному такому операто

ру для кожного доступного користувачу можливого подання), який дозволяє вибирати або здавати будь-яке значення аналізованого типу з

, Допомогою відповідного виклику селектора

■ оператор перевірки на рівність, який дозволяє перевіряти будь-які два зна чення розглянутого типу для визначення того, чи дійсно вони представляють собою однією теж значення

■ оператор присвоювання, що дозволяє присвоювати значення розглянутого типу змінної, яка оголошена як відноситься до розглянутого типу

Крім згаданих властивостей, необхідно відзначити описані нижче властивості

■ Деякі типи є підтипами інших типів, званихсупертіпа

Якщо в – підтип А, то оператори та обмеження типу, які відносяться до А, відносяться також і до в (тобто, умовно кажучи, успадковуються типом в), але сам тип в має власні оператори та обмеження типу, які не відносяться до А (Цим твердженням буде дано більш точне визначення трохи пізніше)

Наприклад, припустимо, що задані два типи, ELLIPSE (Еліпс) і CIRCLE (Окружність), які мають очевидну інтерпретацію У такому випадку можна стверджувати, що тип CIRCLE є підтипом типу ELLIPSE (А тип ELLIPSE – супертіп типу CIRCLE) Під цим мається на увазі, що зазначені типи характеризуються описаними нижче властивостями

■ Кожна окружність являє собою еліпс (тобто безліч усіх окружних стей – це підмножина множини всіх еліпсів), але протилежне утвер ждение не є істинним

■ Таким чином, кожен оператор, який може застосовуватися до всіх еліпсам в цілому, застосовується і до кіл зокрема (оскільки окружності – це еліпси), але протилежне твердження хибне Наприклад, оператор THE_CTR (визначення центру) може застосовуватися до еліпсам, а тому й до окружної стям, але оператор THE_R (визначення радіуса) може ставитися тільки до ок ружности

■ Крім того, будь-яке обмеження, яке відноситься до еліпсам в цілому, распро страняется і на колі зокрема (знову-таки, оскільки окружності – це еліпси), але протилежне твердження є хибним Наприклад, на ел Ліпсі поширюється обмеження а> b (де а і b, відповідно, велика і мала півосі), то таке ж обмеження має задовольнятися також і для ок ружности Безумовно, у кіл довжини півосей а і b збігаються і дорівнює сумі до ються радіусу r, тому завдання задоволення зазначеного обмеження вирішується тривіально фактично обмеження а = b може служити прикладом саме та кого обмеження, яке відноситься до кіл зокрема, але не до Елліпі сам в цілому

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

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

Область застосування успадкування типів

Чому ця тема заслуговує уваги Мабуть, на це питання є щонайменше дві відповіді, наведені нижче

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

засобів моделювання реальності (або семантичного моделюванняпід

цією назвою вони згадувалися в розділі 14)

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

Але незважаючи на наявність таких потенційних можливостей, слід зазначити, що дослідники ще не прийшли до спільної думки щодо того, якою має бути формальна, сувора і абстрактна модель успадкування типів Нижче наведена характерна цитата з [2013]

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

Виклад даного матеріалу в цій главі засноване на моделі, розробленої автором спільно з Хю Дарвені (Hugh Darwen) і детально опісанной1 в [33] Тому необхідно враховувати, що іншими авторами і в інших джерелах такі терміни, як підтип і спадкування, можуть використовуватися в тлумаченнях, відмінних від застосовуваних в справжній книзі Закликаємо читача бути уважним

Деякі попередні відомості

Нижче наведено ряд попередніх відомостей, які необхідно розглянути, перш ніж приступати до докладного обговорення тематики наслідування як такої Ці попередні відомості є основною темою даного підрозділу

■&nbsp&nbsp&nbsp&nbsp Типізація значень

Як було зазначено в розділі 5, якщо v являє собою значення, то v можна розглядати як свого роду обєкт, позначений прапорцем, на якому зазначено: Я – ціле число, Я – номер постачальника або Я – окружність (І тд) Отже, якщо не застосовується спадкування, то кожне значення відноситься до одного і тільки до одного типу, а при використанні успадкування значення може належати одночасно до декількох типів Наприклад, певне значення може одночасно ставитися до типів ELLIPSE І CIRCLE

1 У зазначеній книзі ясно підкреслено, що її автори прагнуть уникнути того, щоб запропонована ними модель розглядалася просто як ще одне теоретичне вправу Замість цього вони пропонують її для обговорення всім співтовариством користувачів баз даних в цілому як претендента на роль моделі успадкування, яка дозволить вирішити настільки важливу задачу всеосяжного охоплення всієї тематики спадкування .

■&nbsp&nbsp&nbsp&nbsp Типізація змінних

Кожна змінна має один і тільки один оголошений тип Наприклад, змінна може бути оголошена таким чином

VAR   E   ELLIPSE   

Тут оголошеним типом змінної Е є ELLIPSE Отже, якщо не використовується спадкування, то всі можливі значення деякої змінної відносяться до одного і тільки до одного типу, а саме до відповідного оголошеному типу Якщо ж застосовується спадкування, то будь-яка конкретна змінна може мати значення, яке одночасно належить до кількох типам, наприклад, поточним значенням змінної Е може виявитися еліпс, який фактично є колом і тому відноситься одночасно до типам ELLIPSE і CIRCLE

■&nbsp&nbsp&nbsp&nbsp Відмінності між одинарним і множинним спадкуванням

Існують дві основні різновиду спадкування типів – одинарне і множинне Висловлюючись неформально, одинарне спадкування означає, що кожен підтип має тільки один супертіп і успадковує властивості тільки від одного супертіпа, а множинне спадкування означає, що будь підтип може мати будь-яку кількість супертіпа і успадковувати властивості від всіх них Очевидно, що перший вид спадкування є окремим випадком останнього Тим не менш, не тільки тема множинного спадкоємства, а й тема одинарного спадкування є досить складною (що фактично на перший погляд може здатися дивним), тому в даній главі вся увага буде приділено тільки одинарному спадкоємства, і в ній неуточнений термін спадкування застосовується для позначення саме одинарного успадкування Детальний опис обох видів спадкування, як множинного, так і одинарного, наведено в [33]

■&nbsp&nbsp&nbsp&nbsp Спадкування скалярів, кортежів і відносин

Безумовно, поняття спадкування поширюється не тільки на скалярние2 значення, а й на нескалярние, оскільки в кінцевому підсумку нескалярние значення складаються з скалярних Зокрема, це поняття поширюється також на значення кортежів і відносин Але навіть тема спадкування скалярів є досить складною (і цей факт також гідний подиву), тому в даній главі основна увага приділено спадкоємства скалярів і в ній неуточнені терміни тип, значення, змінна, оператор і вираз відносяться саме до скалярним типам, значенням, змінним, операторам і виразами Для ознайомлення з докладним описом всіх видів спадкування, включаючи не тільки скаляри, а й кортежі і відносини, зверніться до [33]

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

774     Частина V Додаткові теми

Спадкування структури і функцій

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

Примітка Автор не виключає можливості спадкування структури, але е та тема розглядається як що відноситься тільки до питань реалізації і не має відношення до самої моделі

“Підтаблицях і супертабліци.

Тепер читачеві повинно бути ясно, що розглянута модель успадкування стосується того, що в термінах теорії реляційних баз даних можна було назвати спадкуванням доменів (Нагадаємо, що домени і типи – це одне і те ж) Але, зіткнувшись з питанням про те, чи існує можливість наслідування в реляційному контексті, більшість спеціалістів одразу ж передбачає, що мова йде про якийсь різновид спадкування таблиць Наприклад, у мові SQL передбачені кошти підтримки певних обєктів, які називаються в цій мові підтаблицях і супертабліцамі, згідно з якими певна таблиця в може успадкувати всі стовпці деякої іншої таблиці А, а потім бути доповнена деякими власними стовпцями (див главу 26) Але, на думку автора, поняття підтаблиць і супертабліц являє собою щось зовсім інше, і хоча воно і може представляти певний інтерес (незважаючи на те, що автор ставиться до нього скептично [1413]), але не має нічого спільного з успадкуванням типів як таким

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

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

*

*