Назад, в Ялту
Назад, в Ялту
Суть решения Кэтколл (Catcall), - смысл этого понятия мы поясним позднее, - в возвращении к духу Ялтинских соглашений, разделяющих мир на полиморфный и ковариантный (и спутник ковариантности - скрытие потомков), но без необходимости обладания бесконечной мудростью.
Как и прежде, сузим вопрос о ковариантности до двух операций. В нашем главном примере это полиморфное присваивание: s := b, и вызов ковариантной подпрограммы: s.share (g). Анализируя, кто же является истинным виновником нарушений, исключим аргумент g из числа подозреваемых. Любой аргумент, имеющий тип SKIER или порожденный от него, нам не подходит ввиду полиморфизма s и ковариантности share. А потому если статически описать сущность other как SKIER и динамически присоединить к объекту SKIER, то вызов s.share (other) статически создаст впечатление идеального варианта, но приведет к нарушению типов, если полиморфно присвоить s значение b.
Фундаментальная проблема в том, что мы пытаемся использовать s двумя несовместимыми способами: как полиморфную сущность и как цель вызова ковариантной подпрограммы. (В другом нашем примере проблема состоит в использовании p как полиморфной сущности и как цели вызова подпрограммы потомка, скрывающего компонент add_vertex.)
Решение Кэтколл, как и Закрепление, носит радикальный характер: оно запрещает использовать сущность как полиморфную и ковариантную одновременно. Подобно глобальному анализу, оно статически определяет, какие сущности могут быть полиморфными, однако, не пытается быть слишком умным, отыскивая для сущностей наборы возможных типов. Вместо этого всякая полиморфная сущность воспринимается как достаточно подозрительная, и ей запрещается вступать в союз с кругом почтенных лиц, включающих ковариантность и скрытие потомком.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Переходы назад – вперед в браузере
Переходы назад – вперед в браузере В браузере для перехода на предыдущую или следующую страницу совсем не обязательно щелкать по соответствующим кнопкам на панели инструментов программы. Можно просто зажать Shift и покрутить колесико мыши вперед или
Назад к процессам и потокам
Назад к процессам и потокам Так же как и дом занимает некоторый участок земли в жилом массиве, так и процесс занимает некоторый объем памяти компьютера. Аналогично тому, как и обитатели в доме могут свободно войти в любую комнату, в которую пожелают, потоки в процессах все
Назад, в будущее: Gentoo и другие
Назад, в будущее: Gentoo и другие Однако скоро выявилась и оборотная сторона любого user-ориентированного дистрибутива «для всех»: оказалось, что у каждого из их разработчиков были свои представления о том, что же нужно конечному пользователю для полного счастья.Одни
Кнопки Вперед и Назад
Кнопки Вперед и Назад Чтобы заблокировать кнопки Вперед и Назад в Internet Explorer, создайте параметр типа DWORD ·NoNavButtons· со значением 1 в разделе HKCUSoftwarePoliciesMicrosoftInternet
Назад в будущее
Назад в будущее Введение Могло ли действительно пройти четыре года с тех пор, как я написал четырнадцатую главу этой серии? Действительно ли возможно, что шесть долгих лет прошли с тех пор как я начал ее? Забавно, как летит время когда вы весело его проводите, не так ли?Я не
36 Назад к истокам
36 Назад к истокам Что же все-таки хотят пользователи? И как можно об этом узнать? Разработчикам программного обеспечения рекомендуется производить такие системы, которые хотят получить их клиенты и покупатели, — системы, более «ориентированные на пользователя». В любой
ГОЛУБЯТНЯ: Назад в будущее
ГОЛУБЯТНЯ: Назад в будущее Автор: Сергей ГолубицкийЗавершаем тематику Rockbox — альтернативной операционной системы для цифровых джукбоксов Archos, iRiver и iPod.После установки ROCKbox H300 Experimental, специализированного порта для iRiver H340, алгоритм которой мы разобрали на прошлой неделе,
13-я КОМНАТА: Назад в будущее
13-я КОМНАТА: Назад в будущее Автор: Владимир ГуриевПонятно, почему писателям и читателям эта схема так симпатична. Поколения читателей привыкли к приключенческим романам, в которых если и найдется конюх, то обязательно лишенный наследства. И писателям особо голову ломать
Перелистывание страниц вперед/назад
Перелистывание страниц вперед/назад Обратите внимание на стрелочки в строке адреса (рис. 1.10) — они активируются после того, как вы загрузите несколько страниц в одной вкладке. Это еще один способ перехода на другую страницу. Нетрудно догадаться, что щелчок по левой
9.7. Назад в прошлое
9.7. Назад в прошлое Одним из преимуществ компьютерной графики является возможность возвращать изображение в исходное состояние, независимо от количества проделанных операций. Но это не всегда возможно, то есть если вы закрыли создаваемое изображение, предварительно
Xfce: назад в будущее?
Xfce: назад в будущее? LinuxFormat #110 (октябрь 2008)Зададимся вопросом: чего мы хотим от интегрированной рабочей среды? Богатства и гибкости настроек? Их простоты и прозрачности? На все эти вопросы я ответил бы положительно, хотя в качестве главного фактора выделил бы сквозной
Назад к тому, с чего начали?
Назад к тому, с чего начали? Если вы внимательно следили, начиная с лекции о модульности, за главной линией рассуждений, которая привела нас к абстрактным типам данных, а затем и к классам, то сейчас, быть может, вы будете удивлены. Поставив целью получить по возможности
Назад к абстрактным типам данных
Назад к абстрактным типам данных Насыщенные утверждениями отложенные классы хорошо подходят для представления АТД. Прекрасный пример - отложенный класс для стеков. Мы уже описывали процедуру put, сейчас приведем возможную версию полного описания этого