Главная » Просмотр файлов » Введение в системы БД

Введение в системы БД (542480), страница 191

Файл №542480 Введение в системы БД (Введение в системы БД) 191 страницаВведение в системы БД (542480) страница 1912015-08-16СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 191)

Конечно, тот факт, что в данном случае при выполнении оператора АЕЕА вызывается версия, применяемая для окружностей, а не для эллипсов, должен быть скрыт от пользователя (для пользователя, повторим, существует единственный оператор АЕЕА). Скалярные переменные Мы уже видели, что текущее значение ч скалярной переменной Ч с объявленным типом Т может относиться к любому подтипу типа Т, равно как и к самому данному типу. Поэтому можно представить модель Ч в виде упорядоченной тройки вида <ЭТ,ИБТ,ч>.

Указанные параметры имеют следующий смысл. ° ()Т вЂ” объявленный тип переменной Ч. ° ИБТ - текущий конкретный тип переменной Ч. ° ч — значение конкретного типа ИБТ, а именно — текущее значение переменной Ч. Мы используем обозначения ()Т(Ч), ИБТ(Ч) и ч(Ч) соответственно для компонентов ))Т, ИБТ и ч модели скалярной переменной Ч. Отметим, что МБТ(Ч), конечно же, всегда является подтипом, хотя и необязательно дейспвмлечьньъи подтипом наподобие ))Т(Ч); в общем случае МБТ(Ч) и ч(Ч) изменяются во времени; в действительности МБТ(Ч) следует из ч(Ч), поскольку каждое значение относится ровно к одному конкретному типу. Эта модель скалярной переменной полезна, когда необходимо придерживаться точной семантики различных операций, включая, в частности, операции присвоения.

Однако, прежде чем разбираться в этом вопросе, необходимо показать, как можно расширить обозначения объявленного типа и текущего конкретного типа для применения к произвольному выражению и, в частности, к скалярным переменным. Пусть Х является таким выражением. Тогда получим следующее.

° Выражение Х имеет объявленный тип, БТ(Х) (точнее говоря, его имеет результат вычисления выражения Х), производный очевидным образом от объявленных типов операндов выражения Х (включая объявленные типы результатов любых вызовов операторов, содержащихся в выражении Х) и известный во вреия каипиляции. 738 Часть К Дополнительные аспекты ° Выражение Х также имеет текуи)ий конкретный тип, ИЯТ(Х) (точнее говоря, его имеет результат вычисления выражения Х), производный очевидным образом от текущих значений операндов выражения Х (включая текущие значения результатов любых вызовов операторов, содержащихся в выражении Х) и в общем случае неизвестный да времени выполнения.

Теперь можно точно описать выполнение операции присвоения. Рассмотрим следующую операцию. ч!=Х) Здесь Ч вЂ” скалярная переменная, а Х вЂ” скалярное выражение. Тип ОТ(Х) должен быть подтипом типа ОТ(Ч), иначе присвоение недопустимо (зта проверка выполняется во время компиляции). Если присвоение допустимо, то в результате тип ИВТ(Ч) станет равным ИЯТ(Х], а тип ч(Ч) станет равным ч(Х). По ходу заметим, что если текущий конкретный тип переменной Ч вЂ” зто тип Т, то каждый действительный супертип типа Т является также "текущим типом" переменной Ч. Например, если переменная Е (объявленного типа ЕЬЫРЯЕ) имеет текущее значение, относящееся к конкретному типу С1КСЬЕ, то типы С1КСЬЕ, ЕЬЫРЯЕ и РЬКНЕ РУООКЕ все являются "текущими типами" переменной Е.

Однако выражение "текущий тип Х" обычно применяют, подразумевая, по крайней мере неформально, именно тип ИЯТ(Х). Пересмотр понятия заменимости Рассмотрим следующее определение оператора. ОРЕККТОН СОРУ ( Е ЕЬЫРЯЕ ) КЕТОКНЯ ( ЕЬЫРЯЕ ) КЕТОКНЯ ( Е ) ЕНО ОРЕККТОК Благодаря свойству заменимости оператор СОРУ может, очевидно, быть вызван с аргументом конкретного типа (либо ЕЬЫРЯЕ, либо С1КСЬЕ) и возвратит результат, относящийся к тому же конкретному типу. Отсюда следует, что понятие заменимости имеет еще одно следствие: если оператор Ор определен и ега результат имеет объявленный тип Т, та реазьный результат выполнения оператора Ор мажет относиться к любому падтипу типа Т (в общем случае).

Другими словами, как ссылка на переменную объявленного типа Т может в действительности обозначать некоторое значение любого подтипа типа Т (в общем случае), так и вызов оператора с объявленным типом результата Т может фактически возвращать некоторое значение любого подтипа типа Т (опять-таки, в общем случае). Оператор ТКЕАТ Ву0%(ч( Еще раз рассмотрим пример, приведенный в начале данного раздела.

ЧКК Е ЕЬЫРЯЕ Чгй С С1КСЬЕ С := С1КСЬЕ ( 1ЕНОТН ( 3.0 ), РО1НТ ( 0.0, 0.0 ) ] Е:=С) 739 Глава 19. Наследование типов Здесь тип МБТ(Е) — С1КСЬЕ. Предположим, что требуется получить радиус данной окружности и присвоить его некоторой переменной Ь. Можно попытаться сделать это так.

ЧАК Ь ЬЕМОТН Ь ;= ТНЕ К ( Е ) ; /* Ошибка времени компиляции - дедопустиммй тип!!! */ Однако, как явствует из комментария, этот код во время компиляции выдает сообщение об ошибке о несоответствии типов. Точнее говоря, ошибка возникает из-за того, что оператор ТНЕ К ("радиус") в правой части оператора присвоения требует, чтобы его аргумент относился к типу С1КСЬЕ, а объявленный тип его аргумента Š— ЕЬЫРБЕ, а не С1КСЬЕ. Замечание. Если бы проверка во время компиляции не выполнялась и текущее значение Е во время выполнения оказалось бы эллипсом, а не окружностью, возникла бы ошибка времени выполнения, что еще хуже. В нашем случае, безусловно, заранее известно, что значение во время выполнения будет окружностью, и проблема состоит лишь в том, что мы знаем об этом, а компилятор — нет.

Чтобы решить эту проблему, введем новый оператор, который неформально будем называть ТКЕАТ ПОИМ (трактовать). Теперь можно корректно обратиться к оператору ТНЕ К и получить радиус окружности. ! := ТНЕ К ( ТКЕАТ ПОИМ АБ С1КСЬЕ ( Е ) ) Выражение ТКЕАТ ПОИМ АЯ С1КСЬЕ(Е) задается для того, чтобы для переменной Е в данном случае был объявлен тип С1КСЬЕ и проверка при компиляции завершилась успешно. При этом во время выполнения произойдет следующее.

° Если текущее значение переменной Е относится к типу С1КСЬЕ, значит, выражение в целом корректно и возвращает радиус данной окружности. А точнее, обращение к оператору ТКЕАТ ПОИМ дает результат (скажем, 2) с объявленным типом ПТ( Б ), равным С1КСЬЕ, поскольку задано уточнение ...

АБ С1КСЬЕ, текущим конкретным типом МБТ(Я), равным типу МБТ(Е), который в нашем примере имеет значение С1КСЬЕ, и текущим значением ч(Е), равным ч(Е). В результате при вычислении выражения ТНЕ К(Б) будет получен требуемый радиус (который может быть присвоен переменной Ь). ° Однако если текущее значение переменной Е в действительности будет относиться к типу ЕЬЫРБЕ, а не к типу С1КСЬЕ, то обращение к оператору ТКЕАТ ПОИМ приведет к ошибке из-за несоответствия типа во время выполнения. Общее назначение оператора ТКЕАТ ПОИМ вЂ” обеспечить, чтобы ошибки несоответствия типов во время выполнения могли произойти только в рамках вызова оператора ТКЕАТ ПОИМ. Замечание. Предположим, что тип С1КСЬЕ, в свою очередь, имеет собственный подтип (скажем, О С1КСЬЕ, где О С1КСЬŠ— окружность, центр которой расположен в начале координат). ТУРЕ О С1КСЬЕ РОЯЯКЕР ( К ЬЕМНТН ) ЯПВТХРЕ ОР ( С1КСЬЕ ) СОМЯТКА1МТ ( ТНЕ СТК ( О С1КСЬЕ ) = РО1МТ ( 0.0, 0.0 ) ) 740 Часть )'. Дополнительные аспекты Тогда текущее значение переменной Е в данное время может иметь конкретный тип О С1КСЬЕ, а не просто С1КСЬЕ.

Рассмотрим вызов оператора ТКЕМ 0ОИК в этом случае. ТКЕАТ 0ОИМ АЯ С1КСЬЕ ( Е ) Его выполнение завершится нормально, и будет выдан результат (скажем, 2) с объявленным типом ОТ(2), равным С1КСЬЕ, поскольку задано уточнение ... АЯ С1КСЬЕ, текущим конкретным типом МБТ(2), равным типу О С1КСЬЕ, поскольку О С1КСЬŠ— это конкретный тип переменной Е, и текущим значением ч(2), равным ч(Е). Короче говоря, оператор ТКЕАТ 0ОИМ всегда возвращает конкретный тип; он никогда не "повышает" тип, чтобы сделать его менее конкретным, чем он был прежде.

Приведем более формальное изложение семантики вызова оператора ТЕКАТ 0ОМН АБ Т(Х), где Х вЂ” некоторое скалярное выражение. Во-первых, тип Т должен быть подтипом типа 0Т(Х) (это проверяется во время компиляции). Во-вторых, конкретный тип МЯТ(Х) должен быть подтипом типа Т (это проверяется во время выполнения). Если данные условия удовлетворяются, то после обращения к оператору возвращается результат 2 с типом 0Т(2), равным Т, типом МБТ(2), равным типу МБТ(Х), и текущим значением ч(2), равным ч(Х). Замечание.

В (3.3) также определяется общая форма оператора ТКЕМ ОООН, которая допускает, чтобы один операнд "трактовался" как имеющий тип другого операнда вместо некоторого явно указанного конкретного типа. 19.5. Специализация по ограничениям Рассмотрим следующий пример вызова оператора выбора для типа ЕЬЬ1РБЕ. Е111РБЕ ( ЬЕКОТН ( 5.0 ), ЬЕМОТН ( 5.0 ), РО1КТ ( ... ) ) Это выражение возвращает эллипс с одинаковыми полуосями. Однако эллипс с одинаковыми полуосями фактически является окружностью. Следует ли из этого, что данное выражение возвращает результат конкретного типа С1КСЬЕ, а не ЕЬЬТРБЕ? Вопросы, подобные приведенному выше, вызывали (и продолжают вызывать) в литературе довольно бурные дискуссии.

В нашей модели мы решили (после долгих раздумий), что лучше настаивать на том, чтобы выражение действительно возвращало результат конкретного типа С1КСЬЕ. В общем виде это можно сформулировать так; если тип Т' является подтипом типа Т, а в результате вызова оператора выбора для типа Т возвращается значение, которое удовлетворяет ограничениям типа для типа Т', то (в нашей модели) результат вызова оператора выбора будет иметь тип Т'з.

Замечание. Предупредим, что лишь немногие существующие в настоящее время коммерческие реализации, если таковые вообще имеются, реально работают указанным образом, но мы считаем это просто одним из недостатков существующих систем. В (3.3] показано, к каким результатам приводит отсутствие подобной функциональности — такие системы вынуждены поддерживать "некруглые окружности", "неквадратные квадраты" и другие нелепости, чего не скажешь в случае нашего подхода.

Характеристики

Тип файла
DJVU-файл
Размер
10,05 Mb
Тип материала
Предмет
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6382
Авторов
на СтудИзбе
308
Средний доход
с одного платного файла
Обучение Подробнее