Микроподход к задаче распределенной обработки информации - это спецификация абстрактных услуг, определяющая, каким образом задача инициируется, управляется и завершается. Он базируется на понятиях операций абстрактной связки, операций развязки, операций и ошибок, а также на разрешающем понятии абстрактных процедур.
Примечание - Определенные ниже макрокоманды предполагают использование АСН. 1 для спецификации аргументов, результатов и параметров. Любые специфичные для контекста теги, например назначенные в ходе спецификаций, хотя не имеют значения в этом контексте, но играют важную роль в реализации СУО абстрактной услуги.
8.1 Абстрактные процедуры
Абстрактная процедура (процедура) - это задача, которую выполняет один объект по запросу другого. Выдача запроса и выполнение задачи называются привлечением и исполнением процедуры. Объекты, выдающие запрос и выполняющие его, называются соответственно запросчиком и исполнителем.
Процедура может (но необязательно) потребовать, чтобы запросчик при привлечении обеспечил исполнителю один информационный объект предписанного типа, который называется аргументом процедуры.
Каждое выполнение каждой процедуры дает успешный или безуспешный результат. Процедура считается успешной, если она выполнена полностью, и безуспешной, если она закончилась преждевременно.
Процедура может (но необязательно) требовать, чтобы исполнитель проинформировал запросчика об успешности ее выполнения. Она может (но необязательно) требовать, кроме того, чтобы при уведомлении об успешности исполнитель выдал информационный объект предписанного типа, который называется результатом процедуры.
Процедура может (но необязательно) требовать, чтобы исполнитель информировал запросчика о безуспешности ее выполнения. Она может (но необязательно) требовать обеспечения определенной информации при уведомлении о безуспешности выполнения.
Примечание - В последующих разделах АСН.1 предписывается как средство спецификации абстрактного синтаксиса аргументов и результатов процедур (а также параметров абстрактных ошибок). Такие использования АСН.1 не предполагают, что эти информационные объекты обязательно транспортируются между открытыми системами. В частности, то, что информационные объекты посредством их описания в АСН.1 и базовых правилах кодирования имеют конкретные синтаксисы передачи, несущественно в настоящем контексте. АСН.1 - это просто удобное средство формального описания абстрактного синтаксиса информационных объектов.
8.2 Операции абстрактной связки
Операция абстрактной связки - это процедура, успешное выполнение которой связывает одну или несколько пар абстрактных портов. Объект, который запрашивает абстрактную операцию связки, называется инициатором; тот, кто ее исполняет, - ответчиком.
Операция абстрактной связки приемлема для связки конкретного набора портов инициатора с совместимым набором портов ответчика. Если в наборе один или несколько портов асимметричны, то операция абстрактной связки может быть приемлема для связывания либо только со стороны потребителя, либо только со стороны поставщика, либо с любой из сторон.
Операция абстрактной связки - это полностью обобщенная процедура, за исключением того, что в случае, если информация переносится запросчику при безуспешном результате, она ограничивается одним информационным объектом, называемым информацией об ошибке.
Абстрактная операция связки определяется посредством макрокоманды ABSTRACT-BIND, определение которой представляет собой следующее:
ABSTRACT-BIND MACRO | :: = | |
BEGIN | ||
TYPE NOTATION | :: = Ports Bind | |
VALUE NOTATION | :: = value (VALUE BindType) | |
Ports | :: = "TO" " { " PortList " } " | empty | |
PortList | :: = Port " , " PortList | Port | |
Port | :: = value (PORT) PortSide | |
PortSide | :: = Consumer | Supplier | empty | |
Consumer | :: = "[C]" | |
Supplier | :: = "[S]" | |
Bind | :: = type (BindType) - - должен быть тип BIND | |
| empty <BindType :: = BIND> | ||
END |
В разделе "Порты", где введено ключевое слово "ТО", перечисляются порты ответчика, которые будет связывать эта операция абстрактной связки. Если там перечисляется асимметричный порт без классификации "[Пс]" или "[П]", это означает, что операция абстрактной связки приемлема для использования в связке такого порта в любом направлении.
Заметим, что спецификация аргумента, результата и (или) информации об ошибке выполняется посредством (вложенной) макрокоманды BIND удаленных операций, определенных в ГОСТ Р ИСО/МЭК 9072-1, и это значение такого типа, который выдает макрокоманда. Если информация отсутствует, выдается "BIND" по умолчанию.
Примечание - Взаимосвязь ABSTRACT и BIND помогает выполнять тривиальную реализацию СУО абстрактной услуги (см. 10.1).
Абстрактная услуга обычно содержит операцию абстрактной связки для каждого типа порта, участвующего в его обеспечении. При привлечении нескольких типов порта их операции абстрактной связки могут, но не должны быть различимыми.
8.3 Операции абстрактной развязки
Операции абстрактной развязки - это процедура, выполнение которой (успешное или нет) развязывает два порта. Она вызывается объектом, который вызывал соответствующую операцию абстрактной связи (т.е. инициатором), и выполняется ответчиком.
Операция абстрактной развязки приемлема для развязывания определенного набора портов инициатора из совместимого набора ответчика. Если один или несколько портов в наборе асимметричны, операция абстрактной развязки может быть приемлемой для развязывания только со стороны потребителя, только со стороны поставщика либо с обеих сторон.
Операция абстрактной развязки - полностью обобщенная процедура, за исключением того, что если информация переносится запросчику, при безуспешном результате она ограничивается одним информационным объектом, называемым информацией об ошибке.
Операция абстрактной развязки определяется посредством макрокоманды ABSTRACT-UNBIND, определение которой представляет собой следующее:
ABSTRACT-UNBIND MACRO | :: = |
BEGIN | |
TYPE NOTATION | :: = Ports Unbind |
VALUE NOTATION | :: = value (VALUE UnbindType) |
Ports | :: = "FROM" " { " PortList " } " | empty |
PortList | :: = Port " , " PortList | Port |
Port | :: = value (PORT) PortSide |
PortSide | :: = Consumer | Supplier | empty |
Consumer | :: = "[C]" |
Supplier | :: = "[S]" |
Unbind | :: = type (UnbindType) | |
- - должен быть тип UNBIND | |
empty <UnbindType :: = UNBIND> | |
END |