Diskussion zum Artikel "MQL für Anfänger: Wie man Objektklassen entwirft und baut" - Seite 5

 
joo:

Dennoch sehe ich keine Vorteile in der Verwendung von OOP. ....

Sie brauchen es also nicht für Ihre Aufgaben.
 
DC2008:
Sie brauchen es also nicht für Ihre Anwendung.

Oder vielleicht doch, aber ich weiß es nicht? :)

Hilf mir, es herauszufinden.

 
joo:

... Hilf mir, das herauszufinden.

Versuchen Sie, genetische Algorithmen im Oop-Stil neu zu schreiben. Sie betteln geradezu darum, dorthin zu gelangen.

Außerdem sind Sie zu faul, den Code anderer Leute zu übernehmen, aber nicht Ihren eigenen. Fangen Sie an, und Sie werden Erfolg haben, und vergleichen Sie gleichzeitig die Leistung der beiden Varianten. Meiner krakeligen Statistik zufolge verlangsamt oop die Arbeit der Programme.

 
joo:

Dennoch sehe ich keine Vorteile in der Verwendung von OOP. Vielleicht hindert es mich daran zu verstehen, was für Biester solche "Klassen" sind.

Was Sie sagten, kann als separate Funktionen formalisiert werden. Oder nicht alle von ihnen? Ich bin nicht wählerisch, bitte verstehen Sie mich richtig - ich versuche, die Prinzipien von OOP zu verstehen.

Ich möchte an konkreten, einfachen Beispielen den Unterschied in der Arbeitsgeschwindigkeit von angemessen formatiertem Code (mit und ohne OOP) und die Vorteile von OOP in Bezug auf die Einfachheit der Projektorganisation sehen.

Es ist seltsam, Fragen über OOP von einem Entwickler mit Ihren Fähigkeiten zu hören ;-). Das soll wohl ein Scherz sein. Natürlich kann man auf OOP verzichten und alles mit Funktionen implementieren. Aber aus menschlicher Sicht ist es einfach weniger bequem - zu entwickeln und zu warten. OOP erhöht nicht die Geschwindigkeit des Programms selbst.

Wenn wir das gleiche Beispiel mit Strategieklassen fortsetzen, nehmen wir an, es gibt ein Codefragment, das offene Positionen nach ihren Strategien durchsuchen soll. Wenn wir es über Funktionen implementieren, erhalten wir etwas wie dieses:

foreach Position in Positions[]
 if StrategyType(Position) == N1 TrailTypeN1(Position);
 else if StrategyType(Position) == N2 TrailTypeN2(Position);
 ...

Und wenn wir OOP verwenden:

foreach Position in Positions[]
 Position.Trail;

Es gibt Vorteile: Der Datensatz ist kompakt und übersichtlich, im Falle des Hinzufügens neuer Arten von Strategien muss dieser Teil des Codes nicht geändert werden, es besteht keine Notwendigkeit, (potenziell viele) Parameter zu übergeben oder stattdessen globale Variablen, Arrays zu deklarieren, die versehentlich von anderen Codeabschnitten beschädigt werden können....

Im Allgemeinen scheint es eine Menge Bücher zu diesem Thema zu geben. Oder ist der Kern der Frage ein anderer?

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
 
DC2008:

Versuchen Sie, genetische Algorithmen im Oop-Stil neu zu schreiben. Sie betteln geradezu darum, dorthin zu gelangen.

Nachdem ich den Artikel geschrieben hatte, schlug mir die Verwaltung vor, ihn im OOP-Stil neu zu schreiben, und bat mich darum. Ich habe ehrlich zugegeben, dass ich keine Ahnung habe. Es wurde die Erlaubnis erteilt, ihn so zu veröffentlichen, wie er ist.

Ich probiere es gerade aus. Es funktioniert noch nicht. Wenn ich es überarbeite, werde ich den Code mit OOP und Dokumentation dem Artikel hinzufügen.

DC2008:

Starten Sie und Sie werden Erfolg haben, und vergleichen Sie gleichzeitig die Leistung der beiden Varianten. Meiner krakeligen Statistik zufolge verlangsamt OOP die Programme.

Nun, Sie bestätigen meine Meinung, dass Code mit OOP weniger reaktionsschnell ist. Nach meiner Erfahrung bei der Zusammenarbeit mit Entwicklern, die OOP beherrschen, sinkt die Leistung ganz erheblich - bis zum Zweifachen (wir haben meinen Code und den meines Partners bei der Ausführung derselben Aufgabe verglichen).

marketeer:

Es ist seltsam, Fragen über OOP von einem Entwickler mit Ihren Fähigkeiten zu hören ;-). Sie machen wohl Witze.

Leider mache ich keine Witze. Ja, ich bin auf die Größe eines Mammuts angewachsen. Jetzt versuche ich, Atavismen loszuwerden - Wolle.

marketeer:

Natürlich kann man auf OOP verzichten und alles durch Funktionen implementieren. Aber aus menschlicher Sicht ist es einfach weniger bequem - zu entwickeln und zu pflegen.

Ja, ich will "Flexibilität". Das ist der Grund, warum ich interessiert bin.

Marketeer:

..............

Im Allgemeinen gibt es eine Menge Bücher zu diesem Thema. Oder ist die Essenz der Frage eine andere?

Offenbar verstehe ich einige Feinheiten nicht. :(

Nun gut. Ich werde diese kleine Mauer in meinem Weg überwinden. :)

 

Komm schon...machst du Witze?

Das ist kein "Dummies"-Leitfaden für einen neuen Programmierer, der versucht, OOP zu lernen... das ist ein Haufen Kauderwelsch. Sie haben Code aus einer Anwendung ausgeschnitten und eingefügt, der viel zu obskur ist, um für einen neuen oder angehenden Programmierer hilfreich zu sein.

 
Ich habe angefangen, nach Klassen zu suchen. Ich bin auf diesen Artikel gestoßen. Ja, ja, ich muss so eine einfache Schnittstelle in meinen Expert Advisor einbauen. Ich wollte mir die Dateien des Autors ansehen, aber da ist nichts zu finden... :-( genauer gesagt, im Ordner masterwindows-doc.zip befindet sich eine leere Hilfedatei MasterWindows-Doc.chm Schade! Vielleicht ist alles, was in diesem Artikel erwähnt wird, bereits veraltet?
 
Aleksandr Brown:
Ich habe angefangen, nach Klassen zu suchen. Ich bin auf diesen Artikel gestoßen. Ja, ja, ich muss so eine einfache Schnittstelle in meinen Expert Advisor einbauen. Ich wollte mir die Dateien des Autors ansehen, aber da ist nichts zu finden... :-( genauer gesagt, im Ordner masterwindows-doc.zip befindet sich eine leere Hilfedatei MasterWindows-Doc.chm Schade! Vielleicht ist alles, was in diesem Artikel erwähnt wird, bereits veraltet?

Geprüft. Die Datei ist in Ordnung.

Ich füge sie hier ein, nur für den Fall.

Dateien:
 
Sergey Pavlov:

Geprüft. Die Datei ist in Ordnung.

Ich lege sie hier ab, nur für den Fall.

Vielen Dank für Ihre Rücksichtnahme. Ich gebe zu, ich war ein bisschen dumm. Ich habe vor ein paar Tagen ein neues Betriebssystem installiert, und die Sicherheitsdienste haben alle aus dem Internet heruntergeladenen Dateien blockiert. Genauer gesagt, die Programme, mit deren Hilfe sie geöffnet werden, wurden zwar gestartet, aber der Inhalt der heruntergeladenen Datei wurde nicht angezeigt. Jetzt ist alles in Ordnung, und die im Artikel angehängte Datei wird auch normal geöffnet. Alles sehr schön und klar, vielen Dank.
 
Beim Versuch, MasterWindows zu kompilieren, beschwert es sich "'CMasterWindowsEXE::Run' - cannot call protected member function ClassMasterWindows.mqh" in der Zeile "WinEXE.Run()". Können Sie mir sagen, wie ich das Problem lösen kann?