Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
При отталкивании каждого шара от границ окна появляется в верхнем левом углу окна желтый шар и исчезает через 2000 мс.↑ ⇐ ПредыдущаяСтр 7 из 7 Содержание книги
Поиск на нашем сайте
*/
Описание проблем, возникших при разработке программной системы.
Поэтапная разработка программы позволила быстро разработать её и отладить. Проблем не было.
Список используемой литературы 1. Байдачный С.С..NET Framework. Секреты создания Windows-приложений. – М.: СОЛОН-Пресс, 2004. – 496 с.: ил. 2. Гербердт Шилдт. C#: учебный курс. – СПб.: Питер; К.: Издательская группа BHV, 2003. – 512 c.: ил. 3. Джесс Либерти. Программирование на C#: 2-е издание. – СПб.: Символ-Плюс, 2003. – 688 c.: ил. 4. Медведев В.И. Программирование на С++, C++.NET и С#: – Казань: Мастер Лайн, 2005. – 270 c.: ил. – (Серия «Современная прикладная математика и информатика»). 5. Медведев В.И. Особенности объектно-ориентированного программирования на C++/CLI, C# и Java. – Казань: РИЦ «Школа», 2008. – 360 c.: ил. – (Серия «Современная прикладная математика и информатика»). 6. Орлов А.Технология разработки программного обеспечения. Учебник. – СПб.: Питер, 2002. – 464 с. 7. Петцольд Ч. Программирование для Microsoft Windows на C#. В 2-х томах / Пер. с англ. – М.: Издательско-торговый дом “Русская Редакция”, 2002. – 576 + 624 с.: ил. 8. П. Наутон, Г. Шилдт. Java 2. Наиболее полное руководство в подлиннике.– СПб.: БХВ-Петербург, 2000. – 1072 с.: ил. 9. Рамбо Дж., Якобсон А., Буч Г. UML: специальный справочник. – СПб.: Питер, 2002. – 656 c.
Приложение 1. Диаграмма классов разработанной программы
9. Приложение 2. Текст программы на языке C# //////////////////// // C# File BallsCs.cpp using System; using System.Drawing; using System.Windows.Forms; using System.Threading;
delegate void delEv (); // Делегат события class Ball // Класс обычного объекта { public event delEv ev; // Объявление события public event delEv evSpecial; // Объявление специального события public int x, y; // Координаты шара public int w, h; // Ширина и высота области клиента public int dx, dy; // Приращения координат шара Thread thread; // Поток bool run; // Признак выполнения потока bool life; // Признак существования потока
public Ball (int X, int Y, int Dx, int Dy) // Конструктор { life= false; run= false; w= 100; h= 100; x= X; y= Y; dx= Dx; dy= Dy; }
//--------------- 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 (); // Возобновить } }
//--------------- public void Finish () // Завершить { life= false; thread.Abort (); thread.Join (); }
//--------------- void BallFunc () // Выполнить поток { while (life) // Пока существует, выполнить { x += dx; y += dy; if (x>w || x<0) { dx= -dx; if (evSpecial!= null) { evSpecial (); // Генерировать событие } } if (y>h || y<0) { dy= -dy; if (evSpecial!= null) { evSpecial (); // Генерировать событие } } if (ev!= null) { ev (); // Генерировать событие } Thread.Sleep (100); } } }
class SpecialBall // Класс специального объекта { public int x, y; // Координаты шара public int d=1; // Ширина пера Thread thread; // Поток bool run; // Признак выполнения потока
public SpecialBall (int X, int Y) // Конструктор { run= false; x= X; y= Y; }
//--------------- void Start () // Стартовать { if (!run) // Если поток не выполнялся, то { run= true; // пусть выполняется и d= 5; // утолщить кольцо thread= new Thread (new ThreadStart (BallFunc)); thread.Start ();// Стартовать поток } }
//--------------- public void HandlerEvSpecial () // Обработать событие { Start (); }
//--------------- void BallFunc () // Выполнить поток { Thread.Sleep (2000); d= 1; run= false; } } //------------------------------------- class Balls: Form // Класс объектов { public Ball [] pBall; // Массив обычных объектов public SpecialBall pSpecialBall; bool run; // Признак выполнения обычных объектов Color col; // Цвет шаров public Balls () // Конструктор { run= true; col= System.Drawing.Color.FromArgb (0, 0, 255); pSpecialBall= new SpecialBall (30, 30); pBall= new Ball [2]; for (int i= 0; i < 2; i++) { pBall[i]=new Ball (i*3+10, 1*3+15, i*3+5, i*3+5); pBall[i].ev += new delEv (HandlerEv); pBall[i].evSpecial += new delEv (pSpecialBall.HandlerEvSpecial); } Text= "Balls"; // Заголовок прикладного окна Start (); // Стартовать обычные объекты }
//--------------- public void Start () // Стартовать { for (int i=0; i < 2; i++) pBall[i]. Start (); }
//--------------- public void Suspend () // Приостановить { if (run) // Если обычные объекты выполнялись, то { run= false; // прекратить выполнение. for (int i=0; i < 2; i++) pBall[i].Suspend (); // Приостановить } }
//--------------- public void Resume () // Возобновить { if (!run) // Если обычные объекты приостановлены, то { run= true; // продолжить выполнение. for(int i= 0; i < 2; i++) pBall[i].Resume (); // Возобновить } }
//--------------- public void SetColor (Color Col) // Установить цвет { col= Col; Invalidate (); }
//--------------- protected override void OnPaint (PaintEventArgs arg) // Перерисовать { for (int i= 0; i < 2; i++) { arg.Graphics.DrawEllipse (new Pen (col), pBall[i].x, pBall[i].y, 20, 20); pBall[i].w= Width; pBall[i].h= Height; } arg.Graphics.DrawEllipse (new Pen (Color.Yellow, pSpecialBall. d), pSpecialBall.x, pSpecialBall.y, 20, 20); }
//--------------- void HandlerEv () // Обработать событие { Invalidate (); } }
//---------- class User: Balls // Класс пользователя шаров { private bool run; // Признак перемещения шаров Form pChildForm; // Дочерняя форма (окно) Color col; // Цвет шаров Button pBut; // Кнопка ListBox pListBox; // Список
public User () // Конструктор { run= true; //--------------- pBut= new Button(); // Создать кнопку pBut.Location = new Point (32, 24); // Разместить кнопку pBut.Name = "pBut"; // Дать имя кнопке // Задать размер кнопки в области клиента дочерней формы pBut.Size = new System.Drawing.Size (32, 24); pBut.Text = "OK"; // Поместить текст в кнопку // Подписать обработчик EventHandler кнопки на событие Click pBut.Click += new EventHandler (OnBut); //--------------- pListBox= new ListBox (); // Создать список pListBox.Items.Add ("red"); // Добавить red pListBox.Items.Add ("green"); // Добавить green pListBox.Items.Add ("blue"); // Добавить blue pListBox.Location = new Point (104, 24); // Разместить список pListBox.Name = "listBox"; // Дать имя списку // Задать размер списка в области клиента дочерней формы pListBox.Size = new System.Drawing.Size (56, 17); // Подписать обработчик списка на событие // SelectedIndexChanged pListBox.SelectedIndexChanged += new System.EventHandler (SelectedItem); // Задать размер области клиента прикладного окна ClientSize = new System.Drawing.Size (200, 150); //--------------- pChildForm= new Form (); // Создать дочернее окно (форму) pChildForm.Location= new Point (250, 10);// и разместить его. pChildForm.Size= new Size (250, 250); // Определить размер pChildForm.Text= "User"; // Задать заголовок дочернего окна pChildForm.Show (); // Показать дочернее окно pChildForm.Controls.Add (pBut); // Добавить кнопку pChildForm.Controls.Add (pListBox); // и список. pChildForm.ClientSize = new System.Drawing.Size (200, 62); }
//--------------- void OnBut (object obj, EventArgs arg) // Обработать кнопку { if (run) // Если шары перемещаются, то { run= false; // пусть перестанут перемещаться. Suspend (); // Приостановить } else // Иначе, if(!run) // если шары неподвижны, то { run= true; // пусть перемещаются. Resume (); // Возобновить } }
//--------------- void SelectedItem (object obj, EventArgs arg) // Выбрать из списка { if(pListBox.GetSelected (0)) col= Color.Red; if(pListBox.GetSelected (1)) col= Color.Green; if(pListBox.GetSelected (2)) col=Color.Blue; SetColor (col); }
//------------------------- static void Main() { User user= new User(); Application.Run(user); // Выполнить приложение for (int i= 0; i < 2; i++) // Завершить и удалить потоки user.pBall[i].Finish (); } }
Приложение 3. Текст программы на языке Java package BallsCj7; //////////////////// //C# File BallsCj7 import java.util.*; import java.awt.*; import java.awt.event.*;
class Obs { private int num, n; private boolean special;//
public Obs (int num, int n, boolean special)//
{this.num= num; this.n= n;this.special= special;}//
int getNumber(){return num;}
int getN(){return n;}
boolean getSpecial(){return special;}// } class Ball extends Observable implements Runnable // Класс обычного объекта { int num; Thread thread; boolean run; boolean waiting= false; boolean life; public int x, y; public int w, h; public int dx, dy;
public Ball (int Num, int X, int Y, int Dx, int Dy)// Конструктор { num= Num; life= false; run= false; w= 100; h= 100; x= X; y= Y; dx= Dx; dy= Dy; 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++; x += dx; y += dy; if (x>w || x<0) { setChanged();// notifyObservers(new Obs(num, n, true));// dx= -dx; } if (y>h || y<0) { setChanged();// notifyObservers(new Obs(num, n, true));// dy= -dy; }
// Уведомить setChanged(); notifyObservers(new Obs(num, n, false));// try { Thread.sleep (100); synchronized(this) { if(waiting) wait(); } } catch(InterruptedException iE){} } System.out.print("object "+num); System.out.println(" finished "); } }
class SpecialBall implements Runnable, // Класс специального объекта// Observer { public int x, y; // Координаты шара Thread thread; // Поток boolean yes; // Признак выполнения потока //
public SpecialBall (int X, int Y) // Конструктор { yes= false; x= X; y= Y; }
void Start () // Стартовать { if (!yes) // Если поток не выполнялся, то { yes= true; // пусть выполняется thread= new Thread (this);//new ThreadStart (BallFunc)); thread.start (); // Стартовать поток } }
public void update(Observable ob, Object obj)// { Obs obs=(Obs) obj; if(obs.getSpecial()) Start (); }
public void run () // Выполнить поток// { try { Thread.sleep (2000); } catch(InterruptedException iE){} yes= false; } }
//------------------------------------- class Balls extends Frame implements Observer // Класс объектов { Ball [] pBall; Color col; public SpecialBall pSpecialBall;// public Balls () { this.setTitle("Balls"); this.setSize(400, 300); col= Color.red; pSpecialBall= new SpecialBall (30, 30);// pBall= new Ball [2]; for (int i= 0; i < 2; i++) { pBall[i]=new Ball (i, i*3+10, 1*3+15, i*3+5, i*3+5); pBall[i].addObserver(this); pBall[i].addObserver(pSpecialBall); } this.show(); Start (); } //--------------- public void SetColor (Color Col) // Установить цвет { col= Col; repaint(); }
//--------------- 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; if(!obs.getSpecial()) { System.out.print("object num= "+ obs.getNumber()); System.out.println(" n= "+ obs.getN()); repaint(); } }
public void paint (Graphics g) { super.paint (g); g.setColor(col); for (int i= 0; i < 2; i++) { g.drawOval(pBall[i].x, pBall[i].y, 20, 20); pBall[i].w= this.getSize().width; pBall[i].h= this.getSize().height; } if(pSpecialBall.yes) { g.setColor(Color.yellow); g.drawOval(pSpecialBall.x, pSpecialBall.y, 20, 20); } } }
class User extends Balls implements ActionListener, // Класс пользователя шаров ItemListener { private boolean run; Frame pChildForm; Button pBut; private Choice c;// Ссылка на объект-список public User () { run= true; pBut= new Button("OK"); pBut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent aE) { System.out.println ("OkButton"); if (run) { run= false; Suspend (); } else if (!run) { run= true; Resume (); } } });
this.setSize(400, 300); //--------------- pChildForm= new Frame (); pChildForm.setLocation(250, 10); pChildForm.setSize(250, 250); pChildForm.setTitle("User"); pChildForm.show (); pChildForm.setLayout (new FlowLayout ());// Установить расстановку pChildForm.add(pBut);
c= new Choice (); // Создать объект списка c.addItem ("blue");// Добавить элемент "blue" c.addItem ("green");//Добавить элемент "green" c.addItem ("red");//Добавить элемент "red" pBut.addActionListener(this); pChildForm.add(c, new Point (100,20));//Подсоединить список к окну pChildForm.setVisible (true);// Показать кнопку и список в окне } public void itemStateChanged (ItemEvent iE) { }
public void actionPerformed(ActionEvent aE) { switch (c.getSelectedIndex ())// Получить индекс списка { case 0: col= Color.blue;// break; case 1: col= Color.green;// break; case 2: col= Color.red;// break; } repaint ();// Перерисовать }
//------------------------- public static void main () { User u= new User(); } } /* Результат: Появились прикладное окно с перемещающимися шарами и дочернее окно с кнопкой и элементом списка. При нажатии на кнопку можно приостанавливать или возобновлять движение шаров. Выделив в списке цвет, можно изменить цвет шаров. При отталкивании каждого шара от границ окна появляется в верхнем левом углу окна желтый шар и исчезает через 2000 мс. */
Приложение 3. Текст модифицированной программы на языке Java
package BallsCj7; //////////////////// //C# File BallsCj7 // Синхронизировать потоки с разделяемым ресурсом типа SpecialBall import java.util.*; import java.awt.*; import java.awt.event.*;
class Obs { private int num, n; private boolean special;//
public Obs (int num, int n, boolean special)//
{this.num= num; this.n= n;this.special= special;}//
int getNumber(){return num;}
int getN(){return n;}
boolean getSpecial(){return special;}// }
class Ball extends Observable implements Runnable // Класс обычного объекта { int num; Thread thread; boolean run; boolean waiting= false; boolean life; public int x, y; public int w, h; public int dx, dy; SpecialBall sB;
//public Ball (int Num, int X, int Y, int Dx, int Dy)// Конструктор Public Ball (int Num, int X, int Y, int Dx, int Dy, SpecialBall SB) { num= Num; life= false; run= false; w= 100; h= 100; x= X; y= Y; dx= Dx; dy= Dy; sB= SB; 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) { //synchronized(sB) { System.out.print("object "+num); System.out.println(" n= "+n); n++; x += dx; y += dy; Synchronized(sB) { if (x>w || x<0) { setChanged();// notifyObservers(new Obs(num, n, true));// dx= -dx; } if (y>h || y<0) { setChanged();// notifyObservers(new Obs(num, n, true));// dy= -dy; } }
// Уведомить setChanged(); notifyObservers(new Obs(num, n, false));// try { Thread.sleep (100); //Thread.sleep (50); synchronized(this) { if(waiting) wait(); } } catch(InterruptedException iE){} } } System.out.print("object "+num); System.out.println(" finished "); } }
class SpecialBall implements Runnable, // Класс специального объекта// Observer { public int x, y; // Координаты шара Thread thread; // Поток boolean yes; // Признак выполнения потока //
public SpecialBall (int X, int Y) // Конструктор { yes= false; x= X; y= Y; }
void Start () // Стартовать { if (!yes) // Если поток не выполнялся, то { yes= true; // пусть выполняется thread= new Thread (this);//new ThreadStart (BallFunc)); thread.start (); // Стартовать поток } }
public void update(Observable ob, Object obj)// { Obs obs=(Obs) obj; if(obs.getSpecial()) Start (); }
public void run () // Выполнить поток// { try { Thread.sleep (2000); } catch(InterruptedException iE){} yes= false; } }
//------------------------------------- class Balls extends Frame implements Observer // Класс объектов {
Ball [] pBall; Color col; public SpecialBall pSpecialBall;// public Balls () { this.setTitle("Balls"); this.setSize(400, 300); col= Color.red; pSpecialBall= new SpecialBall (30, 30);// //pBall= new Ball [2]; pBall= new Ball [4]; //for (int i= 0; i < 2; i++) for (int i= 0; i < 4; i++) { //pBall[i]=new Ball (i, i*3+10, 1*3+15, i*3+5, i*3+5); pBall[i]=new Ball (i, i*3+10, 1*3+15, i*3+5, i*3+5 , pSpecialBall); pBall[i].addObserver(this); pBall[i].addObserver(pSpecialBall); } this.show(); Start (); } //--------------- public void SetColor (Color Col) // Установить цвет { col= Col; repaint(); }
//--------------- 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; if(!obs.getSpecial()) { System.out.print("object num= "+ obs.getNumber()); System.out.println(" n= "+ obs.getN()); repaint(); } }
public void paint (Graphics g) { super.paint (g); g.setColor(col); //for (int i= 0; i < 2; i++) for (int i= 0; i < 4; i++) { g.drawOval(pBall[i].x, pBall[i].y, 20, 20); pBall[i].w= this.getSize().width; pBall[i].h= this.getSize().height; } if(pSpecialBall.yes) { g.setColor(Color.yellow); g.drawOval(pSpecialBall.x, pSpecialBall.y, 20, 20); } } }
class User extends Balls implements ActionListener, // Класс пользователя шаров ItemListener { private boolean run; Frame pChildForm; Button pBut; private Choice c;// Ссылка на объект-список public User () { run= true; pBut= new Button("OK"); pBut.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent aE) { System.out.println ("OkButton"); if (run) { run= false; Suspend (); } else if (!run) { run= true; Resume (); } } });
this.setSize(400, 300); //--------------- pChildForm= new Frame (); pChildForm.setLocation(250, 10); pChildForm.setSize(250, 250); pChildForm.setTitle("User"); pChildForm.show (); pChildForm.setLayout (new FlowLayout ());// Установить расстановку pChildForm.add(pBut);
c= new Choice (); // Создать объект списка c.addItem ("blue");// Добавить элемент "blue" c.addItem ("green");//Добавить элемент "green" c.addItem ("red");//Добавить элемент "red" pBut.addActionListener(this); pChildForm.add(c, new Point (100,20));//Подсоединить список к окну pChildForm.setVisible (true);// Показать кнопку и список в окне
// Примененить внутренний анонимный класс this.addWindowListener (new WindowAdapter () { public void windowClosing (WindowEvent wE) { System.exit(0); } });
} public void itemStateChanged (ItemEvent iE) { }
public void actionPerformed(ActionEvent aE) { switch (c.getSelectedIndex ())// Получить индекс списка { case 0: col= Color.blue;// break; case 1: col= Color.green;// break; case 2: col= Color.red;// break; } repaint ();// Перерисовать }
//------------------------- public static void main () { User u= new User(); } } /* Результат: Появились прикладное окно с перемещающимися шарами и дочернее окно с кнопкой и элементом списка. При нажатии на кнопку можно приостанавливать или во-зобновлять движение шаров. Выделив в списке цвет, можно изменить цвет шаров. При отталкивании каждого шара от границ окна появляется в верхнем левом углу окна желтый шар и исчезает через 2000 мс. */
Применять оператор synchronized надлежит там, где он охватывает обращение только к разделяемому ресурсу, иначе выполнение потоков будет существенно замедляться, поскольку они будут ждать выполнения иными потоками действий, не связанных с ресурсом.
|
||||
Последнее изменение этой страницы: 2016-08-01; просмотров: 175; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.90.236 (0.01 с.) |