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(); } ...
}
Этап 3. Разработка прикладного и дочернего окон, Кнопки добавления шаров. Наступил этап разработки, когда появится прикладное окно приложения с перемещающимися шарами. А также прикладное окно с кнопкой добавления машин. Наследовав класс Form или Frame, класс Avtos существенно расширит свою функциональность. Теперь можно создать прикладное окно (основную форму) и дочернее окно (дочернюю форму). Реализация этого этапа представлены в примерах 5.3.3.1 и 5.3.3.2 и 5.3.3.3.
Пример 5.3.3.1. Реализация третьего этапа разработки Avtos–приложения на языке С#. using System; Using System.Drawing; Using System.Windows.Forms; using System.Threading; using System.Collections;
public delegate void delEv();
public class Avto { public int num; //номер объекта public event delEv evSpecial; public int x, y;//координаты машины public double fi = 0.1; public int dx1, dy1, dx2, dy2;//приращения машин public int speed;//скорость машины Thread thread; public bool dvig = true; public bool life;//признак жизни потока public bool run = true;
public int N { get { return num; } }//номер машины public int X { get { return x; } set { x = value; } }//координата X public int Y { get { return y; } set { y = value; } }//координата Y
public Avto(int N, int X, int Y, int Speed) { num = N; x = X; y = Y; speed = Speed; life = true; //создать и запустить поток thread = new Thread(new ThreadStart(AvtoFunc)); thread.Start();
}
public void Finish()//завершить поток { //Resume(); life = false; }
void AvtoFunc() {
while (life) {
if (run) { Thread.Sleep(speed); If (dvig) { //уравнение движения по окр-ти dx1 = (int)(19 * Math.Sin(fi)); dy1 = (int)(19 * Math.Cos(fi)); x += dx1; y += dy1;
} Else { dx2 = (int)(28 * Math.Sin(fi)); dy2 = (int)(28 * Math.Cos(fi)); y -= dx2; x -= dy2;
}
fi += 0.1;
}
evSpecial();
} }
public void Suspend()//приостановить поток { if (run) { run = false;
} }
public void Resume()//возобновить поток { if (!run) { run = true;
} }
} class Avtos: Form { ArrayList al; //ссылка на список машин private int num = 0;//номер объекта машины private Form f;// ссылка на дочернее окно управления private Button add;// ссылки на кнопки public bool run = true;//признак движения машин public Avtos()//конструктор { al = new ArrayList(); run = true;//машины двигаются Size = new Size(770, 770);//установить размер прикладного окна Text = "Шоссе";//установить заголовок прикладного окна f = new Form();//создать объект дочернего окна f.Text = "Control";//установить заголовок дочернего окна f.Size = new Size(300, 150);//установить размеры дочернего окна f.Show();//показать дочернее окно add = new Button();//создать кнопку добавления машин add.Text = "Add";//именовать кнопку add.Size = new Size(45, 30);//размеры кнопки add.Location = new Point(5, 50);//поместить кнопку в окне add.Click += new EventHandler(ADD);//подписать обработчик f.Controls.Add(add);//поместить объект add в контейнер окна } //создать автомобиль
|