OOP vs. prozedurale Programmierung - Seite 37

 
Andrei:

Eine Klasse hat nur interne Variablen und keine Eingabe- oder Ausgabevariablen... Wo haben Sie die Verwendung eines solchen Objekts, das keinen Kontakt mit der Außenwelt hat und in seinem eigenen Saft kocht, bei der Programmierung gesehen?


+100

 

Die Diskussion erinnert mich an ein Video, das die Jungs kürzlich gezeigt haben :)


 
Andrei:

Die Klasse hat nur interne Variablen und keine Ein- und Ausgabe... Wo haben Sie die Verwendung eines solchen Objekts, das keinen Kontakt zur Außenwelt hat und im eigenen Saft kocht, bei der Programmierung gesehen?

Die Klasse hat eine Schnittstelle, über die sie mit der Außenwelt interagiert. Sie ermöglicht es uns, alle "unnötigen" Dinge, die nicht für externe Blöcke bestimmt sind, abzuschneiden.

In meinem Handelsprozessor habe ich zum Beispiel Variablen, von denen einige für MT4, andere für MT5 und wieder andere für beide Plattformen bestimmt sind. Aber all diese Variablen sind absolut unnötig für irgendeinen Teil meines TS. Sie haben also keinen Zugang zu ihnen. Alle Teile des TS erhalten eine virtuelle Schnittstelle des Handelsprozessors, in der nur für den TS-Betrieb notwendige Funktionen definiert sind und alles Unwichtige, alles Plattformabhängige und "Handelsspezifische" entfernt wird.

Das Gleiche gilt für eine Handelsposition - Teile von TS haben keinen direkten Zugang zu einer Handelsposition. Sie können nur eine virtuelle Schnittstelle erhalten, die es ermöglicht, die Anzahl der offenen Handelskomponenten und die Daten der einzelnen Komponenten zu zählen. Aber der TS weiß nicht einmal, womit er es zu tun hat - ob es sich um einen MT4-Auftrag oder eine MT5-Position handelt. All das bleibt ihr verborgen. Der TS sollte keinen Zugriff auf die Variablen haben, die für MT4-Aufträge oder MT5-Positionen verwendet werden, was auch nicht der Fall ist.

 
George Merts:

Die Klasse hat eine Schnittstelle, über die sie mit der Außenwelt interagiert. Damit können Sie alles "Überflüssige", das nicht für externe Blöcke bestimmt ist, abschneiden.

Hier, insbesondere in meinem Handelsprozessor, habe ich Variablen, von denen einige für MT4, andere für MT5 und wieder andere für beide Plattformen gelten. Aber all diese Variablen sind absolut unnötig für irgendeinen Teil meines TS. Sie haben also keinen Zugang zu ihnen. Alle Teile des TS erhalten eine virtuelle Schnittstelle des Handelsprozessors, in der nur die für den TS-Betrieb notwendigen Funktionen definiert sind, und alles Unnötige, alles Plattformabhängige und "Handelsspezifische", entfernt wird.


Lassen Sie uns sehr konkret werden und ein sehr deutliches Beispiel nennen.

1. Kotier am Eingang

2. Es gibt einen Kauf-/Verkaufsbefehl in der Ausgabe.

3. Die Eingabe wird durch den Schnittpunkt von zwei Wischen in eine Ausgabe umgewandelt.

Welche OOPs gibt es zwischen ihnen und warum?

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

Erklären Sie dies den Metaquotes: warum haben sie riesige Handbücher für das Terminal, für die Sprache und generell geschrieben, woher kommt dieser Berg an Dokumentation für Softwareprodukte über z.B. Cp... Gibt es überhaupt noch Softwareprodukte ohne Dokumentation? Es ist seltsam, dass Sie das nicht sehen.


Leider verwechseln Sie schon wieder etwas. Das Handbuch eines Programms ist keine Dokumentation. Im letzten Jahrhundert führten sie eine Dokumentation und hielten sich an staatliche Normen. Jetzt brauchen wir das alles nicht mehr. Jetzt haben wir nur noch die ToR. Die Dokumentation besteht nun aus Testfällen und Klassenschnittstellen. Natürlich werden die Klassen so benannt, dass allein aus ihrem Namen hervorgeht, was sie tun und wofür sie verwendet werden.

 
Ihor Herasko:

Leider verwechseln Sie wieder einmal die Begriffe. Ein Programmhandbuch ist keine Dokumentation. Im letzten Jahrhundert gab es eine Dokumentation, und man hielt sich an die GOSTs und so weiter. Das ist jetzt alles unnötig. Jetzt fehlt nur noch die ToR. Die Dokumentation besteht nun aus Testfällen und Klassenschnittstellen. Und natürlich werden die Klassen so benannt, dass wir anhand ihrer Namen verstehen können, was sie tun und wofür sie verwendet werden.

Die Dokumentation wurde im letzten Jahrhundert geführt, wir haben uns an staatliche Standards gehalten usw. Das ist jetzt alles unnötig.

Hier stimme ich Ihnen absolut zu, denn sie schreiben nichts Ernstes.

Die ToR gab es schon immer. Aber solche einfachen Programme, deren Algorithmus vollständig in TT definiert werden kann, wurden im letzten Jahrhundert nicht geschrieben und werden auch jetzt nicht von ernsthaften Leuten geschrieben.

Was hat es mit "Testfällen und Klassenschnittstellen" bei der Entwicklung von Compilern oder bei der Programmierung mathematischer Algorithmen auf sich?



PS.

Früher gab es eine Rubrik für Perlen.

Dies steht darin.

Ein Programmhandbuch ist keine Dokumentation.

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

Lassen Sie uns an einem Beispiel ganz konkret und deutlich werden.

1. die Eingabe ist ein Quotient

2. Die Ausgabe ist ein Kauf-/Verkaufsbefehl.

3. Die Eingabe wird durch den Schnittpunkt von zwei Wischen in eine Ausgabe umgewandelt.

Welche OOPs gibt es zwischen ihnen und warum?

Es ist ganz einfach.

Es gibt einen Eingangsgenerator. Er fordert vom Expert Advisor die Schnittstelle des Datenanbieters, die Schnittstelle der Handelspositionen und die Schnittstelle des Handelsprozessors an. Dann werden die beiden Schnittstellen der Masken vom Datenanbieter angefordert.

Wenn OnTick() aufgerufen wird, wird dieselbe Funktion vom Eingabegenerator aufgerufen. Der Eingabegenerator sieht sich die winkende Schnittstelle an und vergleicht ihren vergangenen Wert. Wird ein Crossover festgestellt, so wird die Schnittstelle für die Handelsposition überprüft. Wenn er sieht, dass wir nicht in Position sind, ruft er die Schnittstelle des Handelsverarbeiters auf, um entweder zu kaufen oder zu verkaufen. Wenn es sieht, dass es eine Position gibt, wenn die Position in der gewünschten Richtung ist - machen wir nichts, wenn es das Gegenteil ist - rufen wir die Positionsschließungsfunktion in der Handelsschnittstelle auf und kaufen oder verkaufen.

Sie sollten beachten, dass der Generator keinen Zugang zu irgendwelchen Variablen hat, weder für die Berechnung von Wipes, noch für das Erhalten einer Handelsposition, noch für das Öffnen von Aufträgen in MT4 oder Positionen in MT5. Der Datenanbieter weiß nur von den angeforderten Tüchern. Er errechnet sie bei jedem Tick neu und aktualisiert sie. Niemand sonst weiß davon. Ein Handelsabwickler - führt ausschließlich die Anweisungen aus, die er über die Schnittstelle erhält, und weiß nicht einmal, von wem sie kommen. Der Expert Advisor - aktualisiert die Handelsposition bei jedem Tick und gibt sie an die angeforderte Schnittstelle weiter, ohne zu prüfen, wer sie braucht und was in diesem Block ist. Alle Blöcke sind voneinander getrennt und kommunizieren ausschließlich über vordefinierte Schnittstellen.

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

Lassen Sie uns an einem Beispiel ganz konkret und deutlich werden.

1. die Eingabe ist ein Quotient

2. Die Ausgabe ist ein Kauf-/Verkaufsbefehl.

3. Die Eingabe wird durch den Schnittpunkt von zwei Wischen in eine Ausgabe umgewandelt.

Welche OOPs gibt es zwischen ihnen und warum?

/// применение  ООП для элементарных задач (фактически весь код)

OnInit(){

Series FAST_MA=MA(...);

Series SLOW_MA=MA(...);

OnCrossUp(FAST_MA,SLOW_MA,Buy);

OnCrossDn(FAST_MA,SLOW_MA,Sell);

}

Aber es ist OOP in sich selbst innerhalb der ausgearbeiteten Bibliotheken - es ist getan, um leicht und einfach zu schreiben und gleichzeitig alles debuggen zu können. Es gibt Schnittstellen für "die Quelle der Kurse" und "die Ausführung von Aufträgen", "Zeitreihen", "Indikatoren" und viele andere Dinge... Aber dieser kurze Code ist bereit für die harten Bedingungen des realen Marktes, mit all den Pannen und Unannehmlichkeiten

Mit einer einfachen Bewegung können Sie einen beliebigen Quotienten (Synthetics) nehmen oder ihn auf einem anderen Symbol ausführen...oder einfach einen anderen Expert Advisor befehlen (und das ist der Vorteil von OOP, die Komplexität im Inneren, und das angewandte Problem erfordert wenig Aufwand).

 
George Merts:

Es ist ganz einfach.

Es gibt einen Eingangsgenerator. Er - fordert vom Expert Advisor die Schnittstelle des Datenanbieters, die Schnittstelle der Handelspositionen und die Schnittstelle des Handelsabwicklers an. Dann werden zwei Schnittstellen der Waggons vom Datenanbieter angefordert.

Wenn OnTick() aufgerufen wird, wird dieselbe Funktion vom Eingabegenerator aufgerufen. Der Eingabegenerator sieht sich die winkende Schnittstelle an und vergleicht ihren vergangenen Wert. Wird ein Crossover festgestellt, wird die Schnittstelle für die Handelsposition überprüft. Wenn er sieht, dass wir nicht in Position sind, ruft er die Schnittstelle des Handelsverarbeiters auf, um entweder zu kaufen oder zu verkaufen. Wenn es sieht, dass es eine Position gibt, wenn die Position in der gewünschten Richtung ist - tun wir nichts, wenn es das Gegenteil ist - rufen wir die Positionsschließungsfunktion in der Handelsschnittstelle auf und kaufen oder verkaufen.

Sie sollten beachten, dass der Generator keinen Zugang zu irgendwelchen Variablen hat, weder für die Berechnung der Wipes, noch für das Erhalten einer Handelsposition, noch für die Eröffnung von Aufträgen in MT4 oder Positionen in MT5. Der Datenanbieter weiß nur von den angeforderten Tüchern. Er errechnet sie bei jedem Tick neu und aktualisiert sie. Niemand sonst weiß davon. Ein Handelsabwickler - führt ausschließlich die Anweisungen aus, die er über die Schnittstelle erhält, und weiß nicht einmal, von wem sie kommen. Der Expert Advisor - aktualisiert die Handelsposition bei jedem Tick und gibt sie an die angeforderte Schnittstelle weiter, ohne zu prüfen, wer sie braucht und was in diesem Block ist. Alle Blöcke sind voneinander getrennt und kommunizieren nur über vordefinierte Schnittstellen.


Erstaunlich!

Ich habe mich gefragt: Gibt es in der modernen Programmierung noch eine andere Möglichkeit, das Problem des Eierlevels abrupt zu verwirren?

 
Maxim Kuznetsov:

/// применение  ООП для элементарных задач (фактически весь код)

OnInit(){

Series FAST_MA=MA(...);

Series SLOW_MA=MA(...);

OnCrossUp(FAST_MA,SLOW_MA,Buy);

OnCrossDn(FAST_MA,SLOW_MA,Sell);

}

Aber die OOP selbst befindet sich in den entwickelten Bibliotheken - sie ist darauf ausgelegt, leicht und einfach zu schreiben, und alles ist genau darauf abgestimmt. Es gibt "Kursquelle" und "Order Executor"-Schnittstellen, "Zeitreihen", "Indikatoren" und eine Menge anderes Zeug... Aber dieser kurze Code ist bereit für harte, reale Marktbedingungen, mit all den Pannen und Unannehmlichkeiten

Mit einer einfachen Bewegung können Sie einen beliebigen Quotienten (Synthetics) nehmen oder ihn auf einem anderen Symbol ausführen...oder einfach einen anderen Expert Advisor befehlen (und das ist der Vorteil von OOP, die Komplexität im Inneren, und das angewandte Problem erfordert wenig Aufwand).


MeinOnInit() sieht ungefähr genauso aus - ein Dutzend Zeilen...

Und?

Grund der Beschwerde: