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

11.4.2. Второй этап. Разработка классов ContrlRegion и Lorry

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

да в склад, Класс Lorry содержит поток, учитывающий все особенности по-

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

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

на некоторое время, дабы обследоваться на исправность и выполнить, при

необходимости, ремонт, потом грузовик подъезжает к складу и встаёт в оче-

редь, если уже подлежат разгрузке или погрузке другие предшествующие

грузовики, и, наконец, разгружается. К потокам грузовиков, выполняющим

все эти действия, применяется механизм синхронизации на этапах загрузки и

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

Warehouse склада, мы возложили синхронизацию загрузки и выгрузки грузо-

виков на объекты класса Warehouse (введя критическую секцию в функцию

Change() или change(), вызываемую в интерфейсных функциях Get() и Put()),

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

ределяется складом. Что же касается прохождения зоны контроля, то её пред-

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

Lorry обязан освободить после его использования. Здесь время контроля мо-

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

всех грузовиков.

Интерфейс объекта класса Lorry должен включать функции приостанов-

ки и возобновления движения грузовика, завершения выполнения потока и,

обязательно, функцию Dispose() освобождения разделяемого ресурса. Ссылка

на объект разделяемого ресурса может быть передана при создании объекта

класса Lorry через аргументы его конструктора.

Разделяемый ресурс является объектом класса ContrlRegion. Чтобы раз-

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

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

ContrlRegion из класса UserContro или Panel, а для ограничения доступа к не-

му объектов класса Lorry (грузовиков) в каждом из этих о&ьектов захватим

этот ресурс с помощью монитора или оператора synchronized. Объект грузо-

вика, захватив ресурс, выполнит некоторую работу длительность 2 сек., вы-

звав функцию Work().

4>Uu>erCantral]

. <<y?e >>. ->| +Thread |

Рис. 11.4.2.1. Диаграмма классов компонента ContrlRegion (для C#)

Класс ContrlRegion прост. Его диаграмма классов изображена на рис.

11.4.2.1, А сам класс представлен в примере 11.4.2.1. Класс ContrlRegion язы-

+CnntrtRegion

+Work() ~

ка C# разместим в библиотеке csContrlRegion с пространством имён

csContrlRegionDll.

Класс ContrlRegion языка Java поместим в пакет cjContrlRegion.

Пример 11.4.2.1. Класс ContrlRegion.

///////////////

// C# Flle csContrlRegion класс ContrlRegion

using System;

using System.Threadlng;

using System.Windows.Forms;

namespace csContrlRegionDll

{

// Класс области контроля

public class ContrlRegion; UserControl

<

public void Work ( ) // Выполнить работу

{

Thread,Sleep (2000);

>

>

>

///////////////

// Java и J# File cjContrlRegion класс ContrlRegion

lmportjava.awt.*;

lmportjava.utiL*;