Fragen zu OOP in MQL5 - Seite 38

 
Nikolai Semko:

Ja, auch ich habe eine ähnliche Situation. Es ist nicht schwer zu lernen, schwieriger ist es, umzulernen und alte Gewohnheiten abzulegen. Ich kann mir viele schlechte Gewohnheiten der prozeduralen Programmierung immer noch nicht abgewöhnen.

Umlernen vom prozeduralen Stil? hmm, gut geschriebener prozeduraler Code ist normalerweise leicht in eine Klasse zu packen, wenn man das Projekt vergrößern muss

Dmitry Fedoseev:

Konstanten und Statik können vorerst weggelassen werden. Und denken Sie nicht einmal an Schnittstellen.

Und wenn alles fertig ist, dann schauen Sie und markieren Sie etwas als Statik und etwas als Konstante. Und Sie können die Schnittstellen ganz vergessen.

Ich weiß, wie man viele Dinge schnell erledigt,

Ich habe mich entschlossen, meine Zeit dem Studium der Theorie zu widmen, oder besser gesagt, MQL auf das Niveau dessen zu bringen, was in den letzten Jahren auf dem Markt war, selbst viele Leute hier wissen nicht über die Möglichkeiten von Terminals

Wenn ich das Material studieren werde, muss ich es imho richtig studieren und verstehen, ob MQL näher an C++ oder C# ist - im Moment scheint es C++ zu sein. In C# machen sich die Leute nicht einmal die Mühe mit Modifikatoren, oder besser gesagt, sie reparieren einfach alles, was das Studio als verdächtig markiert )))

 
Dmitry Fedoseev:

Konstanten und Statik können vorerst einfach ignoriert werden. Auch die Schnittstellen.

Und wenn alles fertig ist, dann schauen Sie nach und markieren Sie etwas als statisch und etwas als konstant. Und Sie können die Schnittstellen ganz vergessen.

Die Hauptsache ist, dass Konstanten und Statik eingehalten werden. Ich stimme zu, was die Schnittstellen betrifft.

 
Igor Makanu:

Umschulung vom prozeduralen Stil? hmm, gut geschriebener prozeduraler Code in einer Klasse verpackt, wenn Sie das Projekt vergrößern müssen, normalerweise kein Problem

Ich weiß, wie man viel und schnell macht,

Ich habe mich entschlossen, meine Zeit dem Studium der Theorie zu widmen, oder besser gesagt, MQL auf das Niveau dessen zu bringen, was in den letzten Jahren entwickelt wurde, selbst viele Leute hier sind nicht auf dem neuesten Stand der Fähigkeiten von Terminals

Und wenn man das Material studiert, muss man es richtig studieren, imho, und zu verstehen, was näher an MQL zu C++ oder zu C# alle gleich ist - für jetzt scheint es C++ zu sein.

const - wenn es notwendig ist, die Zuweisung einer Variablen zu verbieten (außer bei einmaliger Initialisierung). Wenn eine Variable als conts deklariert ist, sollten die Funktionsargumente auch const sein, wenn man sie per Referenz an eine Funktion übergibt, aber der Compiler sorgt dafür, dass dies geschieht, man muss nicht darüber nachdenken. Wenn eine Variable nicht zugewiesen wird, kann sie auch als const markiert werden - das geht dann schneller, das gilt auch für Funktionsargumente. Es kann jedoch jederzeit vorkommen, dass Sie sie ändern müssen...

statisch - wenn es sich um eine Variable in einer Klasse handelt, ist das ein seltener Fall, sogar der seltenste. Wenn es sich um eine Klassenmethode handelt und die Methode nur Argumente dieser Methode undstatische Variablen der Klasse behandelt, ist dies ebenfalls ein seltener Fall (allerdings nicht so selten, wenn man Funktionen nur der Einfachheit halber in einer Klasse sammelt).

 
Schläfst du?
 
Igor Makanu:

Ich hätte gerne ein Beispiel, ich sage Ihnen, ich bin überhaupt nicht gut mit Modifikatoren.


SZS: in der Zwischenzeit, was geht in der allgemeinen Horror in der Programmierung Diskussion in Inet - hier war ein Artikel über const auf hubra letzten Monat, die Bedeutung - ja, diese const ist nicht notwendig, schauen Assembler-Code nicht anders, dass ohne const - Compiler wird es alles wegnehmen ((

Hier ist ein Beispiel:

struct SSettingsForOrder
{
   int mPeriod;
   double mTakeProfit;
   double mStopLoss;
};

class CStrategy
{
   SSettingsForOrder mSettings;
   
   bool mDirty;
   
public:
   CStrategy() : mDirty( true ){}

   CStrategy( SSettingsForOrder& set ) : mSettings( set ), mDirty( true ){}
   
   virtual void NextStepStrategy();
   
   bool IsDirty() const
   {
      return mDirty;
   }
   
   int GetPeriod() const
   {
      return mSettings.mPeriod;
   }
   void SetPeriod( int period )
   {
      if( mSettings.mPeriod != period )
      {
         mSettings.mPeriod = period;
         mDirty = true;
      }
   }
   double GetTakeProfit() const
   {
      return mSettings.mTakeProfit;
   }
   void SetTakeProfit( double takeProfit )
   {
      mSettings.mTakeProfit = takeProfit;
      mDirty = true;
   }
   double GetStopLoss() const
   {
      return mSettings.mStopLoss;
   }
   void SetStopLoss( double stopLoss )
   {
      mSettings.mStopLoss = stopLoss;
      mDirty = true;
   }
   void Load( int fileHandle )
   {
      FileReadStruct( fileHandle, mSettings );
      mDirty = false;
   }
   void Save( int fileHandle )
   {
      FileWriteStruct( fileHandle, mSettings );
      mDirty = false;
   }
};

class CStrategy_XXX : public CStrategy
{
public:
   CStrategy_XXX(){}
   CStrategy_XXX( SSettingsForOrder& set ) : CStrategy( set ){}
   
   virtual void NextStepStrategy();
};

class CStrategy_YYY : public CStrategy
{
public:
   CStrategy_YYY(){}
   CStrategy_YYY( SSettingsForOrder& set ) : CStrategy( set ){}
   
   virtual void NextStepStrategy();
};

class CStrategy_ZZZ : public CStrategy
{
public:
   CStrategy_ZZZ(){}
   CStrategy_ZZZ( SSettingsForOrder& set ) : CStrategy( set ){}
   
   virtual void NextStepStrategy();
};

CStrategy* Strategies[3];

void OnInit()
{
   Strategies[0] = new CStrategy_XXX();
   Strategies[1] = new CStrategy_YYY();
   Strategies[2] = new CStrategy_ZZZ();
   
   int fileHandle = FileOpen( ... );
   for( int i = 0; i < 3; i++ )
   {
      Strategies[i].Load( fileHandle );
   }
   FileClose( fileHandle );
}

void TestAndSave()
{
   bool saveRequired = false;
   for( int i = 0; i < 3; i++ )
   {
      if( Strategies[i].IsDirty() )
      {
         saveRequired = true;
         break;
      }
   }
   if( saveRequired )
   {
      int fileHandle = FileOpen( ... );
      for( int i = 0; i < 3; i++ )
      {
         Strategies[i].Save( fileHandle );
      }
      FileClose( fileHandle );
   }
}

void OnDeinit()
{
   TestAndSave();
   
   for( int i = 0; i < 3; i++ )
   {
      delete Strategies[i];
   }
}

Aus Ihrem Code geht nicht klar hervor, warum eine Schnittstelle benötigt wird, also habe ich sie verworfen.

Natürlich kenne ich Ihre Aufgabe nicht vollständig, aber mit 99,99%iger Wahrscheinlichkeit ist sie nicht erforderlich.

 
Igor Makanu:

Umschulung vom prozeduralen Stil? hmm, gut geschriebener prozeduraler Code in einer Klasse verpackt, wenn Sie das Projekt vergrößern müssen, normalerweise kein Problem

Ich weiß, wie man viel und schnell macht,

Ich habe mich entschlossen, meine Zeit dem Studium der Theorie zu widmen, oder besser gesagt, MQL auf das Niveau dessen zu bringen, was in den letzten Jahren entwickelt wurde, selbst viele Leute hier sind nicht auf dem neuesten Stand der Fähigkeiten von Terminals

Wenn ich das Material studieren werde, muss ich es imho richtig studieren und verstehen, was näher an MQL als an C++ oder an C# ist - im Moment scheint es C++ zu sein.

mql selbst basiert auf C++, aber durch die Bemühungen seiner Schöpfer haben sie viele schlechte Dinge von Sharp übernommen, ohne etwas Gutes hinzuzufügen. Die Sharpe-ähnliche Standardbibliothek ist aufschlussreich. Es würde logischer aussehen, wenn es ähnlich wie bei std wäre. IMHO.
 
Koldun Zloy:

Hier ist ein Beispiel:

Aus Ihrem Code geht nicht hervor, wofür die Schnittstelle gedacht ist, daher habe ich sie verworfen.

Ich kenne Ihre Aufgabe nicht genau, aber es ist zu 99,99 % sicher, dass Sie sie nicht brauchen.

ich höre jetzt zum 5. Mal, dass man die Schnittstellen wegwerfen und sich nicht darum kümmern soll)))

Ich habe die OOP-Entwurfsvorlage "Strategie" als Grundlage genommen.

angewandt, wie angegeben, Schnittstellen als eine Abstraktion, von der ich erben die Basisklasse CStrategy - es stellte sich heraus, dass meine CStrategy wird abwesend öffentlichen Methoden, alle öffentlichen sind durch Schnittstellen beschrieben (3 Stück = Strategie selbst, Strategie Abschluss und jetzt hinzugefügt eine Aufzeichnung der Strategie Zustand ) Die Rolle der Schnittstellen ist... Nun, es ist in etwa dasselbe wie mit const-Modifikatoren - man bekommt am Anfang Warnungen, wenn man eine Methode nicht beschreibt oder versucht, sie mit Vererbung zu schließen - bisher habe ich mehr Bequemlichkeit als Probleme.

Im Allgemeinen bestätige ich, dass es mit 100%iger Wahrscheinlichkeit unnötig ist... aber es ist einfach praktisch, dass die CStrategy-Klasse keinen öffentlichen Abschnitt hat

Ihr Code sieht gut aus, ich werde ihn nach dem Mittagessen bei mir reproduzieren und versuchen, ihn mit meinem zu vergleichen.

Danke!

 
Vladimir Simakov:
Der mql selbst basiert auf c++, aber durch die Bemühungen seiner Schöpfer haben sie viel von dem Schlechten von sharp hineingepackt, ohne etwas Gutes hinzuzufügen. Die Sharpe-ähnliche Standardbibliothek ist aufschlussreich. Es würde logischer aussehen, wenn es ähnlich wie bei std wäre. IMHO.

vielleicht war ich es, der im MQL-Forum den Satz "it's not C++, it's MQL..." ins Leben gerufen hat, und jetzt gibt es viele Antworten auf Fragen wie Ihre in diesem Zusammenhang ))))

im Allgemeinen ist die Sprache recht demokratisch, nicht bequem in MQL zu schreiben - "in 2 Klicks" können Sie in .dll C++ und hier seit Anfang des Jahres in .dll C# gehen, wenn ich mich recht erinnere, einer der ersten Artikel auf dll von Entwickler Renat - dh diese Möglichkeit zunächst, als ein Produktkonzept angeboten wird, imho

SZS: oben zu schreiben, aus irgendeinem Grund in den Sinn kam der Satz - Ich bin ein Künstler - ich sehe so!)))

 
Igor Makanu:


ZS: zu den oben genannten, aus irgendeinem Grund in den Sinn kam der Satz - Ich bin ein Künstler - ich sehe so! )))

das kommt mir bei den Antworten von Entwicklern sehr oft in den Sinn, gut oder schlecht, ich weiß es nicht

Wenn die Entwickler Informationen geben und Fragen ein für alle Mal klären würden - warum man eine Funktion nicht hinzufügen oder ändern kann

 
Fast235:

Das kommt in den Antworten der Entwickler sehr oft vor, ob gut oder schlecht, weiß ich nicht.

wenn die Entwickler Informationen geben und die Fragen ein für alle Mal klären würden, warum es unmöglich ist, eine Funktion hinzuzufügen oder zu ändern

Nun, das ist die bestehende Corporate-Stil der Kommunikation zwischen den Nutzern und Unterstützung von IT-Monopolisten, das Internet ist voll von Fällen, in denen Benutzer die offensichtlichen Fehler Microsoft und nach der Berufung auf Microsoft erhalten als Antwort ... normalerweise schweigen ))))

ZS: aus einer kürzlichen Lektüre, Hubr " Warum liest Windows eine Datei hunderttausend Mal, um ein Menü zu öffnen? "

Почему для открытия меню Windows читает один файл сто тысяч раз?
Почему для открытия меню Windows читает один файл сто тысяч раз?
  • habr.com
«Проводник тратит 700 мс на то, чтобы открыть контекстное меню панели задач. 75% этого времени он выполняет 114 801 операцию считывания из одного файла, средний объём считываемых данных 68 байт. Мне стоит написать пост об этом, или достаточно саркастичного твита?» За компьютером я работаю быстро, и поэтому меня раздражает, когда приходится...
Grund der Beschwerde: