Проектирование системы обработки временных списков
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
?аммы, автоматически создаваемой по заданному макету интерфейса и полностью берущей на себя рутинные действия по его обслуживанию (отработка оконных событий, пересылка данных между внутренними буферами элементов и переменными программы и т. п.). Программисту после генерации каркаса приложения необходимо только вписать код в места, где требуются специальные действия. Каркас должен иметь вполне определенную структуру, поэтому для его генерации и изменения в Visual C++ предусмотрены мастера.
Кроме того, MFC предоставляет объектно-ориентированный слой оберток (англ. wrappers) над множеством функций Windows API, делающий несколько более удобной работу с ними. Этот слой представляет множество встроенных в систему объектов (окна, виджеты, файлы и т. п.) в виде классов и опять же берет на себя рутинные действия вроде закрытия дескрипторов и выделения/освобождения памяти.
Добавление кода приложения к каркасу реализовано двумя способами. Первый использует механизм наследования: основные программные структуры каркаса представлены в виде классов, наследуемых от библиотечных. В этих классах предусмотрено множество виртуальных функций, вызываемых в определенные моменты работы программы. Путем доопределения (в большинстве случаев необходимо вызвать функцию базового класса) этих функций программист может добавлять выполнение в эти моменты своего кода.
Второй способ используется для добавления обработчиков оконных событий. Мастер создает внутри каркасов классов, связанных с окнами, специальные массивы - карты (оконных) сообщений (англ. message map), содержащие пары ИД сообщения - указатель на обработчик. При добавлении/удалении обработчика мастер вносит изменения в соответствующую карту сообщений.
В настоящее время преобладающей парадигмой программирования является объектно-ориентированная, в которой в которой основными концепциями являются понятия объектов и классов. Объектно-ориентированное программирование основано на трех китах - трех важнейших принципах, придающих объектам новые свойства. Этими принципами являются инкапсуляция, наследование и полиморфизм. Инкапсуляция есть объединение в единое целое данных и алгоритмов обработки этих данных. Полиморфизм - это свойство родственных объектов решать схожие по смыслу проблемы разными способами. Наследование есть свойство объектов порождать своих потомков. Объект - потомок автоматически наследует от родителя все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы родителя или дополнять их.
Класс - это абстрактный тип данных, который включает в себя не только данные, но и функции и процедуры. Класс используется только через его интерфейс - детали реализации для пользователя класса несущественны. В классе задаются свойства и поведение какого-либо предмета или процесса в виде полей данных и функции для работы с ними. Создаваемый тип данных обладает практически теми же свойствами, что и стандартные типы.
При проектировании системы был выделен класс event, который будет служить для хранения и обработки событий, а также будем использовать шаблон vector, который настроим на работу с типом event.
Рис 2.1 Уточненная диаграмма классов
Класс event был описан в разделе анализа предметной области, но были добавлены некоторые методы: конструктор с параметрами, метод возвращающий тип события, метод возвращающий сообщение и метод возвращающий время наступления события, а также были перегружены оператор больше и оператор сравнения. Методы возвращающие сообщение и тип возвращают строку типа CString, а метод возвращающий время наступления события - структуру SYSTEMTIME. В конструкторе с параметрами первые шесть параметров (Y,M,D,H,Min,Sec) это переменные типа int, которые хранят информацию о времени наступления события (год, месяц, день, час, минута и секунда), остальные два - типа CString (the_type и the_message) хранят информацию о типе и подробном описании события соответственно.
В нашем проекте сравнение событий происходит по времени их наступления. Поэтому при перегрузке оператора больше(>) и оператора сравнения(==) сравнение происходило именно по времени наступления события. В использовании класса-шаблона vector ничего не изменилось.
Далее построим диаграмму прецедентов, опираясь на функции обеспечиваемые системой, но просмотр событий в заданном интервале времени и просмотр событий в конкретное время объединим в один прецедент - просмотр событий с заданными параметрами, под параметрами будем понимать заданный интервал времени и конкретное время.
Рис. 2.2 Диаграмма прецедентов
Диаграммы видов деятельности и диаграмма прецедентов послужили основанием для создания пользовательского меню. Элементами пользовательского меню являются кнопки двух типов: menuitem (определяет конечный пункт меню) и popup(определяет пункт главного меню, автоматически вызывающий выпадающее подменю, которое может содержать подпункты типа menuitem и popup). Ниже представлена диаграмма спроектированного меню.
Рис.2.3 Диаграмма пользовательского меню
Для дальнейшего проектирования построим диаграммы для каждого прецедента.
Рис. 2.4 Диаграмма состояний для прецедента запуск приложения
Рис. 2.5 Диаграмма состояний для прецедента просмотр событий с заданными параметрами
Рис. 2.6 Диаграмма состояний для прецедента получить количество событий c заданными параметрами
Рис. 2.7 Диаграмма состояний для прецеде