Fragen zu OOP in MQL5 - Seite 33

 
Alexey Viktorov:

Es ist kein Geheimnis, dass das Beispiel für das Wirtschaftskalenderereignis CalendarValueHistory() ist. In einem Fall alle Nachrichten in einem Zeitbereich. In einem anderen nach Land und einer anderen Zeitspanne. In der dritten durch ein Symbol. Aber gibt es einen grundlegenden Unterschied? Unterteilen Programmiervorlesungen die Lösungen nach der Art der Aufgaben, die sie erfüllen?

Kürzlich traf ich jemanden, der seine Führerscheinprüfung nicht bestanden hatte und sich darüber empörte, dass man in den Fahrstunden nicht über diese Kreuzung gefahren sei und er einfach nicht wisse, wie man über diese Kreuzung fährt.

Wenn Sie eine Klasse erstellen, führen Sie eine neue Art von Daten ein.

Was genau Ihre Klasse macht, ist nicht so wichtig.

Wichtig ist, was Sie mit den Objekten der Klasse als Daten zu tun gedenken.

(Einfügen in ein Array, Übergabe an Funktionen, Rückgabe aus Funktionen, ...).

Zum jetzigen Zeitpunkt bin ich mir nicht ganz sicher, ob dieser Kurs überhaupt notwendig ist.

Und wenn ja, muss es dann unbedingt eine Klasse statt drei sein?

Vielleicht können Sie bei Ihrer Aufgabe mit einer (oder drei) Funktionen auskommen?

 
Alexey Viktorov:

Die Langeweile... Es gibt auch Vorlagen mit Schnittstellen zum Master?

Schnittstellen als solche gibt es in MQL nicht, vor ein paar Seiten mit einer abstrakten Klasse wäre es dasselbe, es ist einfacher für mich, den Code danach zu lesen

Schnittstellen lassen sich bequem mit verschiedenen Konstruktoren initialisieren

das Beispiel in der Hilfehttps://www.mql5.com/ru/docs/basis/types/classes by keyword interface ist eins-zu-eins meine Vorlage, versuchen Sie das Beispiel an Ihrer eigenen Stelle zu reproduzieren, vielleicht ist es das, wonach Sie suchen

 
Igor Makanu:

Schnittstellen als solche gibt es in MQL nicht, vor ein paar Seiten mit einer abstrakten Klasse wäre es dasselbe, es ist einfacher für mich, den Code danach zu lesen

Schnittstellen lassen sich bequem mit verschiedenen Konstruktoren initialisieren

das Beispiel in der Hilfehttps://www.mql5.com/ru/docs/basis/types/classes mit dem Schlüsselwort interface - das ist genau meine Vorlage, versuchen Sie, das Beispiel in Ihrer eigenen Umgebung zu reproduzieren, vielleicht ist es das, wonach Sie suchen

Igor, erinnerst du dich an den Auftrag, den der Zar Fedot dem Streltsy erteilt hat?

     Versuchen Sie, mir den Namen zu geben, damit Sie ihn nicht in der Eile vergessen!

Und was war die Antwort der beiden jungen Leute?

     Hätten wir nur einen Schaltplan oder eine Blaupause, dann hätten wir eine Blaupause, aber wenn nicht, würden wir sie suchen und den Teufel finden!

Wie kann man versuchen, etwas zu reproduzieren, wenn man die Regeln oder das zu erzielende Endergebnis nicht kennt...

 
Alexey Viktorov:

Langweilig... Es gibt auch Vorlagen und Schnittstellen, die beherrscht werden müssen.

Nun, wenn es langweilig ist, ist es nicht Ihr Ding.
 
Koldun Zloy:

Wenn Sie eine Klasse erstellen, führen Sie einen neuen Datentyp ein.

Es ist noch nicht klar, ob diese Klasse überhaupt benötigt wird.

Und wenn ja, muss es dann eine Klasse statt drei sein?

Vielleicht können Sie bei Ihrer Aufgabe mit einer (oder drei) Funktionen auskommen?

Es kann möglich sein, und wahrscheinlich ist es möglich, aber ich würde gerne eine Klasse schreiben, die sowohl mit Indikatoren als auch mit Expert Advisor verbunden werden kann. Und der Indikator ist aus meiner Sicht so konzipiert, dass die Funktion in verschiedenen Varianten aufgerufen werden soll.

 
Alexey Viktorov:

Es kann möglich sein, es zu tun, und höchstwahrscheinlich können Sie, aber es wäre gut, eine Klasse zu schreiben, die von einem Indikator und von einem Expert Advisor aufgerufen werden kann. Und der Indikator ist meiner Meinung nach so konzipiert, dass die Funktion in verschiedenen Varianten aufgerufen werden sollte.

Die Funktion kann auch aus dem Indikator und aus dem Expert Advisor aufgerufen werden.

 
Alexey Viktorov:

Ich glaube, ich fange an, die Notwendigkeit und Nützlichkeit von OOP zu verstehen, aber ich habe Schwierigkeiten, es zu implementieren.

Ich habe eine Klasse, die mit drei verschiedenen Sets von Variablen verwendet werden soll. Aber sie erfüllt eine Aufgabe. Einfach ausgedrückt, können wir 3 Konstruktoren einfügen, 3 Variablen deklarieren und auf sie verweisen. Aber meiner Meinung nach ist das nicht ganz richtig. Darüber hinaus gibt es eine Variable vom Typ String in zwei Varianten, die jedoch einen unterschiedlichen Namen hat und in verschiedenen Teilen des Codes verwendet wird. Natürlich können Sie die Reihenfolge der Variablen ändern, aber ich denke, auch das ist nicht ganz korrekt.

Ich habe die Dokumentation über den neuen Operator gelesen, aber ich verstehe nicht, wie er helfen kann. Ich sehe nicht den Unterschied zwischen drei verschiedenen Objektvariablen und drei Zeigern auf dieselben Objekte. Vielleicht ist es vorteilhaft, wenn Sie einen Zeiger einmal erstellen, dieses Objekt verwenden und es löschen, wenn es nicht mehr benötigt wird. Wenn Sie das Objekt jedoch regelmäßig benötigen, ist es absolut unsinnig, jedes Mal einen Zeiger darauf zu erstellen und ihn zu löschen.

Also, bitte helfen Sie mir. Ich habe einige Erklärungen zu OOP in C++ gelesen, aber sie sind dort noch schlechter beschrieben als in der Dokumentation zu mql5. Bitte bitten Sie die Ungeduldigen nicht, sich mir anzuschließen, ich werde zu viele Fragen stellen. Ich bin auch nicht an vorgefertigtem Code ohne Erklärungen interessiert, ich möchte ihn verstehen und nicht stupide wiederholen "Mach mit uns, mach es wie wir...".

Das Konzept der "Klasse" kommt dem der Struktur am nächsten. Und eine Struktur ist eine verknüpfte Menge von Daten. Das heißt, es handelt sich um eine Gruppe von heterogenen Variablen, die auf sinnvolle Weise miteinander verknüpft sind. Eine Klasse fügt auch Methoden hinzu, die zur Bearbeitung dieser Daten verwendet werden können. Die nächstliegende Entsprechung von "Methode" ist eine Funktion. D.h. eine Klasse ist eine Struktur mit einer Reihe von Funktionen, die zur Steuerung und Formung der darin enthaltenen Daten verwendet werden können. Es kann mehrere Methoden für verschiedene Situationen und Varianten der Datenbildung innerhalb des Klassenobjekts geben. In Ihrem Fall benötigen Sie drei Methoden, die die Daten innerhalb der Klasse bilden, je nach Situation.
In der Klasse muss ein "Standardkonstruktor" vorhanden sein. Diese Funktion wird aufgerufen, wenn ein neues Objekt der Klasse mit dem Operator new erstellt wird. Ich würde den Standardkonstruktor mit der OnInit-Funktion in einem MQL-Programm vergleichen.
Der Destruktor ist, um die Analogie fortzusetzen, ein Analogon der Funktion OnDeinit.
Sie müssen das Objekt nicht sofort "töten", nachdem es erstellt worden ist und seine Aufgabe erfüllt hat. Sie können die erstellten Objekte in der Funktion OnDeinit "töten", nachdem das MQL-Programm beendet ist, und während das Programm läuft, können alle Objekte im Speicher sein und Sie können auf sie verweisen.
 
Koldun Zloy:

Die Funktion kann auch sowohl vom Indikator als auch vom EA aufgerufen werden.

Daran zweifle ich nicht. Ich wollte mich den trendigen Methoden der Programmierung anschließen, und Sie geben mir solche Ratschläge)))). Sie können sich genauso gut von OOP weigern. Ich verstehe ohnehin nicht, warum diese Gimmicks nötig sind, und jetzt redest du mir das aus :)))

 
Alexey Viktorov:

Daran zweifle ich nicht. Ich wollte mich dem Trend der Programmierung anschließen, und Sie geben mir diese Art von Ratschlägen). Sie können sich genauso gut weigern, OOP überhaupt zu verwenden. Ich verstehe ohnehin nicht, warum diese Gimmicks nötig sind, und jetzt redest du mir das aus :)))

Wenn Sie Klassen für etwas verwenden, das Sie nicht verstehen, ist das nicht OOP.

Und ja, ich rate Ihnen: Solange Sie nicht verstehen, warum diese Gimmicks notwendig sind, sollten Sie sie nicht verwenden.

 
BlackTomcat:
Das Konzept der "Klasse" kommt dem der Struktur am nächsten. Und eine Struktur ist eine verknüpfte Menge von Daten. Das heißt, es handelt sich um eine Gruppe von heterogenen Variablen, die auf sinnvolle Weise miteinander verknüpft sind. Eine Klasse fügt auch Methoden hinzu, die zur Bearbeitung dieser Daten verwendet werden können. Die nächstliegende Entsprechung von "Methode" ist eine Funktion. D.h. eine Klasse ist eine Struktur mit einer Reihe von Funktionen, die zur Steuerung und Formung der darin enthaltenen Daten verwendet werden können. Es kann mehrere Methoden für verschiedene Situationen und Varianten der Datenbildung innerhalb des Klassenobjekts geben. In Ihrem Fall benötigen Sie drei Methoden, die die Daten innerhalb der Klasse für jede Situation entsprechend formen.
In der Klasse muss ein "Standardkonstruktor" vorhanden sein. Diese Funktion wird aufgerufen, wenn ein neues Objekt der Klasse mit dem Operator new erstellt wird. Ich würde den Standardkonstruktor mit der OnInit-Funktion in einem MQL-Programm vergleichen.
Der Destruktor ist, um die Analogie fortzusetzen, ein Analogon der Funktion OnDeinit.
Sie müssen das Objekt nicht sofort "töten", nachdem es erstellt worden ist und seine Aufgabe erfüllt hat. Sie können die erstellten Objekte in der Funktion OnDeinit "töten", nachdem das MQL-Programm beendet ist, und während das Programm läuft, können alle Objekte im Speicher sein und Sie können auf sie verweisen.

Ich versuche also, drei ähnliche Methoden zu vermeiden. Schließlich sind sie fast identisch. Sie erhalten ein Array von Kalenderereignissen und sortieren unnötige Datensätze aus, um ein Array für die weitere Verarbeitung bereitzustellen.

Grund der Beschwerde: