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

11.3. События, потоки и их синхронизация

Итак, на основании анализа задачи выявлены основные объекты и их

взаимосвязи. Программа реализует модель, состоящую из множества взаимо-

связанных объектов. Функционирование программы обеспечивают множест-

во потоков. Основной поток, реализованный функцией Main() или main(),

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

новном потоке запускаются потоки грузовиков - модель начинает функцио-

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

ясь загрузиться грузом или выгрузиться в складе. Если какой-либо склад бу-

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

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

зоны контроля, должны быть синхронизированы.

Поскольку загрузка груза из склада и выгрузка из грузовика определя-

ются средствами склада, то синхронизация при этом параллельных потоков

объектов грузовиков должна осуществляться складом. Для этого можно вос-

пользоваться критическими секциями, применёнными в теле функций Get() и

Put() класса Warehouse склада, которые соответственно осуществляют за-

грузку и выгрузку грузовиков.

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

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

Поэтому объект region зоны контроля рассматривается как разделяемый ре-

сурс. Каждый объект грузовика должен захватывать, использовать в течение

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

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

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

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

объектов грузовиков при разработке этой программы.

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

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

рые позволяют выделить существенные характеристики этих совокупностей

и более качественно иерархически построить взаимосвязь классов и их ис-

пользование. Виртуальным функциям и абстрактным классам посвящен раз-

дел 13 книги. Хотелось, чтобы такую программу разработал читатель, моди-

фицировав зту программу, позтапко разрабатываемую в кнжеследующих

разделах.

11.4. Поэтапная разработка программы

В результате объектного анализа решаемой задачи выявилась необходи-

мость разработки следующих классов:

- класс LorryEndWarehouse - класс объекта, представляющего функциони-

рование реализуемой модели в окне;

- класс Warehouse, объектами которого являются склады;

- класс Lorry, объектами которого являются грузовики;

- класс ContrlRegion, объектом которого является зона контроля.

Начнём разработку программы с разработки класса Warehouse. Затем пе-

рейдём к разработке класса ContrlRegion и класса Lorry, использующего объ-

екты классов Warehouse и ContrlRegion. На последнем третьем этапе завер-

шим разработку созданием приложения с управляющими элементами. Ко-

нечно, при желании можно увеличить количество этапов, упростив их. На-

пример, реализацию каждой функции или части функций класса осуществ-

лять в отдельном этапе. Объём книги не позволяет это сделать, но настоя-

тельно рекомендуется при реализации этой программы самостоятельно

включить больше этапов, что позволит не только лучше понять функциони-

рование этой программы, но и приобрести полезный опыт поэтапной разра-

ботки. Если читателю эта программа покажется интересной, то очень жела-

тельно было бы её модифицировать с применением абстрактных классов.