OOP vs. prozedurale Programmierung

 
Kommentare, die sich nicht auf das "EA-Projekt" beziehen, wurden in dieses Thema verschoben.
 

Ich möchte hier keinen Chor ins Leben rufen, aber ich frage mich, ob die Befürworter von OOP einen Code zur Lösung eines Problems vorlegen können, der deutlich zeigt, dass diese Lösung effizienter ist als eine Lösung ohne OOP?


Ich bin ein Meister im Lösen von Problemen ohne OOP und würde gerne mit einem Meister im Lösen von Problemen mit OOP kämpfen.

 
Реter Konow:

Ich möchte hier keinen Chor ins Leben rufen, aber ich frage mich, ob die Befürworter von OOP einen Code zur Lösung eines Problems vorlegen können, der deutlich zeigt, dass diese Lösung effizienter ist als eine Lösung ohne OOP?

Ich bin ein Problemlöser ohne OOP und würde gerne einen Problemlöser mit OOP bekämpfen.

Dies ist keine Plattform, auf der Sie den Vergleich reproduzieren können - das Programm ist einseitig (Einzeldatei). Hier können Sie schreiben, was Sie wollen, und die Leistung und der Zugriff auf das Programm bleiben fast auf dem gleichen Niveau. Obwohl es möglich ist, in jedem Schreibstil, ob prozedural oder OOP, Fehler zu machen.

 
Vitaly Muzichenko:

Dies ist keine Plattform, auf der Sie den Vergleich reproduzieren können - das Programm ist einseitig (Einzeldatei). Hier können Sie schreiben, was Sie wollen, und die Leistung und der Zugriff auf das Programm bleiben fast auf dem gleichen Niveau. Obwohl man in jedem Programmierstil - prozedural oder OOP - Fehler machen kann.

Ich kann Sie nicht ganz verstehen. Was verstehen Sie unter einem "einseitigen Programm"? Sie können einfach zwei verschiedene Ansätze zur Lösung einer Aufgabe vergleichen. Beim Vergleich müssen wir jede Lösung anhand der Hauptkriterien bewerten: die Lösung selbst, die Kompaktheit des Codes und die Lesbarkeit des Codes.


Dies sind die wichtigsten Kriterien für die Programmierung.

Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым...
 
Реter Konow:

Das Schreiben großer Codeblöcke, die Hunderte von Zeilen umfassen. Fast keine Kommentare. Kein OOP. Code auf Russisch. Alles funktioniert sehr effizient. Ich habe keine Probleme mit der Orientierung im Programm, obwohl etwa 100 Dateien mit ihm verbunden sind. Wahrscheinlich, weil ich mich daran gewöhnt habe und mich an alles vor langer Zeit erinnert habe. Das Wichtigste ist, dass Sie Ihr Programm kennen und verstehen, alles andere ist zweitrangig. Imho.

Über die "Effizienz" der Arbeit kann man streiten.

Dasselbe gilt für die Modifizierbarkeit - wenn Ihr Code für Zitate unterschiedlicher Genauigkeit verwendet werden soll - muss er dann geändert werden, und ist es einfach, dies zu tun?

Das Hauptproblem bei solchen Projekten besteht darin, Änderungen vorzunehmen. Die Praxis zeigt, je größer die Blöcke sind, desto wahrscheinlicher ist es, dass bei der Änderung Fehler gemacht werden. Das Fehlen von Kommentaren ist ein Nachteil, kein Vorteil. Deshalb muss man sich viele Dinge merken.

 
Реter Konow:

Ich möchte hier keinen Chor bilden, aber ich frage mich, ob die Befürworter von OOP einen Code vorlegen können, der ein Problem löst, bei dem klar erkennbar ist, dass diese Lösung effizienter ist als eine Lösung ohne OOP?

Ich bin ein Meister im Lösen von Problemen ohne OOP und würde gerne gegen einen Meister im Lösen von Problemen mit OOP kämpfen.

Ich habe einen solchen Code bereits oben vorgestellt. Es gibt eine vollständig virtuelle Schnittstelle, über die der Handelsverlauf abgewickelt wird. Das gleiche System wird bei meiner Arbeit mit der aktuellen Stelle und an anderen ähnlichen Stellen verwendet.

Aufgrund von OOP haben wir eine vollständige Einheit von MT4 und MT5, und in MT5 funktioniert es unabhängig davon, ob es sich um Hedging oder Netting handelt.

Außerdem habe ich, gerade dank OOP, innerhalb eines EAs die Möglichkeit, mehrere TS zu verwenden, die sich in ihrer Magie unterscheiden.

Tatsächlich wurde OOP erfunden, um die Codeunterstützung zu vereinfachen. Gleichzeitig müssen Sie beim Schreiben einen hohen Preis zahlen. Wenn Sie Code schreiben, ihn ohne Änderungen verwenden und ihn dann wieder entfernen, ist es sinnlos, sich mit OOP zu beschäftigen. OOP ist gerade dann von Vorteil, wenn derselbe Code an vielen Stellen benötigt wird und in regelmäßigen Abständen geändert werden muss.

Dementsprechend wird der Umfang der OOP-Anwendung und Nicht-Anwendung durch die Notwendigkeit der Code-Wartung und -Änderung bestimmt.

 
George Merts:

Über "Effizienz" kann man streiten.

Dasselbe gilt für die Modifizierbarkeit - wenn Ihr Code für Angebote mit unterschiedlicher Genauigkeit verwendet werden soll, sind dann Änderungen erforderlich und lassen sich diese leicht vornehmen?

Das Hauptproblem bei solchen Projekten besteht darin, Änderungen vorzunehmen. Die Praxis zeigt, je größer die Blöcke sind, desto wahrscheinlicher ist es, dass bei der Änderung Fehler gemacht werden. Das Fehlen von Kommentaren ist ein Nachteil, kein Vorteil. Deshalb muss man sich viele Dinge merken.

Die Vielseitigkeit der Blöcke ist ein weiteres Kriterium für die Bewertung. Natürlich muss ein Block für eine breite Palette von Aufgaben einsetzbar sein und sich leicht an veränderte Bedingungen anpassen lassen. Das ist genau das, was ich habe. Ich verwende zum Beispiel die so genannte "Fokus"-Technologie. Das heißt, die Werte der wichtigsten Parameter werden immer in globalen Variablen festgelegt, und diese Variablen werden in allen Blöcken eingesetzt.

 
Wir müssen in der Praxis vergleichen. Andernfalls ist es eine nutzlose Diskussion.
 
Реter Konow:

Die Vielseitigkeit der Blöcke ist ein weiteres Bewertungskriterium. Natürlich sollte ein Block für eine breite Palette von Aufgaben geeignet sein und sich leicht an veränderte Bedingungen anpassen lassen. Das ist genau das, was ich habe. Ich verwende zum Beispiel die so genannte "Fokus"-Technologie. Das heißt, die Werte der wichtigsten Parameter werden immer in globalen Variablen festgelegt, und diese Variablen werden in allen Blöcken eingesetzt.

Ich fürchte, globale Variablen sind auch ein Nachteil. In allen Blöcken sollten so wenig globale Variablen wie möglich vorhanden sein. Nur um sicherzustellen, dass jeder Block nur die Daten erhält, die er braucht, und wenn möglich - nur in konstanter Form, so dass es keine Möglichkeit gibt, etwas zu ändern, das sich nicht ändern soll.

Die einzigen beiden globalen Variablen in meinen Projekten sind das Objekt der Klasse CExpert, dessen Funktionen die Funktionalität von Init(), OnTick() und anderen Ereignissen kapseln, und das Objekt CLogFile - eine Log-Datei, die die Ablaufverfolgung ausgibt, da die Ablaufverfolgungsmakros an jeder Stelle des Programms funktionieren müssen.

Meiner Meinung nach ist es nicht die beste Lösung, sich auf das Gedächtnis zu verlassen, denn wie Sherlock Holmes schon sagte - irgendwann wird das benötigte Wissen unter einem Haufen unnötigen Mülls begraben. Und auch das Gedächtnis kann versagen.

 
George Merts:

Ich fürchte, globale Variablen sind auch ein Nachteil. In allen Blöcken sollten so wenig globale Variablen wie möglich vorhanden sein. Nur um sicherzustellen, dass jeder Block nur die Daten erhält, die er braucht, und wenn möglich - nur in konstanter Form, so dass es keine Möglichkeit gibt, etwas zu ändern, das sich nicht ändern soll.

Die einzigen beiden globalen Variablen in meinen Projekten sind das Objekt der Klasse CExpert, dessen Funktionen die Funktionalität von Init(), OnTick() und anderen Ereignissen kapseln, und das Objekt CLogFile - eine Protokolldatei, die die Ablaufverfolgung ausgibt, da die Ablaufverfolgungsmakros an jeder Stelle eines Programms funktionieren müssen.

Sich auf das Gedächtnis zu verlassen, ist nicht die beste Lösung, zumindest weil, wie Sherlock Holmes sagte, irgendwann das notwendige Wissen unter einem Haufen unnötigen Mülls begraben wird. Und auch das Gedächtnis kann versagen.

Wissen Sie, hinter all diesen Begriffen und OOP-Code kann ich die Aufgabe, die Sie gelöst haben, nicht erkennen. Was war das Wesentliche daran? Bitte beschreiben Sie es und ich werde Ihnen meine Lösung anbieten. Dann können wir sie nach allen möglichen Kriterien vergleichen.
 
Реter Konow:
Sie muss in der Praxis verglichen werden. Andernfalls ist dies eine sinnlose Diskussion.

Warum "nutzlos"? Sehr nützlich.

Doch wie lässt sich die "Einfachheit der Unterstützung" in der Praxis vergleichen?

Sagen wir, ein Code, der als ein großer Block geschrieben wurde, und ein Code, der in funktionale Teile aufgeteilt ist - die Einführung von Änderungen ist in beiden Fällen absolut gleich. Der einzige Unterschied besteht darin, dass man sich im ersten Fall alle Verbindungen merken sollte, die von der Änderung betroffen sind, und diese berücksichtigen sollte. Im zweiten Fall hat die Einheit nur Zugriff auf die Verbindungen, die sie für ihre Arbeit benötigt - die Änderung wirkt sich auf alle verfügbaren Verbindungen aus. Sie brauchen sich nichts zu merken - passen Sie einfach alles an, was für den zu ändernden Block verfügbar ist.

Wie ist der Unterschied hier zu bewerten? Der Arbeitsaufwand ist genau der gleiche!