Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая. Отчет. Богданов 4205..docx
Скачиваний:
0
Добавлен:
09.12.2019
Размер:
553.16 Кб
Скачать

5.3.2. Этап 2. Разработка события ev и уведомления

Включим в класс Avto обычного объекта событие ev и уведомление, сигнализирующее об очередном цикле выполнения потока. Это событие и уведомление обрабатывается функцией HandlerEv или update() класса Avtos, что будет использовано при перерисовке автомобилей в области клиента прикладного окна на третьем этапе. На рис. 5.3.2.1 и в примерах 5.3.2.1 и 5.3.2.2 и 5.3.2.3 представлены диаграмма классов второго этапа и программы, реализующие её.

Рис 5.3.2.1. Диаграмма классов Avtos–приложения второго этапа

Реализация второго этапа разработки Avtos–приложения на языке C# дана в примере 5.3.2.1.

Реализация второго этапа разработки Avtos–приложения на языке C++/CLI дана в примере 5.3.2.2.

Реализация второго этапа разработки Avtos–приложенияна языке Java дана в примере 5.3.2.3.

Пример 5.3.2.1. Реализация второго этапа разработки Avtos–приложения на языке C#.

////////////////////

// С# File Avtos2.cs

// Файл Avtos2.cs полностью включает файл Avtos1.cs, дополнив

// его объявлением события ev в классе Avto и функцией HandlerEvSpecial

// класса Avtos, обеспечивающей обработку этого события.

// Изменения файла Avtos.cs выделены жирным шрифтом.

. . .

//-------------------------------------

delegate void delEv ( ); // Объявление типа delEv делегата события ev

class Avto

{

public event delEv evSpecial;; // Объявление события ev

. . .

//---------------

public Avto(int N, int X, int Y) // Выполнить поток

{ //---------------

void AvtoFunc()

{

while (life)

{

if (run)

{

Thread.Sleep(50);

if (ev != null) evSpecial ();

//---------------

}

};

//-------------------------------------

class Avtos2 // Класс потоковых объектов

{

public void HandlerEvSpecial ( ) // Обработчик события ev

{

Console.WriteLine (" HandlerEv");

}

public Avtos ( ) // Конструктор

{

Avto a = new Avto(1, 50, 50)

a.evSpecial+= new delEv(HandlerEvSpecial ); // Добавить

}

. . .

static void Main()

{

Avto a = new Avto(1, 50, 50);

}

}

Пример 5.3.2.2. Реализация второго этапа разработки Avtos–приложения на языке C++/CLI.

#include "stdafx.h"

using namespace System::Threading;

using namespace System;

. . .

//-------------------------------------

delegate void delEv ( ); // Объявление типа delEv делегата события ev

ref class Avto

{

Public: event delEv evSpecial;; // Объявление события ev

. . .

//---------------

Avto(int N, int X, int Y) // Выполнить поток

{ //---------------

void AvtoFunc()

{

while (life)

{

if (run)

{

Thread::Sleep(50);

evSpecial ();

//---------------

}

};

//-------------------------------------

class Avtos2 // Класс потоковых объектов

{

Public: void HandlerEvSpecial ( ) // Обработчик события ev

{

System::Console::WriteLine (" HandlerEv");

}

Avtos ( ) // Конструктор

{

Avto ^a = gcnew Avto(1, 50, 50)

a->evSpecial+= gcnew delEv(this, &Avtos::HandlerEvSpecial ); // Добавить

}

};

. . .

static void main()

{

Avto ^a = gcnew Avto(1, 50, 50);

}

}

Пример 5.3.2.3. Реализация второго этапа разработки Avtos–приложения на языке Java.

//C# File Avtos2

import java.util.*;

public class Avto extends Observable implements Runnable // Класс объектов

{

public Ball (int N, int X. int Y )

{

public void report()

{

setChanged();

notifyObservers();

}

report();

. . .

}

public class Autos implements Observer

{

Avto a = new Avto(1, 50, 50);

a.addObserver(this);

public void update (Observable r, Object ob) // Обработчик события ev

{

repaint();

}

. . .

}