CX_FORMULA
Klassenhierarchie
Beschreibung:
Berechnungsvorschriften, die nicht als Bestandteil eines Programms sondern als vom Anwender erzeugte und verwaltete Daten existieren, werden im ClassiX®-System durch Objekte der Klasse CX_FORMULA repräsentiert.
Ein Formel-Objekt enthält einen arithmetischen Ausdruck in der externen, vom Menschen lesbaren Form und gleichzeitig eine interne Darstellung, die eine sehr schnelle Auswertung der Ausdrücke erlaubt.
Das Ergebnis der Auswertung einer Formel kann ein beliebiges Objekt sein (ein numerischen Wert, ein Wahrheitswert, Datum, Zeichenkette usw...).
Die Elemente einer Formel sind Operanden, Operatoren, InstantView® Makros und Funktionsaufrufe. Operanden sind Variablen oder Konstanten.
Hinweis: Die Operanden sind immer Objekte. Die in einer Formel erlaubten Operationen rufen entsprechende virtuelle Funktionen der Operanden auf, und damit bestimmt das Objekt die Semantik der Operatoren.
Die Syntax der Formelausdrücke entspricht der Syntax für die Beschreibung arithmetischer Ausdrücke in BASIC, FORTRAN und anderen üblichen (prozeduralen) Programmiersprachen. Terme können in Klammern zusammengefasst werden, um die Reihenfolge der Operationen zu beeinflussen. Die vollständige Grammatik ist hier in EBNF-Notation dokumentiert.
Mehrere Funktionsparameter werden durch Komma getrennt. Einzelne Ausdrücke, die unabhängig voneinander ausgewertet werden sollen, sind durch Semikolon zu trennen (das ist sinnvoll bei Zuweisungen mit :=).
Im Formelausdruck dürfen Kommentare in der in C++ üblichen Form untergebracht werden, d.h. an beliebiger Stelle mit /* ... */ und am Ende mit //
Variablen und externe Funktionen beziehen sich auf bisher noch nicht näher bestimmte Objekte. Erst bei der Auswertung der Formel werden diesen Operanden Datenfelder bzw. Methoden bestimmter Objekte zugeordnet und damit ihr Wert festgelegt. Zu diesem Zweck werden im ClassiX®-System Objekte registriert (PlugSpace), und so entsteht ein aktueller Kontext, durch den die Variablen der Formel eine konkrete Bedeutung erhalten (Beispiel).
Beispiele
Formel | Beschreibung | Elemente |
---|---|---|
0.5 * (x + y) | die Hälfte der Summe aus x und y | x und y sind Variablen, 0.5 eine Konstante |
x < y & x >= 2 | Ist x kleiner als y und größer als "2", so ist das Ergebnis der Wahrheitswert TRUE, ansonsten FALSE | x und y sind Variablen, 2 eine Konstante |
|
Berechnet den 4. Advent eines Jahres, das durch ein Objekt CX_DATE im PlugSpace bestimmt ist | Previous ist eine interne Funktion, Day eine externe, 6, 12 und 24 sind Konstanten |
weiter Beispiele finden sie hier! |
Darstellung am Bildschirm
Zur Darstellung von Objekten dieser Klasse wird ein Oberflächenobjekt vom Typ String verwendet. Die folgende Abbildung zeigt ein Beispiel (Programmcode):
Funktion | MA* | Parameter | Rückgabe | Kurzbeschreibung |
---|---|---|---|---|
Amount | OBJECT | Auswerten der Formel Rückgabe des Wertes des Ergebnis-Objekts | ||
Evaluate | OBJECT | Auswerten der Formel | ||
Evaluate1 | OBJECT | Auswerten der Formel, ungebundene Variable führt zu Fehler | ||
Evaluate2 | OBJECT | Auswerten der Formel, bei ungebundenen Variablen erhält man als Ergebnis 0.0 (CX_NUMERIC) | ||
Evaluate3 | OBJECT | Auswerten der Formel, ungebundene Variablen werden mit SendMsg / Waiton |
||
Evaluate4 | OBJECT | Auswerten der Formel, für ungebundenen Variablen geht ein dem Type entsprechendes Objekt mit Wert Null in die Berechnung ein. | ||
EvaluateWeak | OBJECT | Auswerten der Formel-Bedingung, wie beim Evaluate1, Fehler werden in ein CX_VESSEL Objekt geschrieben | ||
GetInputAccessPaths 233188 |
VECTOR<STRING> | Liefert alle Zugriffspfade dieser Formel zurück | ||
GetInputVarNames | (OBJECT) | VECTOR<STRING> | liefert die Namen aller für die Berechnung der Formel benötigten Variablen, wenn ein Container-Objekt angegeben wird, werden in diesem die entsprechenden dynamische Datenfelder erzeugt | |
RawFormula | STRING | Formel in String-Form | ||
SetMessage | (INTEGER) | Anmelden InstantView®-Message (für Evaluate3) | ||
ShowIPN | STRING | Anzeigen der Formel in der IP-Notation | ||
XMLExport | STRING | Formel in der XML-Form (lokaler Zeichensatz) | ||
XMLExportUTF8 | STRING | Formel in der XML-Form (UTF-8) | ||
Add | CX_AMOUNT | CX_AMOUNT | Operator + als Funktion | |
AddAssign | CX_AMOUNT | Operator += als Funktion | ||
AmountWeak | CX_AMOUNT | |||
Autoformat | INTEGER, INTEGER | CX_AMOUNT | Liefert ein, entsprechend der gegeben Anzahl von Vor- und Nachkommastellen, formatiertes Objekt zurück (nur bei CX_VALUE, sonst das Objekt selbst). | |
DivAssign | CX_AMOUNT | Operator /= als Funktion | ||
Divide | CX_AMOUNT | CX_AMOUNT | Operator / als Funktion | |
MulAssign | CX_AMOUNT | Operator *= als Funktion | ||
Multiply | CX_AMOUNT | CX_AMOUNT | Operator * als Funktion | |
SubAssign | CX_AMOUNT | Operator -= als Funktion | ||
Subtract | CX_AMOUNT | CX_AMOUNT | Operator - als Funktion |
* MA = Member-Access-Funktion
Spezielle Funktionen innerhalb eines Formelausdrucks
Funktion | Parameter | Rückgabe | Kurzbeschreibung |
---|---|---|---|
available | (OBJECT) | OBJECT | testet, ob die als Parameter angegebene Variable (d.h. ein dynamisches Datenfeld oder ein Zugriffsausdruck) gebunden ist. Im Gegensatz zu has(...) wird die Variable locker gebunden (der Normalfall). |
get | (OBJECT) | OBJECT | fordert, dass die Variable eng gebunden wird. |
has | (OBJECT) | OBJECT | testet, ob die als Parameter angegebene Variable (d.h. ein dynamisches Datenfeld oder ein Zugriffsausdruck) gebunden ist, wobei die Variable eng gebunden wird (siehe Funktion get) |
inherited | (OBJECT, OBJECT) | OBJECT | testet, ob das mit Variable bezeichnetet Objekt von der mit dem zweiten Parameter bezeichneten Klasse abgeleitet ist. Der Name einer Klasse kann als Parameter angegeben werden (Typkonstante) |
type | (OBJECT) | OBJECT | liefert den Typ einer Variablen. Das Ergebnis kann mit einer Typkonstanten verglichen werden. |
var | (OBJECT) | OBJECT | liefert den Wert einer InstantView®-Variablen, deren Name als Parameter anzugeben ist. var(...) kann auch am Anfang einer Zugriffsausdrucks stehen. |
Datenfeld | Typ | Referenz-Klasse | I* | Kurzbeschreibung |
---|---|---|---|---|
this | CX_FORMULA | Die Formel |
* I = Indizierbares Datenfeld
Modul | Kurzbeschreibung |
---|---|
formula.mod | Berechnungsformel Basismodul |
formuedt.mod | Berechnungsformel Editiermodul |
formusel.mod | Berechnungsformel Selektionsmodul |
formsamp.mod | Berechnungsformel Beispielmodul |
testform.mod | Formel testen |