9373_8_7
.pdfМИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра информационных систем
ОТЧЕТ
по практической работе №7
по дисциплине «Объектно-ориентированное программирование»
Студент гр. 9373 |
|
Заболотников М.Е. |
|
Студентка гр. 9373 |
|
Петрова С.В. |
|
Преподаватель |
|
|
Егоров С.С. |
Санкт-Петербург
2022
Постановка задачи.
Разработать GUI приложение, выполняющее функцию визуализации графа
состояний.
Выполнение работы.
Для выполнения работы были внесены некоторые изменения в содержание и структуры некоторых классов, а также созданы новые.
Класс QWindow:
1.StateGraph sgraph – атрибут, хранящий в себе информацию о графе состояний (область видимости – private);
2.Добавились поле ввода данных и кнопка: QLabel *valu_state, QLineEdit *state QPushButton *ok_state и QLabel *output. Эти атрибуты необходимы для контроля изменения активной вершины графа (область видимости – private).
3.void mousPressEvent() – обработчик сигнала нажатия клавиши компьютерной мыши (область видимости – protected);
4.void set_state() – метод изменения состояния и установления нового
(область видимости – public).
Добавился новый класс StateGraph. Данный класс является производным от базового класса Graph, то есть наследует все его свойства.
1.Атрибут int active – хранит номер активной в данный момент времени вершины графа (область видимости – private);
2.StateGraph(QString, int, int) – конструктор класса, который создаёт объект по заданным из файла данным о графе (область видимости – public).
3.StateGraph() – конструктор класса, который создаёт "пустой" объект, то есть базовый граф состояний, состоящий из одной вершины (область видимости – public).
4.void draw() – метод, который будет отрисовывать граф в окне QWindow
(область видимости – public).
2
5.void newEvent_mouse() – метод-обработчик сигнала нажатия кнопки компьютерной мыши – правой или левой – который передаст информацию о том, какая именно кнопка была нажата. Через данный метод путём нажатия кнопки мыши меняется стартовая активная вершина (по умолчанию, изначально это вершина №1) (идя по часовой стрелке или против) (область видимости – public).
6.bool newEvent_state() – метод, который обрабатывает событие,
связанное с возможностью сделать выбранную пользователем i-ю
вершину активной при условии активности в данный момент j-ой вершины (область видимости – public).
7.int count_v() – данный метод возвращает количество вершин графа
состояний (область видимости – public).
Ниже представлена диаграмма классов данной программы:
Рисунок 1 – Диаграмма классов
3
Тесты работы программы.
Для проверки корректности работы программы было проведено несколько тестов. Для начала стоит определить, в каком виде должна формироваться матрица состояний для графа состояний.
Матрица состояний печатается в текстовом файле с использованием верхних клавиш с цифрами от "0" до "9", клавиш "Enter" и "Tab". Сама матрица состоит из n строк (n – количество вершин) и n столбцов (событий тоже n: каждое событие обозначает переход в -ую вершину). Элементом матрицы является номер -ой вершины, в которую можно попасть из -ой. Если из -ой вершины нельзя попасть в -ю, то данный элемент равен нулю.
Итак, рассмотрим матрицу для графа состояний на десять вершин:
Проверим правильность построения графа:
4
Как видно из рисунка, граф построен верно. Активная вершина в нём помечена бирюзовым кружком. Вершины, имеющие петли, помечаются зелёным кружком.
Теперь, используя правую и левую кнопку мыши, мы можем выбирать стартовую активную вершину, двигаясь против часовой стрелки или по часовой стрелке соответственно:
Как видно из рисунка, выбор стартовой активной вершины осуществлён и работает успешно.
Теперь опробуем из 10-й вершины перейти в 1-ю, введя в поле State is
число 1 и нажав кнопку "Ввести состояние":
5
Программа выдаёт сообщение о том, что у данной вершины нет введённого
состояния. Это означает, что не существует событие перехода из вершины №10
ввершину №1. Это соответствует элементу 10,1 = 0.
Авот перейти из вершины №10 в вершину №3 мы можем. Для этого введём
вполе State is число 3 и нажмём кнопку "Ввести состояние":
Далее посмотрим, как работает проверка на ошибочность исходных данных в файле. Попробуем считать такой граф:
В нём всё хорошо, кроме того, что 11 = 2 . Посмотрим, что выдаёт программа:
6
Программа не приняла этот граф. Проверка пройдена. Теперь проведём проверку на наличие посторонних символов, помимо цифр:
Здесь стоит буква у самого первого элемента. Реакция программы:
Итак, программа прошла проверку на ошибочные исходные данные.
7
Выводы.
В ходе работы было разработано GUI приложение, которое выполняет функцию визуализации графа состояний, задаваемого матрицей состояний. Для полноценной работы программы был создан класс-наследник и переработан принцип формирования графа, а также его отрисовки и отрисовки активных вершин. Проведены тесты работы программы и выяснилось, что программа работает корректно.
8