OOP vs. prozedurale Programmierung - Seite 4

 
Реter Konow:
George Merts:

Ähm ... Ich habe nicht ganz verstanden, worum es geht.

Ziel war es, das TK vom Terminal zu trennen. Der Code muss auf beiden Plattformen ohne Änderungen kompilierbar sein. Die Hauptaufgabe - alle geschriebenen TS auf WealhtLab Developer zu übertragen, indem nur Klassen für die Arbeit mit dem Handelsserver geschrieben werden.

//--------------------------------------------------


Ich habe mich nach der aktuellen Aufgabe erkundigt, um die Lösungen anhand verschiedener Kriterien zu vergleichen und zu einer Schlussfolgerung über die Wirksamkeit der einzelnen Lösungen zu gelangen. Sie lenken das Gespräch vom praktischen Teil ab. Wenn man die Wirksamkeit von OOP behauptet, muss man sie auch in der Praxis beweisen können. Aber ich bin bereit zu versuchen, meine Meinung zu beweisen.

Was ist also das aktuelle Problem? Ich hoffe, Sie erinnern sich daran)


Wenn Sie Zeiger auf Funktionen verwenden, können Sie auf OOP verzichten. Aber wenn Sie keine Zeiger verwenden, müssen Sie verstehen, dass Sie nicht mit OOP mithalten können.

 
Alexey Volchanskiy:

Ich nehme an, Sie sind kein Programmierer? Dann erinnern Sie sich, wo Sie 2017.07.05 14:55 GMT 00 waren, mit wem Sie gesprochen haben und worüber ))

Einfach. Ich war zu Hause und führte Selbstgespräche über mein Programm)))
 
Dmitry Fedoseev:

Wenn Sie Zeiger auf Funktionen verwenden, können Sie auf OOP verzichten. Aber wenn Sie keine Zeiger verwenden, müssen Sie verstehen, dass Sie nicht mit OOP mithalten können.

Nein. Solange es keine konkrete Aufgabe gibt, die mir zeigt, dass ich mit OOP nicht mithalten kann, kann ich es nicht begreifen. Leider. Das sind nur Worte.


Zurzeit habe ich 4 Jahre Programmierpraxis. Sie können sie getrost mit 2 multiplizieren, denn ich programmiere jeden Tag viele Stunden. In dieser Zeit habe ich unzählige verschiedene Aufgaben gelöst. Ich habe OOP noch nicht verwendet. Ich kann nicht verstehen, warum ich es brauche. In meiner Praxis werden alle Aufgaben ohne sie nicht weniger, und manchmal sogar effizienter gelöst.

 
Реter Konow:
Nein. Solange es keine konkrete Aufgabe gibt, die mir zeigt, dass ich mit OOP nicht mithalten kann, kann ich es gar nicht begreifen. Leider. Das sind nur Worte.

Stellen Sie sich ein hypothetisches Programm vor, das seinen Algorithmus in Abhängigkeit von externen Parametern ändert; es könnte eine große Anzahl von Varianten geben. Wir können es ohne OOP lösen, aber wie dumm würden diese mehrstöckigen Schalter aussehen. Außerdem ist es klar, dass die Leistung mit zunehmender Anzahl von Varianten abnimmt. Es ist auch klar, dass der Aufbau während der Initialisierung in OOP erfolgt und dann keine unnötigen Verzweigungen im Arbeitsprozess auftreten, d.h. eine Erhöhung der Anzahl der Varianten wird die Leistung nicht verringern.

 

Ein charakteristisches Merkmal der strukturierten Programmierung ist die Aufteilung der Programme in Codeblöcke,
die eine bestimmte Aufgabe erfüllen. In diesem Fall sind die Bausteine Funktionen
und Module (die in separate Dateien verschoben werden können).
Moderner ist die objektorientierte Programmierung (OOP).
Das Konzept der OOP bezieht sich eher auf die Datenorganisation. OOP macht das Leben eines Programmierers einfacher.
Die Schlüsselkonzepte der OOP sind Objekte und Klassen.
Klassen sind Strukturen, in die Funktionen eingefügt werden. Und Objekte sind strukturierte Variablen oder Instanzen von Klassen

Die strukturierte Programmierung ist der erste Schritt. Wenn er sie beherrscht, hat der Programmierer einen Vorteil. OOP ist der nächste Schritt mit den folgenden Vorteilen

Классы и объекты в C++
  • gamesmaker.ru
Наконец-то мы добрались до самой важной темы во вступительном курсе. Сегодня мы будем говорить о классах и объектах. Выпуск небольшой и не сложный. Что есть хорошо. Класс - не что иное, как структура, к которой добавили функции. А объект - это структурная переменная. Данный материал будет более понятным, если вы хорошо освоились со структурами...
 
Реter Konow:
Lassen Sie uns ein bestimmtes Problem lösen und vergleichen.

Hier ist eine einfache Aufgabe (es würde viel Schreibarbeit erfordern, sie im Detail zu erklären).

Alles geschieht in OnTick(). Angenommen, wir prüfen eine Bedingung und eröffnen einen Auftrag. Die Bedingung ist nicht wichtig, nehmen wir an, es ist ein Maximum oder Minimum.

Der Roboter steht natürlich auf einem Chart und erhält Kurse dieses Symbols. Es ist klar, dass wir nicht nur eine Funktion OnTick haben, sondern auch andere Funktionen: OnTrade, OnTimer, benutzerdefinierte Funktionen, usw.

Daher müssen alle Variablen, die gemeinsam genutzt werden, außerhalb dieser Funktionen am Anfang des Codes deklariert werden. Zum Beispiel der Name des Symbols, der Briefkurs, der Geldkurs, der Spread, die Anzahl der Ziffern des Kurses, usw. Es wird Dutzende von ihnen geben.

Dieser Roboter handelt nur auf einem Symbol, d.h. dort, wo er steht. Nehmen wir an, dass es 20 solcher Charts gibt und wir denselben Roboter auf allen Charts installieren, um gleichzeitig mit allen 20 Paaren zu handeln.

Es handelt sich jedoch nicht um einen Multiwährungs-Handelsroboter, wie einige Händler auf dem Markt bemerkt haben.


Hier müssen wir ihn in einen Mehrwährungsroboter verwandeln. D.h. wir legen es auf ein beliebiges Diagramm (nur auf 1 Diagramm) und es öffnet Geschäfte für 20 Paare. Das bedeutet, dass wir es im Tester im Einzelplatzmodus starten und es wird mit den Paaren handeln, die in Market Watch sind.

Hier ist, wie Sie es ohne OOP implementieren werden. Werden Sie alle gemeinsamen Variablen in Arrays mit 20 Elementen umwandeln?

Und was ist mit den Funktionen, die für alle Paare gleichzeitig aufgerufen werden?

Ohne OOP geht es nicht. :)


P.S. Ich möchte anmerken, dass ich keine russische Ausbildung habe, und daher lange schrieb, und keine Zeit hatte, mehrere Seiten zu lesen.

 
Dmitry Fedoseev:

Wenn Sie Zeiger auf Funktionen verwenden, können Sie auf OOP verzichten. Wenn Sie keine Zeiger haben, sollten Sie selbst wissen, dass Sie mit OOP nicht mithalten können.


Da bin ich anderer Meinung. Ich habe früher digitale Fernsehprogramme geschrieben, der Compiler war C++, aber er wurde in C verwendet, weil der Speicher knapp war. Zeiger auf Funktionen wurden sehr ausgiebig verwendet, aber das ist noch lange kein OOP.

 
Petros Shatakhtsyan:

...

Hier ist, wie Sie es ohne OOP tun werden.

...

Die Frage, die hier wichtiger ist, lautet nicht "wie", sondern "warum". Warum sollten Sie etwas programmieren müssen, das bereits im Terminal implementiert ist - Sie müssen nur die erforderliche Anzahl von Charts öffnen und sie an den EA anhängen. Darüber hinaus sind die Parameter für verschiedene Symbole und Zeitrahmen wahrscheinlich unterschiedlich.

 
Alexey Volchanskiy:

Da bin ich anderer Meinung. Ich habe früher Programme für das Digitalfernsehen geschrieben, der Compiler war C++, aber er wurde in C verwendet, weil der Speicher knapp war. Zeiger auf Funktionen wurden sehr ausgiebig verwendet, aber das ist noch lange nicht OOP.


Es ist nicht sehr bequem, aber Sie können mit Zeigern allein tun, soweit die Leistung betroffen ist.

Und Bequemlichkeit ist ein relativer Begriff.

 
Dmitry Fedoseev:

Stellen Sie sich ein hypothetisches Programm vor, das seinen Algorithmus in Abhängigkeit von externen Parametern ändert; es könnte eine große Anzahl von Varianten geben. Es ist möglich, das Problem ohne OOP zu lösen, aber wie dumm würden diese mehrstöckigen Schalter aussehen. Außerdem ist es klar, dass die Leistung mit zunehmender Anzahl von Varianten abnimmt. Es ist auch klar, dass es bei OOP einen Build bei der Initialisierung und dann keine unnötigen Verzweigungen während der Arbeit gibt; d.h. eine steigende Anzahl von Varianten wird die Leistung nicht verringern.

Es ist wünschenswert, dass sie zu einer bestimmten Aufgabe führen. Eine solche Beschreibung ist nicht sehr klar. In meiner Praxis ändert sich der Algorithmus nicht, wenn sich externe Parameter ändern. Sie ist von vornherein universell für alle Werte dieser Parameter gemacht. Daher ist es nicht ganz klar, was Sie meinen. Beschreiben Sie es anhand eines konkreten Beispiels.