Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
380.4 Кб
Скачать

Министерство образования Республики Беларусь

Учреждение Образования «Белорусский государственный университет

информатики и радиоэлектроники»

Факультет: телекоммуникаций

Кафедра: систем телекоммуникаций

Дисциплина: объектно-ориентированное программирование

Пояснительная записка

к курсовой работе на тему:

«Разработка программы для построения геометрических фигур на плоскости»

Студент гр. 463001 Васеха В.А.

Руководитель: Давыдова Надежда Сергеевна

Минск, 2015

Содержание

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

2. Введение

3. Основные теоретические сведения

4. Программа в среде разработки Borland C++ Builder 6.0

5. Пошаговый алгоритм выполнения программы

6. Переменные и их назначение

7. Программные средства Borland C++ Builder 6.0

8. Заключение

9. Список использованных источников

10. Приложение А

11. Приложение Б

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

Задание. Разработать программу для построения геометрических фигур на плоскости. Исходные данные (форма, цвет, размер и пр.) вводятся пользователем интерактивно. Графический интерфейс и навигация

Введение

Разработка алгоритмов с использованием объектно-ориентированного подхода является важнейшей частью обучения программированию, поскольку именно этот подход является наиболее приоритетным при создании приложений любого типа на сегодняшний день. Целью данной курсовой работы является изучение основных принципов объектно-ориентированного программирования и решение поставленной задачи.

Основные теоретические сведения

Объе́ктно-ориенти́рованное, или объектное, программи́рование (в дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов.

ООП возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Для дальнейшего развития объектно-ориентированного программирования часто большое значение имеют понятия события (так называемое событийно-ориентированное программирование) и компонента (компонентное программирование, КОП).

В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную парадигму, является наибольшим по отношению к другим парадигмам. В области системного программирования до сих пор применяется парадигма процедурного программирования, и общепринятым языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования. Например, одной из наиболее распространенных библиотек мультиплатформенного программирования является объектно-ориентированная библиотека Qt, написанная на языке C++.

В центре ООП находится понятие объекта. Объект — это сущность, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные. Объект — это экземпляр класса. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией.

Наличие инкапсуляции достаточно для объектности языка программирования, но ещё не означает его объектной ориентированности — для этого требуется наличие наследования.

Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП. Основные преимущества ООП проявляются только в том случае, когда в языке программирования реализован полиморфизм; то есть возможность объектов с одинаковой спецификацией иметь различную реализацию.

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

Поля данных

Параметры объекта (конечно, не все, а только необходимые в программе), задающие его состояние (свойства объекта предметной области). Иногда поля данных объекта называют свойствами объекта, из-за чего возможна путаница. Физически поля представляют собой значения (переменные, константы), объявленные как принадлежащие классу.

Методы 

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

Классы могут наследоваться друг от друга. Класс-потомок получает все поля и методы класса-родителя, но может дополнять их собственными либо переопределять уже имеющиеся. Большинство языков программирования поддерживает только единичное наследование (класс может иметь только один класс-родитель), лишь в некоторых допускается множественное наследование — порождение класса от двух или более классов-родителей.

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

Инкапсуляция обеспечивается следующими средствами

Контроль доступа 

Поскольку методы класса могут быть как чисто внутренними, обеспечивающими логику функционирования объекта, так и внешними, с помощью которых взаимодействуют объекты, необходимо обеспечить скрытость первых при доступности извне вторых. Для этого в языки вводятся специальные синтаксические конструкции, явно задающие область видимости каждого члена класса. Традиционно это модификаторы public, protected и private, обозначающие, соответственно, открытые члены класса, члены класса, доступные только из классов-потомков и скрытые, доступные только внутри класса. Конкретная номенклатура модификаторов и их точный смысл различаются в разных языках.

Методы доступа 

Поля класса, в общем случае, не должны быть доступны извне, поскольку такой доступ позволил бы произвольным образом менять внутреннее состояние объектов. Поэтому поля обычно объявляются скрытыми (либо язык в принципе не позволяет обращаться к полям класса извне), а для доступа к находящимся в полях данным используются специальные методы, называемые методами доступа. Такие методы либо возвращают значение того или иного поля, либо производят запись в это поле нового значения. При записи метод доступа может проконтролировать допустимость записываемого значения и, при необходимости, произвести другие манипуляции с данными объекта, чтобы они остались корректными (внутренне согласованными). Методы доступа называют ещё аксессорами (от англ. Access — доступ), а по отдельности — геттерами (англ. Get — чтение) и сеттерами (англ. Set — запись).

Полиморфизм реализуется путём введения в язык правил, согласно которым переменной типа «класс» может быть присвоен объект любого класса-потомка её класса.

Программа в среде разработки Borland C++ Builder 6.0

Пошаговый алгоритм выполнения программы

  1. Создание диалогового окна и добавление основных кнопок.

  1. Добавлено меню цвета, алгоритм рисования квадрата, с проверкой выхода за пределы экрана, поле для ввода размера.

case 0: //квадрат

wei = StrToInt(Str_A->Text);

if (wei/2<=314)

{

Image1->Canvas->Rectangle(314-wei/2,193-wei/2, 314+wei/2,193+wei/2);

}

else

ShowMessage("Выход за пределы экрана.");

break;

Str_A->Show(); Str_B->Hide(); Str_C->Hide();

Lab_A->Show(); Lab_B->Hide(); Lab_C->Hide();

Lab_A->Caption = "Сторона А";

break;

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

Поля для ввода размеров фигур:

case 1: //прямоугольник

Str_A->Show(); Str_B->Show(); Str_C->Hide();

Lab_A->Show(); Lab_B->Show(); Lab_C->Hide();

Lab_A->Caption = "Сторона А"; Lab_B->Caption = "Сторона B";

break;

case 2: //треуглоьник

Str_A->Show(); Str_B->Show(); Str_C->Show();

Lab_A->Show(); Lab_B->Show(); Lab_C->Show();

Lab_A->Caption = "Сторона А"; Lab_B->Caption = "Сторона B";

Lab_C->Caption = "Сторона C";

break;

case 3: //круг

Str_A->Show(); Str_B->Hide(); Str_C->Hide();

Lab_A->Show(); Lab_B->Hide(); Lab_C->Hide();

Lab_A->Caption = "Радиус";

break;

//Рисуем треугольник

int a,b,c;

a = StrToInt(Str_A->Text);

b = StrToInt(Str_B->Text);

c = StrToInt(Str_C->Text);

bool round = false;

if (a<b+c)

if (b<c+a) // тут проверка на существование треугольника

if (c<b+a)

round = true;

TPoint points[3];

int x1,x2,x,y,ka = -1,kb = 0;

if (round == false) ShowMessage("Невозможно");

else

{

x1 = 314-(a/2);

x2 = 314+(a/2); //создаем две точки для одной стороны

points[0] = Point(x1, 216);

points[1] = Point(x2, 216);

for (x = 1; x<=680; x++) //ищем третью точку по всему полю

{

for (y = 1;y<=380; y++)

{

ka =sqrt(pow((x-x1),2) + pow((y-216),2));

kb =sqrt(pow((x-x2),2) + pow((y-216),2)); //меряем расстояние

if (ka==b && kb==c)

{

break;

}

}

if (ka==b && kb==c)

{

break;

}

}

points[2] = Point(x,y);

if (x>=680 && y>=380) ShowMessage("Выход за пределы поля");

else

Image1->Canvas->Polygon(points, 2);

break;

// Рисуем круг

rad = StrToInt(Str_A->Text);

if (rad/2 <= 193) {

Image1->Canvas->Ellipse(314-rad/2,193-rad/2,314+rad/2,193+rad/2);

} else ShowMessage("Выход за пределы экрана.");

break;

//Рисуем прямоугльник

wei = StrToInt(Str_A->Text); hei = StrToInt(Str_B->Text);

if (hei/2 <=193 && wei/2<=314) {

Image1->Canvas->Rectangle(314-wei/2,193-hei/2, 314+wei/2,193+hei/2);

} else ShowMessage("Выход за пределы экрана.");

break;

  1. Добавлены алгоритмы для рисования эллипса и n-угольника с проверкой выхода за пределы экрана, а также поля для ввода размеров и алгоритм для кнопки очистки экрана.

//Рисоавние n-угольника

kol = StrToInt(Str_B->Text);

wei = StrToInt(Str_A->Text);

if (wei/2 <=193) {

shag = (2*3.14 )/ kol;

points1 = new TPoint[kol];

for (int i = 0; i < kol; i++) {

x1 = 314+(wei/2)*cos(i*shag);

y1 = 193+(wei/2)*sin(i*shag);

points1[i] = Point(x1,y1);

}

Image1->Canvas->Polygon(points1,kol-1);

delete []points1;

}

else ShowMessage("Выход за пределы экрана.");

break;

//Рисование эллипса

wei = StrToInt(Str_A->Text); hei = StrToInt(Str_B->Text);

if (hei/2 <=193 && wei/2<=314) {

Image1->Canvas->Ellipse(314-wei/2,193-hei/2, 314+wei/2,193+hei/2);

} else ShowMessage("Выход за пределы экрана.");

break;

//Поля для ввода размеров фигур

case 4: /n-угольник

Str_A->Show(); Str_B->Show(); Str_C->Hide();

Lab_A->Show(); Lab_B->Show(); Lab_C->Hide();

Lab_A->Caption = "Радиус"; Lab_B->Caption = "Количество";

break;

case 5: //эллипс

Str_A->Show(); Str_B->Show(); Str_C->Hide();

Lab_A->Show(); Lab_B->Show(); Lab_C->Hide();

Lab_A->Caption = "Радиус А"; Lab_B->Caption = "Радиус В";

break;