Объектно-ориентированное программирование

 

Содержание


Введение

1. Теоретический анализ

1.1 Постановка задачи

1.2 Построение алгоритма реализации

1.3 Определение математического аппарата, применение которого необходимо в задаче

2. Реализация основного класса программы

2.1 Добавление шара

2.2 Редактирование параметров шара

2.3 Удаление шара

2.4 Перемещение шара

2.5 Сохранение состояния программы

2.6 Загрузка состояния программы

2.7 Работа с пунктом "О программе"

2.8 Реализация диалогового окна работы с шаром

2.9 Инструкция по использованию программы

Заключение

Список литературы

Введение


Объектно-ориентированное, или объектное, программирование (ООП) - парадигма программирования, в которой основными концепциями являются понятия объектов и классов. Данная концепция в настоящее время является ведущей в области программирования. Количество прикладных языков программирования, реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. Данный подход реализован в таких языках программирования как С, C++ <#"justify">Целью данной курсовой работы является разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С# средствами Microsoft Visual Studio 2010.

Задачами данной курсовой работы являются:

-выделение классов, необходимых для решения задачи;

-выделение основного действия в задаче и построение алгоритма его реализации;

-определение математического аппарата, применение которого необходимо в задаче;

-программная реализация задачи средствами Visual C#;

объектное ориентированное программирование инструкция

1. Теоретический анализ


1.1 Постановка задачи


Задание: По траектории, представляющей собой окружность, происходит движение шариков. Каждый шарик характеризуется скоростью и направлением движения, радиусом. Шарики имеют синий цвет. Однако, если происходит пересечение шариков, то все шарики, попадающие в пересечение, закрашиваются красным на время пересечения. Предусмотреть добавление и удаление шариков, изменение их параметров.

Выделение классов

Для решения задачи опишем следующие классы:

шар (Shar). Экземпляр данного класса должен уметь отрисовывать и стирать себя в области отображения, передвигаться по траектории заданной, в виде окружности, иметь свой номер, изменять свой радиус и скорость движения, а также направление движения. Для этого он должен знать свое расположение, иметь ссылку на область отображения.

-область отображения (Traekt) обеспечивает ссылку на реальную поверхность рисования, так же этот класс обеспечивает хранение информации о номере следующего и предыдущего шара.


Класс Shar

class Shar: ISaveLoad

{

// номер, скорость,, координаты шара, радиус шара

private int _number,_speed, _x, _y, _vector,_radS;

// поле, хранящие цвет шараColor _color;

// положение шараdouble a;

// поле, хранящие информацию о формате текста

private static StringFormat _strF;

// поле, храняшие параметры шрифта

private static Font _f;

// ссылка на область отображенияTraekt _Space;

// статический конструктор, инициализирующий

// статические поляShar ()

{

_strF = new StringFormat ();

_strF. Alignment = StringAlignment. Center;

_f = new Font ("Arial",

);

}

// конструктор, применяемый при чтении из файла

public Shar (Traekt NewSpace)

{

_Space = NewSpace;

_x = - 1;

_y = - 1;

}

// свойство цвета шара, для доступа из вне

public Color colball

{{ return _color; }

set { _color = value; }

}

// свойство радиуса шара, для доступа из вне

public int radS

{{ return _radS; }

set { _radS = value; }

}

// свойство номера шара, для доступа из вне

public int num

{{ return _number; }

}

// свойство скорости шара, для доступа из вне

public int speed

{{ return _speed; }

set { _speed = value; }

}

// свойство направления шара, для доступа из вне

public int v

{{ return _vector; }

set { _vector = value; }

}

// основной конструктор шара

public Shar (Traekt newSpace, int NNumber, int uSpeed, int uVector, int uradS)

{

_Space = newSpace;

_vector = uVector;

_speed = uSpeed;

_radS = uradS;

_number = NNumber;= 90 * (Math. PI / 180);();

}

// метод отрисовки шараvoid Show ()

{gr = Graphics. FromImage (_Space. S_picture. Image);sBrush=new SolidBrush (_color);sPen = new Pen (Color. Black);

_f = new Font ("Arial",

);

{

/* // рисование траэктории

gr. DrawEllipse (sPen, _Space. S_x - _radiusOr,

_Space. S_y - _radiusOr,

_radiusOr * 2,_radiusOr * 2); */

}

// рисование шара. Color = colball;. FillEllipse (sBrush, _x, _y, radS * 2, radS * 2);. DrawEllipse (sPen, _x, _y, radS * 2, radS * 2);. Color = Color. White;. DrawString (_number. ToString (), _f, sBrush, _x+radS, _y+radS/2);

_Space. S_picture. Refresh ();. Dispose ();. Dispose ();

}

// метод стирания шараvoid Hide ()

{gr=Graphics. FromImage (_Space. S_picture. Image);sPen = new Pen (Color. White, 1);sBr = new SolidBrush (Color. White);

// стирание траэктории

/* {. DrawEllipse (sPen, _Space. S_x - Convert. ToInt32 (_radiusOr) - 1,_Space. S_y - Convert. ToInt32 (_radiusOr) - 1,Convert. ToInt32 (_radiusOr) * 2 + 2,Convert. ToInt32 (_radiusOr) * 2 + 2);

}*/

// удаление самого шара. FillEllipse (sBr, _x - 1, _y - 1, (radS * 2) + 2, (radS * 2) + 2);. Dispose ();. Dispose ();

}

// метод движения шараvoid Move ()

{();_radiusOr = _Space. S_picture. Height / 4;= a + (speed * _vector*Math. PI/180);

{

_x = (int) Convert. ToInt32 (_Space. S_x + _radiusOr * Math. Cos (a) - radS);

_y = (int) Convert. ToInt32 (_Space. S_y + _radiusOr * Math. Sin (a) - radS);

}();

}

// метод получения номера шараoverride string ToString ()

{"Шар "+_number+"; ";

}

// запись

// в текстовый файл в начале предыдущий шарик, затем количество, а дальше весь список

public void Save (StreamWriter sw)

{. WriteLine (_number);. WriteLine (_speed);. WriteLine (_x);. WriteLine (_y);. WriteLine (_vector);. WriteLine (_radS);

sw. WriteLine (a);

}

// запись

// в двоичный файл

public void Save (BinaryWriter bw)

{. Write (_number);. Write (_speed);. Write (_x);. Write (_y);. Write (_vector);. Write (_radS);

bw. Write (a);

}

// чтение

// из текстового файла

public void Load (StreamReader sr)

{();

_number = Convert. ToInt32 (sr. ReadLine ());

_speed = Convert. ToInt32 (sr. ReadLine ());

_x= Convert. ToInt32 (sr. ReadLine ());

_y = Convert. ToInt32 (sr. ReadLine ());

_vector = Convert. ToInt32 (sr. ReadLine ());

_radS = Convert. ToInt32 (sr. ReadLine ());= Convert. ToDouble (sr. ReadLine ());();

}

// чтение

// из двоичного файлаvoid Load (BinaryReader br)

{();

_number = br. ReadInt32 ();

_speed = br. ReadInt32 ();

_x = br. ReadInt32 ();

_y = br. ReadInt32 ();

_vector = br. ReadInt32 ();

_radS = br. ReadInt32 ();= br. ReadDouble ();();

}Boolean Collapse (Shar ball) // Метод проверки на пересечение

{(Math. Sqrt (Math. Pow (_x - ball. _x + radS - ball. radS,

) + Math. Pow (_y - ball. _y + radS - ball. radS,

)) < (ball. _radS + _radS))true;false;

}

}

}

Класс Traekt

class Traekt: ISaveLoad

{

private int x, y; // координаты центра поверхности рисованияPictureBox Space_pb; // ссылка на реальную поверхность рисованияint _nextNum, _lastNum; // поля, хранящие номера следующего и предыдущего шарикаTraekt (PictureBox newPB, int next) // основной конструктор класса

{_pb = newPB;= Space_pb. Image. Width/2;= Space_pb. Image. Height/2;c = Graphics. FromImage (Space_pb. Image);_pb. Refresh ();. Dispose ();

_nextNum = 1;

}

// реализация интерфейса, производящего запись

// в текстовый файл

public void Save (StreamWriter sw)

{. WriteLine (_lastNum);

}

// реализация интерфейса, производящего запись

// в двоичный файлvoid Save (BinaryWriter bw)

{. Write (_lastNum);

}

// реализация интерфейса, производящего чтение

// из текстового файлаvoid Load (StreamReader sr)

{

_nextNum = Convert. ToInt32 (sr. ReadLine ()) +1;

}

// реализация интерфейса, производящего чтение

// из двоичного файла

public void Load (BinaryReader br)

{

_nextNum = br. ReadInt32 () +1;

}

// свойство номеров шаров дл доступа извне

public int nextN

{{ return _nextNum++; }

set { _lastNum = value; } // получаем номер при создании в Form1

}

// свойство получения доступа к компоненту, на котором производится отображение

public PictureBox S_picture

{{ return Space_pb; }

}

// свойство координаты Х, для достпа извне

public int S_x

{{ return x; }

}

// свойство координаты У, для доступа извне

public int S_y

{{ return y; }

}

}

}


1.2 Построение алгоритма реализации


При функционировании программы могут выполняться следующие операции:

добавление шарика;

-удаление шарика;

редактирование параметров шарика;

перемещение шариков по траектории, представляющей собой окружность;

загрузка, либо сохранение параметров шарика в отдельный файл;

Отличительной особенностью задания является реализация пересечения шариков движущихся по траектории, представляющей окружность. Алгоритм определения пересечения выглядит следующим образом:

а)Выполнить перебор всех шаров находящихся в списке;

б)Получить параметры шара;

в)Параметры каждого шара сравниваем со всеми кроме параметров самого шара;

г) Если расстояние между центрами меньше суммы их радиусов, то шары пересекаются;


.3 Определение математического аппарата, применение которого необходимо в задаче


По условиям задачи шары перемещаются по траектории, представленной в виде окружности, и для определения пересечения использовалась следующая формула



2. Реализация основного класса программы


Основной класс программы обеспечивает её визуальное представление (на рисунке 1.1 показана основная форма с указанием компонентов, используемых далее в листингах), а также описывает все операции, выполняемые в ходе функционирования программы.


Рисунок 2.1 - Основная форма программы


При загрузке формы производится создание области отображения, установка доступности выполнения операций, а также настройка некоторых свойств стандартных диалоговых окон:


private void Form1_Load (object sender, EventArgs e)

{

// создание области рисования. Image = new Bitmap (pictureBox1. Width, pictureBox1. Height);

// создание поверхности отображения= new Traekt (pictureBox1, 1);

// запуск таймера. Enabled = true;_ED (false);_ED (false);

Del_ED (false);

}

Установка доступности выполнения операций реализована в виде трех методов:

private void Change_ED (bool Value)

{_ball. Enabled = Value;_TSM. Enabled = Value;. Enabled = Value;

}

private void Del_ED (bool Value)

{_ball. Enabled = Value;_TSM. Enabled = Value;. Enabled = Value;

}

private void Save_ED (bool Value)

{_balls. Enabled = Value;_TSM. Enabled = Value;. Enabled = Value;

}


2.1 Добавление шара


Добавление шара выполняется с использованием разработанного диалогового окна класса Form:


private void button1_Click (object sender, EventArgs e)

{

// переменная, хранящая направление движения шаровv = 0;

// создание диалогового окнаDialog = new Form2 ();

// установка начальных значений компонентов. Text = "Добавление шара";

Dialog. Radius_TB. Text = "";. Speed_TB. Text = "";

// вызов окна и определение резултатов его работы

if (Dialog. ShowDialog () == DialogResult. OK)

{(Dialog. radioButton1. Checked)= - 1;(Dialog. radioButton2. Checked)= 1;

// добавление нового шара= new Shar (Space, Space. nextN,. ToInt32 (Dialog. Speed_TB. Text), v, Convert. ToInt32 (Dialog. Radius_TB. Text));

// сохранение номера добавленного шара передача в _lastnum. nextN = satellite. num;

// добавление шара в список отображения

listBox1. Items. Add (satellite);_ED (true);

}

}


.2 Редактирование параметров шара


Редактирование параметров шаров осуществляется с использованием диалогового окна того же класса, что и при добавлении треугольника.

Редактируются параметры шара выбранного в списке шаров.

private void button2_Click (object sender, EventArgs e)

{

// проверка наличия шаров(listBox1. SelectedIndex! = - 1)

{

// создание диалоговой формыDialog = new Form2 ();. Text = "Изменение параметров шара";

// запоминание параметров шараsatel = listBox1. SelectedItem as Shar;. Radius_TB. Text = Convert. ToString (satel. radS);. Speed_TB. Text = Convert. ToString (satel. speed);(satel. v == - 1). radioButton1. Checked = true;. radioButton2. Checked = true;

// запоминание измененных значений

if (Dialog. ShowDialog () == DialogResult. OK)

{. Hide ();. S_picture. Refresh ();. radS = Convert. ToInt32 (Dialog. Radius_TB. Text);. speed = Convert. ToInt32 (Dialog. Speed_TB. Text);(Dialog. radioButton1. Checked). v = - 1;(Dialog. radioButton2. Checked)

satel. v = 1;

}

}. Show ("Не выбран шар для редактирования");

}


2.3 Удаление шара


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


private void button3_Click (object sender, EventArgse)

{(listBox1. SelectedIndex! = - 1)

{

// запоминание параметров шараsat = listBox1. SelectedItem as Shar;

// перед удалением необходимо стереть удаляемый шар

sat. Hide ();. S_picture. Refresh ();

// удаляем шар. Items. RemoveAt (listBox1. SelectedIndex);

}. Show ("не выбран шар для удаления");

// если в списке нет элементов, то

// запрет действий_ED (false);

}


2.4 Перемещение шара


Перемещение шара происходит по траектории в виде окружности, который в свою очередь движется с помощью таймера. При срабатывании таймера происходит движение шаров.


private void timer1_Tick (object sender, EventArgs e)

{(int i = 0; i < listBox1. Items. Count; i++)

{= listBox1. Items [i] as Shar;. colball = Color. Blue;. Move ();

}


.5 Сохранение состояния программы


При сохранении параметров программы используются стандартные диалоговые окна для выбора файла.


private void button4_Click (object sender, EventArgs e)

{

// подготовка диалогового окна. FileName = "";

// вызов диалогового окна и определение результатов его работы

if (saveFileDialog1. ShowDialog () == DialogResult. OK)

{

// остановка таймера, для того чтобы во время записи не произошло перемещение шаров. Enabled = false;

// блок try. finally для гарантированного запуска таймера после сохранения

try

{

// определение расширения файла(new FileInfo (saveFileDialog1. FileName). Extension ==". dat")

{

// создание бинарного потока данных(BinaryWriter bw = new BinaryWriter (new FileStream (this. saveFileDialog1. FileName, FileMode. Create)))

{

// сохранения состояния области рисования. Save (bw);

// сохранение количества шаров. Write (listBox1. Items. Count);

// сохранение шаров(int i = 0; i < listBox1. Items. Count; i++)

{= listBox1. Items [i] as Shar;

satellite. Save (bw);

}

}

}

{

// создание текстового потока данных

using (StreamWriter sw = new StreamWriter (new FileStream (this. saveFileDialog1. FileName, FileMode. Create)))

{

// сохранение области рисования. Save (sw);

// сохранение количества шаров

sw. WriteLine (listBox1. Items. Count);

// сохранение шаров(int i = 0; i < listBox1. Items. Count; i++)

{= listBox1. Items [i] as Shar;. Save (sw);

}

}

}

}

{

// запуск таймера

timer1. Enabled = true;

}

}

}


2.6 Загрузка состояния программы


При загрузке параметров программы используются стандартные диалоговые окна для выбора файла.


private void button5_Click (object sender, EventArgs e)

{

// подготовка диалогового окна. FileName = "";

// вызов диалогового окна и определение результатов

if (openFileDialog1. ShowDialog () == DialogResult. OK)

{

// отановка займера. Enabled = false;

{

// стирание всех шаров(Shar sat in listBox1. Items). Hide ();

// очистка списка шаров. Items. Clear ();

// очистка строки состояния_TS. Text = "";

speedball_TS. Text = "";_TS. Text = "";

// определение расширения файла(new FileInfo (openFileDialog1. FileName). Extension ==". dat")

{

// создание бинарного потока данных(BinaryReader br = new BinaryReader (File. Open (openFileDialog1. FileName, FileMode. Open)))

{

// загрузка области рисования. Load (br);

// чтение количества шаровc = br. ReadInt32 ();

// загрузка шаров(int i = 0; i < c; i++)

{sat = new Shar (Space);. Load (br);. Items. Add (sat);

}

}

}

{

// создание текстового потока данных(StreamReader sr = new StreamReader (File. Open (openFileDialog1. FileName, FileMode. Open)))

{

{. Load (sr);c = Convert. ToInt32 (sr. ReadLine ());(int i = 0; i < c; i++)

{sat = new Shar (Space);. Load (sr);. Items. Add (sat);

}

}

}

}

}

{

// запуск таймера. Enabled = true;

// установка доступности действий_ED (false);

Del_ED (false);_ED (true);

}

}

}


2.7 Работа с пунктом "О программе"


При выборе пункта "О программе" создаётся и отображается одноименное диалоговое окно (рисунок 2.2)


Рисунок 2.2 - Диалоговое окно "О программе"


private void оПрограммеToolStripMenuItem_Click (object sender, EventArgs e)

{dialog = new Form3 ();. Text = "О программе";

if (dialog. ShowDialog () == DialogResult. OK)

dialog. Focus ();

}


2.8 Реализация диалогового окна работы с шаром


Диалоговое окно работы с шаром (рисунок 2.3) обеспечивает задание параметров шара: радиус шара, скорость движения, направление движения. Радиус шара и скорость шара вводится с помощью компонента класса TextBox, направление движения шара выбирается с помощью компонента RadioButton.


Рисунок 2.3 - Диалоговое окно работы с шаром


В проверке устанавливается, были ли пользователем введены допустимые данные.


{

// определение результата закрытия формы(DialogResult==DialogResult. OK)

// используется для обработки ошибок ввода данных

{

// проверка ввода радиуса шара(Radius_TB. Text. Trim () == "")

{_TB. Focus ();new Exception ("Вы не ввели данные о радиусе шара");

}

// проверка ввода скорости вращения(Speed_TB. Text. Trim () == "")

{_TB. Focus ();new Exception ("Вы не ввели данные о скорости движения шара");

}

// проверка выбора направления движения(! radioButton1. Checked &&! radioButton2. Checked)

{. Focus ();new Exception ("Вы не ввели данные о направлении движения");

}

// проверка введенных значений на правильность

{speed = Convert. ToInt32 (Speed_TB. Text);(speed < 1 || speed > 360)

{_TB. Focus ();

throw new Exception ("Скорость должна быть в диапозоне 1.360 рад/сек");

}

}(FormatException)

{. Cancel = true;

Speed_TB. Focus ();. Show ("Скорость должна быть целым числом");

return;

}

{radius = Convert. ToInt32 (Radius_TB. Text);(radius < 10 || radius > 100)

{_TB. Focus ();

throw new Exception ("Радиус шара должен быть не менее 10 и не более 100");

}

}(FormatException)

{. Cancel = true;_TB. Focus ();

MessageBox. Show ("Радиус должен быть целым числом");;

}

}

// обработка всех других ошибок(Exception E)

{. Cancel = true;. Show (E. Message);

}

}


2.9 Инструкция по использованию программы


В начальном состоянии (после запуска программы) возможными являются два основных действия: добавление шарика и загрузка ранее сохранённого состояния.

Добавление шара осуществляется с помощью кнопки "Добавить шар", кнопки на панели инструментов или пункта меню "Действие®Добавить шар".

Удаление выбранного шара осуществляется с помощью кнопки "Удалить шар", кнопки на панели инструментов или пункта меню "Действие?®Удалить шар".

Изменение параметров выбранного шара осуществляется с помощью кнопки "Редактировать шар", кнопки на панели инструментов или пункта меню "Действие?®Редактировать шар".

Загрузка сохранённого состояния программы осуществляется с помощью кнопки "Загрузить данные", кнопки на панели инструментов или пункта меню "Действие®Загрузить данные".

При выполнении команды в диалоговом окне требуется указать имя файла и его тип. Считается, что файл с расширением". txt" текстовый, а файл с раширением". dat" двоичный.

Сохранение состояния программы осуществляется с помощью кнопки на панели инструментов или пункта меню "Файл®Сохранить данные". Тип файлов сохранения определяется по тому же алгоритму, что и при загрузке.

После добавления шара или загрузки сохранённого состояния становится доступным операция сохранения текущего состояния, которая заново блокируется при удалении последнего шара.

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

На рисунке 2.4 изображено состояние программы с шарами, так как ни один из шаров не выбран, то изменение и удаление недоступны.


Рисунок 2.4 - Демонстрация работы программы


Заключение


В данной курсовой работе удалось разработать программу с использованием компонентов среды визуального проектирования Visual C#.

Выполнение курсовой работы было разделено на два этапа:

-теоретический анализ поставленной задачи, включающий в себя постановку задачи, выделение основных классов, выделение основных действия и алгоритмов их реализации, определение математического аппарата, необходимого при решении задачи;

-программная реализация задачи средствами Visual C#, включающая в себя реализацию основных классов, реализацию основных действий, реализацию классов диалоговых форм, инструкцию по использовании программы.

Итогом курсовой работы можно считать закрепление знаний в области создания алгоритмов, навыков программирования на языке C# и создании приложений для операционных системы компании Microsoft, полученных в ходе курса "объектно-ориентированное программирование".

Список литературы


1.Курсовая работа по программированию на Visual C# - учебное издание - Кожемяченко В.И. - Новокузнецк - 2013 г. - 28 с.

2.Программирование в среде Visual C# часть 2: метод. указ. - /СибГИУ - сост. В.И. Кожемяченко, С.Ю. Красноперов - Новокузнецк - 2012 г. - 54 с.


Содержание Введение 1. Теоретический анализ 1.1 Постановка задачи 1.2 Построение алгоритма реализации 1.3 Определение математического аппарат

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ