
Министерство образования республики беларусь
учреждение образования
«Белорусский Государственный Университет Транспорта»
Кафедра «Микропроцессорная техника и информационно-управляющие системы»
Контрольная работа
по дисциплине
«Программно-математическое обеспечение информационно-управляющих систем»
на тему
«Разработка объектно-ориентированного программного обеспечения для работы с графическими объектами»
Выполнил: Проверил:
студент группы АТ-42 ассистент
Колодей В.А. Жидкова Е.А
Гомель 2013
Задание
Содержание
Введение 3
Описание разработанной программы 4
Результаты работы программы 9
Листинг программы 11
Заключение 15
Список литературы 16
Введение
В данной контрольной работе разрабатывается объектно-ориентированная программа для работы с графическими объектами. Программа использует свойство полиморфизма.
Слово «полиморфизм» (образованное из слов «поли» - много, «морф» - преобразование и «изм» - процесс) описывает возможность языка программирования обращаться со множеством производных классов так, как если бы они были все одного класса – полиморфизм позволяет единообразно обрабатывать данные разных типов. Полиморфизм предполагает использование единого имени (идентификатора) при обращении к объектам нескольких разных классов, при условии, что все они являются подклассами (наследниками) одного общего надкласса (базового класса). В языке программирования С++ полиморфизм реализуется с помощью виртуальных функций. Виртуальная функция определяется в базовом классе словом virtual. Такая виртуальная функция затем замещается в каждом производном классе. В отличие от обычного замещения функции в классе потомка, при обращении к виртуальной функции не нужно хранить указатель на производный объект, достаточно иметь указатель на объект базового класса.
Описание разработанной программы
Создание программы включает в себя следующие этапы:
Рис.1
В итоге мы имеем следующие файлы:
Таблица 1
Файл |
Описание файла |
Project1.bpr |
Файл проекта |
Project1.cpp |
Исходный код |
Unit1.cpp |
|
Unit1.h |
Заголовочный файл |
Unit1.dfm |
Файл установок формы, окна проекта |
Project1.res |
Файл ресурсов, автоматически генерируемый средой программирования, содержит иконку программы. |
Project1.obj |
Объектный код |
Unit1.obj |
|
Project1.tds |
Файл, предназначенный для отладки программы. |
Project1.exe |
Исполняемый код |
strelka.bmp |
Графический файл, рисунок стрелки |
luna.bmp |
Графический файл, рисунок месяца |
В программе были использованы следующие объекты стандартной библиотеки:
Таблица 2
Р
|
Объект |
Принадлежность классу |
Описание |
Form1 |
TForm |
Форма |
|
Panel1 |
TPanel |
Панель с кнопками |
|
Button1 |
TButton |
Кнопка 1 – Смайл |
|
Button2 |
TButton |
Кнопка 2 – Стрелка |
|
Button3 |
TButton |
Кнопка 3 - Месяц |
|
Panel2 |
TPanel |
Панель с объектами Image |
|
Image1 |
TImage |
Поле для рисования и передвижения картинок |
|
Image2 |
TImage |
Поле для вставки картинки из файла |
На рисунке 2 показано дерево объектов программы. Panel1 и Panel2 являются компонентами Form. Button1, Button2, Button3 являются компонентами Panel1. Image1, Image2 являются компонентами Panel2.
В разрабатываемой программе используются свойства и методы, перечисленные в таблицах 3 и 4.
Таблица 3
Объект |
Свойства |
Описание |
Присвоенные значения |
Form |
BorderIcons |
Определяет, какие из кнопок системного меню окна нужно отображать. |
[biSystemMenu,biMinimize] – свернуть и закрыть |
Caption |
Заголовок окна формы |
Работа с графическими объектами |
|
Panel1 |
Align |
Определяет способ выравнивания панели на форме |
alRight - справа |
Caption |
Заголовок панели |
Без заголовка |
|
Panel2 |
Align |
Определяет способ выравнивания панели на форме |
alClient- занять всё оставшееся от Panel1 место |
Caption |
Заголовок панели |
Без заголовка |
|
Button1 |
Caption |
Надпись на кнопке |
Смайл |
Button2 |
Caption |
Надпись на кнопке |
Стрелка |
Button3 |
Caption |
Надпись на кнопке |
Месяц |
Image1 |
Align |
Определяет способ выравнивания поля для рисования на панели 1 |
alClient- поле для рисования занимает всю Panel1 |
Image2 |
Left |
Позиция слева от края окна – координата Х |
При движении мышью рисунков Стрелка и Месяц изменяются координаты |
Top |
Позиция справа от края окна – координата Y |
При движении мышью рисунков Стрелка и Месяц изменяются координаты |
|
Visible |
Визуальность, видимость |
Если рисуют Смайл, то Image2 невидим: Visible=false |
|
Picture |
Рисунок |
С помощью этого свойства объекту Image можно назначить графический файл |
Таблица 4
Объект |
Методы, отрабатывающие по событиям |
Описание |
Выполняемая функция |
Button1 |
Button1Click |
Отрабатывает при нажатии на кнопку 1 |
Запускает функцию очистки поля для рисования от предыдущего рисунка, а затем – функцию рисования картинки Смайла |
Button2 |
Button2Click |
Отрабатывает при нажатии на кнопку 2 |
Запускает функцию очистки поля для рисования от предыдущего рисунка, а затем – функцию рисования (вставки из графического файла) картинки Стрелка |
Button3 |
Button3Click |
Отрабатывает при нажатии на кнопку 3 |
Запускает функцию очистки поля для рисования от предыдущего рисунка, а затем – функцию рисования (вставки из графического файла) картинки Месяца |
Image1 |
Image1Click |
Отрабатывает при нажатии мышью на Image1 |
Если рисунок двигался, то данный метод его останавливает. Если рисунок стоял, то данный метод запустит движение рисунка. Графический объект перерисуется в том месте, куда указали мышью. |
Image1MouseMove |
Отрабатывает при движении мышью по полю для рисования Image1 |
Если предварительно была нажата кнопка мыши (запущено движение), то метод перерисует графический объект с новыми координатами |
Кроме стандартных классов используются пользовательские классы TRis, TStrela и TLuna. Класс TRis является базовым по отношению к классам TStrela и TLuna. Производные классы TStrela и TLuna наследуют общую процедуру Clear базоваго класса TRis, которая выполняет очистку поля для рисования от предыдущего рисунка. Кроме того, базовый класс содержит функцию Risuet, которая переопределяется, замещается в наследуемых классах TStrela и TLuna. Так в каждом из классов функция Risuet рисует необходимый каждому классу свой рисунок: в классе TRis функция Risuet рисует смайл, в классе TStrela функция Risuet вставляет из графического файла изображение стрелки в Image2, в классе TLuna функция Risuet вставляет из графического файла изображение месяца в Image2.
Далее воспользуемся полиморфизмом. Функция Risuet базового класса TRis является виртуальной. Она замещена виртуальными функциями Risuet в классах TStrela и TLuna. Для работы с классами создаётся один указатель – ris – указатель на базовый класс. Функции Risuet вызываются через указатель на базовый класс, но проявляют свойство полиморфизма и отрабатывают, рисуют каждый раз необходимую картинку.
Для отображения на экране смайла использовались следующие функции рисования:
Таблица 5
Функция |
Описание |
Rectangle(x1,y1,x2,y2); |
Рисует прямоугольник с острыми углами и заданной диагональю |
Ellipse(x1,y1,x2,y2); |
Рисует эллипс, вписанный в прямоугольник с заданной диагональю (x1,y1,x2,y2) |
Arc(x1,y1,x2,y2,X3,Y3,X4,Y4); |
Рисует дугу эллипса, вписанного в прямоугольник с заданной диагональю (x1,y1,x2,y2) и ограниченную радиусами (центр, Х3,Y3), (центр, Х4,Y4) |
При рисовании каждая линия проводится заданным цветом карандаша – Pen. При этом карандашу можно задать толщину линии – Width. Каждая замкнутая область заливается заданным цветом кисти – Brush.