Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Особенности реализации конструктора моделей gemСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте Конструктор создан для работы под управлением Windows 95/98/NT и использует удобные диалоговые средства, предоставленные графическим интерфейсом этих операционных систем. Модель с точки зрения конструктора Pilgrim можно представить как набор следующих компонентов: • граф модели; • параметры инициализации модели; • переменные модели; Внутри любого узла (кроме виртуального узла parent) происходит обработка транзакта, определяемая спецификой его типа. Дуги графа представляют собой пути миграции транзактов по графу модели и имеют направленность. Возможны ситуации, когда один узел имеет несколько выходов, тогда путь транзакта определяется условиями, заданными в узле-источнике. Каждый узел модели имеет собственные параметры, как общие для всех типов узлов (имя, номер, условия ссылок), так и специфические, определяемые типом узла. Такие специфические параметры также можно назвать параметрами функции узла. Параметры инициализации модели - это набор переменных, включенных в функции инициализации модели modbeg и завершения модели modend. Конструктор также позволяет определять переменные модели ~ глобальные переменные, инициализируемые в начале текста программы. Доступ к ним возможен из любого узла в любой момент выполнения программы. Иногда пользователю необходимо включение в программу собственных программных вставок. Поэтому конструктор позволяет пользователю вводить произвольный C++ код. Программный текст может размещаться в начале программы, выполняя подготовку каких-либо данных, и внутри любого из узлов. Важнейшим моментом создания модели является построение графа, описывающего зависимости между процессами моделируемой системы. Для того чтобы изначально не зайти в тупик, пытаясь построить некорректный, трудно воспринимаемый или неудобный для дальнейшей работы граф, необходимо четко представлять методы, средства и ограничения конструктора по построению графа. Основное достоинство конструктора Pilgrim заключается в том, что он позволяет: • проводить многоуровневую (т.е. многослойную) иерархиче • представлять каждый уровень структурной детализации в виде • автоматически генерировать программный текст модели. С помощью конструктора удобно строить многоуровневые модели, организуя иерархию плоскостей построения модели. Конструктор позволяет создавать множество плоскостей, на которых расположены слои модели с любым количеством узлов и ссылок. Иерархические модели устроены следующим образом: верхний уровень модели7 содержит ряд узлов, среди которых есть такие, которые детализируются на нижних уровнях. При этом, создавая детализирующий уровень, пользователь опять может поместить на нем узлы, которые могут быть детализированы еще ниже; так граф модели примет иерархическую структуру. Число уровней вложенности не ограничено конструктором, т.е. пользователь может сколько угодно подробно детализировать и обобщать процессы модели. При создании новой модели пользователь начинает работу с корневого уровня, и поэтому некоторые процессы модели могут быть представлены здесь в общем виде, с целью дальнейшей детализации. Для выполнения структурной декомпозиции к набору узлов, определяемому системой Pilgrim, конструктор добавляет новый осо-166 |ый тип - parent, использующийся исключительно как средство соз-яия наглядных многоуровневых моделей. Узел типа parent содер-ат ссылку на плоскость, его детализирующую, т.е. используется ия описания процессов, которые можно рассмотреть на отдельной носкости. Узел parent не выполняет никаких действий по обработке шанзакта и при генерации программного кода просто заменяется рвоей декомпозицией, т.е. порождаемым им слоем. Например, если Пользователь создал узел типа parent с номером 4, то в программном >айле узел с таким номером сгенерирован не будет. С точки зрения енератора программного файла узел parent представляет собой про-ртой маршрутизатор, который может иметь любое количество вхо* шов, ссылку на детализирующий уровень и единственный выход. | Рассмотрим пример на рис. 5.2, где в плоскости 1 имеется последовательность узлов Клапан_1-»Действие_1-»Очередь_1. I Узел Действие_1 является узлом типа parent и содержит детализирующую плоскость 11. Плоскость 11 содержит цепочку Оче- \ редь_2-1»Сервер_2. Рис. 5.2. Детализация узла типа parent В плоскости 11 стрелка, направленная из левого верхнего угла экрана в узел Очередь_2, обозначает, что этот узел является входом на плоскость, а стрелка из узла Сервер_2 в правый верхний угол — ■ что это выход с плоскости. При запуске генерации программного файла получим следующую цепочку: Клапан_1-»Очередь_2-» Сер-вер_2->Очередь_1, т. е. узел Действие_1 является лишь средством реализации многоуровневости и будет обработан генератором как узел Pilgrim. Иногда при построении модели может возникнуть необходимость выделения некоторых типовых действий по обработке данных. Это могут быть запросы на выполнение бухгалтерской проводки, требования выделения моделируемого ресурса или какие-либо другие действия. При возникновении такой задачи удобно обозначить подпрограммы, обращение к которым было бы возможно из любого места модели. Для этого используются узлы типа pay, rent, down. Такие узлы, так же как и parent, содержат переход на более низкий уровень модели, однако имеют несколько иной механизм действия и область применения. Если с помощью узла типа parent можно создавать иерархические модели, имеющие на любой сколько угодно глубоко вложенной плоскости новые узлы parent, то с помощью узлов типа pay, rent, down возможно лишь реализовать подпрограммы на двух слоях модели и невозможно построить общую иерархию уровней. Рассмотрим принцип работы таких узлов на примере узла pay (рис. 5.3). На плоскости 1 находится узел типа pay, содержащий обращение к подпрограмме, расположенной в плоскости 12. Входом плоскости 12 является узел с названием «Расчетный счет фирмы», а выходом - узел с именем «Бухгалтерия». При генерации программного файла а узле «Бухгалтерия» в качестве параметра, определяющего номер следующего узла, на который переходит транзакт, будет указано не конкретное значение, а специальный параметр транзакта updown. При этом предполагается,-что каждый транзакт, попадающий в выходной узел плоскости, содержит в параметре updown номер узла, на который следует выполнить переход. Параметр транзакта updown инициализируется в узле типа pay, т.е. в нашем случае в узле с названием «Плата поставщику». Аналогичным образом реализуется переход на подпрограмму с использованием узлов типа rent и down. Они также инициализируют переменную транзакта updown. Из вышеизложенного можно сделать вывод о невозможности использовать узлы типа pay, rent и down для реализации иерархических моделей по следующей причине: на уровне подпрограммы узла одного из перечисленных типов нельзя размещать никакой из узлов типа pay, rent, down, так как каждый из этих узлов заново выполнит инициализацию параметра транзакта updown, т.е. заменит значение updown, установленное уровнем вы-168 г, организуя циклическую ссылку (это приведет к семантической 1ибке). Чтобы защитить пользователя от совершения таких ошибок, ^структор не позволяет создавать в текущей плоскости узлы типа
y, rent, down, если управление передано с более высокого уровня рез узел перечисленного типа. Однако узлы обращения к подпро-ше имеют одно важное преимущество перед узлом parent. Оно шт в том, что транзакт сам «помнит», куда ему необходимо энуться; поэтому из нескольких узлов (или слоев) можно обращаться к общей плоскости, содержащей детальное выполнение типового действия. Обратимся еще раз к примеру, приведенному на рис. 5.3. Предложим, что имеется некоторая организация, имеющая собствен-расчетный счет и выполняющая ряд операций по перечислению едств; часть операций необходимо смоделировать. В плоскости 12 раздана подпрограмма «Плата поставщику», выполняющая бухгал-врскую проводку по перечислению средств со счета фирмы. Если Цозникает необходимость смоделировать аналогичную ситуацию с Перечислением средств (например, возврат кредита), то можно соз-новый узел типа pay и указать ему в качестве подпрограммы юскость 12. В процессе работы с конструктором, при создании нового узла обращения к подпрограмме, появляется диалоговое окно с просьбой указать номер плоскости, на которой должна размещаться подпрограмма. По умолчанию это номер новой пустой плоскости, однако пользователь самостоятельно может задать номер уже существующей плоскости. Иногда в модели можно выделить ряд процессов, независимых на уровне транзактов, но пересекающихся на уровне моделируемых ресурсов. Например, это может быть моделирование процесса производства с участием нескольких независимых торговых компаний, приобретающих товар у производителя и имеющих свой финансовый резерв и рынок сбыта. Тогда можно выделить как независимые процессы торговых компаний и процесс функционирования производителя. Для разработчика модели было бы неудобно воспринимать в одной корневой плоскости несколько параллельных процессов, поэтому конструктор предоставляет возможность содержать несколько корневых плоскостей с целью размещения в них непересекающихся на уровне транзактов процессов. 5.3
|
||||||||||||||||
Последнее изменение этой страницы: 2016-06-06; просмотров: 652; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.17.179.132 (0.007 с.) |