Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Поэтапная разработка программной системы

Поиск

Разработка приложения будет осуществляться поэтапно. Вначале разработаем класс Ball потокового объекта и протестируем его. Затем создадим и отладим класс Balls потоковых объектов, который управляет шарами. Для просмотра результатов тестирования мы воспользуемся консолью.

В дальнейшем мы наследуем класс Balls из базового класса Form или Frame и будем отображать шары в области клиента прикладного окна (в форме) в виде кругов одного цвета. Нам придётся модифицировать класс Ball потокового объекта, добавив в него координаты и их приращения. Для обеспечения перерисовки шаров мы воспользуемся событием или уведомлением, которое будет генерироваться после каждого изменения их координат.

Убедившись в совместном функционировании шаров и их отображении в области клиента прикладного окна, мы перейдём к разработке дочернего окна, на котором разместим управляющие элементы – кнопку и список.

При реализации Balls –приложения мы одновременно будем использовать консоль и окна. Отладочная информация на консоли отразит полезную информацию о внутреннем функционировании приложения. Отладив Balls–приложение, следует отменить выдачу на консоль.

На последнем этапе мы добавим специальный объект шара класса SpecialBall с обработчиком, а в класс Ball обычного объекта шара поместим особое событие и свяжем события и уведомления объектов класса Ball с этим обработчиком.

Для большей наглядности при создании приложений мы воспользуемся диаграммами классов языка UML.

В программе обычные объекты объединим в одномерном массиве длиной n= 2. При необходимости, изменив длину массива, можно создать необходимое количество обычных объектов.

 

 

Этап 1. Разработка класса обычного объекта

 

На первом этапе создадим основной класс Ball потокового объекта, который включает самые необходимые данные:

 

num – номер обычного объекта,

life – признак жизни потока (life= true - поток выполняется, life= false

поток завершён),

run – признак выполнения потока (run= true - поток выполняется,

run= false - поток приостановлен),

thread – поток класса Thread.

 

Включим в класс Ball функции:

 

Ball () – конструктор класса,

~Balls () – деструктор класса,

Start () – запустить обычный объект,

Suspend () – приостановить выполнение обычного объекта,

Resume () – возобновить выполнение обычного объекта.

 

Диаграмма класса Ball представлена на рис. 5.3.1.1.

 

 

Рис. 5.3.1.1. Диаграмма классов Balls–приложения первого этапа разработки

 

В примере 5.3.1.1 приведена реализация первого этапа на языке C#.

В примере 5.3.1.2 приведена реализация первого этапа на языке Java.

 

Пример 5.3.1.1. Реализация Balls–приложения первого этапа на языке C#.

////////////////////

// C# File BallsCs1.cs

using System;

using System.Threading;

 

class Ball // Класс обычного объекта

{

int num;

Thread thread;

bool run;

bool life;

public Ball (int Num) // Конструктор

{

num= Num; life= false; run= false;

Start ();

}

//---------------

~Ball () {life= false;} // Деструктор

//---------------

public void Start () // Стартовать

{

if (!run)

{

run= true;

life= true;

thread= new Thread (new ThreadStart (BallFunc));

thread.Start ();

}

}

//---------------

public void Suspend () // Приостановить

{

if (run)

{

run= false;

thread.Suspend ();

}

}

//---------------

public void Resume () // Возобновить

{

if (!run)

{

run= true;

thread.Resume ();

}

}

//---------------

void BallFunc () // Выполнить поток

{

int n= 0;

while (life)

{

Console.Write ("Объект {0}", num.ToString ());

Console.WriteLine (" n= {0}", n.ToString ());

n++;

Thread.Sleep (10);

}

Console.Write ("Объект {0}", num.ToString ());

Console.WriteLine (" завершился");

}

};

//-------------------------------------

class BallsCs1

{

static void Main (string[] args)

{

Ball ball1= new Ball (1); // Создать первый обычный объект

Ball ball2= new Ball (2); // Создать второй обычный объект

Console.WriteLine ("Объекты функционируют");

Thread.Sleep (20); // Объекты функционируют 20 мс

ball1.Suspend (); // Приостановить первый обычный объект

ball2.Suspend (); // Приостановить второй обычный й объект

Console.WriteLine ("Объекты приостановлены и возобновлены");

ball1.Resume (); // Возобновить выполнение первого объекта

ball2.Resume (); // Возобновить выполнение второго объекта

Thread.Sleep (20); // Объекты функционируют 20 мс

ball1.Suspend (); // Приостановить первый обычный объект

ball2.Suspend (); // Приостановить второй обычный объект

}

}

/*

Результат:

Объекты функционируют

Объект 1 n= 0

Объект 2 n= 0

Объект 1 n= 1

Объект 2 n= 1

Объекты приостановлены и возобновлены

Объект 1 n= 2

Объект 2 n= 2

Объект 1 n= 3

Объект 2 n= 3

*/

 

Пример 5.3.1.2. Реализация Balls–приложения первого этапа на языке Java.

package BallsCj1;

////////////////////

//C# File BallsCj1

 

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 BallsCj1

{

public static void main ()

{

Ball ball1= new Ball (1); // Создать первый обычный объект

Ball ball2= new Ball (2); // Создать второй обычный объект

System.out.println("objects are working");

// Объекты функционируют 20 мс

try

{

Thread.sleep (20);

}

catch(InterruptedException iE){}

ball1.Suspend (); // Приостановить первый обычный объект

ball2.Suspend (); // Приостановить второй обычный й объект

System.out.println("objects are suspend and are resumed");

ball1.Resume (); // Возобновить выполнение первого объекта

ball2.Resume (); // Возобновить выполнение второго объекта

// Объекты функционируют 20 мс

try

{

Thread.sleep (20);

}

catch(InterruptedException iE){}

ball1.Suspend (); // Приостановить первый обычный объект

ball2.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

*/

 



Поделиться:


Последнее изменение этой страницы: 2016-08-01; просмотров: 137; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.226.186.109 (0.005 с.)