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

 
Vladimir Simakov:
今夜中にお見せします。今度は携帯電話から。

よっしゃー

しかし、私の意見では、コードに混乱が生じます。どのメソッドが呼ばれるのか、このコード構造では理解するのが難しくなります。

各ストラテジーに必ず1つずつコンストラクタを持つようにしているのですが、これらのコンストラクタはまだ必要ないようです...。でも、この可能性を残しておくと、余計なお世話ですが

ZS:全戦略のベースクラス自体もかなりコンパクトになっていますね、そのあたりは。

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

今のところ、コード構造が読みやすく、論理的であることが気に入っています。そして、「このようなものすべてにおいて」最も重要なことは、何らかのプロトタイプを作り、戦略自体を素早く追加し、それをテストできるようにすることです。

原理的には全て書き終えていたのですが、コードが気に入らないので、サービス関数(注文を開く、ロット計算など)の形で手続き的に書き、そのサービス関数の呼び出しとロジックで小さなクラスを書き、なるべく良いものにしようと思いました)))。

 
Igor Makanu:

よっしゃー

しかし、私の意見では、コードに混乱が生じます。どのメソッドが呼ばれるのか、このコード構造では理解するのが難しくなります。

各ストラテジーに必ず1つずつコンストラクタを持つようにしているのですが、これらのコンストラクタはまだ必要ないようです...。でも、この可能性を残しておくと、余計なお世話ですが

ZS:全戦略のベースクラス自体もかなりコンパクトになっていますね、そのあたりは。

今のところ、コード構造が読みやすく、論理的であることが気に入っています。そして、「このようなものすべてにおいて」最も重要なことは、何らかのプロトタイプを作り、戦略自体を素早く追加し、それをテストできるようにすることです。

原理的には全て書き終えていたのですが、コードが気に入らない - サービス関数(注文を開く、ロットを計算する、など)を手続き型で書き、そのサービス関数のロジックと呼び出しを小さなクラスで書き、なるべく良いものにしようと思ったのです)))

//+------------------------------------------------------------------+
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(); }

そのほうがよさそうですね。

 
Vladimir Simakov:

私にはその方がよく見えるのです。

基本的には同じことですが、本には載っていません))))

ZS: とりあえず、インターフェイスをいじったので、そのままにしておいて下さい!純粋にショーとして。

 
Igor Makanu:

基本的には同じことですが、本には載っていません))))

ZS: とりあえず、インターフェイスはボルトで固定しました。

まさにプロフェッショナルなスタイルで)))
 
Vladimir Simakov:
ただ、プラスアルファのスタイルで))))

C#を使う人が少ない、というかアプリケーションプログラマがみんなC#に移行してしまい、大手のソフトウェア開発者しかC#を使っていない。

C#の例はすべてインターフェイス経由なので、役に立たないのは明らかです・・・。暴言は吐かないが、インターフェイスがなくても何でも書ける、コンセプト、スタイル...。しかし、コンセプト、スタイル、その他の脳の霧は、MicrosoftがC#で例を書くために使用していた方法であることを教えてくれます - ただ座って、それらもそのように書く!?

)))

 
Igor Makanu:

C#を使う人が少ない、というかアプリケーションプログラマがみんなC#に移行してしまい、大手のソフトウェア開発者しかC#を使っていない。

C#の例はすべてインターフェイス経由なので、役に立たないのは明らかです・・・。暴言は吐かないが、インターフェイスがなくても何でも書ける、コンセプト、スタイル...。しかし、コンセプト、スタイル、その他の脳の霧は、MicrosoftがC#で例を書くために使用していた方法であることを教えてくれます - ただ座って、それらもそのように書いてください。

)))

.NET以下のプラスで書くと不便なので移動、シャープは元々ドットネット用の言語として設計されている。これは個人的な意見ですが、最初は.NETでプラスを書いていて、不器用な感じがしました。

とはいえ...新プロに色々追加されてるので、もしかしたらもっと楽しいかも。

 
Alexey Volchanskiy:

プラスは.NETで書くと不便だし、シャープはもともとドットネット用の言語として開発されたものなので、切り替えました。これは私の主観ですが、一度.NETの下でプラスで書いてみると、不器用な印象が残りました。

とはいえ...新プロに色々追加されてるので、もしかしたらもっと楽しいかも。

今、ある作業のためにWindowsフォームを書いていて、c++/cliを触って、使わないことにして、c#を印刷したところです。
 
Vladimir Simakov:
今、ある作業のためにWindowsフォームを書いていて、c++/cliを触って、もう忘れようと思ってc#を印刷したところなんです。

そうですね、シャープの方が一桁楽ですからね。しかも、スピードはほとんど同じ、それこそクリ抜きでプロが1.5倍で勝っているのです。

 
Vladimir Simakov:
ちょうど今、ある作業のためにウィンドウズフォームを書いていて、c++/cliを触って、使わないことにしてc#を出力しています。

年始にcliを触ってみたのですが.私は2日間、このクリを作った人の非人間的なロジックを満足していた - 構文は複雑で、すべてが便利ではありません、例と非常に少ない情報があり、イモや純粋なC + +またはC# - すべての欲求を、構文は明らかである - その結果、あなたが取ると書いている。

 
Igor Makanu:

年始にcliを触ってみたのですが.構文は複雑で、すべてが便利ではありません、例と非常に少ない情報がある、イモ - 純粋なC + +またはC# - すべての欲望がgoogledされ、構文は明らかである - 最後にあなたが得る、あなたが書く

シャープは2000年頃に誕生して黎明期でしたが、プラスが支配していたので、C++とドットネットの橋渡しをして普及を図っています。 ところで、シャープはDelphiとC++Builderの開発者が作ったものですが、当時は「共通概念がどれだけあるんだろう」と思っていたんですね。同じ性質、事象を取る。