Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VMIP.docx
Скачиваний:
18
Добавлен:
17.04.2015
Размер:
93.59 Кб
Скачать

Динамические методы

Разновидностью виртуальных методов являются так называемые динамические методы. При их объявлении вместо ключевого слова virtual записывается ключевое слово dynamic

В наследниках динамические методы перекрываются так же, как и виртуальные — с помощью зарезервированного слова override.

По смыслу динамические и виртуальные методы идентичны. Различие состоит только в механизме их вызова. Методы, объявленные с директивой virtual, вызываются максимально быстро, но платой за это является большой размер системных таблиц, с помощью которых определяются их адреса. Размер этих таблиц начинает сказываться с увеличением числа классов в иерархии. Методы, объявленные с директивой dynamic вызываются несколько дольше, но при этом таблицы с адресами методов имеют более компактный вид, что способствует экономии памяти. Таким образом, программисту предоставляются два способа оптимизации объектов: по скорости работы (virtual) или по объему памяти (dynamic).

Методы обработки сообщений

Специализированной формой динамических методов являются методы обработки сообщений. Они объявляются с помощью ключевого слова message, за которым следует целочисленная константа — номер сообщения. Следующий пример взят из исходных текстов библиотеки VCL

Метод обработки сообщений имеет формат процедуры и содержит единственный var-параметр. При перекрытии такого метода название метода и имя параметра могут быть любыми, важно лишь, чтобы неизменным остался номер сообщения, используемый для вызова метода. Вызов метода выполняется не по имени, как обычно, а с помощью обращения к специальному методу Dispatch, который имеется в каждом классе (метод Dispatch определен в классе TObject).

Методы обработки сообщений применяются внутри библиотеки VCL для обработки команд пользовательского интерфейса и редко нужны при написании прикладных программ.

48. Логические связки условий, итоговые вычисления, группировка, сортировка.

Логические связки условий Сейчас запрос выполняется, если одновременно истинны все условия, заданные на вкладке Criteria (Условия отбора) — они связаны логической операцией AND (И). В раскрывающемся списке на этой вкладке такая операция обозначается пунктом ALL (Все). Если его изменить на ANY (Хотя бы одно), то слово AND слева от каждого условия заменится на слово OR (ИЛИ). Это означает, что отбираются записи, для которых истинно любое из указанных условий (например, игра не сыграна или дата выхода не ранее 1998 года и так далее). Другое возможное значение — NONE (Ни одно) — представляет собой операцию отрицания, аналог операции not в Паскале. Если оно задано, отбираются те записи, для которых указанное условие не истинно, а ложно. Наконец, значение NOT ALL (Не все) требует, чтобы хотя бы одно из списка условий было ложным. Запись отбирается только в таком случае. Итоговые вычисления В прикладных программах, работающих с базами данных, постоянно возникает потребность в быстром получении информации, характеризующей текущее состояние определенного объекта (в нашем случае — конкретной игры) не только по набору ее признаков (других полей выбранной записи), но и по дополнительным критериям, например по числу ссылок на игру в Интернете и числу статей, ей посвященных. В других программах возникает потребность определить для конкретного покупа¬теля, информация о котором хранится в одной таблице Customers, самый большой заказ, который он когда-либо сделал. Заказы хранятся в другой таблице Orders, одно из полей (ID) которой содержит идентификатор заказчика — код ключевого поля первой таблицы. Для отображения подобной информации надо предварительно просмотреть таблицу заказов, и для каждой записи, описывающей заказ конкретного клиента, проверить, не является ли он максимальным. Такой цикл необходимо выполнить для каждого из заказчиков (каждой записи таблицы Customers). Запрограммировать подобный процесс довольно сложно, и работать он будет не очень эффективно. При работе с Построителем запросов имеется возможность использовать готовые итоговые функции (нахождения максимального или среднего значения конкретного поля и т. п.). Добавим к таблицам в Проектировщике новую таблицу Articles и установим связь между ее полем GamelD и ключевым полем ID таблицы Games. Требуется добавить новое итоговое поле, которое будет выводить число записей в таблице Articles, значение поля GamelD в которых совпадает с текущим значением ключа ID таблицы Games. Выполняется это следующим образом. 1. Сначала на вкладке Selection (Выбор) в столбце Field (Поле) выберите поле Articles.GamelD. В столбце Output Name (Имя при выводе) его можно назвать ТМР. 2. Открыв контекстное меню этой строки щелчком правой кнопкой мыши, выберите пункт Summary (Итог). Этот пункт определяет, что данное поле будет не простым, а итоговым. При этом в список добавляется новый столбец Summary (Итог), содержащий поле только в текущей записи. 3. В этом столбце выберите в раскрывающемся списке нужную итоговую функцию. Итоговая функция SUM Сумма всех значений в поле SUM DISTINCT Сумма всех несовпадающих значений в поле. Если в указанном поле в нескольких записях хранится одно и то же значение, оно будет учтено только один раз COUNT Число всех значений в поле COUNT DISTINCT Число всех несовпадающих значений в поле AVG Средняя величина всех значений в поле AVG DISTINCT Средняя величина всех несовпадающих значений в поле MIN Минимальное значение в поле MAX Максимальное значение в поле __________________________________________________________________________ Нужная нам функция — COUNT. На вкладке Grouping (группировка) надо выбрать оба доступных поля: Games.Game Name и Games.Genre Name — и переместить их на панель Grouped On (Включены в группу). Так определяется подмножество полей, к которому будет применена итоговая функция Если теперь запустить запрос, то в таблице появится новое поле ТМР, в котором для каждой записи отображается число «привязанных» к ней записей из таблицы Articles Сравнение итоговых полей В ряде случаев итоговые функции желательно использовать в выражениях. Например, мы хотим отобрать только те записи, у которых число ссылок на статьи и страницы в Интернете не менее трех. Для этого на вкладке Group Criteria (Групповой критерий отбора) надо выполнить следующие действия. 1. В столбце Summary (Итог) указать итоговую функцию COUNT. 2. В столбце Field or Value (Поле или значение) выбрать поле Articles.GamelD. 3. В столбце Operator (Оператор) выбрать логическую операцию >=. 4. В последнем столбце Field or Value (Поле или значение) указать значение 3. Таким образом, сформировано условие COUNT(Articles.GamelD) >= 3 Если теперь запустить запрос на выполнение, то в таблице будут показаны только те записи, у которых число ссылок на таблицу Articles (через ее поле GamelD) не меньше трех. Подобных условий можно подготовить сколько угодно. Как и в случае с условиями, создаваемыми на вкладке Criteria (Условия отбора), где нельзя использовать итоговые поля, произвольные логические связки между условиями (И, ИЛИ, НЕ и дру¬гие) можно задавать с помощью раскрывающегося списка слева в верхней части вкладки.

Сортировка Последняя из еще не рассмотренных возможностей Построителя запросов — задание порядка сортировки в формируемом запросе (наборе записей). Доступные для отображения поля, перечисленные на левой панели Output Fields (Поля вывода) можно добавлять в список сортируемых полей Sorted By (Сортировать по полю) с помощью кнопки Add (Добавить). Если в списке несколько таких полей, то сначала выполняется упорядочивание по первому полю списка, для одинаковых значений этого поля выполняется сортировка по второму полю в списке и так далее. Порядок полей в списке меняется с помощью кнопок со стрелками в верхней части списка. Порядок сортировки (по возрастанию или по убыванию) задается с помощью кнопок A...Z (в возрастающем порядке) и Z...A (в убывающем порядке).

51. Отображение результатов запросов к наборам данных с помощью диаграммы

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]