OOP vs. prozedurale Programmierung - Seite 39

 
Andrei:

Die Klasse hat nur interne Variablen und keine Eingabe oder Ausgabe... Wo haben Sie die Verwendung eines solchen Objekts, das in keiner Weise mit der Außenwelt in Berührung kommt und in seinem eigenen Saft kocht, bei der Programmierung gesehen?


Warum streiten Sie sich über etwas, das Sie nicht gesehen haben? Es wird ein Klassenkonstruktor erstellt, der eine beliebige Anzahl von Parametern erhalten kann. Verschiedene untergeordnete Klassen können völlig unterschiedliche Parametersätze in ihren Konstruktoren haben. Sie können einfach Methoden schreiben, um Parameter zu setzen.

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

1. Dies ist die wichtigste Antwort auf die Notwendigkeit von OOP.

2. Es ist eine Frage der Erfahrung in Teams. Ich habe alles geschrieben, was ich brauchte. Vor ein paar Jahren beschloss ich, wieder etwas zu schreiben - alles liest sich, keine Probleme.


Aus Ihren Antworten habe ich eines verstanden: OOP ist ein gewisser Standard, der die Disziplin des Programmierens einführt, der Einheitlichkeit einführt und auf dieser Basis zunächst weniger Fehler macht und, was am wichtigsten ist, der die Probleme der Modifikation im Prinzip reduziert. Das gleiche Ergebnis wurde jedoch bei sorgfältiger Beachtung der GOSTs, der Entwicklungsstufen und der Dokumentation erzielt.


Wie oft muss ich Ihnen das noch sagen? OOP ist nicht nur ein Mittel zur Strukturierung des Codes, sondern enthält auch Mechanismen, die in Ihrer prozeduralen Programmierung fehlen.

Das ist vielleicht der Fall, wenn jemand keine Berge gesehen hat, wird er es nicht verstehen, auch wenn man es ihm sagt.

 
Реter Konow:

Ich persönlich strebe nach Vielseitigkeit bei den Lösungen. Dazu ist es erforderlich, ähnliche Funktionen in einem einzigen Block zusammenzufassen , ohne den Codeumfang zu erhöhen. Dadurch wird die Effizienz des Mechanismus erhöht, und es besteht kein Bedarf an Überlastung und Teilung. Man muss nur sein Gehirn ein bisschen benutzen - das ist alles).

Das heißt, es gab zwei Funktionen mit jeweils 20 Zeilen. Beide führen ähnliche Handlungen aus oder lösen ähnliche Aufgaben. Mein Ziel ist es, eine Funktion zu erstellen, die die Arbeit beider Funktionen mit nicht mehr als 20 Zeilen Code erledigt. So erstelle ich Blöcke.


Wie lange haben Sie schon in Ihrer Bibliothek gestöbert?

 

Um der Freude willen - R ist in einem absolut ekelhaften "alles in einem Mülleimer ohne Differenzierung des Zugriffs" Modus geschrieben. Ein veralteter Ansatz von vor zwanzig Jahren, ohne Bereiche der Sichtbarkeit, des Schutzes oder der Multisession. Ich schreibe, als ob ich der Einzige wäre. So wurde das Projekt unter einer Person von unprofessionellen Entwicklern geboren. Sie muss von Grund auf neu geschrieben werden. Wenigstens einmal.

Ich hatte die Idee, aus MQL5 eine normale Schnittstelle in R zu machen, aber nachdem ich mich näher damit beschäftigt hatte, entschied ich mich sofort dagegen, sie zu integrieren. Das System ist kategorisch nicht in der Lage, Daten und Sitzungen zu schützen.

Solange ein Programmierer nicht in normalen Entwicklungsteams mit strengen Anforderungen arbeitet (und sich dabei mindestens ein paar Jahre lang die Hände schmutzig macht), wird er nicht zu einem Entwickler im normalen Sinne. In 90 % der Fälle fassen wir uns an den Kopf, wenn wir uns bei der Auswahl von Bewerbern Testaufgaben ansehen. Totales Entsetzen in der gesamten Entwicklungsindustrie.

Also noch einmal - die Gegner von OOP stellen hier eine Art von Possenreißer dar.

Nochmals Entschuldigung.

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

Wow!

Ich habe mich gefragt, ob es bei der heutigen Programmierung noch eine andere Möglichkeit gibt, ein Ei-Level-Problem auf kühlere Art und Weise zu verwirren.

Gehen Sie zu einem Auto, das im Stau steht, sehen Sie sich an, wie es eingestellt ist, und sagen Sie dem Fahrer: "Gibt es eine Möglichkeit, das Problem besser zu verwirren, gehen Sie hundert Meter weiter".

Meine Erfahrung zeigt, dass solche "verwirrenden Probleme" viel leichter zu verstehen sind als "problemlose" EAs, die aus einer einzigen Vorlage mit allen globalen Variablen kopiert wurden.

 
Dmitry Fedoseev:

Und warum spekulieren Sie hier über etwas, das Sie nicht gesehen haben? Es wird ein Klassenkonstruktor erstellt, der eine beliebige Anzahl von Parametern erhalten kann.

Lesen Sie genau, es ging um die Klasse, nicht um den Klassenkonstruktor.

Außerdem schlagen Sie wieder vor, die Arbeit eines Affen zu machen - einen Garten auf einem Grundstück zu pflanzen, wenn wir Zugang zu Parametern haben können, ohne irgendetwas im Falle von externen Variablen zu tun oder sie direkt zu übergeben, ohne unnötige Kopfschmerzen mit Konstruktoren-Destruktoren und all den dazugehörigen Speicherlecks.

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

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

Und?

Zur Erinnerung: In ALLEN meinen EAs gibt es zehn Zeilen (wenn man Einschlüsse und Kommentare nicht mitzählt).

#include <MyLib\DebugOrRelease\DebugSupport.mqh>
#include <MyLib\Factories\ForTrade\EURGBP\B1H2C20T2_0001_EPF.mq5>
#include <MyLib\Factories\ForTrade\EURGBP\B2H2C20T4_0001_EPF.mq5>
#include <MyLib\Factories\ForTrade\EURGBP\B3H2C20T2_0001_EPF.mq5>

// Объявляем фабрики частей эксперта.
CB1H2C20T2_0001_EPF epfFact_0;
CB2H2C20T4_0001_EPF epfFact_1;
CB3H2C20T2_0001_EPF epfFact_2;

// Объявляем функцию получения указателя на фабрику.
CEAPartsFactoryT* CEAPartsFactoryT::GetAdvisorsPartsFactory(uint uiFactIdx = 0)
{
   if(uiFactIdx == 0) return(GetPointer(epfFact_0)); 
   if(uiFactIdx == 1) return(GetPointer(epfFact_1)); 
   if(uiFactIdx == 2) return(GetPointer(epfFact_2)); 
   return(NULL); 
};

#include <MyLib\TSTemplate\ExpertAdvisorT.mq5>

In unserem Fall gibt es drei völlig unterschiedliche TS in einem EA. Sie arbeiten alle gleichzeitig, ohne sich gegenseitig zu behindern.

Zusätzliche TCs können hinzugefügt werden, indem die entsprechende Fabrik deklariert und der Code, der sie zurückgibt, in eine Funktion eingefügt wird.

Die eigentliche Frage ist jedoch nicht, ob es zu wenige oder zu viele Codezeilen gibt. Die Frage ist, wie einfach sie zu warten und bei Bedarf zu ändern sind.

SanSanych, können Sie die von Peter zur Verfügung gestellte Tabellendatei leicht herausfinden? Und leicht zu ändern? Nun, dann brauchen Sie - wie Peter - kein OOP.

 
Реter Konow:
OOP ist eine Methode, um Teile eines Mechanismus zu trennen, zu umhüllen und zu verbergen. Ob dies notwendig ist oder nicht, muss der Entwickler selbst entscheiden. Sie hat nichts mit der Steigerung der Effizienz des Mechanismus zu tun. Sie strukturiert die Denkweise, ja. Es ist nicht bekannt, ob sie korrekt strukturiert ist oder nicht. Ob dies notwendig ist, hängt von der jeweiligen Person ab.

Ganz genau. Dies ist das Wesen der Verkapselung.

Außerdem gibt es Vererbung und Polymorphismus.

 
Реter Konow:
OOP ist eine Methode zum Trennen, Umhüllen und Verstecken von Teilen eines Mechanismus. Ob dies notwendig ist, hängt imho von der jeweiligen Person ab.

Genau, es kommt auf den Einzelnen an. Warum sollte ein Programmierer, der nicht an Schizophrenie leidet, den Zugang zu einem Teil seines eigenen Codes, den er selbst debuggt, mühsam verbergen? Würden Sie sich nicht lieber selbst die Hände binden? :)

 
Renat Fatkhullin:

Solange ein Programmierer nicht in normalen Entwicklungsteams mit strengen Anforderungen gearbeitet hat (mindestens ein paar Jahre in der Praxis), wird er/sie nicht zu einem Entwickler im normalen Sinne. In 90 % der Fälle fassen wir uns an den Kopf, wenn wir uns bei der Auswahl von Bewerbern Testaufgaben ansehen. Totales Entsetzen in der gesamten Entwicklungsindustrie.

Ich frage mich, worin sich dieses "Grauen" manifestiert.

Ich kann vermuten, dass es mit der Verwendung von OOP zu tun hat, denn bei der prozeduralen Programmierung wird das Hauptaugenmerk auf die Logik der Arbeit des Algorithmus gelegt und nicht auf alle möglichen fremden OOP-ähnlichen Zusätze, mit denen man sehr leicht einen Wald aus beliebigen Unklarheiten aufbauen kann.