
- •Введение к заданиям Основные термины, используемые в дисциплинах
- •Объекты, классы и язык uml
- •Цели задачи заданий
- •Требования к выполнению заданий
- •Оформление результатов
- •4. Содержание разделов пояснительной записки
- •5. Оформление результатов
- •Список литературы
- •Приложение 1. Пример оформления результатов
- •Содержание
- •5.1. Первый этап. Разработка компонента Warehouse
- •5.2. Второй этап. Разработка компонентов ContrlRegion и Lorry
- •5.3. Третий этап. Разработка приложения csLorryAndWarehouse
- •1. Задание
- •Уточнение задания
- •3. Описание разрабатываемой программы с точки зрения пользователя
- •4. Описание разрабатываемой программы с точки зрения программиста
- •4.1. Объектное представление программы
- •4.2. События, потоки и ресурсы
- •5. Поэтапная разработка программы
- •5.1. Первый этап. Разработка компонента Warehouse
- •5.2. Второй этап. Разработка компонентов ContrlRegion и Lorry
- •5.3. Третий этап. Разработка приложения csLorryAndWarehouse
- •6. Описание проблем, возникших при разработке программной системы.
- •7. Список используемой литературы
- •10. Разработка многокомпонентной программы с удалённым объектом
- •10.1. Удалённый компонент RemObj
- •10.2. Сервер csLorryAndWarhousesServer
- •10.3. Клиент csLorryAndWarhousesClient
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).
После такого предварительного анализа задачи можно приступить к поэтапной разработке программы.