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

Int partLoad; // Выгружаемая или загружаемая порция

int timePeriod= 100; // Время выгрузки или загрузки груза

public event DelEvFromWarehouse evFromWarehouse; // Ссылка

// на объект события о переполнении и опустошении склада

// Конструктор

public Warehouse (bool left, bool full)

{

this.left= left;

if (lfull) allLoad=0;

>

// Поместить груз в склад

public bool Put (bool full)

{

lf(!full) return false; // Пустой грузовик не выгружать

if(allLoad >= 100) return false; // Склад заполнен

partLoad= PartLoad; // Определить выгрузку

Change ( ); // Выгрузить

return true;

}

// Получить груз из склада

public bool Get (bool full)

{

If(full) return false; // Полный грузовик не загружать

if(((allLoad) < PartLoad) && (evFromWarehouse 1= null))

{

// Недостаточно груза в складе для загрузки грузовика

WarehouseEventArgs wH= new WarehouseEventArgs

(left, false);

evFromWarehouse (this, wH); // Сгенерировать событие

> return false;

// Загрузить грузовик и уменьшить груз склада

partLoad= -PartLoad; // Определить выгрузку

Change (); // Выгрузить

return true; >

// Поместить или получить груз в склад

protected void Change ( )

{

// Выполнить операцию только с одним грузовиком

//lock(this)

//{

Monitor.Enter (this); // Начать критическую секцию

allLoad += partLoad;

Invalidate ();

Thread.Sleep (timePeriod);

Monitor.Exit (this); // Завершить критическую секцию

//> >

// Перерисовать размещение груза в складе

protected override void OnPaint (PaintEventArgs e)

{

base.OnPalnt (e);

e.Graphics.FIIIRectangle (new SolidBrush (Color.Yellow), 0,

100 - allLoad, CllentSize.Width, ClientSize.Helght);

e.Graphlcs.DrawString (allLoad,ToString (), Font,

new System.Drawing.SolidBrush (Color.Blue), 5, 101;

}

>

)

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

// Java и J# Flle cjWarehouse.dll класс Warehouse

package cjWarehouse;

Importjava.Awt.*;

Importjava,utll.*;

// Класс данных события

public class WarehouseEventArgs

{

private boolean left; // Признак идентификации склада

private boolean full; // Признак заполнения склада

// Конструктор

public WarehouseEventArgs (boolean left, boolean full)

{

this.left= left; this.full= full;

>

// Свойство заполнения склада

public boolean getFull ( ) {return full;>

// Свойство идентификации склада

public boolean getLeft ( ) {return left;}

>

// Класс наблюдаемого объекта

class beWatched extends Observable

<

// Конструктор

public beWatched ( ) { >

Void notifyObs (WarehouseEventArgs arg)

{ setChanged ( ); notifyObservers (arg);>

// Класс склада

public class Warehouse extends Panel

{

boolean left; // Признак идентификации склада

int W= 40; //Ширина

lnt H= 100; // Высота

lnt allLoad= 100; // Текущий размер груза в складе

int PartLoad= 10; // Размер груза грузовика

Int partLoad; // Получаемая или помещаемая порция груза

inttimePeriod=lou; //времяполученияилипомещения груза

public beWatched bW; // Ссылка на вспомогательный наблюдаемый

// объект

// Конструктор

public Warehouse (boolean left, boolean full)

{

this.left= left;

if (lfull) allLoad= 0; // Склад пуст

bW= new beWatched (); // Наблюдаемый объект склада

// Поместить груз в склад

synchronized public boolean Put (boolean full)

{

lf(!full) return false;

if allLoad >= 100) return false;

// Выгрузить грузовик и увеличить груз склада

partLoad= PartLoad; // Определить выгрузку

change ();

return true;

>

// Получить груз из склада

synchronized public boolean Get (boolean full )

{