- •Введение к курсовой работе Основные термины, используемые в дисциплине
- •Объекты, классы и язык uml
- •Цели и задачи курсовой работы
- •Требования по выполнению курсовой работы
- •Структура курсовй работы
- •4. Содержание разделов пояснительной записки
- •5. Оформление курсовой работы
- •Возможные задания на курсовую работу
- •Приложение . Пример курсовой работы
- •Список литературы
- •Содержание
- •1. Задание
- •Уточнение задания
- •3. Описание разрабатываемой программы с точки зрения пользователя
- •4. Описание разрабатываемой программы с точки зрения программиста
- •4.1. Объектное представление программы
- •4.2. События
- •4.3. Потоки
- •Поэтапная разработка программной системы
- •5.3.1. Этап 1. Разработка класса обычного объекта
- •5.3.2. Этап 2. Разработка класса Balls
- •5.3.3. Этап 3. Разработка события ev и уведомления
- •5.3.4. Этап 4. Разработка прикладного окна
- •5.3.5. Этап 5. Разработка дочернего окна с кнопкой
- •5.3.6. Этап 6. Добавление элемента списка
- •5.3.7. Этап 7. Разработка специального объекта
- •6. Описание проблем, возникших при разработке программной системы.
- •7. Список используемой литературы
- •8. Приложение 1. Диаграмма классов разработанной программы
- •9. Приложение 2. Текст программы на языке c#
- •10. Приложение 3. Текст программы на языке Java
- •11. Приложение 3. Текст модифицированной программы на языке Java
5.3.1. Этап 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
*/
