Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методич.указания к заданиям по ТП.doc
Скачиваний:
5
Добавлен:
06.05.2019
Размер:
897.02 Кб
Скачать

4. Описание разрабатываемой программы с точки зрения программиста

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

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

Основными объектами программы являются объект прикладного окна, объекты управляющих интерфейсных элементов, объект зоны контроля (ресурс), а также объекты компонентов – грузовики и склады.

Объект model прикладного окна LorryAndWarehouse владеет объектами двух складов, объектом region зоны контроля и объектом контейнера lorryCont, коллекция которого включает объекты-грузовики. Объект model должен перерисовывать изображения складов и перемещающихся грузовиков, для чего можно воспользоваться специальным потоком или таймером. Предпочтём поток thread.

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

Объект-склад (leftWH или rightWH) является объектом компонента Warehouse, также содержит собственный поток, динамически показывающий изменение груза на складе путём закрашивания части прямоугольника, которым представлен склад в окне LorryAndWarehouse. Поскольку склад одновременно может понадобиться нескольким грузовикам, выгрузка и загрузка грузовиков синхронизирована, допуская обслуживание только одного грузовика. О переполнении склада или опустошении склада фиксируется специальной булевской переменной full, которая меняет поведение грузовика, заставляя его обеспечить перевозку в надлежащем направлении.

4.2. События, потоки и ресурсы

Программа реализует модель, состоящую из множества взаимосвязанных объектов. Функционирование программы обеспечивают множество потоков. Основной поток создаст объект model прикладного окна. При создании объектов компонентов запускаются их потоки - модель начинает функционировать. Для простоты грузовик перевозит груз в одном направлении, пока он имеет возможность загрузиться грузом или выгрузиться в склады. Если какой-либо склад будет переполнен или опустошён, то грузовик меняет направление перевозки груза.

Операции объектов компонента Lorry, связанные со складами и с объектом зоны контроля должны быть синхронизированы.

Поскольку загрузка груза из склада и выгрузка из грузовика определяются средствами склада, то синхронизация при этом параллельных потоков объектов грузовиков должна осуществляться складом. Для этого можно воспользоваться критическими секциями, применёнными в теле функций Get() и Put() компонента Warehouse склада, которые соответственно осуществляют загрузку и выгрузку грузовиков. Для синхронизации потоков применим монитор.

Что же касается захода грузовиков в зону контроля, то время пребывания в этой зоне на обследование и ремонт определяется только грузовиком. Поэтому объект region зоны контроля рассматривается как разделяемый ресурс. Каждый объект компонента Lorry должен захватывать, использовать в течение случайного промежутка времени и освобождать этот ресурс. При удалении объект компонента Lorry обязан освободить разделяемый ресурс, если он его использует, чтобы другие объекты компонента Lorry могли им воспользоваться. Для синхронизации доступа объектов компонента Lorry к разделяемому ресурсу можно воспользоваться семафором (mutex).

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