MQL5'te OOP hakkında sorular - sayfa 23

 
Vladimir Simakov :
Sana bu gece göstereceğim. Şimdi telefondan.

TAMAM

arayüzden kalıtımı kaldırmak sorun değil, temel sınıftan miras alabilirsiniz, ancak bence kodda karışıklık olacak - hangi yöntemin çağrılacağını anlamak daha zor olacak ve hatta böyle bir kod yapısı ile - "OOP Modeli - Davranış Modelleri - Strateji (Strateji)"

Her zaman ve her stratejide kendi kurucumun olmasını garanti ederim, bu kuruculara henüz ihtiyaç yok gibi görünüyor ... ama bu fırsatı bırakacağım, gereksiz değil

Not: Tüm stratejiler için temel sınıfın kendisi de oldukça kompakttır, bunun gibi bir şey:

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

genel olarak örneğini bekleyeceğim, bir göz atacağım, şimdilik kod yapısının okunabilir ve mantıklı olması hoşuma gidiyor ve “tüm bu hareketlerde” en önemli şey, bir tür prototip yapmaktır. stratejileri hızla ekleyebilir ve test edebilirsiniz.

Prensip olarak, her şey zaten yazılmıştır, ancak kodu sevmiyorum - onu servis fonksiyonları şeklinde (sipariş aç, çok hesapla, vb.) prosedürel bir tarzda yazdım ve sonra küçük sınıflar yazdım. mantık ve bu hizmet işlevlerine bir çağrı, bu yüzden hepsini tam olarak taramaya karar verdim)))

 
Igor Makanu :

TAMAM

arayüzden kalıtımı kaldırmak sorun değil, temel sınıftan miras alabilirsiniz, ancak bence kodda karışıklık olacak - hangi yöntemin çağrılacağını anlamak daha zor olacak ve hatta böyle bir kod yapısı ile - "OOP Modeli - Davranış Modelleri - Strateji (Strateji)"

Her zaman ve her stratejide kendi kurucumun olmasını garanti ederim, bu kuruculara henüz ihtiyaç yok gibi görünüyor ... ama bu fırsatı bırakacağım, gereksiz değil

Not: Tüm stratejiler için temel sınıfın kendisi de oldukça kompakttır, bunun gibi bir şey:

genel olarak örneğini bekleyeceğim, bir göz atacağım, şimdilik kod yapısının okunabilir ve mantıklı olması hoşuma gidiyor ve “tüm bu hareketlerde” en önemli şey, bir tür prototip yapmaktır. stratejileri hızla ekleyebilir ve test edebilirsiniz.

Prensip olarak, her şey zaten yazılmıştır, ancak kodu sevmiyorum - onu servis fonksiyonları şeklinde (sipariş aç, çok hesapla, vb.) prosedürel bir tarzda yazdım ve sonra küçük sınıflar yazdım. mantık ve bu hizmet işlevlerine bir çağrı, bu yüzden hepsini tam olarak taramaya karar verdim)))

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

Bana kalırsa böylesi daha iyi olurdu.

 
Vladimir Simakov :

Bana kalırsa böylesi daha iyi olurdu.

temelde aynı şey, ama kitap gibi değil! ))))

Not: hala arayüzü mahvettim, olsun, sadece gösteriş için!

 
Igor Makanu :

temelde aynı şey, ama kitap gibi değil! ))))

Not: hala arayüzü mahvettim, olsun, sadece gösteriş için!

Sadece artılar tarzında.)))
 
Vladimir Simakov :
Sadece artılar tarzında.)))

çok az insan artılar üzerinde oturuyor, daha doğrusu, C#'daki tüm uygulama programcıları taşındı ve sadece büyük yazılım geliştiricileri artılar üzerinde oturuyor

C#'da tüm örnekler arayüzler aracılığıyladır, bunların amacının ne olduğu açıktır .... Demagojiyi beslemek istemiyorum, ancak genel olarak her şey arayüzler olmadan yazılabilir, ama olduğu gibi, kavram, stil ...peki, kafamdaki diğer sis burada diyor ki Microsoft'ta C# örneklerinde yazmışlar, sen de öyle otur öyle yaz!

)))

 
Igor Makanu :

çok az insan artılar üzerinde oturuyor, daha doğrusu, C#'daki tüm uygulama programcıları taşındı ve sadece büyük yazılım geliştiricileri artılar üzerinde oturuyor

C#'da tüm örnekler arayüzler aracılığıyladır, bunların amacının ne olduğu açıktır .... Demagojiyi beslemek istemiyorum, ancak genel olarak her şey arayüzler olmadan yazılabilir, ama olduğu gibi, kavram, stil ...peki, kafamdaki diğer sis burada diyor ki Microsoft'ta C# örneklerinde yazmışlar, sen de öyle otur öyle yaz!

)))

.NET altında profesyoneller üzerinde yazmak uygun olmadığı için taşındık ve Sharp orijinal olarak dotnet için bir dil olarak geliştirildi. Bu benim öznel görüşüm, .NET altındaki profesyoneller hakkında yazdığım gibi, sakarlık izlenimi devam ediyor.

Yeni artılara bir çok şey eklense de belki daha eğlenceli hale geldi.

 
Alexey Volchanskiy :

.NET altında profesyoneller üzerinde yazmak uygun olmadığı için taşındık ve Sharp orijinal olarak dotnet için bir dil olarak geliştirildi. Bu benim öznel görüşüm, .NET altındaki profesyoneller hakkında yazdığım gibi, sakarlık izlenimi devam ediyor.

Yeni artılara bir çok şey eklense de belki daha eğlenceli hale geldi.

Şimdi bir görev için bir pencere formu görüyorum, c++/cli'ye dokundum ve iyi çözdüm ve c# yazdırdım.
 
Vladimir Simakov :
Şimdi bir görev için bir pencere formu görüyorum, c++/cli'ye dokundum ve iyi çözdüm ve c# yazdırdım.

Evet, keskinlikte çok daha kolay. Ve hız neredeyse aynı, ancak cli olmadan, artılar bir buçuk kat kazanıyor.

 
Vladimir Simakov :
Şimdi bir görev için bir pencere formu görüyorum, c++/cli'ye dokundum ve iyi çözdüm ve c# yazdırdım.

yılın başında, ben de cli'ye dokunmaya çalıştım ... 2 günümü aldı, bu cli'yi yapan insanlık dışı mantık - sözdizimi zor, her şey uygun değil, örneklerle çok az bilgi var, IMHO veya saf C ++ veya C # - tüm İstek Listesi googled, sözdizimi açık - sonunda alıp yazıyorsunuz

 
Igor Makanu :

Ayrıca yılın başında cli'ye dokunmaya çalıştım ... 2 günümü aldı, bu cli'yi yapan insanlık dışı mantık - sözdizimi zor, her şey uygun değil, örneklerle çok az bilgi var, IMHO veya saf C ++ veya C # - tüm İstek Listesi googled, sözdizimi açık - sonunda alıp yazıyorsunuz

Sharp 2000 civarında bir yerde doğdu ve o zamanlar çok emekleme dönemindeydi ve artıları artıyordu, bu yüzden popülerleşmek için dotnet'e bir C++ köprüsü yaptılar. Bu arada, Sharp, Delphi ve C++Builder geliştiricileri tarafından yaratıldı, o zamanlar ne kadar çok ortak kavramın olduğuna çok şaşırdım. Aynı özellikleri, olayları alın.

Neden: