Что делать с отложенными классами?
Что делать с отложенными классами?
Присутствие отложенных элементов в системе вызывает вопрос: "что случится, если компонент rotate применить к объекту типа FIGURE?" или в общем виде - "можно ли применить отложенный компонент к прямому экземпляру отложенного класса?" Ответ может обескуражить: такой вещи как объект типа FIGURE не существует - прямых экземпляров отложенных классов не бывает.
Правило отсутствия экземпляров отложенных классов
Тип создания в процедуре создания не может быть отложенным.
Напомним, что тип создания - это тип x, для формы create x, и U для формы create {U} x. Тип считается отложенным, если таков его базовый класс.
Поэтому вызов конструктора create f некорректен и будет отвергнут компилятором, если типом f будет один из отложенных классов: FIGURE, OPEN_FIGURE, CLOSED_FIGURE. Это правило устраняет опасность ошибочных вызовов компонентов.
Отметим однако, что даже, если тип сущности f отложенный, то допустима явная форма процедуры создания - create{RECTANGLE} f, поскольку здесь типом создания является эффективный потомок FIGURE - класс RECTANGLE. Мы уже видели, как этот прием используется в многовариантной процедуре создания для объектов класса FIGURE, которые, в зависимости от контекста, будут экземплярами эффективных классов RECTANGLE, CIRCLE и др.Может показаться, что это правило ограничивает полезность отложенных классов, делая их просто синтаксической уловкой для обмана системы статических типов. Это было бы верно, если бы не полиморфизм и динамическое связывание. Нельзя создать объект типа FIGURE, но можно объявить полиморфную сущность этого типа, а затем использовать ее, не зная точно, к объекту какого типа она присоединена в конкретном вычислении:
f: FIGURE
...
f := "Некоторое выражение эффективного типа, такого как CIRCLE или POLYGON"
...
f.rotate (some_point, some_angle)
f.display
...
Такие примеры являются комбинацией и кульминацией уникальных средств абстракции ОО-метода таких, как классы, скрытие информации, единственный выбор, наследование, полиморфизм, динамическое связывание, отложенные классы (и, как будет видно дальше, утверждения). Вы манипулируете объектами, не зная точно их типов, задавая только минимум информации, необходимой для требуемых операций. Имея надежный штамп контролера типов, удостоверяющий согласованность вызовов этих операций с их объявлениями, можно рассчитывать на большую силу - динамическое связывание, которая позволяет применять корректную версию каждой операции, не зная точно, что это за версия.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
5.2. Отношения между классами
5.2. Отношения между классами Кроме внутреннего устройства или структуры классов на соответствующей диаграмме указываются различные отношения между классами. При этом совокупность типов таких отношений фиксирована в языке UML и предопределена семантикой этих типов
14. Что делать, если…
14. Что делать, если… Например, что делать, если отказали в кредите? Возьмите свою сферу, главные проблемы, которые в ней возникают, или одну самую важную проблему и можете создать продукт под названием «Что делать, если…». Что делать, если ушел муж? Что делать, если ни один
10. Что делать, если…
10. Что делать, если… Берете любую проблему в вашей нише. «Что делать, если выскочил прыщ?». «Что делать, если сосед затопил?». Просто подставляете «Что делать, если…» – и получается хорошая идея для бесплатной статьи или
Как это делать
Как это делать На рис. В.2 приведена схема на постоянном токе, содержащая источник напряжения и четыре резистора. Узлы помечены номерами от 0 до 3. Для моделирования в Spice все узлы должны быть помечены номерами (или буквами). Должен присутствовать также опорный (нулевой) узел,
3.4. Отношения между классами
3.4. Отношения между классами Типы отношений Рассмотрим сходства и различия между следующими классами: цветы, маргаритки, красные розы, желтые розы, лепестки и божьи коровки. Мы можем заметить следующее: • Маргаритка - цветок. • Роза - (другой) цветок. • Красная и желтая
Интерфейсы в сравнении с абстрактными базовыми классами
Интерфейсы в сравнении с абстрактными базовыми классами С учетом знаний, полученных в главе 4, вы можете спросить, какова причина выдвижения типов интерфейса на первое место. Ведь в C# позволяется строить абстрактные типы класса, содержащие абстрактные методы. И, подобно
Соблюдение требований, предъявляемых другими классами, с помощью протоколов
Соблюдение требований, предъявляемых другими классами, с помощью протоколов В языке Objective-C существует концепция под названием «протокол». Протоколы встречаются и во многих других языках, но называются везде по-разному; например, в Java аналогичная сущность называется
Поддержка подсказок MFC-классами
Поддержка подсказок MFC-классами Библиотека MFC располагает двумя классами для поддержки всплывающих подсказок: CToolTipCtrl и CWnd. CToolTipCtrl инкапсулирует функциональность стандартного элемента управления ToolTip (из библиотеки элементов управления общего назначения – Common Controls DLL) и
Что мы будем делать со звуком?
Что мы будем делать со звуком? А вот теперь, когда с теорией покончено, самое время перейти к практике. Итак, зачем именно вы купили эту книгу и что именно вы собираетесь делать со звуком?Если ваш интерес лежит прежде всего в обработке звука (то есть в записи собственных
ОКНО ДИАЛОГА: Знать, что делать, а не как делать
ОКНО ДИАЛОГА: Знать, что делать, а не как делать 19 сентября 2005 года исполнилось пятнадцать лет с момента появления Интернета в России. 19 сентября 1990 года был зарегистрирован домен su. Отечественный сегмент всемирной сети был создан во многом благодаря сотрудникам
Что делать с отредактированным документом?
Что делать с отредактированным документом? Чтобы сохранить изменения в документе, выберите команду меню Файл|-Сохранить или нажмите сочетание клавиш Ctrl+S.Чтобы сохранить документ и закрыть редактор Google Документы, выберите команду меню Файл|Сохранить и закрыть
2.8. Что делать при зависании компьютера?
2.8. Что делать при зависании компьютера? Иногда при эксплуатации компьютера возникают неприятные моменты — компьютер может, как говорят, «зависнуть». Курсор мыши передвигается, но компьютер не реагирует на ваши действия, приложения не запускаются и не закрываются, а на
14. Что делать?
14. Что делать? Цифровые средства массовой информации и коммуникации — часть нашей культуры. Они повышают нашу производительность, облегчают нам жизнь и развлекают. Наш современный мир — от снабжения продуктами питания до медицины — рухнул бы без цифровой обработки