Смекни!
smekni.com

Методические указания к курсовой работе по дисциплине «Объектно-ориентированное программирование» по направлению 230200 Информационные системы (стр. 2 из 12)

Создание и применение события требует выполнения следующих шагов:

- объявить делегат события, определяющий формат функций-обработчиков этого события;

- объявить в классе-источнике события, используя ключевое слово event, ссылку на событие:

event тип-делегата-события ссылка-на-событие;

- объявить в классе-источнике события функцию, генерирующую это событие, то есть выполняющую объект события, или выполнить это событие в требуемых местах иных функций класса-источника;

- при выполнении события необходимо выполнить проверку на его пустоту, то есть на включение в событие хотя бы одного объекта делегата события с инкапсулированной в нём функции-обработчика события:

if ( ссылка-на-событие != null )

ссылка-на-событие (список-аргументов );

- объявить в классах-приёмниках события функции-обработчики этого события;

- создать объект-источник события и объекты-приёмники события;

- связать функции-обработчики каждого приёмника события с событием объекта-источника (подписаться на событие):

ссылка-на-объект-источник,ссылка-на-событие += new

тип-делегата-события(

ссылка-на-объект-приемник. имя-обычной-функции);

ссылка-на-объект-источник,ссылка-на-событие += new

тип-делегата-события(

ссылка-на-объект-приемник. имя-статической-функции);

- выполнить надлежащим образом событие в объекте-источнике.

Придерживаясь рекомендации фирмы Microsoft желательно с каждым событием связать объект данных события, создав его из класса, наследуемого класс EventArgs. В делегате события в качестве первого параметра рекомендуется использовать ссылку типа object на объект-источник события, а в качестве второго – ссылку на объект данных события. Функция-обработчик, воспользовавшись аналогичными параметрами, выявит источник события и воспользуется всеми данными, включёнными в объект события.

Библиотека .NET Framework, содержащая более 4000 классов, имеет многие из них с предопределёнными событиями, например, события MouseDown, MouseUp, Click генерируются при нажатии на клавишу мыши. Предопределенным событиям соответствуют предопределённые делегаты событий, например, для мыши - MouseEventHandler.

Событие (event) в языке Java можно представить явным делегированием обработчика из объекта-приемника в объект-источник. При этом удобно воспользоваться интерфейсом, поскольку использование интерфейсной ссылки позволяет ссылаться к разнотипным объектам (приемникам), классы которых наследуют один и тот же интерфейс, связанный с этим событием. Класс источника должен иметь конструктор с параметром - интерфейсной ссылкой. Класс каждого приёмника этого события обязан наследовать этот интерфейс, включающий делегированный обработчик события. Генерирование события источником сводится к вызову в объекте-источнике обработчика приёмника, ссылка на который передаётся в источник через интерфейсную ссылку в конструкторе.

Широко применяются в языке Java особые события – уведомления. Класс Observable и интерфейс Observer пакета java.util позволяют воспользоваться механизмом уведомления языка Java. Наблюдаемые объекты, являющиеся объектами-источниками, классы которых наследуют класс Observable, уведомляют обозревателей, являющимися объектами-приёмниками, классы которых наследуют интерфейс Observer. Класс наблюдателя Observable переопределяет функции setChanged(), сигнализирующую об изменении состояния наблюдателя, и функцию notifyObservers(), уведомляющую обозреватель и передающую ему объект с данными. Интерфейс Observer обязывает обозреватель переопределить функцию update(), реагирующую на уведомление и получающую объект данных.

Под потоком (thread) понимают выполняющийся программный код. Выполнение процесса начинается с выполнения основного потока (primary thread), представленного главной функцией main или WinMain, или DllMain. Обычно основной поток реализует диалог с пользователем. Основной поток инициирует, выполняет и завершает работу процесса. Если основной поток создаёт окно, то его называют основным оконным потоком. Обычно с окном связан цикл обработки сообщений операционной системы.

Основной поток может создать и запустить так называемые рабочие потоки (work threads), которые будут выполняться параллельно с основным и другими потоками. Если выполнение основного потока сводится к выполнению главной функции приложения, то выполнение каждого рабочего потока связано с выполнением так называемой потоковой функции. В языке Java применяется потоковая функция с именем run. В языке же C# в качестве потоковой функции можно использовать функции с любыми именами, но каждая из них инкапсулируется в поток посредсвом специального потокового делегата ThreadStart.

Итак, в языке C# класс Thread используется для создания и управления потоками, а тип ThreadStart - для создания делегата потока, инкапсулирующего потоковую функцию. При создании экземпляра потока конструктору класса Thread передаётся в качестве аргумента объект делегата потока, при этом возможны два варианта перегруженного конструктора делегата: 1) указывается статическая потоковая функция некоторого класса или 2) потоковая функция конкретного объекта определённого класса. Функции Start, Suspend, Resume и Abort класса Thread обеспечивают запуск, приостановку и возобновление функционирования или уничтожение потокового объекта. Следует сказать, что необходима осторожность при применении функций Suspend и Resume , поскольку они способствуют дедлоку – тупиковой ситуации, вызывающей взаимную остановку выполнения потоков из-за не освобождения некоторого разделяемого ресурса. В этом случае выполняющаяся программа “зависает”.

В языке же Java для создания и управления потоками используется класс Thread и интерфейс Runnable. Интерфейс Runnable позволяет передавать функцию run() в конструктор Thread при создании потоковых объектов

Windows-приложение (a Windows application) – программа, выполняющаяся под управлением операционной системы Windows.

Приложение (an application) – программа для выполнения определенного вида работ, например: редактирования текста, выдачи текущего времени и так далее. Каждое приложение является процессом и обычно представлено на экране своим прикладным окном.

Прикладное или главное окно (an application или main window) – прямоугольная область на экране, выделяемая одному приложению для ввода и вывода данных и управления приложением. Операционная система Windows допускает параллельное одновременное выполнение нескольких приложений с возможной синхронизацией их работы, при этом каждое из них может быть представлено своим прикладным окном. Обычно наприкладном окне размещаются интерфейсные элементы.

Интерфейсный элемент – это то, что представляет объект на экране, обеспечивая интерактивную связь пользователя с приложением. Обычно элемент представляется в виде специализированных дочерних окон – кнопок, панелей редактирования, ползунков и других.

Графический интерфейс (graphic interface) использует для рисования такие объекты как цвет (color), перья (pens), кисти (brushes), изображения (images) и шрифты (fonts).

Прежде чем рисовать фигуру или линию, надо создать графический объект класса Graphics. Графический объект связан с конкретным окном (формой) и его функции выполняют рисование в этом окне (форме), включая при необходимости в качестве аргументов перья, кисти, шрифты и т.д. Таким образом, вспомогательные объекты типа Color, Pen, SolidBrush, Image и Font обеспечивают функционирование объектов класса Graphics, занимающих центральное место в создании графического интерфейса. Объекты вспомогательных типов хранят необходимую для рисования информацию, а графический объект её использует.

Наиболее часто употребляемый тип Point (точка), используется для создания объекта – одиночной точки, обычно в области клиента окна.

Также часто употребляется тип Rectangle (прямоугольник), используемый для создания объекта-прямоугольника с горизонтальными и вертикальными сторонами.

Объект типа Color (цвет) представляет цвет.

Класс Pen (перо) используется для создания объектов-перьев (pens),

Класс SolidBrush (сплошная кисть), порождённый из базового класса Brush, используется для создания объектов-кистей, применяемых при закрашивании фона окон или внутри фигур.

Объектами класса Font представляются шрифты с указанными названиями, размерами и стилями.

Объект класса Graphics является контекстом рисования, связанным с конкретным контекстом устройства и чаще всего с окном (формой). Класс Graphics предоставляет множество функций для рисования в этом окне строк (strings), прямоугольников (rectangles), эллипсов (ellipses) и т.д.

При всяком разрушении окна Windows посылает приложению событие Paint (нарисовать) и приложение реагирует на нем предопределённой функцией-обработчиком OnPaint, пустой по умолчанию, то есть ничего не отображающей в окно. Обладая переопределённой (override) функцией OnPaint, приложение будет рисовать в области клиента окна что-то в соответствии с её реализацией.