Fragen zu OOP in MQL5 - Seite 23

 
Vladimir Simakov:
Ich zeige es dir heute Abend. Jetzt von meinem Telefon aus.

OK

Es ist kein Problem, die Vererbung von der Schnittstelle zu entfernen, man kann von einer Basisklasse erben, aber meiner Meinung nach wird es Verwirrung im Code geben - es wird schwieriger zu verstehen, welche Methode aufgerufen wird, und mit dieser Codestruktur - "OOP-Muster - Verhaltensmuster - Strategie".

Ich bin immer und garantiert ein Konstruktor in jeder Strategie haben, scheint es diese Konstruktoren noch nicht benötigt werden... aber ich lasse diese Möglichkeit offen, sie ist nicht überflüssig

ZS: Die Basisklasse selbst für alle Strategien ist auch ziemlich kompakt, was das angeht:

class CStrategy: public IStrategy
{
protected:
   SSettingsForOrder  m_setting;
   COrder *m_order;
   void RunStrategy();
   double CalcLot();
   double GetPrice(); 
};

Bisher gefällt mir, dass die Codestruktur lesbar und logisch ist, und das Wichtigste "in all diesen Gesten" ist es, eine Art Prototyp zu machen, der es erlaubt, schnell Strategien selbst hinzuzufügen und sie zu testen.

Ich hatte im Prinzip schon alles geschrieben, aber ich mag den Code nicht - ich habe Servicefunktionen (um eine Bestellung zu öffnen, Lose zu berechnen usw.) im prozeduralen Stil geschrieben und dann habe ich kleine Klassen mit Logik und Aufrufen dieser Servicefunktionen geschrieben und beschlossen, es so gut wie möglich zu machen)))

 
Igor Makanu:

OK

Es ist kein Problem, die Vererbung von der Schnittstelle zu entfernen, man kann von einer Basisklasse erben, aber meiner Meinung nach wird es Verwirrung im Code geben - es wird schwieriger zu verstehen, welche Methode aufgerufen wird, und mit dieser Codestruktur - "OOP-Muster - Verhaltensmuster - Strategie".

Ich bin immer und garantiert ein Konstruktor in jeder Strategie haben, scheint es diese Konstruktoren noch nicht benötigt werden... aber ich lasse diese Möglichkeit offen, sie ist nicht überflüssig

ZS: Die Basisklasse selbst für alle Strategien ist auch ziemlich kompakt, was das angeht:

Bisher gefällt mir, dass die Codestruktur lesbar und logisch ist, und das Wichtigste "in all diesem Zeug" ist es, eine Art Prototyp zu machen, der es erlaubt, schnell Strategien selbst hinzuzufügen und sie zu testen.

Ich hatte im Prinzip schon alles geschrieben, aber ich mag den Code nicht - ich habe Servicefunktionen (um eine Bestellung zu öffnen, Lose zu berechnen usw.) im prozeduralen Stil geschrieben und dann habe ich kleine Klassen mit Logik und Aufrufen dieser Servicefunktionen geschrieben und beschlossen, es so gut wie möglich zu machen)))

//+------------------------------------------------------------------+
class CStrategy
{
protected:
   int x;
public:
   CStrategy(int _x):x(_x){}
   virtual void Algorithm()=0;};
//+------------------------------------------------------------------+
class CStrategy_01:public CStrategy
{
public:
   CStrategy_01():CStrategy(1) {Print(__FUNCTION__);}
   void Algorithm()                 {Print(__FUNCTION__,", x = ",x);       } };
//+------------------------------------------------------------------+
class CStrategy_02:public CStrategy
{
public:
   CStrategy_02():CStrategy(2) {Print(__FUNCTION__);}
   void Algorithm()                 {Print(__FUNCTION__,", x = ",x);       } };
//+------------------------------------------------------------------+
class Context
{
private:
   CStrategy         *s;
public:
   Context(CStrategy* _strategy):s(_strategy) { Print(__FUNCTION__);}
   ~Context()                       { delete s;                            }
   void              GetStrategy()  { s.Algorithm();                       } };
//+------------------------------------------------------------------+
Context c1(new CStrategy_01);
Context c2(new CStrategy_02);
//+------------------------------------------------------------------+
void OnStart()
{  c1.GetStrategy();
   c2.GetStrategy(); }

Das klingt für mich besser.

 
Vladimir Simakov:

So sieht es für mich besser aus.

im Wesentlichen das Gleiche, aber nicht nach Vorschrift! ))))

ZS: Ich habe sowieso an der Schnittstelle geschraubt, lass es sein, rein zur Show!

 
Igor Makanu:

im Wesentlichen das Gleiche, aber nicht nach Vorschrift! ))))

ZS: Ich habe die Schnittstelle sowieso aufgeschraubt, lassen Sie es sein, rein zur Show!

Ganz im Stil der Profis.)))
 
Vladimir Simakov:
Ganz im Stil der Pluspunkte.)))

nicht viele Menschen verwenden C#, oder vielmehr alle Anwendungsprogrammierer sind auf C# umgestiegen, und nur große Softwareentwickler verwenden C#

alle Beispiele in C# sind über Schnittstellen, so ist es klar, sie sind nutzlos .... Ich will ja nicht schimpfen, aber man kann alles ohne Schnittstellen schreiben, das Konzept, den Stil... aber das Konzept, der Stil und andere Hirngespinste sagen mir, dass Microsoft die Beispiele in C# so geschrieben hat - setzen Sie sich einfach hin und schreiben Sie es auch so!

)))

 
Igor Makanu:

nicht viele Menschen verwenden C#, oder vielmehr alle Anwendungsprogrammierer sind auf C# umgestiegen, und nur große Softwareentwickler verwenden C#

alle Beispiele in C# sind über Schnittstellen, so ist es klar, sie sind nutzlos .... Ich will ja nicht schimpfen, aber man kann alles ohne Schnittstellen schreiben, das Konzept, den Stil... aber das Konzept, der Stil und andere Hirngespinste sagen mir, dass Microsoft die Beispiele in C# so geschrieben hat - setzen Sie sich einfach hin und schreiben Sie sie auch so!

)))

Verschoben, weil es unbequem ist, auf die Pluspunkte unter .NET zu schreiben, und Sharp wurde ursprünglich als Sprache für Dotnet entwickelt. Das ist meine persönliche Meinung, anfangs schrieb ich Pluspunkte für .NET, es fühlte sich schwerfällig an.

Obwohl... sie haben den neuen Profis eine Menge hinzugefügt, vielleicht macht es mehr Spaß.

 
Alexey Volchanskiy:

Wir sind umgestiegen, weil es unbequem ist, auf .NET zu schreiben, und Sharp ursprünglich als Sprache für Dotnet entwickelt wurde. Dies ist meine subjektive Meinung, sobald ich in Plus unter .NET geschrieben habe, hatte ich den Eindruck von Unbeholfenheit.

Obwohl... sie haben den neuen Profis eine Menge hinzugefügt, vielleicht macht es mehr Spaß.

Ich bin gerade jetzt schreiben Windows-Formular für eine Aufgabe, berührt c++/cli und beschlossen, es nicht zu verwenden und gedruckt c#.
 
Vladimir Simakov:
Ich bin gerade jetzt schreiben Windows-Formular für eine Aufgabe, berührt c++/cli und beschlossen, es zu vergessen und gedruckt c#.

Ja, die Schärfe ist um eine Größenordnung besser. Und die Geschwindigkeit ist fast die gleiche, das heißt, ohne Cli gewinnen die Profis um das Anderthalbfache.

 
Vladimir Simakov:
Ich schreibe gerade ein Windows-Formular für eine Aufgabe, berührt c++/cli und beschlossen, es nicht zu verwenden und gedruckt c#.

Ich habe zu Beginn des Jahres versucht, cli zu erreichen ... Ich war für 2 Tage zufrieden, die unmenschliche Logik der, die diese cli gemacht - die Syntax ist kompliziert, alles ist nicht bequem, es gibt sehr wenig Informationen mit Beispielen, imho oder reine C + + oder C # - google alle will, ist die Syntax klar - als Ergebnis, nehmen Sie und schreiben

 
Igor Makanu:

Ich habe zu Beginn des Jahres versucht, cli zu erreichen ... Die Syntax ist kompliziert, alles ist unübersichtlich, es gibt sehr wenig Informationen mit Beispielen, imho - entweder reines C++ oder C# - alle Wünsche werden gegoogelt, die Syntax ist klar - schließlich bekommt man und schreibt man

Sharp wurde um das Jahr 2000 herum geboren und steckte noch in den Kinderschuhen, aber es herrschten Pluspunkte, so dass sie C++ mit Dotnet überbrückten, um es populär zu machen. Übrigens wurde Sharp von Delphi- und C++Builder-Entwicklern geschaffen, ich habe mich damals gefragt, wie viele gemeinsame Konzepte es gibt. Nehmen Sie die gleichen Eigenschaften, Ereignisse.