Mein Ansatz. Der Kern ist der Motor. - Seite 4

 
OOP beeinträchtigt die Kernel-Implementierung nicht, im Gegenteil.
Normalerweise gibt es Code und Daten. Der Kern ist in unserem Fall der Code, der streng von den Daten getrennt ist. Die Daten können auch der Code selbst sein. Der Kernel verfügt in der Regel über eine umfassendere Funktionalität, um bestimmte Daten zu verarbeiten, oder zumindest über ein autarkes Minimum.
Dieser Ansatz ermöglicht es Ihnen, das am besten geeignete Datenformat zu verwenden, da davon ausgegangen wird, dass eine große Menge an Daten vorhanden sein wird.
Hier ein weiteres Beispiel, bei dem dieser Ansatz angewendet werden kann: Es gibt viele Strategien im Expert Advisor, die Daten stellen nur die Logik der Strategien dar, der Kern ist die Funktionalität, um sie zu verwalten, nämlich Auftragsmanagement, Risikomanagement, Arbeit mit der Handelsumgebung, Indikatoren, Fehlerbehandlung, Anzeige einiger oder aller Statistiken, Trailing/Grid/..... Funktionen
 

Реter Konow:

Sie erstellen ein Array und schreiben die Werte der Eigenschaften der Schaltfläche, die Sie erstellen möchten, in dieses Array.

Eine Schaltfläche besteht aus drei Objekten: Basis, Text, Bild.

Jedes Objekt existiert innerhalb eines Schaltflächenelements, daher muss das Array zweidimensional sein.

Warum sich also mit all diesen Arrays herumplagen, wenn man dafür eine Struktur verwenden kann (und sollte). Und wir können diese Werte menschlich adressieren - über den Feldnamen, nicht über den Index (was eine Menge dummer Fehler verursachen kann).

Statt eines zweidimensionalen Arrays gibt es dann ein Array von Strukturen. Die Deklaration ist gleich knapp, aber die Einfachheit und Zuverlässigkeit ist viel höher, plus rationelle Nutzung des Speichers, weil jedes Feld einen eigenen Typ hat. Und OOP hat damit überhaupt nichts zu tun.

Hier ist ein Beispiel:

struct TObject { char type;  string name;  int x;  int y;  int width;  int height;  color clr; };

TObject Objects[]= { { OBJ_BITMAP, "Bitmap", 100, 100, 200, 200, clrRed },
                     { OBJ_BUTTON, "Button", 150, 150, 50, 10, clrWhite },
                   };
 
Alexey Navoykov:


Das Ergebnis ist ein Array von Strukturen anstelle eines zweidimensionalen Arrays. Die Deklaration ist dieselbe, aber die Bequemlichkeit und Zuverlässigkeit sind viel höher, plus rationelle Nutzung des Speichers, weil jedes Feld seinen eigenen Typ hat. Und OOP hat damit überhaupt nichts zu tun.


Es ist ein bisschen zweideutig... was ist besser - ein Array von Strukturen oder eine Struktur von Arrays?

aber MQL ist für die Arbeit mit Forthran-Arrays konzipiert, das ist eine Tatsache...

 
Maxim Kuznetsov:

Es ist ein bisschen ein Dilemma hier ... was ist besser - ein Array von Strukturen oder eine Array-Struktur?

Über welche Art von Array-Struktur reden wir? Der Autor hat nur Arrays

 

Ich glaube nicht, dass Peter jemals gesehen hat, wie man eine DialogBox-Vorlage in Visual C++ erstellt und beliebige Steuerelemente wie Schaltflächen, Kontrollkästchen, EditBox, ComboBox usw. per Drag & Drop hineinzieht.

Mit anderen Worten: die Elemente, die Sie in Windows sehen können, einschließlich verschiedener Optionen für die Anzeige von DB-Strings mit Feld- und String-Anpassungen.

Und mit Hilfe von MFC können Sie in wenigen Minuten und in kürzester Zeit recht komplexe Dialogfelder erstellen.

 
Alexey Navoykov:

Und warum all diese Perversionen mit einem Array, wenn Sie eine Struktur für diesen Zweck verwenden können (und sollten). Es wird auf genau die gleiche Weise initialisiert - mit Werten, die durch Kommas getrennt sind. Und auf diese Werte kann menschlich zugegriffen werden - über den Feldnamen, nicht über den Index (was zu einer Menge dummer Fehler führen kann).

Statt eines zweidimensionalen Arrays gibt es dann ein Array von Strukturen. Die Deklaration ist gleich knapp, aber die Einfachheit und Zuverlässigkeit ist viel höher, plus rationelle Nutzung des Speichers, weil jedes Feld seinen eigenen Typ hat. Und OOP hat damit überhaupt nichts zu tun.

Hier ist ein Beispiel:

Das ist eine gute Lösung. Diese Struktur kann jedoch nicht in den Kernel integriert werden. Wenn man bei der Erstellung eines Kernels nach meiner Technologie nur eine Schleife über das Array mit den Prototyp-Elementen machen und sie in den Kernel umschreiben muss, ist die Schleife im Fall Ihrer Lösung unmöglich.

Es könnte zwar möglich sein, aber jedes Element sollte in eine eigene Struktur verpackt werden. Und wie kann man sie im globalen Bereich anzeigen? Wohin mit der Deklaration... Das ist nicht klar.

Meine ist einfach. Ein Array von Elementprototypen. Alle Eigenschaften der Objekte sind darin enthalten. Das Array selbst ist global. Der Zugang ist am einfachsten und von überall im Programm möglich.

 
Sträubt sich Ihr Bauchgefühl nicht gegen die Verwendung von Doppelgängern? Schließlich ist es auch ein zusammengesetztes Objekt mit eigenen Methoden. In orthodoxen Kernel-Arrays ist kein Platz für sie! Schauen Sie, weil es beeindruckend ist (Mantisse, Exponent, Vorzeichen):
_NEW_OBJECT, тра-та-та-та-та-та, 3, 10, 1, тра-та-та-та-та-та
 
pavlick_:
Sträubt sich Ihr Bauchgefühl nicht gegen die Verwendung von Doppelgängern? Schließlich ist es auch ein zusammengesetztes Objekt mit eigenen Methoden. In den orthodoxen Kernel-Arrays ist kein Platz für sie! Sehen Sie, das ist beeindruckend (Mantisse, Exponent, Vorzeichen):

Das verstehe ich nicht.

 

Ich entledige mich unnötiger Syntax und Tamburin, ich initialisiere einfach Elementeigenschaften in einem globalen Prototyp-Array.

Er wird nur einmal verwendet - wenn Elementprototypen in Kernel umgeschrieben werden.

Das Umschreiben erfolgt in einer einfachen Schleife.

Folglich beginnt der Kernel in der Erstellungsphase, Prototypen von benutzerdefinierten Elementen zu enthalten.

Danach beginnen neue Zyklen auf dem Kernel. In diese schreibe ich die benutzerdefinierten Werte der Eigenschaften der Elemente.

Am Ende erhalten Sie einen fertigen Kernel, der die fertigen Benutzerfenster mit allen Elementen enthält.

 

Ich bezeichne den oben beschriebenen Prozess als den "Prozess der Kernbildung".

Nachdem der Kern gebaut ist, beginnt der "Motor" zu arbeiten.

Die Engine ist der Code, der die Mechanik der Elemente steuert.

Der Motor ist nur für die Arbeit mit dem Kernel ausgebildet. Sein Motor sind verschiedene Ereignisse (meist von OnChartEvent()).