Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Этап 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;






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.