Файл: Основные понятия объектно-ориентированного программирования (Этапы объектно-ориентированного).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 477

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Рисунок 37 – Диаграмма класса elevator

Класс MyForm является основным в программе. Листинг класса находится в приложении Г. В этом классе содержится объявление и инициализация компонентов формы, подключение заголовочных файлов с классами man, button, elevator. При нажатии на кнопку «Запуск» запускается отдельный поток для выполнения основной функции. В функции main происходит инициализация нужных классов, а также происходит выполнение основного кода программы, процесс которого можно увидеть на форме программы. В программе используются делегаты для взаимодействия компонентов из потока.

Рассмотрим работу класса MyForm более подробно. Нажатие на кнопку запуска приводит к работе главную функцию программы. Нажатие на кнопку запуска активирует событие OnClick. При вызове OnClick происходит сброс времени на форме. Затем идет считывание полей ввода в переменные и запуск функции, которая запускает процесс моделирования работы лифта. При считывании поля происходит проверка: если оно пустое, то значение переменной будет равно 1. Запуск функции сделан через компонент BackgroundWorker. Он позволяет запускать функцию в отдельном потоке. На рисунке 38 изображена диаграмма алгоритма работы события OnClick кнопки запуска.

Рисунок 38 – Диаграмма алгоритма работы события OnClick

В функции моделирования происходит инициализация классов button, elevator, man. После этого происходит вывод количества этажей и пассажиров, так как они могли быть не введены. Вывод данных осуществлен через делегатов. Они меняют значение компонента формы в функции, которая запущенна в отдельном потоке. Функции NumberofFloor, SumPassenger (приложение Г) принимают число, которое нужно изменить на форме программы. Функции NumberofFloor (приложение Г) изменяет количество этажей в текстовом, а функция SumPassenger (приложение Г) изменяет значение этажей в текстовом поле. Далее идет установка метки. Возвращение к метке происходит, если проехали не все пассажиры. Затем происходит инициализация класса man. С помощью делегата модель человека появляется на форме. Так как человек приходит и уходит, то функция, которая отвечает за модель человека, принимает два параметра. Если параметр равен одному, то человек появляется на форме, если параметр не равен одному, то он исчезает. Диаграмма функции PassengerStatus (приложение Г) показана на рисунке 39.

Рисунок 39 – Диаграмма функции PassengerStatus


После этого появляется на форме программы номер этажа, на котором появился пассажир, и номер этажа, на котором расположен лифт. Номера этажей также выводятся с помощью делегатов. Затем проверяется состояние кнопки в лифте и на этаже. Если они находятся в выключенном состоянии, то происходит нажатие на кнопку.

Рассмотрим этап перемещения лифта и пассажира. Если этаж пассажира и лифта оказываются одинаковыми, то переменная, которая отвечает за статус кнопки, меняет значение на true. Метод setstatusfloor (приложение А) класса button изменяет статус кнопки. С помощью делегата функция ButtonFloorAction (приложение Г) меняет состояние кнопки этажа. То есть кнопка загорается. Функция принимает параметр, который указывает, что нужно сделать. Если параметр равен одному, то кнопка загорается. Любое другое число выключает кнопку. На рисунке 40 представлена диаграмма функции ButtonFloorAction.

Рисунок 40 – Диаграмма функции ButtonFloorAction

Затем идет добавление времени, которое было затрачено на нажатие кнопки. Функция ShowClock (приложение Г) выводит время, а затем функция LiftPosition (приложение Г) выводит номер этажа на форму. Функции ShowClock, LiftPosition принимают число, которое нужно изменить на форме программы. Если положение пассажира и лифта разные, то включаем кнопку на этаже путем изменения её статуса с помощью метода setstatusfloor (приложение А). И выводим положение лифта на форму программы через функцию LiftPosition (приложение Г), которая меняет этаж лифта. На рисунке 41 представлена схема алгоритма проверки того, что лифт и пассажир находятся на одном этаже.

Рисунок 41 – Схема алгоритма проверки

Затем идет перемещение лифта к пассажиру. Переменная floor1 (приложение Г) принимает значение этажа с лифтом. Если пассажир находится на этаже выше лифта, то лифт начинает движение вверх, которое обозначается стрелкой вверх. Функция PointAction (приложение Г) принимает значение направления, затем на форме появляется нужная стрелка. Если параметр этой функции равен up, то появляется стрелка вверх, если параметр равен down, то появляется стрелка вниз, если параметр равен stop, то стрелка исчезает с формы программы. На рисунке 42 представлена схема алгоритма функции PointAction.

Рисунок 42 – Схема алгоритма функции PointAction

Пока лифт и пассажир не будут на одном этаже, лифт будет подниматься вверх. Прибавляем к значению floor1 (приложение Г) единицу. Устанавливаем паузу на 5 секунд. Это сделано для того, чтобы была возможность наблюдать плавную работу движения лифта. С помощью функции LiftPosition (приложение Г) выводим значение этажа с лифтом. Добавляем к таймеру время подъема лифта. Через функцию ShowClock (приложение Г) выводим время на форму. На рисунке 43 представлена схема алгоритма подъема лифта.


Рисунок 43 – Схема алгоритма подъема лифта

Алгоритм спуска лифта имеет схожий принцип работы. Только переменная (приложение Г) floor1 уменьшается на единицу. На рисунке 44 представлена схема алгоритма спуска лифта. После того как лифт прибыл на нужный этаж, стрелка с направлением убирается с помощью функции PointAction (приложение Г). Тут она принимает параметр со значением stop.

Рисунок 44 – Схема алгоритма спуска лифта

Как только лифт приезжает на назначенный этаж, кнопка лифта выключается. Выключение кнопки происходит с помощью метода setstatusfloor (приложение Г). Ему передаются параметры false и номер этажа.

Используя цикл for, двери лифта на форме открываются. Данный цикл используется для плавного передвижения дверей лифта. Для перемещения дверей на форме используется функция DoorAction (приложение Г). Функция принимает параметр, который указывает направление дверей. Для открытия дверей нужно передать параметр значение, которого равно единице. Потом выполняется перемещение дверей. Схема алгоритма функции DoorAction представлена на рисунке 45.

Рисунок 45 – Схема алгоритма функции DoorAction

Затем добавляем к таймеру время работы дверей лифта. Вывод текущего времени эксперимента на форму программы осуществляется с помощью функции ShowClock (приложение Г). Передвигаем пассажира в лифт. Передвижение пассажира организовано с помощью функции PassengerAction (приложение Г). Функция принимает число, на которое нужно передвинуть пассажира. Если переменная положительная, то пассажир выходит из лифта, если переменная отрицательная, то пассажир заходит в лифт. Схема алгоритма функции PassengerAction представлена на рисунке 46.

Рисунок 46 – Схема алгоритма функции PassengerAction

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

С помощью функции randomNumber (приложение Г) выбирается случайный этаж. Убираем номер этаж, на котором был пассажир. Функция PassangerPosition (приложение Г) убирает это значение. Функция принимает значение -1 для того, чтобы убрать номер с формы. Любое другое значение позволяет вернуть номер на форму программы. Схема алгоритма функции PassangerPosition представлена на рисунке 47. Когда пассажир зашел в лифт, он нажимает на нужную кнопку этажа. Функция ButtounLift (приложение Г) служит для показа нужного этажа на кнопке в лифте и этажа с пассажиром. Если значение статуса true, то кнопка появляется, если значение статуса false, то кнопка исчезает. Функция принимает номер этажа и параметр, отвечающий за состояние копки. Схема алгоритма функции ButtounLift представлена на рисунке 48. Прибавляем к таймеру время активации кнопки. Выводим значение таймера на форму программы.


Рисунок 47 – Схема алгоритма функции PassangerPosition

Рисунок 48 – Схема алгоритма функции ButtounLift

Далее происходит обработка этажа, на который нужно лифту прибыть. Если этаж равен текущему, то выполняется пауза. Если нужный этаж ниже этажа с лифтом, то функции PointAction (приложение Г) передается параметр down. На форме появляется стрелка вниз. Пока нужный этаж не будет равен этажу с лифтом, будет использоваться цикл. Уменьшаем на единицу переменную, в которой лежит значение этажа с лифтом. Делаем паузу на пять секунд. Выводим текущий этаж, на котором расположен лифт, на форму программы. Прибавляем к таймеру время работы лифта. Выводим значение таймер на форму программы. Если нужный этаж выше этажа с лифтом, то функции PointAction передается параметр up. На форме появляется стрелка вверх. Пока нужный этаж не будет равен этажу с лифтом, будет использоваться цикл. Прибавляем на единицу переменную, в которой лежит значение этажа с лифтом. Делаем паузу на пять секунд. Вывод текущий этаж с лифтом на форму программы. Прибавляем к таймеру время работы лифта. Выводим значение таймера на форму программы.

Когда пассажир прибыл на нужный этаж, выводим номер этажа на форму программы. Функция PassangerPosition (приложение Г) выполняет данное действие. Затем убираем стрелку с направлением. Передаем параметр stop функции PointAction. Данный параметр заставляет убрать стрелки с формы программы. Выключаем кнопку в лифте. Передадим функции ButtounLift (приложение Г) параметр false, чтобы выключить кнопку в лифте. Прибавляем к таймеру время работы кнопки. Выводим значение таймера на форму программы.

Затем происходит открытие дверей лифта (рисунок 49). Чтобы открыть и закрыть двери, используется цикл for и функция DoorAction (приложение Г). Функция DoorAction принимает положительный параметр, чтобы открыть двери лифта. Схема данного алгоритма представлена на рисунке 49. Прибавляем к таймеру время работы лифта. Выводим значение таймер на форму программы. Когда двери лифта открылись, пассажир покидает лифт. Чтобы пассажир вышел из лифта, используется цикл for и функция PassengerAction (приложение Г). Функция PassengerAction принимает положительный параметр, чтобы пассажир вышел из лифта. Схема данного алгоритма представлена на рисунке 50. Прибавляем к таймеру время, которое затратил пассажир на выход из лифта. Выводим значение таймера на форму программы.


Рисунок 49 – Схема алгоритма открытия дверей

Рисунок 50 – Схема алгоритма передвижения пассажира на форме

Далее происходит закрытие дверей лифта. Функция DoorAction (приложение Г) принимает параметр, который не равен 1. И двери на форме начинают закрываться. Схема данного алгоритма такая же, как у открытия дверей. Прибавляем к таймеру время работы дверей. Выводим значение таймера на форму программы.

К счетчику пассажиров прибавляем единицу. Сравниваем количество пассажиров, которые проехали, и количество пассажиров, которые должны проехать. Функция прекращает работу, если достигнуто необходимое количество пассажиров, которые должные проехать на лифте.

На рисунке 51 показана структура программы. В главном файле Myform.h описывается форма программы, и она же служит для запуска функции, в которой происходит процесс моделирования. В данном файле происходит подключение заголовочных файлов классов, которые описаны выше. В каждом заголовочном файле класса присутствует подключение внешних стандартных файлов.

Рисунок 51 – Структура программы

На рисунке 52 показана UML-диаграмма классов программы. На данной диаграмме показаны переменные, методы, объекты классов, а также связь классов программы.

Рисунок 52 – UML-диаграмма классов

Класс MyForm изображен на рисунках 53 и 54.

Рисунок 53 – Класс MyForm

Рисунок 54 – Класс MyForm

ЗАКЛЮЧЕНИЕ

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

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

Грамотный выбор среды разработки предостережет разработчика программной системы от мелких и крупных неприятностей в процессе разработки.