OOP vs. prozedurale Programmierung - Seite 27

 
Реter Konow:
In der funktional-prozeduralen Programmierung gibt es die von Ihnen beschriebenen Zugriffsprobleme nicht. Ohne Überladung von Funktionen, ohne Felder und Objekte, ohne Zeiger und so weiter, wenn man nur einen Speicher für alle globalen Variablen hat, auf den man von überall zugreifen kann, wie kann dann die falsche Funktion aufgerufen werden? Welche Arten von Zugriffsfehlern können auftreten? Und es ist viel einfacher, sich alles zu merken.

Der einfachste Fehler besteht darin, auf die falsche Variable zu verweisen, die einen Wert in der Nähe des Wertes enthält.

Ein solcher Fehler kann sehr lange unentdeckt bleiben, aber nach dem Gesetz der Gemeinheit "taucht" er gerade dann auf, wenn eine fehlerfreie Arbeit an dieser Stelle dringend erforderlich wäre!

Und es wird ach so schwer sein, das herauszufinden... Sie versuchen zu verstehen, warum der Expert Advisor einen Handel in einem guten Trend geschlossen hat, obwohl TS ihn nicht hätte schließen sollen - und Sie können es nicht. Alles scheint korrekt zu funktionieren.

Genau das ist einer der unangenehmsten Fehler - die Nichtinitialisierung von Variablen oder die Adressierung der falschen, aber wertmäßig nahen Variablen. Und je mehr Variablen in diesem oder jenem Teil des Programms vorhanden sind, desto größer ist die Wahrscheinlichkeit dieses Fehlers.

Ja, natürlich, wenn Sie einen global zugänglichen grafischen Kern haben und mit Aufträgen arbeiten, ist es wirklich schwierig, auf eine falsche Variable zuzugreifen. Aber in einem früheren Block, in dem Sie die Notwendigkeit der Eröffnung eines Auftrags erkennen und Indikatoren für diesen Zweck und wahrscheinlich entsprechend den Aktionen des Benutzers adressieren, ist es ziemlich real, Variablen zu verwechseln.

Wenn es mehr Strukturen gibt und wichtige Details regelmäßig aus dem Speicher verschwinden, werden Sie zu dem Schluss kommen, dass der globale Zugriff eine Quelle von Problemen ist, und Sie sollten seine Verwendung um jeden Preis vermeiden. Und dass der Code so geschrieben sein sollte, dass man sich so wenig wie möglich merken muss. Idealerweise halten Sie nichts im Speicher vor - jeder Block hat einen Namen, der seine Funktion angibt, am Eingang erhält er Daten, die für diese Funktion notwendig und ausreichend sind, alles, was bleibt, ist die Funktion zu implementieren, ohne weiteres Wissen "von außen" einzubeziehen.

 
George Merts:

Es ist ein einfacher Fehler, sich auf die falsche Variable zu beziehen, die einen Wert enthält, der nahe am Wert liegt.

Ein solcher Fehler kann sehr lange unentdeckt bleiben, aber nach dem Gesetz der Gemeinheit "taucht" er gerade dann auf, wenn eine fehlerfreie Arbeit an dieser Stelle dringend erforderlich wäre!

Und es wird ach so schwer sein, das herauszufinden... Sie versuchen zu verstehen, warum der Expert Advisor einen Handel in einem guten Trend geschlossen hat, obwohl TS ihn nicht hätte schließen sollen - und Sie können es nicht. Alles scheint korrekt zu funktionieren.

Genau das ist einer der unangenehmsten Fehler - die Nichtinitialisierung von Variablen oder die Adressierung der falschen, aber wertmäßig nahen Variablen. Und je mehr Variablen in diesem oder jenem Teil des Programms vorhanden sind, desto größer ist die Wahrscheinlichkeit dieses Fehlers.

Ja, natürlich, wenn Sie einen global zugänglichen grafischen Kern haben und mit Aufträgen arbeiten, ist es wirklich schwierig, auf eine falsche Variable zuzugreifen. Aber in einem früheren Block, in dem Sie die Notwendigkeit der Eröffnung eines Auftrags erkennen und Indikatoren für diesen Zweck und wahrscheinlich entsprechend den Aktionen des Benutzers adressieren, ist es ziemlich real, Variablen zu verwechseln.

Wenn es mehr Strukturen gibt und wichtige Details regelmäßig aus dem Speicher verschwinden, werden Sie zu dem Schluss kommen, dass der globale Zugriff eine Quelle von Problemen ist, und Sie sollten seine Verwendung um jeden Preis vermeiden. Und dass der Code so geschrieben sein sollte, dass man sich so wenig wie möglich merken muss. Idealerweise wird überhaupt nichts im Speicher abgelegt - jeder Block hat einen Namen, der seine Funktion angibt, bei der Eingabe erhält er die für diese Funktion notwendigen und ausreichenden Daten, es bleibt nur noch, die Funktion zu implementieren, ohne weiteres Wissen "von außen" einzubeziehen.

Wie kann man die falsche Variable aufrufen, wenn sie alle unterschiedliche Namen haben? Wie kann eine falsche Funktion aufgerufen werden, wenn sie einen eindeutigen Namen und keine Überladung hat? Innerhalb des Kernel-Arrays werden alle Zellindizes mit menschlichen Wörtern benannt. Was könnte hier verwechselt werden? Verstehen Sie, die Probleme, von denen Sie sprechen, gibt es gar nicht.


Ich behalte nur die Kernelstruktur im Speicher, was sehr einfach ist. Ich kenne auch die Liste der Eigenschaften der Objekte. Alle Objekte haben die gleichen Eigenschaften, nur die Werte sind unterschiedlich. Ich habe insgesamt 140 Eigenschaften, aber ich behalte nur die wichtigsten, etwa 30, im Gedächtnis. An den Rest erinnere ich mich, wenn ich sie brauche. Dazu öffne ich eine Datei mit Defines und schaue mir die vollständige Liste der Eigenschaften an. Nichts Kompliziertes. Globale Variablen im Fokus, wie z.B. "OBJECT" oder "WINDOW", müssen nicht gespeichert werden. Und es ist unmöglich, es mit etwas anderem zu verwechseln.

Meine Variablen haben sinnvolle Namen auf Russisch. Nach einer wilden Party kann man nur durcheinander kommen).
 

Meine globalen Variablen sind die im Fokus verwendeten Variablen, die auf den Kernel "abzielen" und mit der Bewegung des Cursors verschoben werden.

Ein Beispiel: Die Variable "WINDOW" enthält ständig die Nummer des Fensters, in dem sich der Cursor befindet. Die Variable "OBJECT" ist die Nummer des Objekts, in dem sich der Cursor befindet.

Über sie adressiere ich ein bestimmtes Fenster, Objekt und eine Eigenschaft im Kernel - G_CORE[WINDOW][OBJECT][_NAME] oder G_CORE[WINDOW][OBJECT][_OBJECT_GROUP]. Wenn ich in einer beliebigen Funktion die X-Koordinate eines Objekts benötige, erhalte ich sie von G_CORE[WINDOW][OBJECT][_X], wenn die Objekthöhe - von G_CORE[WINDOW][OBJECT][_Y_SIZE] usw...


Alles in allem habe ich etwa hundert separat deklarierte globale Variablen, aber es gibt Tausende davon im globalen Kernel-Array, weil jede Zelle im Array eine Variable ist. Es ist jedoch sehr einfach, diese Anzahl von Variablen zu verwalten, da sie geordnet sind. Jedes Fenster im Kernel ist ein Array-Feld; jede Zeile ist ein Objekt, das aus 140 Eigenschaften besteht. Elemente sind in diesem Fall Mengen von Objekten. Jedes Element hat ein Stammobjekt, das die wichtigsten Eigenschaften des gesamten Elements enthält. Die zu den einzelnen Elementen gehörenden Objekte sind durch spezielle Indizes miteinander verknüpft, so dass bei jedem Objekt, das in den Fokus gerät, auch das Element, zu dem es gehört, in den Fokus gerät. Das gilt auch für die Leinwand, auf der sie gezeichnet wird. Dank des expliziten Archetyps des Kernels und des direkten Zugriffs von jeder Funktion aus kann ich Tausende von Variablen, die durch Kernel-Array-Zellen dargestellt werden, manipulieren, ohne etwas zu vergessen und ohne um sie herum navigieren zu müssen.

 
СанСаныч Фоменко:

Eine völlig sinnlose Diskussion: Es gibt kein Kriterium für die Einstufung von Code als "gut" oder "schlecht". Aus diesem Grund ist es nicht klar, was OOP ist.

Für mich ist ein solches Kriterium die FEASIBILITÄT des Codes, die sich darin äußert, dass der Autor oder ein Dritter den Code lesen und für Modifikationen verwenden kann, um nach einer längeren Zeit nach Fehlern zu suchen.....


Hier oben hat Fedoseyev den OOP-Schalter ersetzt. Dieses spezielle Beispiel, das vielleicht unglücklich ist, ist für mich ein Beweis für die Bösartigkeit von OOP: klarer Code mit einem Schalter mit 100 Positionen wird durch eine einzige Zeile ersetzt. Um diese Linie zu verstehen, muss man irgendwo ansetzen. Das ist für mich nicht zulässig.

Das zweite Beispiel obenvon George Merts

Wenn der klare Code nach der Fehlersuche durch NICHT klaren Code ersetzt wurde. Nach meinen Kriterien wurde der Qualitätscode (leicht lesbar) durch den für mich nicht akzeptablen Code ersetzt.


Deshalb habe ich eine Frage an alle OOP-Befürworter: Wird ein Programm lebendiger, wenn OOP angewandt wird, und ist das von Fedoseyev angeführte Beispiel für den Wechsel ein Fehlschlag, oder charakterisiert Fedoseyevs Beispiel OOP sehr treffend und führt OOP fast immer zu einem Verlust an Lebendigkeit?


Nun, bei CC ist alles klar. Alles, was über das Niveau seines Verständnisses hinausgeht, ist unansehnlich. Aber er kennt den Buchstaben R ))))))))))))))

 
Alexey Volchanskiy:

Nun, das CC ist eindeutig. Alles, was über seinem Verständnisniveau liegt, ist unattraktiv. Aber er kennt den Buchstaben R ))))))))))))))

Ich werde der PLO Chinesen hinzufügen, vielleicht auch Japaner...

Warum PLO? WARUM sollte es besser sein?

Bei der Sichtbarkeit geht es um die Vereinfachung von Fehlersuche und Änderungen. Sichtbarkeit entsteht durch sorgfältige Programmgestaltung, durch Strukturierung in FUNKTIONEN und nicht in OBJEKTE, denn die ganze Welt basiert auf Aktionen an Objekten, aber nicht umgekehrt.

Wenn die Aufteilung in Funktionen aus der Reihenfolge der Umwandlung von Eingaben in Ausgaben abgeleitet wird. Zum Beispiel ist die Umwandlung einer BUY|SELL-Eingabe in eine Ausgabe nur durch die Angabe einer ACTION möglich.

So funktioniert das menschliche Denken.


PS.

Bezüglich Ihrer Bemerkung über R.

Wollen Sie sarkastisch werden?

Ich antworte sehr selten, aber ich kann.

 
Реter Konow:

Wie zum Teufel kann man die falsche Variable aufrufen, wenn sie alle unterschiedliche Namen haben? Wie kann die falsche Funktion aufgerufen werden, wenn sie einen eindeutigen Namen und keine Überladung hat? Innerhalb des Kernel-Arrays werden alle Zellindizes mit menschlichen Wörtern benannt. Was könnte hier verwechselt werden? Verstehen Sie, die Probleme, von denen Sie sprechen, gibt es gar nicht.

Nun, ich hatte schon ein paar solcher Fälle.

Meistens treten solche Fehler auf, wenn man ein Stück Code von einer anderen Stelle kopiert und es nach dem aktuellen Block "korrigiert". Wenn Sie globalen Zugriff haben, kann es gut sein, dass Sie eine der Variablen nicht ändern. Wenn Sie nur Zugriff auf das haben, womit Sie in diesem Fall arbeiten müssen, dann gibt Ihnen der Compiler nach dem Kopieren selbst eine Liste aller Variablen und Stellen, die geändert werden müssen.

Tag Konow:

Ich habe nur die Kernel-Struktur in meinem Speicher, die sehr einfach ist. Ich kenne auch die Liste der Objekteigenschaften. Die Eigenschaften aller Objekte sind die gleichen, nur die Werte sind unterschiedlich. Ich habe insgesamt 140 Eigenschaften, aber ich behalte nur die wichtigsten, etwa 30, im Gedächtnis. An den Rest erinnere ich mich, wenn ich sie brauche. Dazu öffne ich eine Datei mit Defines und schaue mir die vollständige Liste der Eigenschaften an. Nichts Kompliziertes.

30 Immobilien, das ist für mich nicht akzeptabel. Nicht, dass ich mich nicht an sie erinnern könnte, aber ich möchte mich nicht auf mein Gedächtnis verlassen. Viel besser ist es, wenn man in jedem Block immer genau die Variablen hat, die in diesem Block verarbeitet werden sollen, und es keinen Zugriff auf andere gibt.

Aber es stresst mich, immer daran denken zu müssen... Und da es für Sie nicht schwer ist, ist es verständlich, dass es keinen Sinn hat, unnötige OOP-Fummeleien zu machen.

 
George Merts:

Nun, ich hatte ein paar solcher Fälle.

Meistens treten solche Fehler auf, wenn Sie ein Stück Code von einer anderen Stelle kopieren und es an den aktuellen Block "anpassen". Wenn Sie globalen Zugriff haben, kann es gut sein, dass Sie eine der Variablen nicht ändern. Wenn Sie nur Zugriff auf das haben, womit Sie in diesem Fall arbeiten müssen, dann gibt Ihnen der Compiler nach dem Kopieren selbst eine Liste aller Variablen und Stellen, die geändert werden müssen.

30 Immobilien, das ist für mich nicht akzeptabel. Es ist nicht so, dass ich mich nicht an sie erinnern kann, aber ich möchte mich nicht auf mein Gedächtnis verlassen. Es ist viel besser, wenn man in jedem Block immer genau die Variablen hat, die in diesem Block verarbeitet werden sollen, und es keinen Zugriff auf andere gibt.

Aber es stresst mich, immer daran denken zu müssen... Und da es für Sie nicht schwer ist, ist es verständlich, dass es keinen Grund gibt, unnötige OOP-Transaktionen durchzuführen.


Ehrlich gesagt, erinnere ich mich an viele Dinge. Schauen Sie sich nur die Abkürzungen der Fangobjekte an _X2X, Y2Y, B2B, R2R, H2Y, W2X, Y2H, X2W, C2C usw... definiert jeweils die Position eines Objekts im Verhältnis zu einem anderen. Diese finden sich in den Parametern A1,B1,C1,A2,B2,C2,A3,B3,C3,A4,B4,C4,A5... Ich erinnere mich auch an ein paar Dutzend Namen von Kategorien und Unterkategorien von Objekten, ein paar Dutzend Eigenschaften von Fenstern (mehr als 100 davon). Der Build-Block enthält zum Beispiel Dutzende von Funktionen, die mehr als 4000 Zeilen Code beanspruchen. Man muss sich zurechtfinden und sich viele von ihnen merken. Aber das Erinnern kommt durch lange Übung, nicht auf einmal, sondern nach und nach. Die Menge an Entitäten und die Größe des Codes haben mir früher den Kopf schwer gemacht, aber dann wurde alles zusammengepackt und einfach.

 
Реter Konow:

Ehrlich gesagt, erinnere ich mich an viele Dinge. Die Abkürzungen für die Objektreferenzen _X2X, Y2Y, B2B, R2R, H2Y, W2X, Y2H, X2W, C2C, usw... Jeder definiert eine bestimmte Position eines Objekts zu einem anderen, sind in Parameter A1,B1,C1,A2,B2,C2,A3,B3,C3,A4,B4,C4,A5... Ich erinnere mich auch an ein paar Dutzend Namen von Kategorien und Unterkategorien von Objekten, ein paar Dutzend Eigenschaften von Fenstern (mehr als 100 davon). Der Build-Block enthält zum Beispiel Dutzende von Funktionen, die mehr als 4000 Zeilen Code beanspruchen. Man muss sich zurechtfinden und sich viele von ihnen merken. Aber das Erinnern kommt durch lange Übung, nicht auf einmal, sondern nach und nach. Die Anzahl der Entitäten und die Größe des Codes haben mir früher den Kopf verdreht, aber dann wurde das Ganze zu einfach.


Um mich abzulenken, alles zu vergessen, einen Monat lang in Urlaub zu fahren, ohne an den Code zu denken. Dann kommen Sie zurück, sehen all diese a1, b1, etc. und werden hysterisch :)

 
Alexey Oreshkin :

sich ablenken lassen, alles vergessen, einen Monat in den Urlaub fahren, nicht an den Code denken. Sehen Sie nach dem Kommen all diese a1, b1 usw. und werde hysterisch :)

So sieht zum Beispiel das "Checkbox"-Element im Proto-Core aus:

_OBJECTS_SET, CHECKBOX,
//============================================================================================================================================================================================================================================================================================================================================================================================================================================
//------------T------X----Y----W-----H----B_TYPE-- MOB---PXL-----------G-----C------SG---SC--OBJSCR--NEUTRAL-----------A1--B1--C1-----------A2----B2--C2----------A3----B3--C3--------A4--B4--C4-------OBH--OBI--C5--D5--E5--------------------------------------------------------------------------------------------------------------ACT-STATUS--CURRENT-----CURRENT---LAST--------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Основание чекбокса--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_NEW_OBJECT,   5 ,     0 ,   0 ,   200 ,   17 ,  _STRIP,  _CNVS,     0 ,    _aq1,CHECKBOX,   0 ,_MOB,   0 ,    _aq1,  _NS_gr1,   A1,  _C2C,_CNVS, 0 ,  A2,  _C2C,_CNVS, 0 ,    A3,_W2T, _aq3,   30 ,      A4,   0 , 0 ,   0 ,    A5, 0 ,   0 ,   0 ,   0 ,   0 ,   A6,   0 ,      A7, 1 ,    _aq1, CHECKBOX,         0 ,         0 ,         0 ,         0 ,         0 ,       0 ,       0 ,       0 ,         0 ,         0 ,       0 ,       0 ,   A8,   0 ,   0 ,   0 ,   A9, _OBJECT_RELEASED, _NS_gr1,   0 ,   0 ,   0 ,     0 ,     0 ,     0 ,   _PL_END,
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Лейбл чекбокса--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_NEW_OBJECT,   5 ,     0 ,     0 ,   0 ,     0 , _LABEL,  _CNVS,     0 ,    _aq2,CHECKBOX,   0 ,   0 ,   0 ,    _aq1,  _NS_gr3,   A1,  _X2X,_aq1, 0 ,   A2,  _Y2Y,_aq1,   0 ,    A3,   0 ,   0 ,   0 ,      A4,   0 , 0 ,   0 ,      A5, 0 ,_CHECKBOX_OFF, 0 ,   0 ,   0 ,   A6,   0 ,    A7, 2 ,    _aq1,         0 ,         0 ,         0 ,         0 ,         0 ,     0 ,       0 ,       0 ,       0 ,         0 ,         0 ,       0 ,       0 ,       A8,   0 ,   0 ,   0 ,  A9, _OBJECT_RELEASED, _NS_gr4,  _CHECKBOX_ON,   0 ,   0 ,   _NS_gr5,   _NS_gr6,    _NS_gr7,   _NS_gr7, _PL_END,
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Наименование чекбокса--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_NEW_OBJECT,   5 ,     0 ,     0 ,   0 ,     0 , _TEXT_,  _CNVS,     0 ,    _aq3,CHECKBOX,_OCN,   0 ,   0 ,    _aq1,  _NS_gr2,   A1,  _X2X,_aq1, 25 ,   A2,  _Y2Y,_aq2,   2 ,    A3,   0 ,   0 ,   0 ,      A4,   0 , 0 ,   0 ,     A5, 0 ,   0 ,   0 ,   0 ,   0 ,   A6,   0 ,              A7, 3 ,    _aq1,         0 ,         0 ,         0 ,         0 ,         0 ,     0 ,       0 ,       0 ,       0 ,         0 ,         0 ,       0 ,       0 ,       A8,   0 ,   0 ,   0 ,   A9, _OBJECT_RELEASED, _NS_gr2,   0 ,   0 ,   0 ,    _NS_gr9,    _NS_gr9,    _NS_gr10,   _NS_gr10,    _PL_END,
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_END_,
//============================================================================================================================================================================================================================================================================================================================================================================================================================================

//_NEUTRAL_STATE
//====================================================================================================================================================================================================================================================
//             X           Y        PIXEL_0     ALFA_0     PIXEL_1      ALFA_1    PIXEL_2     ALFA_2     PIXEL_3     ALFA_3       PIXEL_4     ALFA_4      PIXEL_5     ALFA_5        PIXEL_6     ALFA_6    PIXEL_7     ALFA_7
//====================================================================================================================================================================================================================================================
_NS_gr1,       0 ,           0 ,         0 ,         0 ,         - 1 ,         - 1 ,        - 1 ,        - 1 ,         - 1 ,         - 1 ,          - 1 ,        - 1 ,          - 1 ,         - 1 ,           - 1 ,         - 1 ,         - 1 ,        - 1 ,          _PL_END,
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//====================================================================================================================================================================================================================================================

//==========================================================================================================================================================================================================================================
//-------------X-----------Y--------TEXT COLOR-----TEXT_ALFA   FONT----FONT SIZE-----ANGLE------POSITION----------STYLE---------------------------------------------------------------------------------------------------------------------------------------       
//==========================================================================================================================================================================================================================================
_NS_gr2,     0 ,           0 ,           clrBlack ,         255 ,       1 ,       10 ,         0 ,     TA_LEFT | TA_TOP ,     FW_NORMAL ,        - 1 ,         - 1 ,         - 1 ,          - 1 ,      - 1 ,         - 1 ,        - 1 ,           - 1 ,        - 1 ,          _PL_END,
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//=======================================================================================================================================================================================================================================
//==========================================================================================================================================================================================================================================
//-------------X-----------Y--------TEXT COLOR-----TEXT_ALFA   FONT----FONT SIZE-----ANGLE------POSITION----------STYLE---------------------------------------------------------------------------------------------------------------------------------------       
//==========================================================================================================================================================================================================================================
_NS_gr9,     0 ,           0 ,           clrBlue ,         155 ,       1 ,       10 ,         0 ,     TA_LEFT | TA_TOP ,     FW_NORMAL ,        - 1 ,         - 1 ,         - 1 ,          - 1 ,      - 1 ,         - 1 ,        - 1 ,           - 1 ,        - 1 ,          _PL_END,
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//=======================================================================================================================================================================================================================================
//==========================================================================================================================================================================================================================================
//-------------X-----------Y--------TEXT COLOR-----TEXT_ALFA   FONT----FONT SIZE-----ANGLE------POSITION----------STYLE---------------------------------------------------------------------------------------------------------------------------------------       
//==========================================================================================================================================================================================================================================
_NS_gr10,     0 ,           0 ,       C'150,150,150' ,     255 ,       1 ,       10 ,         0 ,     TA_LEFT | TA_TOP ,     FW_NORMAL ,        - 1 ,         - 1 ,         - 1 ,          - 1 ,      - 1 ,         - 1 ,        - 1 ,           - 1 ,        - 1 ,          _PL_END,
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//=======================================================================================================================================================================================================================================


//LABEL _NEUTRAL_STATE
//====================================================================================================================================================================================================================================================
//             X           Y        PIXEL_0     ALFA_0     PIXEL_1      ALFA_1       PIXEL_2     ALFA_2        PIXEL_3     ALFA_3         PIXEL_4       ALFA_4           PIXEL_5     ALFA_5        PIXEL_6     ALFA_6    PIXEL_7     ALFA_7
//====================================================================================================================================================================================================================================================
_NS_gr3,       0 ,           0 ,     C'255,255,255' ,   255 ,   C'253,253,253' ,   255 ,     C'80,80,80' ,   255 ,         C'140,140,140' , 255 ,       C'200,200,200' ,   255 ,         C'245,245,245' ,   255 ,     C'240,240,240' ,   255 ,       0 ,     0 ,          _PL_END,
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//====================================================================================================================================================================================================================================================

//LABEL _ACTIVATED_STATE
//====================================================================================================================================================================================================================================================
//             X           Y        PIXEL_0     ALFA_0     PIXEL_1      ALFA_1       PIXEL_2     ALFA_2        PIXEL_3     ALFA_3         PIXEL_4       ALFA_4           PIXEL_5     ALFA_5        PIXEL_6     ALFA_6   PIXEL_7     ALFA_7
//====================================================================================================================================================================================================================================================
_NS_gr4,       0 ,           0 ,     C'255,255,255' ,   255 ,   C'253,253,253' ,   255 ,     C'80,80,80' ,   255 ,         C'140,140,140' , 255 ,       C'200,200,200' ,   255 ,         C'245,245,245' ,   255 ,     C'240,240,240' ,   255 ,       0 ,       0 ,          _PL_END,
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//====================================================================================================================================================================================================================================================

//_OBJECT_NEUTRAL_HIGHLIGHTED
//====================================================================================================================================================================================================================================================
//             X           Y        PIXEL_0     ALFA_0     PIXEL_1      ALFA_1       PIXEL_2     ALFA_2        PIXEL_3     ALFA_3         PIXEL_4       ALFA_4           PIXEL_5     ALFA_5        PIXEL_6     ALFA_6    PIXEL_7     ALFA_7
//====================================================================================================================================================================================================================================================
_NS_gr5,       0 ,           0 ,     clrWhite ,   255 ,         clrWhite ,     255 ,     C'80,80,80' ,   255 ,         C'140,140,140' , 255 ,       C'200,200,200' ,   255 ,         C'245,245,245' ,   255 ,     C'240,240,240' ,   255 ,       clrBlue ,       255 ,          _PL_END,
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//====================================================================================================================================================================================================================================================

//_OBJECT_ACTIVATED_HIGHLIGHTED
//====================================================================================================================================================================================================================================================
//             X           Y        PIXEL_0     ALFA_0     PIXEL_1      ALFA_1       PIXEL_2     ALFA_2        PIXEL_3     ALFA_3         PIXEL_4       ALFA_4           PIXEL_5     ALFA_5        PIXEL_6     ALFA_6    PIXEL_7     ALFA_7
//====================================================================================================================================================================================================================================================
_NS_gr6,       0 ,           0 ,     C'255,255,255' ,   255 ,   C'253,253,253' ,   255 ,     C'80,80,80' ,   255 ,         C'140,140,140' , 255 ,       C'200,200,200' ,   255 ,         C'245,245,245' ,   255 ,       C'240,240,240' ,   255 ,       clrBlue ,       255 ,         _PL_END,
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//====================================================================================================================================================================================================================================================

//_OBJECT_NEUTRAL_BLOCKED/ACTIVATED_BLOCKED
//====================================================================================================================================================================================================================================================
//             X           Y        PIXEL_0     ALFA_0     PIXEL_1      ALFA_1       PIXEL_2     ALFA_2        PIXEL_3     ALFA_3         PIXEL_4       ALFA_4           PIXEL_5     ALFA_5        PIXEL_6     ALFA_6    PIXEL_7     ALFA_7
//====================================================================================================================================================================================================================================================
_NS_gr7,       0 ,           0 ,     C'245,245,245' ,   255 ,   C'245,245,245' ,   255 ,     C'180,180,180' ,   255 ,         C'180,180,180' , 255 ,       C'200,200,200' ,   255 ,         C'245,245,245' ,   255 ,       C'235,235,235' ,   255 ,         C'245,245,245' ,   255 ,         _PL_END,
//+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//====================================================================================================================================================================================================================================================
 
Es ist nur eines von mehr als 30 Elementen. Und einer der kleinsten. Aber das Erstaunliche ist, dass ich sie wie ein offenes Buch lese. Es fällt mir nicht schwer zu erklären, wofür sie steht. Merkwürdig ist auch, dass solche Elemente sehr schnell erstellt werden, indem man andere ähnliche Elemente kopiert und einige Korrekturen vornimmt. Es sieht beängstigend aus, ist aber in Wirklichkeit ganz einfach.