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

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

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

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

Таким образом, эти два оператора ТВАЧЕЬ Т1МŠ— логически разные операторы. Путаница между двумя различными операторами возникает из-за того, что им присвоили одно и то же имя. Фактически здесь мы имеем дело с перегружаемым, а не с включаемым полиморфизмом. 752 Часть )'. Дополнительные аспекты (В качестве дополнительного замечания отметим, что на практике недоразумения возникают из-за того, что, как это ни печально, многие авторы используют термин перегружаемый полиморфизм для включаемого полиморфизма.) Подведем итоги. Мы по-прежнему не считаем изменение семантики оператора хорошей идеей. Как мы убедились, данное требование не гарантируется, однако, безусловно, можно определить нашу модель наследования таким образом (что мы и делаем), чтобы утверждать, что если семантика изменилась, то реализация нарушена, т.е. данная реализация не является реализацией модели и последствии непредсказуемы.

Обратите внимание, что наша точка зрения на этот вопрос (т.е. то, что мы считаем недопустимыми такие изменения) имеет еше одно преимущество: независимо от того, определены ли какие-либо явные специализации данного оператора, представление пользователя остается одним и тем же. Иначе говоря, существует оператор (отдельный оператор), называемый Ор; он применим ко всем значениям аргументов некоторого конкретного типа Т и, следовательно, по определению — к значениям аргумента любого собственного подтипа типа Т. 19.8.

Является ли окружность эллипсом До сих пор в этой главе подразумевалось, причем довольно обоснованно, что окружности являются эллипсами. Однако необходимо обратить ваше внимание, что в литературе ведутся горячие споры по этому тривиальному вопросу. Рассмотрим наши обычные переменные Е и С, имеющие обьявленные типы ЕЕЫРЕЕ и С1НСАЕ соответственно.

Предположим, что эти переменные инициализированы следующим образом. Е:= ЕЬЫРБЕ ( ЕЕНСТН ( 5.0 ), ЬЕН6ТН ( 3.0 ), Р01НТ ( 0.0, 0.0 ) ) ) С з= С1НСЬЕ ( ЕЕННТН ( 5.0 ), Р01НТ ( 0.0, 0.0 ) ) ) Обратите внимание, что оба оператора, ТНЕ А(С) и ТНЕ Н(С), в данном случае имеют значение 5. Теперь можно выполнить операцию с переменной Е, например "обновить значение длины полуоси а'*. ТНЕ А ( Е ) := ЬЕННТН ( 6.0 ) ) А что будет, если попытаться выполнить аналогичную операцию с переменной С? ТНЕ А ( С ) := ЬЕННТН ( б.0 ) Мы получим ошибку! Что же это за ошибка? Если бы обновление все-таки произошло, то переменной С предстояло бы содержать "окружность", которая нарушает ограничение для окружностей, согласно которому а = Ь (значение а было бы равно б, а значение Ь, наверное, оставалось бы равным 5, поскольку мы его не изменяли). Иными словами, переменная С содержала бы "некруглую окружность" и, таким образом, было бы нарушено ограничение для типа С1НСАЕ. Поскольку "некруглые окружности" противоречат логике и здравому смыслу, наверное, разумно предложить, чтобы такое обновление было недопустимо.

Также очевидно, что достичь этого можно во время компиляции, отбрасывая все подобные операции. Для этого достаточно определить задаваемую оператором присвоения операцию обновления так, чтобы отдельное обращение к полуосям а и Ь для окружностей было синтаксически 753 Глава 19. Ниследовиние типов недопустимо. Иначе говоря, операторы присвоения ТНЕ А и ТНЕ В должны быть неприменимы для типа С1КСЬЕ, а попытка подобного обновления должна приводить к оьчибке несовпадения типа во время компиляции. Замечание. В действительности "очевидно", что подобные операторы присвоения должны быть синтаксически недопустимыми.

Напомним, что присвоение значения с помощью оператора ТНЕ лсендолервненлая — это просто сокращение. Поэтому, например, попытка выполнения операции присвоения с оператором ТНЕ А, показанная выше, если бы она была допустима, могла бы быть переписана в таком виде. с 3= С1КСЬЕ ( ... ) Но вызов оператора выбора для типа С1КСЬЕ в правой части оператора присвоения должен был бы включать как аргумент типа ТНЕ А с новой длиной полуоси а, равной ЬЕНСТН(6,0).

Однако оператор выбора для типа С1КСЬЕ не принимает аргумента типа ТНЕ А — он принимает аргументы типов ТНЕ К и ТНЕ СТК. Таким образом, становится ясно, что исходное присвоение должно быть недопустимым! Об изменении семантики Учитывая сказанное выше, сразу же отбросим предложение, суть которого заключается в попытке реанимировать идею, состоящую в том, что операторы присвоения ТНЕ А и ТНЕ В должны быть допустимы лля окружностей.

Обычно предлагается, чтобы, например, оператор ТНЕ А был переопределен, иначе говоря, явно специализирован, для окружностей таким образом, чтобы иметь также побочный эффект присвоения соответствующего значения для оператора ТНЕ В, так что после обновления окружность по-прежнему будет удовлетворять ограничению а = Ь. Мы отвергаем это предложение по крайней мере по следующим трем причинам. ° Во-первых, семантика присвоения для операторов ТНЕ А и ТНЕ В предписана нашей моделью наследования и не должна изменяться предлагаемым способом. ° Во-вторых, даже если бы эта семантика присвоения не была предписана нашей моделью, мы уже доказали, что изменение семантики оператора произвольным образом — это, вообще говоря, не лучшая идея, а изменение семантики оператора таким способом, который приводит к побочным эффектам — это еше худшая идея.

Лучше придерживаться общего принципа, который гласит, что операторы должны делать то, что от них требуется, не больше и не меньше. ° И, в-третьих, что наиболее важно, изменение семантики предлагаемым способом не всегда возможно. Например, пусть тип ЕЬЬТРЯЕ имеет другой непосредственный подтип КОКС1КСЬЕ, и пусть ограничение а > Ь применимо для подобных "неокружностей". Рассмотрим оператор присвоения ТНЕ А для "неокружности'*, который устанавливал бы длину полуоси а равной Ь. Какое тогда должно быть соответствующее семантическое переопределение для этого присвоения? Какой именно побочный эффект был бы подходящим в этом случае? Существует ли гибкая модель Итак, мы остались на позициях, когда операторы присвоения ТНЕ А и ТНЕ В применимы для эллипсов вообще, но не применимы для окружностей в частности.

Однако дополнительноо необходимо учесть следующее. 754 Часть )'. Дополнительные аспекты Ь Предполагается, что тип С1ЕСЕЕ является подтипом типа ЕВРЕЕ. 2. Предполагается, что утверждение, согласно которому тип С1ЕСВЕ является подтипом типа ЕВЫРБЕ, подразумевает, что операции, которые применимы к эллипсам вообще, применимы (т.е.

наследуются), в частности, и к окружностям. 3. Однако сейчас мы требуем, чтобы операции присвоения для операторов ТВЕ А и ТНЕ В не наследовались. Нет ли здесь противоречия? Что же произошло? Прежде чем попытаться ответить на этн вопросы, подчеркнем серьезность данной проблемы. Если определенные операторы не наследуются типом С1ЕСВЕ от типа ЕВРЕЕ, то что мы имеем в виду, когда говорим, что окружность "является" эллипсом? Что означает "наследование", если некоторые операторы на самом деле не наследуются? Существует ли действительно гибкая модель? Или же мы гоняемся за призраком, пытаясь его поймать? Замечание. Некоторые авторы даже предлагают, причем вполне серьезно, применять оператор присвоения ТНЕ А как для окружностей, так и для эллипсов (лля окружностей обновляется радиус), а оператор присвоения ТВŠ — только для эллипсов.

Но тогда тип ЕВЫРБЕ фактически должен стать подтипом типа С1ВСЕЕ! Иными словами, мы получим перевернутую иерархию типов. Но достаточно хоть на минуту задуматься, чтобы понять, что это неудачная идея, в частности концепция заменимости в этом случае будет разрушена (что такое радиус обычного эллипса?). Одних авторов рассуждения, аналогичные рассмотренным выше, приводят к выводу, что гибкой модели наследования не существует (см.

аннотацию к 119.1) в разделе "Список литературы" в конце главы). Другие же авторы предлагают модели наследования, свойства которых нелогичны или весьма сомнительны. Например, в языке БОЬЗ разрешены "некруглые окружности" и другие нелепости. Как и язык БОЫ92, язык БОЬЗ фактически не поддерживает ограничений типа, и это большое упущение, в первую очередь, приводит к тому, что подобные нелепости имеют место (см.

приложение Б). Решение проблемы Исходя из сказанного выше можно сделать вывод, что мы столкнулись со следующей дилеммой. ° Если окружности наследуют операторы присвоения ТЕЕ А и ТНЕ В от эллипсов, мы получим некруглые окружности. ° Чтобы предотвратить возникновение некруглых окружностей, необходима поддержка ограничений типа.

° Но, если мы поддерживаем ограничения типа, операторы не могут быть наследуемыми. ° Таким образом, в результате никакого наследования вовсе не может быть! Как же решить эту дилемму? Выход заключается (как это часто бывает) в необходимости осознать (и соответственно действовать), что существует значительное логическое различие между значениями и переменными.

Говоря "Каждая окружность является эллипсом*', мы подразумеваем, что значение каждой окружности является значением эллипса. Мы, безусловно, не считаем при этом, что каждая переменная окружности является некоторой переменной Глава 19. Наследование типов 755 эллипса (переменная объявленного типа С1НСЬЕ не является переменной объявленного типа ЕЬЬ1РЯЕ, и она не может содержать значение конкретного типа ЕЬЬ1РЯЕ).

Иначе говоря, наследование применимо к значениям, а ие к переменным. В случае эллипсов и окружностей, например, можно сформулировать следующие правила. ° Как уже отмечалось, значение каждой окружности является значением эллипса. ° Следовательно, все операции, которые применимы к эллипсу, применимы и к окружности. ° Единственное, чего мы не можем делать по отношению к любым значениям,— это изменять их! Если бы это было возможно, они бы перестали быть значениями.

(Конечно, можно изменить "текущее значение" переменной путем ее обновления, но, повторяем, мы не можем изменить значение как таковое.) Операции, которые применимы к значениям эллипса, все без исключения являются операциями, определенными для типа ЕЬЬ|РБЕ и предназначенными лиигь для чтения.

А операции, которые обновляют переменные типа ЕЬЬ1РБЕ, представляются, конечно, операторами обновления, определенными для этого типа. Следовательно, наше утверждение, что "наследование применимо к значениям, а не к переменным", точнее можно сформулировать так. ° Операторы, предназначенные лишь для чтенин, наследуются с помощью значений, в там числе с помощью текущих значений переменных. Поэтому данные операторы могут быть применены без каких-либо нежелательных последствий к значениям, которые являются текущими значениями переменных.

Эта более точная формулировка также объясняет, почему концепции полиморфизма и заменимости относятся именно к значениям, а не к переменным. Напомним, что в соответствии с концепцией заменимости везде, где системой должно обрабатываться значение типа Т, вместо него можно подставить значение типа Т', если тип Т' — подтип типа Т. И именно этот принцип рассматривался, когда мы впервые представляли его как принцип заменимости значений. А как же тогда быть с операторами обновления? По определению такие операторы применимы к переменным, но не к значениям. Можем ли мы тогда сказать, что операторы, которые применимы к переменным типа ЕЬЬ1РБЕ, наследуются и переменными типа С1НСЬЕ? Нет, в целом, этого сказать нельзя.

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

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

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

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