Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
METHOD-rdo.doc
Скачиваний:
55
Добавлен:
31.03.2015
Размер:
606.72 Кб
Скачать

2.2. Объект ресурсов

После того, как описаны все типы ресурсов, должны быть описаны непосредственно отдельные ресурсы СДС. Для каждого ресурса определяется его имя, тип, к которому он принадлежит и от которого наследует состав параметров, а также значения параметров, неопределенные ранее в объекте типов ресурсов. Если значение параметра определено в объекте типов по умолчанию, и это значение удовлетворяет исследователя, то в объекте ресурсов значение не указывается, и оно наследуется из объекта типов. Ресурсы определяют начальное состояние глобальной базы данных программы (модели).

Объект ресурсов имеет следующий формат:

$Resources

{ <описание_ресурса> }

$End

Описание каждого ресурса имеет следующий формат:

<имя_ресурса> : <имя_типа_ресурса> [trace|no_trace] <начальные_значения_параметров>

Имя ресурса этопростое имя. Имена должны быть различными для всех ресурсов и не должны совпадать с определенными и ранее использованными именами.

Имя типа ресурса это имя одного из типов ресурсов, описанных в объекте типов.

Начальные значения параметров ресурса задают в позиционном соответствии с порядком следования параметров в описании типа. Значения задают целой или вещественной численной константой, либо именем значения в соответствии с типом параметра. Для тех параметров, у которых при описании типа указано значение по умолчанию, вместо начального значения можно указать символ * (звездочка). В этом случае параметр примет значение по умолчанию. Если для параметра задан диапазон возможных значений, то проверяется соответствие начального значения этому диапазону.

При описании ресурсов, после имени типа ресурса, можно указать признак трассировки (подробнее описано далее при описании объекта трассировки). Этот признак задают одним из двух зарезервированных слов:

trace производить трассировку состояния ресурсов;

no_traceне производить трассировку.

По умолчанию принимается значение признака no_trace, поэтому это значение можно не указывать.

Пример на описание ресурса вышеприведенного типа:

$Resources

Зачет_1 : Зачеты trace 1 * * *

Зачет_2 : Зачеты 2 2 38 Свободен

$End

При этом начальное состояние системы принято следующим. На первом зачете студентов в очереди нет, количество опрошенных равно 0 (по умолчанию), состояние экзаменатора – Свободен (по умолчанию). Видимо, этот зачет еще не начался. Второй зачет уже подходит к концу, и в очереди осталось 2 студента, опрошено уже 38 студентов, экзаменатор – Свободен.

Примечание. Обратите внимание на то, что временные ресурсы не описываются. Они создаются и уничтожаются динамически.

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

2.3. Объект образцов операций

Знания о процессах в СДС содержатся в объекте образцов. Каждый образец представляет собой формализацию модифицированного продукционного правила, обычного продукционного правила или нерегулярного события. Образцы совместно с операциями составляют процедурную часть программы на языке РДО.

Общий формат образцов имеет вид:

$Pattern <имя_образца> : <тип_образца> [ trace | no_trace ]

[ $Parameters

{ <описание_параметра_образца>} ]

$Relevant_resources

{<описание_релевантного_ресурса_образца>}

[<способ_выбора>]

$Time=<выражение_времени>

$Body

<тело_образца>

$End

Имя образца представляет собой простое имя. Имена должны быть различными для всех образцов и не должны совпадать с ранее определенными именами. В данной версии языка возможны образцы следующих типов:

  • operationобразец, описывающий операцию и представляющий собой модифицированное продукционное правило;

  • irregular_event образец, описывающий нерегулярное событие;

  • ruleобразец, описывающий продукционное правило;

  • keyboard образец, описывающий клавиатурную операцию (такая операция может быть выполнена, если одновременно нажата определенная клавиша или кнопка мыши, и выполняются предусловия операции).

После типа образца может быть указан признак трассировки. Описание параметров образца имеет следующий формат:

{<имя_параметра> : <тип_параметра> [ = <значение_по_умолчанию>]}

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

Для параметра любого типа может быть задано значение по умолчанию. Это значение указывают после знака равенства целой или вещественной численной константой, либо именем значения для перечислимого параметра. При указании типа ссылкой также возможно задание значения по умолчанию. При этом задаваемое значение может отличаться от значения по умолчанию того параметра, на тип которого производится ссылка.

Параметры в образце любого типа могут отсутствовать, в этом случае зарезервированное слово $Parametersне указывают.

Описание релевантных ресурсов образца для образцов типа операция и клавиатурная операция имеет следующий формат:

<имя_релевантного_ресурса> : <описатель> <статус_конвертора_начала> <статус_конвертора_конца>

Описание релевантных ресурсов образца для образцов типов irregular_event и rule имеет следующий формат:

<имя_релевантного_ресурса> : <описатель> <статус_конвертора>

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

Описатель ресурса  это либо имя типа ресурса, либо имя ресурса. В первом случае в качестве релевантного может быть использован любой ресурс указанного типа, состояние которого удовлетворяет предусловию. Во втором случае, может быть использован только указанный ресурс, если его состояние удовлетворяет предусловию.

Статус конвертора описывает, что происходит с релевантным ресурсом в целом при выполнении предусловия. Статус конвертора начала описывает, что происходит в начале операции, статус конвертора конца  в конце операции. В данной версии языка определены следующие статусы конверторов и соответствующие ключевые слова:

  • Keepрелевантный ресурс сохраняется, но его состояние (значения параметров) изменяется;

  • Createрелевантный ресурс создается;

  • Eraseрелевантный ресурс уничтожается;

  • NonExistрелевантный ресурс не существует;

  • NoChangeсостояние релевантного ресурса не изменяется.

Статусы Create, EraseиNonExistдопустимы только для ресурсов временного вида. СтатусCreateдопустим только в том случае, если описатель есть имя типа ресурса. СтатусыNonExistиNoChangeнедопустимы в образцах типа нерегулярное событие. В образцах типаirregular_eventстатусыKeepиEraseдопустимы только в случае, если описательимя типа ресурса. СтатусNonExistнедопустим в образцах типаrule. В образцахoperationиkeyboardвозможны следующие сочетания статусов начала и конца (табл. 2.2):

Способ выбора определяет, какие ресурсы будут использованы в качестве релевантных в том случае, если описатель релевантного ресурса есть имя типа, и существует более одного ресурса, удовлетворяющего предусловию. В РДО-языке определены следующие способы выбора:

  • first использовать первый попавшийся ресурс, удовлетворяющий предусловиям;

  • with_max<арифметическое_выражение>использовать такую комбинацию релевантных ресурсов, для которой значение указанного арифметического выражения максимально;

  • with_min<арифметическое_выражение>использовать такую комбинацию релевантных ресурсов, для которой значение указанного арифметического выражения минимально.

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

Таблица 2.2

Статус конвертора начала

Статус конвертора конца

Keep

Keep

Erase

NoChange

Create

Keep

Erase

NoChange

Erase

NonExist

NonExist

Create

NoChange

Keep

Erase

NoChange

Указание способа выбора релевантных ресурсов после описания релевантных ресурсов не является обязательным. Если он указан, РДО-имитатор производит анализ предусловий и подбор комбинаций релевантных ресурсов. Если же способ выбора не указан, то он должен быть указан в теле образца отдельно для каждого релевантного ресурса. В последнем случае РДО-имитатор подбирает не комбинации ресурсов, а каждый релевантный ресурс по отдельности и, возможно, с различными способами выбора. В арифметическом выражении для способа выбора в этом случае не могут использоваться параметры релевантных ресурсов, которые следуют в описании релевантных ресурсов образца после данного.

Примечание. Релевантные ресурсы выбираются последовательно без возвращений, то есть выбранный ранее ресурс не может быть изменен, если при подборе следующего окажется, что операция не может быть выполнена из-за неудачного подбора предыдущих ресурсов. Такая операция не может быть выполнена, хотя она могла бы быть выполнена при другой комбинации релевантных ресурсов.

Задание способа выбора релевантных ресурсов в одном месте (сразу после описания релевантных ресурсов) образца позволяет избегать подобных ситуаций, а также подбирать наиболее предпочтительные комбинации ресурсов. Однако, поскольку при этом анализируются все возможные по предусловиям комбинации, требуются большие вычислительные затраты, чем при подборе ресурсов по отдельности. Поэтому данный способ рекомендуется использовать только в случае крайней необходимости.

Выражение времени представляет собой арифметическое выражение целого или вещественного типа, по которому рассчитывается длительность операции или клавиатурной операции и длительность интервала между нерегулярными событиями. В образцах типа ruleвыражение времени вместе с зарезервированным словом$Timeи знаком равенства не указывают.

Тело образца имеет формат:

{ <имя_релевантного_ресурса> <правило_использования> }

Имена релевантных ресурсов должны следовать в том порядке, в котором они указаны в описании релевантных ресурсов образца. Правило использования должно быть указано для каждого ресурса и, в зависимости от типа образца, имеет формат:

operationиkeyboard

irregular_event

rule

<предусловие>

[<способ_выбора>]

[Convert_begin

{<конвертор>} ]

[Convert_end

{<конвертор>} ]

[Convert_event

{<конвертор>} ]

<предусловие>

[<способ_выбора>]

[Convert_rule

{<конвертор>} ]

Конвертор и указанное перед ним зарезервированное слово должны присутствовать в образце только в том случае, если соответствующий статус конвертора, указанный при описании релевантных ресурсов, есть KeepилиCreate. Если статус конвертора естьCreate, то после зарезервированного слова может быть указан признак трассировки для создаваемого ресурса. По умолчанию принимается значение признакаno_trace, поэтому это значение можно не указывать.

Предусловие начала операций и правил записывают в следующем формате:

Choice from<логическое_выражение> илиChoice NoCheck

Логическое выражение определяет предусловие использования ресурса (возможность выполнения операции или правила). Если нет необходимости в предусловии, то это указывают зарезервированным словом NoCheck.

Способ выбора задается так же, как и после описания релевантных ресурсов образца. Если способ не указан после описания релевантных ресурсов образца, он должен быть указан в теле образца для каждого релевантного ресурса после логического выражения.

Способ выбора должен быть задан также в случае, когда описатель релевантного ресурса есть имя конкретного ресурса и не существует альтернативы выбора. При этом можно использовать любой способ выбора (лучше first,чтобы не производить лишних вычислений арифметического выражения), так как результат будет одинаковым. Если состояние ресурса удовлетворяет предусловию, то этот ресурс может быть использован независимо от способа выбора, если же не удовлетворяет, то также независимо от способа выбора ресурс не может быть использован.

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

Конвертор параметра релевантного ресурса имеет формат:

<имя_параметра> set <арифметическое_выражение> или

<имя_параметра> NoChange

Арифметическое выражение должно иметь тот же тип, что и параметр, которому присваивается значение. Для вещественного параметра выражение может иметь целый тип. Зарезервированное слово NoChangeуказывает, что значение данного параметра не изменяется.

Примечание. Имена параметров должны быть указаны в порядке их следования в описании соответствующего типа ресурса. Если имя параметра не указано, подразумевается, что значение параметра не изменяется. Если конвертор ресурса имеет статус Create, задание нового значения каждого параметра обязательно.

Суммируя вышесказанное, приведем форматы всех типов образцов.

Описание образца типа irregular_event имеет формат:

$Pattern <имя_образца> : irregular_event [ trace | no_trace ]

[ $Parameters

{<описание_параметра_образца>}]

$Relevant_resources

{<описание_релевантного_ресурса_образца>}

[<способ_выбора>]

$Time=<выражение_времени~интервал>

$Body

{ <имя_релевантного_ресурса>

Convert_ event [ trace | no_trace ]

{<конвертор>} }

$End

Пример образца прихода студента на зачет:

$Pattern Образец_Приход_студента : irregular_event

$Parameters

_param : such_as Студенты.Зачет {Номер зачета}

$Relevant_resources

_студент : Студенты Create

$Time = 0.05 {Студенты приходят каждые 0.05 часа = 3 мин}

$Body

_студент {Каждые 3 мин создает

временный ресурс «студент»}

Convert_event trace

Зачет set _param

Время_прихода set Time_now

Состояние set Пришел

$End

Описание образца типа rule имеет формат:

$Pattern <имя_образца> : rule [ trace | no_trace ]

[ $Parameters

{<описание_параметра_образца>}]

$Relevant_resources

{<описание_релевантного_ресурса_образца>}

[<способ_выбора>]

$Body

{ <имя_релевантного_ресурса>

<предусловие>

[<способ_выбора>]

Convert_rule [ trace | no_trace ]

{<конвертор>} }

$End

Пример образца постановки пришедшего студента в очередь:

$Pattern Образец_Встать_в_очередь : rule

$Relevant_resources

_студент : Студенты Keep

_зачет : Зачеты Keep

$Body {Не имеет длительности}

_студент {Выбрать студента, который пришел

на экзамен раньше}

Choice from _студент.Состояние = Пришел

with_min студент.Время_прихода

Convert_rule {и поставить его в очередь}

Состояние set В_очереди

_зачет {Выбрать зачет, на который он пришел}

Choice from _зачет.Номер = _студент.Зачет

first

Convert_rule {и увеличить очередь}

Количество_студентов_в_очереди set

_зачет.Количество_студентов_в_очереди + 1

$End

Описание образцов типа operationиkeyboardимеет формат:

$Pattern <имя_образца> : operation|keyboard [ trace | no_trace ]

[ $Parameters

{<описание_параметра_образца>}]

$Relevant_resources

{<описание_релевантного_ресурса_образца>}

[<способ_выбора>]

$Time=<выражение_времени = длительность>

$Body

{ <имя_релевантного_ресурса>

<предусловие>

[<способ_выбора>]

Convert_begin [ trace | no_trace ]

{<конвертор>}

Convert_end [ trace | no_trace ]

{<конвертор>} }

$End

Пример образца операции опроса студента преподавателем:

$Pattern Образец_Опрос_студента : operation

$Parameters

_param : such_as Студенты.Зачет {Номер зачета}

$Relevant_resources

_зачет : Зачеты Keep Keep

_студент : Студенты NoChange Erase {Уничтожить ресурс

после опроса}

$Time = 0.1 {Время_опроса = 0.1 часа = 6 мин}

$Body

_зачет {Если экзаменатор свободен

и есть студент в очереди}

Choice from _зачет.Количество_студентов_в_очереди >0

and _зачет.Занятость_экзаменатора = Свободен

first

Convert_begin {До начала опроса}

Количество_студентов_в_очереди set

_зачет.Количество_студентов_в_очереди - 1

Занятость_экзаменатора set Занят

Convert_end {В конце опроса}

Опрошено_студентов set _зачет.Опрошено_студентов + 1

Занятость_экзаменатора set Свободен

_студент {Из всех студентов выбрать того,

кто раньше пришел на данный зачет}

Choice from _студент.Зачет = _param and

_студент.Состояние = В_очереди

with_min студент.Время_прихода

$End

Пример образца клавиатурной операции.

Если студентов в очереди больше 10, то можно при желании поставить зачет «автоматом». Клавиша для вызова будет обозначена в объекте операций. Отличается от предыдущего примера привязкой к клавише и длительностью.

$Pattern Образец_Зачет_автоматом : keyboard

$Parameters

_param : such_as Студенты.Зачет

$Relevant_resources

_зачет : Зачеты Keep Keep

_студент : Студенты NoChange Erase

$Time = 0.01 {Время проставления зачета «автоматом»

0.01 ч = 0.6 мин = 10 сек}

$Body

_зачет {Если в очереди более 10 человек и

экзаменатор свободен}

Choice from _зачет.Количество_студентов_в_очереди > 10

and _зачет.Занятость_экзаменатора = Свободен

first

Convert_begin {До начала опроса}

Количество_студентов_в_очереди set

_зачет.Количество_студентов_в_очереди - 1

Занятость_экзаменатора_1 set Занят

Convert_end (В конце опроса}

Опрошено_студентов set _зачет.Опрошено_студентов + 1

Занятость_экзаменатора set Свободен

_студент {Из всех студентов выбрать того,

кто раньше пришел на данный зачет}

Choice from _студент.Зачет = _param and

_студент.Состояние = В_очереди

with_min студент.Время_прихода

$End

Клавиатурные операции позволяют разрабатывать в РДО интерактивные программы. Каждой клавиатурной операции (тип keyboard) ставится в соответствие клавиша, комбинация клавишей или щелчок мыши по активной области при работе с кадрами анимации. В момент нажатия этой клавиши проверяются предусловия и, если они выполняются, инициируется событие начала клавиатурной операции. Дальнейший ход этой операции ничем не отличается от выполнения операции других типов. Таким образом, единственным отличием клавиатурной операции является то, что для ее начала недостаточно выполнения предусловий, сформулированных в образце, а необходимо, чтобы еще была нажата соответствующая клавиша.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]