МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Государственное образовательное учреждение
Высшего профессионального образования
«Кубанский государственный технологический университет»
(КубГТУ)
Армавирский механико-технологический институт
Кафедра внутризаводского электрооборудования и автоматики
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту
по дисциплине Объектно-ориентированное программирование
на тему "Проектирование и разработка абстрактных типовданных средствами языка программирования C++ Builder 6/0"
Выполнил студент группы
Руководитель (нормоконтроллер)
проекта доц. каф.
Защищен
Армавир 2010 г.
Содержание задания: Создать класс wind,характеризующий ветровой режим. Класс должен содержать два поля типа int для хранения значений направления (0˚
Объем работы 25-30 листов.
Рекомендуемая литература:
Архангельский А.Я. Программирование в C++Builder 6. — М.: ЗАО «Издательство БИНОМ». 2003.- 1152 с.: ил.
Иванова П.С. Объектно-ориентированное программирование: Учебникдля ВУЗов. — М.: Изд. МГТУ им Н.Э. Баумана. 2001. — 320с.: ил.
Шамис В.А. Borland C++Builder 6/0 для профессионалов. — СПб.: Питер, 2003. — 798 с.: ил.
Срок выполнения проекта с
Дата выдачи задания
Руководитель проекта доцент кафедры ВЭА ____________
Задание принял студент ___________________
Реферат
Курсовая работа: 27 с., 6 рис.,2 прил., 1 прогр.
КЛАСС WIND,ОБЪЕКТ, C++BUILDER 6.
Цель работы: закрепить навыкипроектирования и разработки классов; разработать абстрактный тип данных (класс),характеризующий ветровой режим, написать программу, демонстрирующую применениеразработанного класса.
Задачи:
спроектировать классwind, построить UML — диаграмму проектируемого класса,
для инициализации полей объектовиспользовать конструктор по умолчанию и конструктор с параметрами, организоватьвывод значений характеристик ветра в формате dd-V, а также преопределенную операцию слоения),
написать программу, позволяющуювыводить в виде таблицы массив переменных типа wind (каждаястрока — объект класса wind).,
В результате выполнения курсовойработы
закреплены навыки построенияклассов и использования механизмов инкапсуляции и полиморфизма,
написан программный модуль наязыке программирования C++ в среде программирования C++Buiilder 5/0 демонстрирующаяработу с классом wind, разработано руководство поприменению программы.
Содержание
Введение
1. Теоретические аспекты объектно-ориентированногопрограммирования
1.1 Основные понятия объектно-ориентированногопрограммирования
1.2 Описание класса
1.3 Описание объектов
1.4 Конструкторы
2. Предложения по решению поставленной задачи
2.1 Предметная область программирования. Ветровой режим
2.2 Атрибуты и методы класса. UML-диаграмма
2.3 Описание использованныхкомпонентов библиотеки VCL
2.4 Проектирование пользовательского интерфейса. Объектнаядекомпозиция
3. Описание ПО
3.1 Руководство пользователя
3.2 Результат тестирования программы
Заключение
Приложения
Введение
Сложность современногопрограммного обеспечения требует от разработчиков владения наиболееперспективными технологиями его создания. Одно из таких технологий на настоящиймомент является объектно-ориентированное программирование (ООП). Применение ООПпозволяет разрабатывать программное обеспечение повышенной сложности за счетулучшения его технологичности (лучших механизмов разделения данных, увеличенияповторяемости кодов, использование стандартизованных интерфейсов пользователя ит.д.). Вместо того, чтобы рассматривать программу как набор последовательновыполняемых инструкций, в ООП программа представляется в виде совокупностиобъектов, обладающих сходными свойствами и набором действий, которые можно сними производить.
Целью работы является закреплениенавыков проектирования и разработки классов; разработка абстрактного типаданных (класса), характеризующего ветровой режим; разработка программы,демонстрирующей применение разработанного класса.
В первой главе приводитсятеоретический материал.
Во второй главе рассмотренапредметная область программирования — характеристика ветрового режима иизложены этапы проектирования класса wind, описаныклассы визуальных компонентов стандартной библиотеки, использованные в ходепроектирования интерфейса пользователя.
В третьей главе приводитсяруководство пользователя.
Четвертая глава содержитрезультаты тестирования и работы программы.
Приложение содержит программныйкод и рисунки, с изображением окон написанной программы.
1. Теоретические аспекты объектно-ориентированногопрограммирования
1.1 Основные понятия объектно-ориентированногопрограммирования
Использование технологии ООПзаключается в разработке отдельных, не связанных между собой классов и использованииих как необходимых программисту базовых типов данных, отсутствующих в языке. Приэтом общая структура программы остается традиционной. («от функции кфункции»).
Объектно-ориентированноепрограммирование (ООП) — это совокупность понятий (класс, объект, инкапсуляция,полиморфизм, наследование), приемов их использования при проектированиипрограмм, а Си++ — инструмент этой технологии.
Строгое следование технологииООП предполагает, что любая функция в программе представляет собой метод дляобъекта некоторого класса. Это не означает, что нужно вводить в программу какиепопало классы ради того, чтобы написать необходимые для работы функции. Наоборот,класс должен формироваться в программе естественным образом, как только в нейвозникает необходимость описания новых физических предметов или абстрактныхпонятий (объектов программирования). С другой стороны, каждый новый шаг вразработке алгоритма также должен представлять собой разработку нового классана основе уже существующих. В конце концов вся программа в таком видепредставляет собой объект некоторого класса с единственным методом run (выполнить).Именно этот переход (а не понятия класса и объекта, как таковые) создаетпсихологический барьер перед программистом, осваивающим технологию ООП.
Программирование «от классак классу» включает в себя ряд новых понятий. Прежде всего, это — инкапсуляцияданных, то есть логическое связывание данных с конкретной операцией. Инкапсуляцияданных означает, что данные являются не глобальными — доступными всейпрограмме, а локальными — доступными только малой ее части. Инкапсуляцияавтоматически подразумевает защиту данных. Для этого в структуре class используется спецификатор раздела private,содержащий данные и методы, доступные только для самого класса. Если данные и методысодержатся в разделе public, они доступны извне класса.Раздел protected содержит данные и методы, доступные изкласса и любого его производного класса. Наличие последних позволяетговорить об иерархии классов, где есть классы — родители — шаблоны для созданияклассов — потомков. Объекты, полученные из описания класса, называют экземплярамиэтого класса.
Вторым по значимости понятиемявляется наследование. Новый, или производный класс может бытьопределен на основе уже имеющегося, или базового. При этом новый класссохраняет все свойства старого: данные объекта базового класса включаются вданные объекта производного, а методы базового класса могут быть вызваны дляобъекта производного класса, причем они будут выполняться над даннымивключенного в него объекта базового класса. Иначе говоря, новый класс наследуеткак данные старого класса, так и методы их обработки. Если объект наследуетсвои свойства от одного родителя, то говорят об одиночном наследовании. Еслиже объект наследует атрибуты от нескольких базовых классов, то говорят о множественномнаследовании. Простой пример наследования — определение структуры,отдельный член которой является ранее определенной структурой.
Третьим по значимости понятиемявляется полиморфизм. Он основывается на возможности включения в данныеобъекта также и информации о методах их обработки (в виде указателей на функции).Принципиально важно, что такой объект становится «самодостаточным». Будучидоступным в некоторой точке программы, даже при отсутствии полной информации оего типе, он всегда может корректно вызвать свойственные ему методы. Полиморфнойназывается функция, независимо определенная в каждом из группы производныхклассов и имеющая в них общее имя. Полиморфная функция обладает тем свойством,что при отсутствии полной информации о том, объект какого из производныхклассов в данный момент обрабатывается, она тем не менее корректно вызывается втом виде, к каком она была определена для данного конкретного класса. Практическийсмысл полиморфизма заключается в том, что он позволяет посылать общее сообщениео сборе данных любому классу, причем и родительский класс, и классы-потомкиответят на сообщение соответствующим образом, поскольку производные классысодержат дополнительную информацию.
1.2 Описание класса
Класс является абстрактным типомданных, определяемым пользователем, и представляет собой модель реальногообъекта в виде данных и функций для работы с ними.
Данные класса называют полями, афункции класса — методами. Поля и методы называют элементами класса. Описаниекласса в первом приближении выглядит так:
сlass
{ [private:]
// описание скрытых элементов
Public:
// описание доступных элементов
}; // описание заканчиваетсяточкой с запятой
Спецификаторы доступа private и public управляют видимостьюэлементов класса. Элементы, описанные после служебного слова private,видимы только внутри класса. Этот вид доступа принят в классе по умолчанию. Интерфейскласса описывается после спецификатора public. Действиелюбого спецификатора распространяется до следующего спецификатора или до концакласса. Можно задавать несколько секций private и public, порядок их следования значения не имеет.
Поля класса могут:
иметь любой тип, кроме типаэтого же класса (но могут быть указателями или ссылками на этот класс);
быть описаны с модификатором const, при этом они инициализируются только один раз и немогут изменяться;
быть описаны с модификатором static.
Классы могут быть глобальными (объявленнымивне любого блока) и локальными (объявленные внутри блока, например функции илидругого класса).
Ниже приведены некоторыеособенности локального класса:
внутри локального класса можноиспользовать типы, статические (static) и внешние (extern) переменные, внешние функции и элементы перечисленийиз области, в которой он описан; запрещается использовать автоматическиепеременные из этой области;
локальный класс не может иметьстатических элементов;
методы этого класса могут бытьописаны только внутри класса;
если один класс вложен в другойкласс, они не имеют каких либо особых прав доступа к элементам друг друга имогут обращаться к ним только по общим правилам.
В качестве примера создадимкласс, моделирующий комплексные числа, записываемые в виде а + b i, гдеа-действительная часть, а b-мнимая.
class Complex// комплексные числа
{
private: int a;
int ib;
public:
void setcomplex(int x, int y) // установка значений поля
{a = x; ib=y; }
void getcomplex() // ввод полей с клавиатуры
{cout>а;
cout>ib;
}
int get_a () {returna; }
int get_ib () {returnib; }
void show () const
{ cout
};
В этом классе два скрытых поля a и ib, получить значения которых извне можно с помощью методов get_a() и get_ib ().
1.3 Описание объектов
Конкретные переменные типа«класс» называются экземплярами класса, или объектами. Время жизни ивидимость объектов зависит от вида и места их описания и подчиняется общимправилам C++.
Complex z1; // объект класса Complex с параметрами по умолчанию
Complex z2 (12,14); // объект с явнойинициализацией
Complex array_of_complex [100]; // массив объектов с параметрами по умолчанию
Complex*z = new Complex (10); // динамический объект
Complex&z3 = z1; // ссылка наобъект
При создании каждого объектавыделяется память, достаточная для хранения всех его полей, и автоматическивызывается конструктор, выполняющий их инициализацию. Методы класса нетиражируются. При выходе объекта из области действия он уничтожается, при этомавтоматически вызывается деструктор.
Доступ к элементам объектааналогичен доступу к полям структуры. Для этого используется операция точка () приобращении к элементу через имя объекта и операция — > при обращении черезуказатель, например:
int n = z1. get_a();
coutget_ib();
Обратиться таким образом можнотолько к элементам со спецификатором public. Получитьили изменит значения элементов со спецификатором privateможно только через обращение к соответствующим методам.
Можно создать константныйобъект, значения полей которого изменять запрещается. К нему должны применятьсятолько константные методы:
Class Complex
{
…
int get_a () const {return a; }
…
};
…
const Complex z(0,0); // константный объект
cout
Константный метод:
Объявляется с ключевым словом const после списка параметров;
Не может изменять значений полейкласса;
Может вызывать толькоконстантные методы;
Может вызываться для любых (нетолько константных) объектов.
1.4 Конструкторы
Конструктор предназначен дляинициализации объекта и вызывается автоматически при его создании. Нижеперечислены основные свойства конструкторов.
Конструктор не возвращаетзначение, даже типа void. Нельзя получить указатель наконструктор.
Класс может иметь несколькоконструкторов с разными параметрами для разных видов инициализации (при этомиспользуется механизм перегрузки).
Конструктор, вызываемый безпараметров, называется конструктором по умолчанию.
Параметры конструктора могутиметь любой тип, кроме этого же класса. Можно задавать значения параметров поумолчанию. Их может содержать только один из конструкторов.
Если программист не указал ниодного конструктора, компилятор создает его автоматически. Такой конструкторвызывает конструкторы по умолчанию для полей класса и конструкторы по умолчаниюбазовых классов. В случае, когда класс содержит константы или ссылки, припопытке создания объекта класса будет выдана ошибка, поскольку их необходимоинициализировать конкретными значениями, а конструктор по умолчанию этогоделать не умеет.
Конструкторы не наследуются.
Конструкторы нельзя описывать смодификаторами const, virtual иstatic.
Конструкторы глобальных объектоввызываются до вызова функции main.
Локальные объекты создаются, кактолько становится активной область их действия.
Конструктор запускается и присоздании временного объекта.
Конструктор вызывается, если впрограмме встретилась какая-либо из синтаксических конструкций:
имя класса имя_объекта [ (списокпараметров)] ;
// список параметров не долженбыть пустым
имя_класса (список параметров);
// создается объект без имени (списокможет быть пустым)
имя класса имя_объекта =выражение;
// создается объект без имени икопируется
Примеры:
Complex z1 (10,11),z2;
Complex z =Complex (100, 200);
В первом операторе создаются дваобъекта. Значения не указанных параметров устанавливаются по умолчанию.
Во втором операторе создаетсябезымянный объект, выделяется память под объект z, вкоторую копируется безымянный объект.
В качестве примера класса с несколькимиконструкторами усовершенствуем класс Complex.
class Complex
{
private: int a;
int ib;
public: Complex(): a (0), ib (0) // конструктор без аргументов
{}
Complex (intza, int zib): a (za), ib (zib) // конструктор с двумя аргументами
{}
void show () const// вывод комплексного числа на экран
{ cout
2. Предложения по решению поставленной задачи
2.1 Предметная область программирования. Ветровойрежим
Основными характеристиками,описывающими ветровой режим являются скорость (V км/час)и направление (0˚
Форма следующая: dd-V.
Например, скорость ветра равна50 км/ч и направление 120˚ должны быть записаны как 120 град. — 50 км/ч.
2.2 Атрибуты и методы класса. UML-диаграмма
Согласно условию задачи,необходимо создать класс wind, содержащий два поля типаint (направление и скорость ветра соответственно),константные методы вывода значений характеристик ветра в формате (dd-V), а также каждой характеристикив отдельности и метод, позволяющий вычислить значения составляющих скорости. Инициализацияобъекта должна осуществляться конструкторами: по умолчанию (присваивает полямнулевые значения), с двумя параметрами.
Ключевым принципом ООП является инкапсуляцияи возможность сокрытия данных. Т.е. данные заключены внутри класса и защищеныот несанкционированного доступа. Статус доступа определяется ключевыми словами:public (общедоступный), private(закрытый), protected — (защищенный). По умолчанию элементыкласса имеют закрытый статус доступа.
Если методы класса определенывнутри класса, то они являются встраиваемыми. Методы класса могут быть лишьобъявлены внутри класса, а определены вне его.
На рисунке 2 представлена UML-диаграмма проектируемого класса wind.
/> />
Рисунок 1 — UML-диаграмма класса wind
Чтобы приступить к написаниюкласса необходимо ознакомиться с окном редактора кода C++Builder. Редактор кода в C++ Builder при просмотре программного модуля имеет три страницы,закладки которых вы можете видеть в нижней части окна. Две из них отображаюткоды файла реализации (kursOOP1. cpp)и заголовочного файла (kursOOP1. h).Страница Diagram позволяет строить диаграммы,иллюстрирующие взаимоотношения компонентов в приложении. В заголовке окнаредактора кода отображается имя файла реализауции того модуля, с текстомкоторого вы работаете. Закладки в верхней части окна позволяют переключаться содного модуля на другой, если в вашем проекте несколько модулей. Если вкакой-то из открытых модулей вам больше не нужен, вы можете закрыть егостраницы, выбрав в контекстном меню команду ClosePage. Выможете также открыть дополнительное окно редактора кода и одновременно работатьс несколькими модулями или с разными фрагментами одного модуля. В нижней частиокна вы можете увидеть типичную для текстовых редакторов строку состояния. Всамой левой ее части находится индикатор строки и колонки. Правее расположениндикатор модификации, который словом Modifiedпоказывает, что код, который вы видите в окне, изменен и не совпадает с тем,который хранится на диске. В окно редактора также встроена контекстная справка,чтобы ее получить, достаточно установить курсор на интересующее вас слово инажать клавишу F1.
Рассмотрим подробнее компонентыразрабатываемого класса.
Поля:
Поле ddтипа int. Осуществляет хранение значений направления (0˚
Поле Vтипа int. Содержит значение модуля скорости ветра (V км/час).
Данные поля имеют модификатордоступа private, следовательно, являются скрытыми.
Конструкторы и методы:
Конструктор wind(). Осуществляет инициализацию полей данного класса нулями.
Конструкторwind (int dd1, int V1). Инициализирует поля класса двумя параметрамисоответственно.
Метод ShowWind.Является функцией типа String, возвращающей строку,содержащую значения полей dd и Vсоответственно, имеющую вид: dd град. — V км/ч" (значения полей dd и V предварительно переводятся в типString).
Метод ShowDirect.Является функцией типа int, возвращающей значение поля dd (направление).
Метод ShowSpeed(). Является функцией типа int, возвращающей значениеполя V (скорость).
Метод Components.Является функцией типа void. Осуществляет вычислениесоставляющих скорости u и v. Содержитпараметры: w (тип wind) — переменная, по значениям полей которой будет осуществляться вычислениехарактеристик, v (ссылка на тип float)- возвращает значение составляющей v, u(ссылка на тип float) — возвращает значениесоставляющей u. Вышеперечисленные функции имеютмодификатор доступа public, т.е. являютсяобщедоступными.
2.3 Описание использованных компонентов библиотеки VCL
Компонент StringGrid.
Представляет собой таблицу,содержащую строки. Данные таблицы могут быть только для чтения илиредактируемыми. Таблица может иметь полосы прокрутки, причем заданное числопервых строк и столбцов может быть зафиксированным и не прокручиваться. Такимобразом, можно задать заголовки столбцов и строк, постоянно присутствующие вокне компонента. Каждой ячейке таблицы может быть поставлен в соответствиенекоторый объект.
Компонент StringGridпредназначен в первую очередь для отображения таблиц текстовой информации.
Основные свойства:
System::AnsiString Cells[int ACol][int ARow]- строка, содержащаяся в ячейке с индексами столбца и строки AColи ARow.
Classes::TString*Cols [int Index] — список строк и связанных сними объектов, содержащихся в столбце с индексом Index.
Classes::TStrings*Rows [int Index] — список строк и связанных с ними объектов, содержащихся в строке с индексом Index.
System::TObject*Objects [int ACol] [int ARow] — объект, связанный со строкой, содержащейся в ячейке с индексами столбца истроки ACol и ARow.
ColCount — количество колоноктаблицы.
RowCount — количество строктаблицы.
FixedCols — количествозафиксированных слева колонок таблицы. Зафиксированные колонки выделяютсяцветом и при горизонтальной прокрутке таблицы остаются на месте.
FixedRows — количествозафиксированных сверху строк таблицы. Зафиксированные строки выделяются цветоми при вертикальной прокрутке таблицы остаются на месте.
Options. goEditing — признакдопустимости редактирования содержимого ячеек таблицы. True — редактированиеразрешено, False — запрещено.
Options. goTab — оазрешает (True)или запрещает (False) использование клавиши для перемещения курсорав следующую ячейку таблицы.
Options. GoAlways-ShowEditor — признакнахождения компонента в режиме редактирования. Если значение свойства False, тодля того, чтобы в ячейке появился курсор, надо начать набирать текст, нажатьклавишу или сделать щелчок мышью.
DefaultColWidth — ширину колоноктаблицы.
DefaultRowHeight — высоту строктаблицы.
GridLineWidth — ширину линий,ограничивающих ячейки таблицы.
Left — расстояние от левойграницы поля таблицы до левой границы форм.
Top — расстояние от верхнейграницы поля таблицы до верхней границы формы.
Height — высоту поля таблицы.
Width — ширину поля таблицы.
Font — шрифт, используемый дляотображения содержимого ячеек таблиц.
ParentFont — признакнаследования характеристик шрифта формы.
Все вышеперечисленные свойствадоступны во время выполнения. Задавать тексты можно программно или по отдельнымячейкам, или сразу по столбцам и строкам с помощью методов класса TString.
Компонент Editпроизводит отображение, ввод и редактирование однострочных текстов. Вводимый ивыводимый текст содержится в свойстве Text типа AnsiString. Это свойство можно устанавливать в процессепроектирования или задавать программно.
Компонент LabelОтображение текста, не изменяемого пользователем. Никакого оформления, кромецвета текста. Это свойство можно устанавливать в процессе проектирования илизадавать программно. Основное свойство — Caption.
2.4 Проектирование пользовательского интерфейса. Объектнаядекомпозиция
Для создания Windows-приложенияв среде C++ Builder 6.0необходимо зайти в меню File, выбрать сроку New, в появившимся списке выбрать графу Application.После совершения данных действий перед пользователем появляется Windows-форма, на которую будут помещаться прочие компоненты.
В верхней части экрана можноувидеть панель, на которой расположены компоненты библиотеки VCL.Щелкнем по странице Standart, выберем там компонент GroupBox. Данный компонент является частью дизайна Windows-формы. В нижнем левом углу экрана можно увидетьинспектор объектов. Инспектор объектов обеспечивает простой и удобный интерфейсдля изменения свойств объектов C++ Builderи управления событиями, на которые реагирует объект. Окно инспектора объектовимеет две страницы. Выше их имеется выпадающий список всех компонентов,размещенных на форме. В нем можно выбрать тот компонент, свойства и событиякоторого вас интересуют. Страница свойств (Properties) инспектораобъектов показывает свойства того объекта, который в данный момент выделен вами.Выделим объект GroupBox1, в появившимся перечне свойствданного объекта выберем свойство Caption (надпись вверхнем правом углу объекта), присвоим ему необходимое значение.
Далее поместим на форму объект Button (кнопка), в свойстве Captionнапишем «Заполнить таблицу».
Выберем объект StringGrid.В его свойстве ColCount (количество столбцов) укажемзначение 2, в свойстве RowCount (количество строк) укажем10, а свойству FixedRows (фиксированные строки) присвоимзначение 2. Далее поместим на форму по три объекта Editи Label.
На рисунке 2 показана схемаформы Form1.
/>
Рисунок 2 — схема формы Form1
Страница событий (Events) составляет вторую часть инспектора объектов. На нейуказаны все события, на которые может реагировать выбранный объект. Еслинеобходимо выполнить какие-то действия в момент создания формы, требуетсявыделить событие OnCreate. Рядом с именем этого событияоткроется окно с выпадающим списком. Если вы уже написали в своем приложениикакие-то обработчики событий и хотите при при данном событии использовать одиниз них, вы можете выбрать необходимый обработчик из выпадающего списка. Если жевам надо написать новый обработчик, то сделайте двойной щелчок на пустом окнесписка. Вы попадете в окно редактора кода, в котором увидите текст:
void __fastcallTForm1:: FormCreate (TObject *Sender)
{ }
Курсор будет расположен в пустойстроке между строками с открывающейся и закрывающимися фигурными скобками. Увиденныйвами код — это заготовка обработчика события, которую автоматически сделал C++ Builder. Вам остается только впромежутке между скобками “{“ и “}” написать необходимые операторы.
Рассмотрим обработчики событий,представленные в программе:
FormCreate.Событие OnCreate означает, что указанные действия будутсовершаться при создании формы Form1. Совершаемые приэтом действия: при помощи знака косвенной адресации обратщаемся к свойству Cells ячеек первого и второго столбцов первой строки объекта stringGrid1 (заголовки столбцов) и присваиваем им значения«Направление в град.» и «Скорость», свойству RowCount присваиваем значение константы n=10,при помощи двух циклов for обращаемся к каждой ячейке иудаляем из нее информацию.
Button1Click. Событие OnClick подразумеваетщелчок мышью по данному объекту. Совершаемые при этом действия: в теле цикла for совершаем заполнение массива arrayэлементами типа wind (полям i-тогоэлемента присваиваем при помощи конструктора случайные значения), записываемзначения полей данного элемента в ячейки таблицы StringGrid1(направление в 0-ой столбец при помощи метода ShowDirect,скорость в 1-ый при помощи метода ShowSpeed).
StringGrid1SelectCell. Событие OnSelectCellподразумевает щелчок мышью по ячейке с номером столбца — ACol,строки — ARow. Совершаемые при этом действия: строке Edit1. Text присваиваем значениеэлемента под номером ARow-1 при помощи метода ShowWind (возвращает значение переменной типа wind в виде строки типа String),вычисляем при помощи метода Components значениясоставляющих скорости, выводим их значения (переведенные в тип String при помощи функции FloatToString)на экран с помощью объектов Edit2 и Edit3.
Вышеуказанная схема показываеталгоритм взаимодействия визуальных компонентов формы при условии совершенияпользователем определенных действий. При щелчке мышью по кнопке «Заполнитьмассив» происходит ввод значений элементов массива arrayв ячейки таблицы StringGrit1. При выделении какой-либоячейки данной таблицы производится вывод значения соответствующего элементамассива на экран при помощи объекта Edit1 и значенийсоставляющих скорости при помощи объектов Edit2 и Edit3.
3. Описание ПО
3.1 Руководство пользователя
Данная программа предназначенадля демонстрации использования класса wind,характеризующего ветровой режим.
Выходные данные — массив array, значения составляющих v и u.
Системные требования: Pentium 300, 128 Мб RAM.
Запустите файл ProjectOOP.exe. Перед пользователем появится окно программы (см. рисунок1 приложения 2), состоящее из таблицы, кнопки «Заполнить таблицу» итрех строк — «Характеристики ветра», «Составляющая скорости v», «Составляющая скорости u».Чтобы заполнить таблицу случайными значениями нажмите кнопку «Заполнитьтаблицу». Таблица выведет на экран значение угла, характеризующегонаправление ветра (первый столбец таблицы) и скорость ветра (второй столбец) — значения элементов массива переменных типа wind (см. рисунок2 приложения 2). При выделении какой-либо ячейки таблицы в строке «Характеристикиветра» будет выведено значение характеристик ветра в виде dd-V, строки «Составляющаяскорости v» и «Составляющая скорости u» выведут соответствующие значения составляющихскорости для данного элемента массива (см. рисунок 3 приложения 2).
3.2 Результат тестирования программы
После запуска файла ProjectOOP. exe на экране появилосьокно программы (см. рисунок 1 приложения 2). После нажатия кнопки «Заполнитьмассив» при помощи электронной таблицы StringGridбыли выведены значения элементов массива: поле dd (направлениеветра) — в левой колонке, поле V (скорость) — в правой(см. рисунок 2 приложения 2). При выделении какой-либо ячейки таблицы в строке«Характеристики ветра» выводилось значение соответствующей пременнойв виде dd-V. В строках «Составляющаяскорости u» и «Составляющая скорости v» выводились соответствующие значения составляющихскорости (см. рисунок 3 приложения 2). Программа выводит значения элементов массивапеременных класса wind на экран, вычисляет значениясоставляющих скорости для каждого элемента, следовательно, она работаетправильно.
Заключение
Проектирование и разработкаклассов является основой построения сложных программных комплексов. Навыки,приобретенные мною в ходе выполнения курсовой работы помогут в дальнейшем привыполнении курсовых и дипломного проекта.
В результате работы полученыследующие результаты:
спроектирован класс wind, характеризующий ветровой режим,
построена UML — диаграмма класса,
написан программный модуль наязыке программирования C++ в среде программирования C++Buiilder 6/0 демонстрирующийработу с классом wind,
разработано руководство поприменению программы.
Приложения
Приложение 1
Текст программы
Код заголовочного файла (kursOOP1. h):
// ---------------------------------------------------------------------------
#ifndefkursOOP1H
#definekursOOP1H
// ---------------------------------------------------------------------------
#include
#include
#include
#include
#include
// ---------------------------------------------------------------------------
class TForm1: publicTForm
{
__published: //IDE-managed Components
TStringGrid*StringGrid1;
TGroupBox*GroupBox1;
TButton*Button1;
TEdit *Edit1;
TLabel *Label1;
TEdit *Edit2;
TLabel *Label2;
TEdit *Edit3;
TLabel *Label3;
void __fastcallFormCreate (TObject *Sender);
void __fastcallButton1Click (TObject *Sender);
void __fastcallStringGrid1SelectCell (TObject *Sender, int ACol,
int ARow, bool&CanSelect);
private: // Userdeclarations
public: // Userdeclarations
__fastcallTForm1 (TComponent* Owner);
};
// ---------------------------------------------------------------------------
extern PACKAGETForm1 *Form1;
// ---------------------------------------------------------------------------
#endif
Кодфайлареализации(kursOOP1. cpp):
// ---------------------------------------------------------------------------
#include
#pragma hdrstop
#include «kursOOP1.h»
#include
#include
#include
#include
// ---------------------------------------------------------------------------
#pragma package(smart_init)
#pragmaresource "*. dfm"
class wind
{
private: int dd;
int V;
public:
wind (): dd (0),V(0) {};
wind (int dd1,int V1): dd (dd1),V (V1) {};
String ShowWind() const
{
return IntToStr(dd) +" град. — "+IntToStr (V) +" км/ч";
}
int ShowDirect() const
{return dd;
}
int ShowSpeed ()const
{return V;
}
void Components(wind w,float&v,float&u) const
{v=V*sin (dd);
u=V*cos (dd); }
};
TForm1 *Form1;
const n=10;
wind array [n]; float v,u;
// ---------------------------------------------------------------------------
__fastcallTForm1:: TForm1 (TComponent* Owner)
: TForm (Owner)
{
}
// ---------------------------------------------------------------------------
void __fastcallTForm1:: FormCreate (TObject *Sender)
{
StringGrid1->Cells [0] [0] =«Направлениев град. »;
StringGrid1->Cells[1] [0] =«Скорость»;
StringGrid1->RowCount=n;
for (int j=0; j
{for (int i=1; i
{StringGrid1->Cells[j] [i] =""; }}
}
// ---------------------------------------------------------------------------
void __fastcallTForm1:: Button1Click (TObject *Sender)
{
for (int i=0; i
{array [i] =wind(random (360),random (250));
StringGrid1->Cells[0] [i+1] =array [i]. ShowDirect ();
StringGrid1->Cells[1] [i+1] =array [i]. ShowSpeed (); }
}
// ---------------------------------------------------------------------------
void __fastcallTForm1:: StringGrid1SelectCell (TObject *Sender, int ACol,
int ARow, bool&CanSelect)
{
Edit1->Text=array[ARow-1]. ShowWind ();
array [ARow-1].components(array [ARow-1],v,u);
Edit2->Text=FloatToStr(v);
Edit3->Text=FloatToStr(u);
}
// ---------------------------------------------------------------------------
Приложение 2
Результаты тестирования
/>
Рис.1 — окно программы
/>
Рис.2 — вывод значений элементовмассива на экран при помощи таблицы StringGrid1
/>
Рис.3 — вывод значенийхарактеристик ветра в виде dd-V и составляющих скорости