Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсяк.rtf
Скачиваний:
1
Добавлен:
02.08.2019
Размер:
197.84 Кб
Скачать

Краткая характеристика программы.

Прежде всего, следует сказать, что программа построена по принципам объектной ориентации. Программа легко допускает расширение (например, добавление реакций на мышь), позволяет создавать меню практически неограниченной вложенности и сложности, любой конфигурации. Интерфейс интуитивно понятен и знаком каждому, кто хотя бы раз общался с системой меню Windows.

В программе реализованы два класса: MainMenu и Menu. Класс Menu фактически может быть использован только классом MainMenu, с которым мы и ведем работу. Как программисту, владеющему таким классом, нам необходимо лишь создать экземпляр этого класса, сформировать систему меню с помощью нескольких методов класса и запустить метод Run. Дальше вся работа лежит на нашем классе. Не правда ли, просто? Это определяет доступность нашего класса широкой аудитории программистов.

Внутренняя реализация такова: компьютер переводится в графический режим и запускается так называемый «ждущий цикл», который ждет нажатия клавиши и, дождавшись, передает значение нажатой клавиши специальному обработчику класса, который уже решает, что с ним делать. Конечно, в сложных системах лучше было бы организовать принцип событий. «Ждущий цикл» ждет событие (нажатие клавиши, движение мышки, сигнал системы – что угодно), формирует объект типа Event, а затем рассылает его всем имеющимся в его распоряжении объектам, а их обработчики уже сами решают, нужно реагировать на это событие, или не нужно. Кроме того, полезно было бы определить классы Application, метод которого инициировал бы граф-режим, определял бы «ждущий цикл», класс Window, DialogWindow, добавить свойства, которые однозначно определяли бы каждый экземпляр каждого объекта, добавить канцепцию событий и т.д. Но это сильно усложнило бы программу и увело бы от цели работы. Поэтому здесь и наблюдается некоторое несоответствие принципам ООП.

Реакции класса на нажатия клавиш следующие:

  • ВЛЕВО – находимся в подменю – выходим из него, если же выходить можно только в главное меню, то смещаем выделение в главном меню влево (если мы находимся в начале, то переходим в конец), при этом пункт остается открытым.

  • ВВЕРХ – находимся в главном меню – открываем подменю выделенного пункта. Если же мы находимся в подменю – перемещаем курсор вверх (или переходим в конец списка, если была достигнута вершина).

  • ВПРАВО – в главном меню просто двигаем выделение вправо. Если мы находимся в подменю и выделенный пункт еще может раскрыться, то раскрываем его. Если же пункт не раскрываем, переходим к следующему пункту главного меню, сохраняя отрытое подменю.

  • ВНИЗ – работает аналогично ВВЕРХ.

  • ENTER – если мы стоим на пункте с подменю – открываем пункт. Если пункт не содержит подменю, выдаем диалоговое окно с названием пункта, при этом закрывая все меню до главного.

  • ESC – выход из программы.

Фактически, структура меню реализована двунаправленным динамическим списком, это обеспечивает экономный расход памяти.

Результаты и их анализ.

Программа работает корректно и в соответствии с характеристикой.