Basisbibliothek

From emotive
Jump to navigation Jump to search

Das OTX Daten­mo­dell besteht aus einem zen­tra­len Kern (Core oder Basis­bi­blio­thek) und ver­schie­de­nen funk­ti­onss­pe­zi­fi­schen Erwei­te­run­gen (Libra­ri­es). Der Core beschreibt die Struk­tur jedes OTX Doku­ments. Es spe­zi­fi­ziert die all­ge­mei­ne Ablauf­lo­gik und ent­hält alle Kon­troll­struk­tu­ren, Dekla­ra­tio­nen, Feh­ler­be­hand­lungs- und Erwei­te­rungs­me­cha­nis­men. Nach­fol­gend wer­den die wesent­li­chen Eigen­schaf­ten und Ele­men­te beschrie­ben.


OTX-core-structure.png
Core Basis­bi­blio­thek inner­halb der OTX Archi­tek­tur


Haup­tei­gen­schaf­ten

Das Daten­mo­dell hat fol­gen­de Haup­tei­gen­schaf­ten:

  • Impe­ra­ti­ve, struk­tu­rier­te Pro­gram­mie­rung
  • Dekla­ra­tion von Abläu­fen, Varia­blen, Kon­stan­ten und Meta­da­ten
  • Zugriff auf Umge­bungs­da­ten
  • Spe­zi­fi­ka­ti­ons­feld in jedem Kno­ten sowie freie Kom­men­ta­re
  • Erwei­te­rungs­punk­te für die Anbin­dung neu­er Funk­tio­nen
  • Kon­troll­struk­tu­ren
  • Schlei­fen (whi­le, do-whi­le, for, for-each)
  • Ver­zei­gun­gen (if-then-else)
  • Par­al­le­lab­läu­fe
  • Auf­ru­fe (Sequen­zen, Berech­nun­gen etc.)
  • Feh­ler- und Aus­nah­me­be­hand­lung

Haupt­ele­men­te

Das Daten­mo­dell besteht aus fol­gen­den Haupt­ele­men­ten, sie­he Bild:

  • Daten­ty­pen
  • Pro­ze­du­ren
  • Para­me­ter
  • Dekla­ra­tio­nen
  • Akti­vi­tä­ten (Nodes)
  • Aus­drücke (Terms)


OTX-core-main-components.png
Core Daten­mo­dell - Haupt­ele­men­te


Daten­ty­pen

In OTX müs­sen alle Varia­blen, Para­me­ter und Eigen­schaf­ten einen Daten­typ haben. Der Core defi­niert eine Rei­he von Grund­da­ten­ty­pen, sie­he Bild.


OTX-data-types.png
OTX Core Daten­ty­pen


Die Daten­ty­pen wer­den fol­gen­de Grup­pen ein­ge­teilt:

  • Sim­ple­Ty­pe
    • Boo­lean
    • Float
    • Byte­Field
    • Inte­ger
    • String
  • Com­plex­Ty­pe
    • List (Array)
    • Map (Key-Value Pairs)
    • Excep­tion
    • User­Ex­cep­tion
    • OutOf­Bound­sEx­cep­tion
    • Type­Mis­mat­chEx­cep­tion
    • Arith­me­ti­cEx­cep­tion
    • Inva­lidRe­fe­rence­Ex­cep­tion

Kom­ple­xe Daten­ty­pen kön­nen aus ein­fa­chen oder wie­der­um kom­ple­xen Daten­ty­pen zusam­men­ge­setzt sein. Die Typen List und Map sind gene­ri­sche Typen mit belie­bi­ger Ver­schach­te­lungs­tie­fe. Die User­Ex­cep­tion ist die ein­zi­ge Aus­nah­me, die der Autor selbst mit Hil­fe der Throw-Akti­vi­tät erzeu­gen kann. Mit den ver­schie­de­nen Biblio­the­ken kom­men meist wei­te­re kom­ple­xe Daten­ty­pen hin­zu.

Pro­ze­du­ren

Eine Pro­ze­dur beschreibt die Abläu­fe (Sequen­zen). Sie besteht aus

  • Para­me­tern,
  • ver­schie­de­nen Dekla­ra­tio­nen (Con­stants, Varia­bles, Com­ments, Throws, Visi­bi­li­ty) und
  • einer Sequenz (Flow) von Kno­ten (Nodes), sie­he Bild.


OTX-Procedure.png
Ele­men­te einer OTX Pro­ze­dur


Eine Pro­ze­dur ist der aus­führ­ba­re Teil eines OTX-Doku­ments. Sie kann als Ein­stiegs­punkt eines Ablauf­sys­tems ver­wen­det oder von ande­ren Pro­ze­du­ren auch außer­halb des OTX Doku­ments auf­ge­ru­fen wer­den.

Para­me­ter

Die Para­me­ter defi­nie­ren die Ein- und Aus­ga­be­grö­ßen einer Pro­ze­dur. Sie wer­den ein­ge­teilt in:

  • InPa­ra­me­ter
Wer­te wer­den wie Kon­stan­ten behan­delt und kön­nen inner­halb der Pro­ze­dur nicht geän­dert wer­den. Feh­len­de Para­me­ter wer­den ent­we­der mit dem Ini­ti­al­wert der Para­me­ter­de­kla­ra­tion oder des Daten­typs ini­tia­li­siert.
  • InOut­Pa­ra­me­ter
Es wer­den Refe­ren­zen über­ge­ben, d.h. eine Wer­te­än­de­rung ist für den Auf­ru­fer sicht­bar. Feh­len­de Para­me­ter wer­den ent­we­der mit dem Ini­ti­al­wert der Para­me­ter­de­kla­ra­tion oder des Daten­typs ini­tia­li­siert.
  • Out­Pa­ra­me­ter
Rück­ga­be­wer­te der Pro­ze­dur. Schreibt die Pro­ze­dur nichts in den Para­me­ter wird ent­we­der der Ini­ti­al­wert der Para­me­ter­de­kla­ra­tion oder des Daten­typs zurück­ge­ge­ben.


OTX-Parameter-Declarations.png
OTX Para­me­ter & Dekla­ra­tio­nen


Dekla­ra­tio­nen

Varia­blen und Kon­stan­ten müs­sen dekla­riert wer­den. Für die Dekla­ra­tion gibt es nur zwei Orte:

  • glo­bal, auf Ebe­ne des Doku­ments oder
  • lokal, auf EBe­ne der Pro­ze­dur.

Kon­stan­ten wer­den zur Ent­wick­lungs­zeit defi­niert und zur Lauf­zeit nicht geän­dert. Varia­blen kön­nen durch die Pro­ze­dur belie­big geän­dert wer­den. Wird kein Stan­dard­wert defi­niert wird eine Varia­ble mit dem Stan­dard­wert des Daten­typs ini­tia­li­siert.

Kno­ten (Akti­vi­tä­ten oder Nodes)

Ein Kno­ten reprä­sen­tiert einen ein­zel­nen Schritt inner­halb eines Ablaufs (Flow). Er wird hier meist als Akti­vi­tät bezeich­net. Es gibt zwei Arten von Kno­ten:

  • Ato­mic-Node
Ein­fa­che Akti­vi­tät, wel­che kei­ne wei­te­ren Akti­vi­tä­ten bein­hal­ten kann. Bei­spiel: Action, Return, Con­ti­nue, Break und Throw
  • Com­pound-Node
Kann wei­te­re Akti­vi­tä­ten und Abläu­fe in belie­bi­ger Tie­fe ent­hal­ten. Bei­spiel: Group, Loop, Bran­ch, Par­al­lel und Hand­ler


OTX-Nodes.png
OTX Core Haupt­kno­ten (Akti­vi­tä­ten)


Com­pound Node – Group

Der Group Kno­ten ist der ein­fachs­te Com­pound Kno­ten. Er ver­bin­det eine Sequenz von Kno­ten zu einem logi­schen Block (Grup­pe) zusam­men. Der Autor zeigt damit die Zusam­men­ge­hö­rig­keit der Sequenz und unter­stützt damit einen kla­ren und modu­la­ren Auf­bau der Abläu­fe. Group Kno­ten kön­nen im OTX Desi­gner zusam­men- oder aus­ein­an­der­ge­klappt wer­den.


OTX-Group-Node.png
Group Node


Com­pound Node – Loop

Eine Schlei­fe (Loop) wird zur wie­der­hol­ten Aus­füh­rung von einer oder meh­re­ren Akti­vi­tä­ten ein­ge­setzt. In der Abbil­dung sind die 4 Arten von Schlei­fen dar­ge­stellt:


OTX-Loop-Nodes.png
OTX Loop Nodes (Schlei­fen)


  • For­Loop
For-Schlei­fe die durch­lau­fen wird, bis der Zäh­ler den End­wert erreicht hat.
  • ForE­ach­Loop
Schlei­fe die für jedes Ele­ment einer Auf­lis­tung durch­lau­fen wird.
  • While­Loop
Schlei­fe die durch­lau­fen wird, bis die Bedin­gung den Wert Fal­se lie­fert. Die Bedin­gung wird zu Beginn der Schlei­fe getes­tet.
  • DoWhile­Loop
Schlei­fe die durch­lau­fen wird, bis die Bedin­gung den Wert Fal­se lie­fert. Die Bedin­gung wird zu Beginn der Schlei­fe getes­tet.

Ein Break Kno­ten been­det die aktu­el­le Schlei­fe und setzt die Aus­füh­rung am nächs­ten Ato­mic-Kno­ten oder dem dar­über lie­gen­den Com­pound-Kno­ten fort. Ein Con­ti­nue Kno­ten been­det die aktu­el­le Ite­ra­tion in einer Schlei­fe und setzt die Aus­füh­rung mit der nächs­ten Ite­ra­tion fort. Bei Schlei­fen mit einer Bedin­gung, kann die Bedin­gung am Anfang (Whi­le) oder am Ende der Schlei­fe (DoWhi­le) getes­tet wer­den.

Com­pound Node – Bran­ch

Ver­zwei­gun­gen (Bran­ch) wer­den für die beding­te Aus­füh­rung von Sequen­zen ver­wen­det. Sie beste­hen aus einem oder meh­re­ren Zwei­gen mit einer Bedin­gung (Con­di­tion) und einer Sequenz (Flow). Die Bedin­gun­gen wer­den von links nach rechts aus­ge­wer­tet. Die ers­te Sequenz bei der die Bedin­gung wahr ist, wird aus­ge­führt. Zwei­ge, bei denen die Bedin­gung nicht wahr ist, wer­den igno­riert. Gibt es mehr als einen Zweig, muss der letz­te Zweig kei­ne Bedin­gung haben. Er wird dann falls kei­ne Bedin­gung zutrifft aus­ge­führt (Else).


OTX-Branch-Nodes.png
OTX Bran­ch Nodes (Ver­zwei­gun­gen)


Com­pound Node – Par­al­lel

Ein par­al­le­ler Kno­ten (Par­al­lel) besteht aus min­des­tens zwei Sequen­zen (Lane), die gleich­zei­tig aus­ge­führt wer­den. Jede Lane wird dabei in einem eige­nen Thread aus­ge­führt. Die Rei­hen­fol­ge der Aus­füh­rung der Lanes ist unbe­stimmt. Der Kno­ten kann nor­ma­ler­wei­se nur syn­chron been­det wer­den. Dies bedeu­tet, dass erst alle Lanes been­det sein müs­sen, bevor der Kno­ten been­det wird. Es gibt jedoch ver­schie­de­ne Bedin­gun­gen, die eine spe­zi­el­le Been­di­gung der Lanes erzwin­gen:


OTX-Parallel-Node.png
OTX Par­al­lel Node


  • Ter­mi­na­te­La­nes Node
Der Ter­mi­na­te­La­nes Kno­ten been­det die aktu­el­le Lane und signa­li­siert den ande­ren Lanes sich zu been­den. Die signa­li­sier­ten Lanes arbei­ten den aktu­el­len Ato­mic Kno­ten ab und been­det sich. Nach­dem sich alle Lanes been­det haben, wird auch der gesam­te Kno­ten been­det.
  • Return Node
Der Return Kno­ten been­det die aktu­el­le Lane, war­tet bis sich alle ande­ren Lanes been­det haben und been­det dann die gesam­te Pro­ze­dur.
  • Aus­nah­me
Wird inner­halb einer Lane eine unbe­han­del­te Aus­nah­me aus­ge­löst, been­det sich die aktu­el­le Lane. Nach­dem sich alle ande­ren Lanes been­det haben wird die Aus­nah­me an die dar­über lie­gen­den Schich­ten zur Bear­bei­tung wei­ter­ge­ge­ben.
  Exclamation.png Ach­tung: Es ist kein Timeout defi­niert. Es ist somit mög­lich, den Ablauf in ein Dead­lock zu brin­gen.
  Exclamation.png Ach­tung: Die Lanes soll­ten nie­mals Abhän­gig­kei­ten unter­ein­an­der auf­wei­sen!

Com­pound Node – Hand­ler

Ein Hand­ler Kno­ten wird ver­wen­det, um Abschnit­te inner­halb einer Sequenz auf uner­war­te­tes Ver­hal­ten (Aus­nah­men oder Excep­ti­ons) zu über­wa­chen. Er setzt sich zusam­men aus 3 Blö­cken, die wie­der­um Sequen­zen ent­hal­ten kön­nen:

  • Try-Block
Der Try-Block Ist der zu über­wa­chen­de Bereich. Jede Sequenz (Flow) kann einen Try-Abschnitt besit­zen. Wird kei­ne Excep­tion aus­ge­löst, wird die Bear­bei­tung nach dem letz­ten Cat­ch-Block fort­ge­setzt. Wird eine Excep­tion aus­ge­löst, wird die Abar­bei­tung sofort abge­bro­chen und die Sequenz aus­ge­führt, des­sen Cat­ch-Block zur Excep­tion passt.
  • Cat­ch-Block
Ein Cat­ch-Block ist der eigent­li­che Excep­tion-Hand­ler. Jeder Cat­ch Block kann einer Excep­tion zuge­wie­sen wer­den. Wird ein pas­sen­der Cat­ch-Block gefun­den, wer­den kei­ne wei­te­ren Cat­ch-Blöcke ver­ar­bei­tet. Wird kein pas­sen­der Cat­ch-Block gefun­den, wird die Feh­ler­be­hand­lung auf die nächs­te äuße­re Sequenz wei­ter­ge­reicht.
  • Final­ly-Block
Der Final­ly-Block wird immer aus­ge­führt, egal ob eine Excep­tion auf­ge­tre­ten ist oder nicht. Er dient der Berei­ni­gung von Res­sour­cen.
OTX-Handler-Nodes.png
OTX Hand­ler Node (Feh­ler­be­hand­lung)

Ato­mic Nodes – End­No­des

Wird inner­halb einer Sequenz der letz­te Kno­ten been­det, wird die Abar­bei­tung auf den nächs­ten Kno­ten in der äuße­re Sequenz über­ge­ben. Ist kei­ne wei­te­re äuße­re Sequenz vor­han­den, wird die Pro­ze­dur been­det. Dies ist das Stan­dard­ver­hal­ten bei Sequen­zen. Mit End­No­de Kno­ten kön­nen Sequen­zen in einer ande­ren Wei­se als dem Stan­dard­ver­hal­ten been­det wer­den. Es gibt 4 ver­schie­de­ne End­No­de Kno­ten:

  • Return
Been­det die gesam­te Pro­ze­dur sofort und über­gibt die Abar­bei­tung an den Auf­ru­fer.
  • Con­ti­nue
Been­det die äuße­re Schlei­fe sofort und setzt die Abar­bei­tung in der im Tar­get-Attri­but ange­ge­be­nen Schlei­fe fort. Vor der Wei­ter­ver­ar­bei­tung wird die Schlei­fen­be­din­gung erneut geprüft.
  • Break
Been­det eine Schlei­fe oder einen Par­al­lel Kno­ten sofort. Die Abar­bei­tung wird an den nächs­ten Kno­ten in der im Tar­get-Attri­but ange­ge­be­nen Schlei­fe/Par­al­lel fort­ge­führt.
  • Throw
Wirft eine expli­zi­te Excep­tion/Aus­nah­me. Been­det die Abar­bei­tung des aktu­el­len Kon­texts und über­gibt die Abar­bei­tung an den nächs­ten Feh­ler-Hand­ler.

Ato­mic Nodes – Action

In OTX ist eine Action ein ato­ma­rer Kno­ten, des­sen Ver­hal­ten durch die soge­nann­te Action­Rea­li­sa­tion bestimmt wird. Der OTX-Core und ins­be­son­de­re alle Erwei­te­rungs­bi­blio­the­ken defi­nie­ren die jewei­li­gen Action­Rea­li­sa­ti­ons.

  • Core: Assi­gnment, ProcedureCall, Lis­tIn­ser­tI­tems, ...
  • Diag­Com: Exe­cu­te­DiagS­er­vice, ...
  • HMI: Con­firm­Dia­log, ShowDocumentDialog, ...


OTX-Action-Nodes.png
OTX Action Nodes


Ein Action Kno­ten kann meh­re­re Rea­li­sie­run­gen haben, sie­he Vali­di­ty Kon­zept. Bei meh­re­ren Rea­li­sie­run­gen wird die ers­te Rea­li­sie­rung aus­ge­führt, deren Valid­For-Attri­but ent­we­der leer ist oder TRUE ergibt. Wei­te­re Rea­li­sie­run­gen wer­den igno­riert. Ein Action Kno­ten muss kei­ne Rea­li­sie­rung haben, sie­he Spe­ci­fi­ca­tion-Rea­li­sa­tion Kon­zept. Eine Action ohne Rea­li­sie­rung dient nur der Spe­zi­fi­ka­tion und wird zur Lauf­zeit igno­riert.

Aus­drücke (Terms)

Terms wer­den ver­wen­det um Aus­drücke (Expres­si­ons) zu beschrei­ben. Terms wer­den an vie­len ver­schie­de­nen Stel­len ein­ge­setzt:

  • In Acti­ons
  • In Para­me­tern
  • In Bedin­gun­gen

Terms haben einen Rück­ga­be­wert und ent­hal­ten Wer­te, Varia­blen oder wie­der­um Terms in belie­bi­ger Ver­schach­te­lungs­tie­fe. Die Argu­men­te eines Terms wer­den durch die Aus­wer­tung nicht ver­än­dert, d.h. ein Term hat kei­ne Sei­ten-Effek­te! Ein Term wird durch sei­nen Rück­ga­be­typ kate­go­ri­siert, sie­he Abbil­dung:


OTX-Term.png
Typen von OTX Terms (Aus­drücke)


Inner­halb des OTX Desi­gners wer­den die meis­ten Terms gra­fisch als Akti­vi­tä­ten dar­ge­stellt.


OTX-Terms.png
OTX Terms als Akti­vi­tä­ten


Jede Biblio­thek kann von den Core-Terms abge­lei­te­te neue Terms defi­nie­ren

Bei­spiel­be­da­tung

Im fol­gen­den Bild ist ein OTX Doku­ment im XML-For­mat dar­ge­stellt. Es zeigt exem­pla­risch einen ein­fa­chen Ablauf. Im glo­ba­len Bereich wird eine Vali­di­ty defi­niert. Es gibt eine Pro­ze­dur mit einer Varia­blen vom Typ Inte­ger. Im Ablauf wird eine Umge­bungs­va­ria­ble data1 auf den Wert "abc" gesetzt.


OTX-sample-code.png
Ein­fa­cher OTX Bei­spie­la­b­lauf im XML-For­mat


Siehe auch

OTX - Hintergrund & Motivation

OTX - Aufbau & Bibliotheken

OTX - Basiskonzepte