Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 173; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.145.41 (0.01 с.) |