MQL5'te OOP hakkında sorular - sayfa 38

 
Nikolai Semko :

Evet benzer bir durum bende de var. Öğrenmek zor değil, yeniden öğrenmek, eski alışkanlıkları kırmak daha zor. Prosedürel programlamanın birçok kötü alışkanlığını hala öğrenemiyorum.

prosedürel tarzdan yeniden öğrenmek? hmm, prosedürel tarzda iyi yazılmış kod bir sınıfa sarılabilir , projeyi ölçeklendirmeye ihtiyaç varsa, genellikle sorun olmaz

Dmitry Fedoseev :

Şimdilik sabitleri ve statiği unutabilirsiniz. Arayüzler için de.

Ancak her şey hazır olduğunda, bakın ve bir şeyi statik, bir şeyi de sabit olarak işaretleyin. Ve arayüzlerde genel olarak çekiçlemek mümkündür.

çok ve hızlı bir şekilde yapabilirim

Bunu teoriyi incelemeye, daha doğrusu MQL'yi son yıllarda ortaya çıkana getirmeye karar verdim, burada bile çoğu kişi terminallerin yeteneklerinin farkında değil

ve materyali incelerseniz, o zaman doğru bir şekilde çalışmanız gerekir, IMHO, peki ve MQL'ye C ++ veya hala C #'ye neyin daha yakın olduğunu anlamanız gerekir, C ++ gibi görünse de, genel olarak C # 'da Değiştiricilerle uğraşmayın, daha doğrusu stüdyonun şüpheli olarak işaretlemesi, maksimum doğru)))

 
Dmitry Fedoseev :

Şimdilik sabitleri ve statiği unutabilirsiniz. Arayüzler için de.

Ancak her şey hazır olduğunda, bakın ve bir şeyi statik, bir şeyi de sabit olarak işaretleyin. Ve arayüzlerde genel olarak çekiçlemek mümkündür.

Ana şey, sabitlerin ve statiklerin tutulması gerektiğidir. Arayüzler konusunda katılıyorum.

 
Igor Makanu :

prosedürel tarzdan yeniden öğrenmek? hmm, prosedürel tarzda iyi yazılmış kod bir sınıfa sarılabilir, projeyi ölçeklendirmeye ihtiyaç varsa, genellikle sorun olmaz

çok ve hızlı bir şekilde yapabilirim

Bunu teoriyi incelemeye, daha doğrusu MQL'yi son yıllarda ortaya çıkana getirmeye karar verdim, burada bile çoğu kişi terminallerin yeteneklerinin farkında değil

ve materyali incelerseniz, o zaman doğru bir şekilde çalışmanız gerekir, IMHO, peki ve MQL'ye C ++ veya hala C #'ye neyin daha yakın olduğunu anlamanız gerekir, C ++ gibi görünse de, genel olarak C # 'da Değiştiricilerle uğraşmayın, daha doğrusu stüdyonun şüpheli olarak işaretlemesi, maksimum doğru)))

const - bir değişkene atamayı yasaklamak gerekirse (başlatma sırasında bir kez hariç). Değişken conts olarak bildirilmişse, o zaman onu bir fonksiyona referans yoluyla iletirken, fonksiyon argümanı da const olmalıdır, ancak derleyici onu zorlayacaktır, bunun hakkında düşünmeniz gerekmez. Değişken atanmamışsa, const olarak da işaretlenebilir - daha hızlı çalışır, bu işlev argümanları için geçerlidir. Ancak, herhangi bir zamanda revizyon gerektirebilir ...

statik - bu bir sınıftaki bir değişkense, bu nadir bir durumdur, hatta en nadirdir. Bu bir sınıf yöntemiyse, yalnızca bu yöntemin argümanları ve statik sınıf değişkenleri yöntemde işlenirse, bu da nadir bir durumdur (ancak, işlevlerin yalnızca kolaylık sağlamak için toplanması çok nadir değildir). sınıf).

 
uyuyor muyuz?
 
Igor Makanu :

bir örnek, genel olarak değiştiricilerle ilgili sorun yaşıyorum


Not: İnternette, genel olarak, programlama tartışmasında olanların dehşeti - geçen ay Habre'de const hakkında bir makale vardı, mesele şu ki - evet, bu const gerekli değil, bakın montajcı kodu const olmadan farklı değildir - derleyici her şeyi kaldıracaktır (((

İşte bir örnek:

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

Neden bir arayüze ihtiyacınız olduğu kodunuzdan net değil, ben de onu attım.

Tabii ki, görevinizi tam olarak bilmiyorum, ancak% 99,99 olasılıkla buna gerek yok.

 
Igor Makanu :

prosedürel tarzdan yeniden öğrenmek? hmm, prosedürel tarzda iyi yazılmış kod bir sınıfa sarılabilir, projeyi ölçeklendirmeye ihtiyaç varsa, genellikle sorun olmaz

çok ve hızlı bir şekilde yapabilirim

Bunu teoriyi incelemeye, daha doğrusu MQL'yi son yıllarda ortaya çıkana getirmeye karar verdim, burada bile çoğu kişi terminallerin yeteneklerinin farkında değil

ve materyali incelerseniz, o zaman doğru bir şekilde çalışmanız gerekir, IMHO, peki ve MQL'ye C ++ veya hala C #'ye neyin daha yakın olduğunu anlamanız gerekir, C ++ gibi görünse de, genel olarak C # 'da Değiştiricilerle uğraşmayın, daha doğrusu stüdyonun şüpheli olarak işaretlemesi, maksimum doğru)))

mql'nin kendisi c ++ tabanlıdır, ancak yaratıcıların çabalarıyla, Sharpe'dan iyi bir şey eklemeden birçok kötü şeyi ona getirdiler. Sharpe benzeri standart kitaplık gösterge niteliğindedir. std gibi görünse daha mantıklı görünürdü. BENİM NACİZANE FİKRİME GÖRE.
 
Koldun Zloy :

İşte bir örnek:

Neden bir arayüze ihtiyacınız olduğu kodunuzdan net değil, ben de onu attım.

Tabii ki, görevinizi tam olarak bilmiyorum, ancak% 99,99 olasılıkla buna gerek yok.

Bence bu 5. kez duyuyorum, diyorlar ki, arayüzleri atın ve zahmet etmeyin)))

"Strateji" OOP tasarım modelini temel aldım

belirtildiği gibi, arayüzleri temel sınıf CStrategy'yi devraldığım bir soyutlama olarak uygulamak - CStrategy'min genel yöntemleri olmayacağı ortaya çıktı, tüm halklar arayüzler tarafından tanımlanır (3 adet = stratejinin kendisi, stratejinin tamamlanması ve şimdi stratejinin durumunun bir kaydını ekledim). arayüzlerin rolü... peki, const değiştiricilerinkiyle hemen hemen aynıdır - bir yöntem tanımlamadıysanız veya bunları miraslarla kapatmaya çalışırsanız, ilk aşamada uyarı alırsınız - şimdiye kadar daha fazla kolaylık yaşıyorum sorunlardan daha.

Genel olarak, %100 olasılıkla buna gerek olmadığını onaylıyorum ... ancak CStrategy sınıfının genel bir bölüm içermemesi uygun

Kodunuz iyi görünüyor, öğle yemeğinden sonra evde çoğaltacağım, benimkiyle karşılaştırmaya çalışacağım

Teşekkür ederim!

 
Vladimir Simakov :
mql'nin kendisi c ++ tabanlıdır, ancak yaratıcıların çabalarıyla, Sharpe'dan iyi bir şey eklemeden birçok kötü şeyi ona getirdiler. Sharpe benzeri standart kitaplık gösterge niteliğindedir. std gibi görünse daha mantıklı görünürdü. BENİM NACİZANE FİKRİME GÖRE.

belki de MQL forumunda "bu C++ değil, bu MQL ..." ifadesini başlatan bendim, şimdi bu bağlamda sizinki gibi bir çok soruyu yanıtlıyor))))

genel olarak, dil oldukça demokratik, MQL'de yazmak uygun değil - "2 tıklama" ile .dll C++'a ve yılın başından itibaren .dll C#'a gidebilirsiniz, eğer bellek çalışıyorsa, o zaman ilklerden birine Developer Renat'tan dll ile ilgili makaleler - t .e. Bu olasılık, başlangıçta, ürün konsepti önerildiği için IMHO'dur.

Not: yukarıda, nedense şu cümleyi hatırladım - Ben bir sanatçıyım - öyle görüyorum! )))

 
Igor Makanu :


Not: yukarıda, nedense şu cümleyi hatırladım - Ben bir sanatçıyım - öyle görüyorum! )))

bu geliştiricilerin cevaplarında çok sık hatırlanıyor iyi mi kötü mü bilinmiyor

sadece geliştiriciler bilgi verdiyse ve bir kez ve tüm sorular için kapattıysa - neden bir işlev ekleyemiyorsunuz veya değiştiremiyorsunuz?

 
Fast235 :

bu geliştiricilerin cevaplarında çok sık hatırlanıyor iyi mi kötü mü bilinmiyor

sadece geliştiriciler bilgi verdiyse ve bir kez ve tüm sorular için kapattıysa - neden bir işlev ekleyemiyorsunuz veya değiştiremiyorsunuz?

Eh, bu, BT tekellerinin desteğiyle yerleşik kurumsal kullanıcı iletişim tarzıdır, İnternet, kullanıcıların bariz Microsoft hataları bulduğu ve Microsoft ile iletişim kurduktan sonra yanıt olarak aldıkları durumlarla doludur ... genellikle sessizlik)))

Not: son bir okumadan, Habr " Windows menüyü açmak için neden bir dosyayı yüz bin kez okur? "

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