Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.17 Mб
Скачать

11.1. Программа с точки зрения пользователя

Между двумя складами (warehouses) грузовики (lorries) перевозят грузы

(loads). Перевозкой управляет центр (center), увеличивая или уменьшая коли-

чество грузовиков.

Пользователь программы, который и представляет ценгр, может доба-

вить новый грузовик или удалить указанный, остановить все гузовики или

возобновить их движение.

В прикладном окне программы LorryEndWarehouse представлены два

склада в виде прямоугольников, динамически отображающих изменение гру-

за, хранящегося на каждом из них (желтым цветом отражена хранящаяся на

складе часть груза). Грузовики же изображены в виде окружностей, движу-

щихся от склада к складу. Каждому грузовику приписан его уникальный но-

мер. Этот номер используется при удалении грузовика.

В прикладном окне находятся кнопка Добавить добавления грузовика и

кнопка Удалить удаления грузовика. Перед нажатием на кнопку Удалить

необходимо выбрать номер удаляемого грузовика в элементе списка, пред-

ставленном в прикладном окне. Кнопки Stop и Run позволяют приостанавли-

вать или возобновлять движение грузовиков.

При запуске программы показывается прикладное окно с управляющими

элементами и двумя складами - один склад пустой, а другой полный груза.

После нажатия на кнопку Добавить появляется движущийся грузовик,

которому приписан номер 1. При добавлении очередного грузовика его но-

мер на единицу превысит номер предыдущего. Грузовики перевозят грузы из

полного левого склада к пустому правому. Когда пустой склад заполнится,

Рис. 11.1.1. Диаграмма вариантов использования программы

LorryEndWarehouse

движение грузовиков будет обратным. Так что сначала наблюдается перевоз-

ка груза с левого склада на правый склад, а потом с правого на левый, и на-

оборот.

Между складами находится зона контроля, изображённая в виде зелёного

прямоугольника, вытянутого вертикально. Каждый из грузовиков, войдя в

эту зону, задерживается на 2 секунды для проверки его исправности и ремон-

та.

Диаграмма вариантов использования программы представлена на рис.

11.2. Объектное представление программы

Проанализируем нашу программу с точки зрения составляющих её объ-

ектов и назовём некоторые из них для облегчения дальнейшей ссылки к ним.

Разумеется, вырисовывающийся вариант построения будущей програм-

мы не является лучшим. Возможны и другие, более интересные. Здесь сделан

акцент на его простоту и предпочтительное употребление потоков, их син-

хронизацию, использование событий и разнообразных управляющих элемен-

тов, включая кнопки, редактор, список и управляющие элементы типа User-

Control и Panel.

Исходя из предыдущего раздела, основными объектами программы яв-

ляются объект прикладного окна, объекты управляющих элементов (кнопки

и управляющий элемент списка), объект зоны контроля, два объекта склада и

объекты грузовиков.

Объект window прикладного окна LorryEndWarehouse владеет объекта-

ми двух складов (leftWH и rightWH), объектом region зоны контроля и объек-

том aL списка типа ArrayList, который включает объекты-грузовики.

Прикладное окно должно перерисовывать изображения перемещающихся

грузовиков, для чего можно воспользоваться специальным потоком thread.

Панели же, представляющие склады и область контроля, поскольку они на-

следуют классы UserControl и Panel, рисуются самостоятельно.

Объект-грузовик (lorry) является объектом класса Lorry, содержит соб-

ственный поток, обеспечивающий его перемещение от склада к складу, за-

грузку и выгрузку груза, и приостановку движения в зоне контроля. В зоне

контроля может только один грузовик пребывать определенное время. По-

скольку разные объекты грузовиков не могут одновременно войти в зону

контроля, здесь необходима синхронизация потоков грузовиков.

Объект-склад (leftWH или rightWH) является объектом класса

Warehouse, динамически показывающий изменение груза на складе путём

закрашивания части прямоугольника, которым представлен склад в окне

window. Поскольку склад одновременно может понадобиться нескольким

грузовикам, выгрузка и загрузка грузовиков синхронизирована. О перепол-

нении склада или опустошении склада фиксируется специальной булевской

переменной full, которая меняет поведение грузовика, заставляя его обеспе-

чить перевоку груза в надлежащем направлении.

На рис. 11.2.1 изображена диаграмма объектов программы

LorryEndWarehouse. На диаграмме представлено четыре объекта грузовиков

класса Lorry, но, заметим, в программе их количество определяется пользо-

вателем программы, может увеличиваться и уменьшаться.

Рис. 11.2.1. Диаграмма объектов nporpaMMbiLorryEndWarehouse