MQL5におけるOOPに関する質問 - ページ 38

 
Nikolai Semko:

はい、私も似たような状況です。学ぶことは難しくないが、再教育や古い習慣を断ち切ることは難しい。私はいまだに手続き型プログラミングの悪い習慣を捨てられないでいます。

手続き型から学び直す? うーん、よくできた手続き型のコードは、プロジェクトの 規模を拡大する必要がある場合、通常はクラスにまとめるのが簡単です。

ドミトリー・フェドセーエフ

定数や静電気は、とりあえず落としておけばいいんです。インターフェースも考えないで。

そして、すべての準備ができたら、何かを静的、何かを定数として見てマークします。 そして、インターフェイスのことは完全に忘れることができます。

いろいろなことを早くやる方法を知っている。

理論の勉強に時間を割くというか、ここ数年、MQLを世の中に出ているレベルまで持っていこうと思いました、ここにいる多くの人もターミナルの可能性については知りません

MQLはC++に近いのかC#に近いのか、今のところC++のようです。 C#ではモディファイアを気にしない、というかスタジオが怪しいと判断したものを修正する程度です )))

 
Dmitry Fedoseev:

定数や静力学は当面無視すればよい。インターフェイスも。

そして、すべての準備が整ったら、何かを静的、何かを定数としてマークしてください。 そして、インターフェイスのことは完全に忘れてしまってかまいません。

定数や静力学を保持することがメインとなります。インターフェースについては、私も同感です。

 
Igor Makanu:

手続き的なスタイルを学び直す? よくできた手続き的なコードをクラスで包めば、プロジェクトの規模を拡大する必要がある場合でも、通常は問題ありません。

たくさん、速くできる方法を知っています。

私は理論の勉強に時間を割くというか、MQLをここ数年で開発されたレベルに引き上げることにしました、ここにいる多くの人たちも、ターミナルの機能については最新のものではないのです

そして、資料を勉強するならきちんと勉強して、MQLがC++に近いのか、C#に近いのか、全部同じなのか理解するために、イマイチ、今のところはC++のようです。

const - 変数の代入を禁止する必要がある場合 (一度限りの初期化を除く)。もし変数がconstと宣言されていれば、それを関数に参照渡しするとき、関数の引数もconstになるはずですが、コンパイラがそうなるようにしてくれるので、考える必要はありません。変数が代入されない場合、constとしてマークすることもできます - より速く動作します、これは関数の引数にも適用されます。 しかし、いつ何時、修正が必要になるかもしれない...。

static - クラスの変数であれば、さらにレアケースです。クラスメソッドであれば、このメソッドの引数とクラスの静的変数の みを扱うのであれば、それもレアケースです(ただし、便宜上、関数をクラスに集めているだけなら、そう珍しいことではありません)。

 
眠っている?
 
Igor Makanu:

例が欲しいな、言っとくけど私は修飾語が全然ダメなんだ。


SZS:一方、Inetのプログラミングの議論で一般的な恐怖で何が起こっているか - ここに先月hubra上のconstについての記事だった、意味は - このconstは必要ありません、ルックアセンブラコードはconstなしでその違いはありません - コンパイラがそれをすべて取り除く(()。

以下はその一例です。

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];
   }
}

なぜインターフェースが必要なのか、あなたのコードからはよく分からないので、捨ててしまいました。

もちろん、あなたのタスクを完全に把握しているわけではありませんが、99.99%の確率で必要ないと思います。

 
Igor Makanu:

手続き型から再教育する? よくできた手続き型のコードをクラスで包めば、プロジェクトの規模を拡大する必要があっても、通常は問題ない。

たくさん、速くできる方法を知っています。

私は理論の勉強に時間を割くというか、MQLをここ数年で開発されたレベルに引き上げることにしました、ここにいる多くの人たちも、ターミナルの機能については最新のものではないのです

せっかく勉強するなら、ちゃんとイメトレして、MQLがC++に近いのか、C#に近いのか、全部同じように理解する必要がありますね~今のところはC++のようです。

mql自体はc++をベースにしていますが、制作者の努力により、シャープの悪いところをたくさん取り込み、良いところは何も付け加えないままになっています。シャープのような標準ライブラリーが物語って います。stdと同様であれば、より論理的に見えるでしょう。IMHO
 
Koldun Zloy:

以下はその一例です。

あなたのコードからは、何のためのインターフェースなのかがわからないので、捨てました。

あなたのタスクを完全に把握しているわけではありませんが、99.99%必要ないでしょう。

インターフェースは捨てた方がいい、気にするなというのはこれで5回目です)))

私は、 「ストラテジー」というOOPデザインの テンプレートをベースにしました。

は、指定されたように、私は基本クラスCStrategyを継承する抽象化としてのインターフェイスを適用 - それは私のCStrategyが不在のパブリックメソッドになることが判明し、すべてのパブリックは、インターフェイス(3個=戦略自体、戦略の完了と今戦略状態の記録を追加)で記述されています。インターフェイスの役割は...まあ、const修飾子とほぼ同じで、メソッドを記述しなかったり、継承で閉じようとすると最初に警告が出ますが、今のところ問題より利便性の方が大きいです。

一般的には100%の確率で不要と確認するのですが......。が、CStrategyクラスがパブリックセクションを持たないのは便利なだけです。

あなたのコードは良さそうなので、昼食後に私のところで再現して、私のコードと比較してみます。

ありがとうございます。

 
Vladimir Simakov:
mql自体はc++をベースにしていますが、制作者の努力により、シャープの良いところはそのままに、悪いところをたくさん入れています。シャープのような標準ライブラリーが物語って いる。stdと同様であれば、より論理的に見えるでしょう。IMHO

MQLフォーラムで「C++ではない、MQLだ...」というフレーズを言い出したのは私かもしれません。)

一般的に、言語は非常に民主的な、MQLで書くことは便利ではありません - "2回のクリックで "あなたは.dll C + +に行くことができ、ここで今年の初めから.dll C#では、メモリが提供する場合、開発者RenatからDLLの最初の記事の一つ - すなわち、この可能性は、最初は、製品のコンセプトとして、イモが提供されています。

SZS:上に書いたように、なぜか「私はアーティストだ」というフレーズが頭に浮かびました。)

 
Igor Makanu:


ZS: 上記に対して、なぜか「I'm an artist」というフレーズが頭に浮かびました(なるほど!)。

これは、開発者からの回答でよく思い浮かぶのですが、良いのか悪いのか、私にはわかりません。

開発者が情報を提供し、疑問を一掃してくれれば - なぜ機能の追加や変更ができないのか?

 
Fast235:

このことは、開発者の反応によく出てくるのですが、いいのか悪いのか、よくわかりません。

開発者が情報を提供し、疑問を一掃してくれるなら、なぜ機能の追加や変更ができないのか?

さて、これはIT独占企業のユーザーとサポートの間の通信の既存の企業スタイルですが、インターネットは、ユーザーが明らかなバグを見つける例でいっぱいですマイクロソフトとMicrosoftに訴えた後、応答で得る...いつもは無言 ))))

ZS: 最近読んだHubr「なぜWindowsはメニューを開くために1つのファイルを10万回も読み込む のか?"

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