
- •4.1. Объектное представление программы 6
- •4.3. Потоки 7
- •5.Поэтапная разработка программной системы 7
- •1. Задание
- •2.Уточнение задания
- •3. Описание разрабатываемой программы с точки зрения пользователя
- •4.2. События
- •4.3. Потоки
- •5.Поэтапная разработка программной системы
- •5.3.1. Этап 1. Разработка класса Avto
- •5.3.2. Этап 2. Разработка события ev и уведомления
- •5.3.3. Этап 3. Разработка прикладного и дочернего окон, кнопки добавления шаров.
- •5.3.4. Этап 4. Добавление элемента списка, добавление кнопок остановки и удаления.
- •5.3.5. Этап 5. Добавления события ev.
- •11. Приложение 4. Текст программы на языке Java
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();
}
. . .
}