Эффективизация компонента
Эффективизация компонента
В некоторых собственных потомках класса FIGURE потребуется заменить отложенную версию эффективной. Например,
class POLYGON inherit
CLOSED_FIGURE
feature
rotate (center: POINT; angle: REAL) is
-- Повернуть на угол angle вокруг точки center.
do
... Команды для поворота всех вершин ...
end
...
end
Заметим, что POLYGON наследует компоненты класса FIGURE не непосредственно, а через класс CLOSED_FIGURE, в котором процедура rotate остается отложенной.
Этот процесс обеспечения реализацией отложенного компонента называется эффективизацией (effecting). (Эффективный компонент - это компонент, снабженный реализацией.)
Не нужно в предложении redefine некоторого класса описывать отложенные компоненты, получающие реализацию, поскольку у них не было настоящего определения в месте объявления. В этом классе просто помещаются определения таких компонентов, совместимые по типам с их первоначальными объявлениями как, например, в случае компонента rotate.
Задание реализации компонента, конечно, близко к его переопределению и, за исключением включения в предложении redefine, подчиняется тем же правилам. Поэтому нужен общий термин.
Определение: повторное объявление
Повторное объявление компонента - означает определение или переопределение его реализации.
Разница между этими двумя формами повторного объявления хорошо иллюстрируется примерами, приведенными при их определении:
[x]. При переходе от POLYGON к RECTANGLE компонент perimeter уже реализован у родителя, и мы хотим предложить новую его реализацию в классе RECTANGLE. Это переопределение. Заметим, что этот компонент еще раз переопределяется в классе SQUARE.
[x]. При переходе от FIGURE к POLYGON у родителя нет реализации компонента rotate, и мы хотим реализовать его в классе POLYGON. Это эффективизация. Собственные потомки POLYGON могут, конечно, переопределить эту эффективную версию.
Может появиться нужда в некотором изменении параметров наследуемого отложенного компонента, после которого оно все так же останется отложенным. Эти изменения могут затрагивать сигнатуру компонента - типы ее аргументов и результата - и его утверждения (точные ограничения будут указаны в следующей лекции). В отличие от перехода от отложенного компонента к эффективному, такой переход от отложенного к отложенному рассматривается как переопределение и требует предложения redefine. Приведем резюме четырех возможных случаев нового объявления:
Повторное объявление компонента к Повторное объявление компонента от Отложенный Эффективный Отложенный Переопределение Отмена определения Эффективный Эффективизация ПереопределениеТаблица 14.1.Эффекты повторного объявления
В этой таблице имеется один еще не рассмотренный случай: отмена определения - переход от эффективного компонента к отложенному. При этом отменяется исходная реализация и начинается новая жизнь.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Тестирование запросов с помощью компонента Server Explorer
Тестирование запросов с помощью компонента Server Explorer Компонент Server Explorer среды Visual Studio .NET — это полезный инструмент для опробования концепций, описанных в этой главе. С помощью перечисленных ниже действий создайте тестовое представление данных в окне компонента Server
Создание подключаемого компонента в C#
Создание подключаемого компонента в C# Теперь нужно создать тип, реализующий интерфейс IAppFunctionality. Снова, чтобы сосредоточиться на процессе создания расширяемого приложения, здесь предполагается создание самого простого типа. Мы построим библиотеку программного кода C# с
Установка атрибутов –=Только для чтения=– у столбцов компонента StringGrid
Установка атрибутов –=Только для чтения=– у столбцов компонента StringGrid Манипулирование вышеуказанным атрибутом возможно в обработчике события OnSelectCell:if Col mod 2 = 0 then grd.Options:= grd.Options + [goEditing]else grd.Options:= grd.Options –
Получение индекса компонента в списке родителя
Получение индекса компонента в списке родителя Мне необходимо найти индекс компонента в родительском списке дочерних элементов управления. Я попытался модифицировать prjexp.dll, но без успеха. У кого-нибудь есть идеи?Есть такая функция. Ищет родителя заданного компонента,
5.2. Использование компонента MediaPlayer
5.2. Использование компонента MediaPlayer Мультимедийный проигрыватель Media Player является многофункциональным управляющим элементом. Он представляет программисту набор свойств и методов, позволяющих манипулировать файлами и устройствами мультимедиа, поддерживать
Вызов компонента
Вызов компонента Отмеченная звездочками инструкцияp1.translate (4.0, -1.5)заслуживает внимательного изучения, поскольку представляет собой первый пример использования базового механизма ОО-вычислений (basic mechanism of object-oriented computation). Это обращение к компоненту или вызов компонента
7.1. Настройка компонента Персонализация
7.1. Настройка компонента Персонализация Понятие «персонализация» – новое в Windows Vista, однако оно базируется на прежних. Механизм Персонализация представляет собой набор уже известных компонентов, с помощью которых можно настраивать оформление окон и их элементов,