Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Этап 2. Разработка класса BallsСодержание книги
Поиск на нашем сайте
На этом этапе реализуем класс Balls, содержащий массив обычных объектов класса Ball и осуществляющий их одновременный запуск, а также приостановку и возобновление функционирования. Дополнительно к указателю pBall на массив обычных объектов, класс Balls содержит функции, выполняющие запуск (Start), приостановку выполнения (Suspend) и возобновление выполнения (Resume) всей совокупности обычных объектов. Диаграмма классов Balls–приложения второго этапа изображена на рис. 5.3.2.1.
Рис 5.3.2.1. Диаграмма классов Balls–приложения второго этапа
Реализация второго этапа разработки Balls–приложения на языке C# дана в примере 5.3.2.1. Реализация второго этапа разработки Balls–приложенияна языке Java дана в примере 5.3.2.2.
Пример 5.3.2.1. Реализация второго этапа разработки Balls–приложения на языке C#. //////////////////// // C# File BallsCs2.cs // Файл BallsCs2.cs полностью включает файл BallsCs1.cs, дополнив его // нижеследующим описанием класса Balls и изменённой функцией Main ... //------------------------------------- class Balls // Класс объектов { Ball [] pBall; public Balls () { pBall= new Ball [2]; for (int i= 0; i < 2; i++) pBall[i]=new Ball (i); Start (); } //--------------- public void Start () // Стартовать { for(int i=0; i < 2; i++) { pBall[i]. Start (); } } //--------------- public void Suspend () // Возобновить { for (int i=0; i < 2; i++) pBall[i].Suspend (); } //--------------- public void Resume () // Приостановить { for (int i= 0; i < 2; i++) pBall[i].Resume (); } }; //------------------------------------- class BallsCs2 { static void Main (string[] args) { Balls pBalls= new Balls (); // Создать объект класса Balls Console.WriteLine ("Объекты функционируют"); Thread.Sleep (20); // Объект функционирует 20 мс pBalls.Suspend (); // Приостановить функционирование Console.WriteLine("Объекты приостановлены и возобновлены"); pBalls.Resume (); // Возобновить функционирование Thread.Sleep (20); // Объект функционирует 20 мс pBalls.Suspend (); // Приостановить функционирование } } /* Результат: Потоковые объекты функционируют Объект 1 n= 0 Объект 2 n= 0 Объект 1 n= 1 Объект 2 n= 1 Объекты приостановлены и возобновлены Объект 2 n= 2 Объект 1 n= 2 Объект 1 n= 3 Объект 2 n= 3 */
Пример 5.3.2.2. Реализация второго этапа разработки Balls–приложения на языке Java. package BallsCj2; //////////////////// //C# File BallsCj2
class Ball implements Runnable // Класс обычного объекта { int num; Thread thread; boolean run; boolean waiting= false; boolean life; public Ball (int Num) // Конструктор { num= Num; life= false; run= false; Start (); }
public void Start () // Стартовать { if (!run) { run= true; life= true; thread= new Thread (this); thread.start (); } } //--------------- synchronized public void Suspend () // Приостановить { if (run) { run= false; waiting=true; } } //--------------- synchronized public void Resume () // Возобновить { if (!run) { run= true; waiting=false; notify(); } } //--------------- public void run () // Выполнить поток { int n= 0; while (life) { System.out.print("object "+num); System.out.println(" n= "+n); n++; try { Thread.sleep (10); synchronized(this) { if(waiting) wait(); } } catch(InterruptedException iE){} } System.out.print("object "+num); System.out.println(" finished "); } }
//------------------------------------- class Balls // Класс объектов { Ball [] pBall; Public Balls () { pBall= new Ball [2]; for (int i= 0; i < 2; i++) pBall[i]=new Ball (i+1); Start (); } //--------------- public void Start () // Стартовать { for(int i=0; i < 2; i++) { pBall[i]. Start (); } } //--------------- public void Suspend () // Возобновить { for (int i=0; i < 2; i++) pBall[i].Suspend (); } //--------------- public void Resume () // Приостановить { for (int i= 0; i < 2; i++) pBall[i].Resume (); } };
class BallsCj1 { public static void main () { Balls pBalls= new Balls (); // Создать объекты класса Balls System.out.println("objects are working"); // Объекты функционируют 20 мс try { Thread.sleep (20); } catch(InterruptedException iE){} pBalls.Suspend (); // Приостановить объекты System.out.println("objects are suspend and are resumed"); pBalls.Resume (); // Возобновить выполнение объектов // Объекты функционируют 20 мс try { Thread.sleep (20); } catch(InterruptedException iE){} pBalls.Suspend (); // Приостановить объекты } } /* Результат: objects are working object 1 n= 0 object 2 n= 0 object 1 n= 1 object 2 n= 1 objects are suspend and are resumed object 1 n= 2 object 2 n= 2 object 1 n= 3 object 2 n= 3 */
Этап 3. Разработка события ev и уведомления
Включим в класс Ball обычного объекта событие ev и уведомление, сигнализирующее об очередном цикле выполнения потока. Это событие и уведомление обрабатывается функцией HandlerEv или update() класса Balls, что будет использовано при перерисовке шаров в области клиента прикладного окна на четвёртом этапе. На рис. 5.3.3.1 и в примерах 5.3.3.1 и 5.3.3.2 представлены диаграмма классов третьего этапа и программы, реализующие её.
Рис. 5.3.3.1. Диаграмма классов Balls–приложения третьего этапа
Пример 5.3.3.1. Реализация третьего этапа разработки Balls–приложения. //////////////////// // С# File BallsCs3.cs // Файл BallsCs3.cs полностью включает файл BallsCs2.cs, дополнив // его объявлением события ev в классе Ball и функцией HandlerEv // класса Balls, обеспечивающей обработку этого события. // Изменения файла BallsCs2.cs выделены жирным шрифтом. ... //------------------------------------- delegate void delEv (); // Объявление типа delEv делегата события ev class Ball { public event delEv ev; // Объявление события ev ... //--------------- void BallFunc () // Выполнить поток { int n= 0; while (life) { Console.Write ("Объект {0}", num.ToString ()); Console.WriteLine (" n= {0}", n.ToString ()); n++; if (ev!= null) // Если событие активизировано, то { Console.WriteLine (" Event"); ev (); //свершить событие } Thread.Sleep (10); } Console.Write ("Объект {0}", num.ToString ()); Console.WriteLine (" завершён"); } }; //------------------------------------- class Balls // Класс потоковых объектов { Ball [] pBall;
public void HandlerEv () // Обработчик события ev { Console.WriteLine (" HandlerEv"); }
public Balls () // Конструктор { pBall= new Ball [2]; for (int i= 0; i < 2; i++) { pBall[i]=new Ball (i); pBall[i].ev+= new delEv(HandlerEv); // Добавить } Start (); } ... } class BallsCs3 { static void Main (string[] args) { Balls pBalls= new Balls (); // Создать объект класса Balls Console.WriteLine("Объекты функционируют"); Thread.Sleep (20); // Объект функционирует 20 мс pBalls.Suspend (); // Приостановить функционирование } } Результат: Объекты функционируют Объект 0 n= 0 Event HandlerEv Объект 1 n= 0 Event HandlerEv Объект 0 n= 1 Event HandlerEv Объект 1 n= 1 Event HandlerEv */
Пример 5.3.3.2. Реализация третьего этапа разработки Balls–приложения на языке Java.
package BallsCj3; //////////////////// //C# File BallsCj3 import java.util.*; Class Obs { public int num, n; Public Obs (int num, int n) {this.num= num; this.n= n;} int getNumber(){return num;} int getN(){return n;} } class Ball extends Observable implements Runnable // Класс обычного объекта { int num; Thread thread; boolean run; boolean waiting= false; boolean life; public Ball (int Num) // Конструктор { num= Num; life= false; run= false; Start (); }
public void Start () // Стартовать { if (!run) { run= true; life= true; thread= new Thread (this); thread.start (); } } //--------------- synchronized public void Suspend () // Приостановить { if (run) { run= false; waiting=true; } } //--------------- synchronized public void Resume () // Возобновить { if (!run) { run= true; waiting=false; notify(); } } //--------------- public void run () // Выполнить поток { int n= 0; while (life) { System.out.print("object "+num); System.out.println(" n= "+n); n++; // Уведомить setChanged(); notifyObservers(new Obs(num, n)); try { Thread.sleep (10); synchronized(this) { if(waiting) wait(); } } catch(InterruptedException iE){} } System.out.print("object "+num); System.out.println(" finished "); } }
//------------------------------------- class Balls implements Observer // Класс объектов { Ball [] pBall; public Balls () { pBall= new Ball [2]; for (int i= 0; i < 2; i++) { pBall[i]=new Ball (i+1); pBall[i].addObserver(this); } Start (); } //--------------- public void Start () // Стартовать { for(int i=0; i < 2; i++) { pBall[i]. Start (); } } //--------------- public void Suspend () // Возобновить { for (int i=0; i < 2; i++) pBall[i].Suspend (); } //--------------- public void Resume () // Приостановить { for (int i= 0; i < 2; i++) pBall[i].Resume (); }
public void update (Observable r, Object ob) // Обработчик события ev { Obs obs= (Obs) ob; System.out.print("object num= "+ obs.num); System.out.println(" n= "+ obs.n); }
};
class BallsCj1 { public static void main () { Balls pBalls= new Balls (); // Создать объекты класса Balls System.out.println("objects are working"); // Объекты функционируют 20 мс try { Thread.sleep (20); } catch(InterruptedException iE){} pBalls.Suspend (); // Приостановить объекты System.out.println("objects are suspend and are resumed"); pBalls.Resume (); // Возобновить выполнение объектов // Объекты функционируют 20 мс try { Thread.sleep (20); } catch(InterruptedException iE){} pBalls.Suspend (); // Приостановить объекты } } /* Результат: objects are working object 1 n= 0 object num= 1 n= 0 object 2 n= 0 object num= 2 n= 0 object 1 n= 1 object num= 1 n= 1 object 2 n= 1 object num= 2 n= 1 objects are suspend and are resumed object 1 n= 2 object num= 1 n= 2 object 2 n= 2 object num= 2 n= 2 object 1 n= 3 object num= 1 n= 3 object 2 n= 3 object num= 2 n= 3 */
|
||
|
Последнее изменение этой страницы: 2016-08-01; просмотров: 251; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.10 (0.008 с.) |