OOP'a ilginç bir bakış - sayfa 3

 
Alexandr Andreev :

) assembler'da da yapılabilir. Soru hangisinin daha kolay olduğu.

Ve beni bir yöne ya da başka bir yere koyma .... Ben bir şeyin taraftarı değilim

Kimse kimseyi koymuyor. Demek istediğim, artık modern OOP dillerinde FP yongaları ve çok paradigmalı dillerde OOP yongaları var. Ek olarak, birçok FP çipi özel ve şaşırtıcı bir şey olarak sunulur, aslında aynı yumurtalar sadece profildedir. Pascal'daki kapanışlar veya C'deki bir işlevin gecikmeli yürütülmesi gibi, çalışmasının sonucu değil, bir işaretçi iletildiğinde uzun süredir varlardı ve var oldular. Parametrelerin herhangi bir dilde genel olarak değere göre iletilmesi hakkında, makaledeki örnekte genel olarak verilen bir şey var, js dışında neredeyse hiçbir yerde çalışmayacak (henüz Python hariç).

 
fxsaber :

OOP yapamam. Ama ondan ilkel şeyler kullanıyorum. Yakın zamanda, çok basit bir kod yayınladı .


Sonunda ne izlemem gerektiğini anlamadığımda FP'de yazmaya başladım.

OOP'nin ilkel öğeleriyle tamamlandı. Belki FP becerilerimi kaybettim, ancak burada OOP çok daha basit ve daha okunaklı görünüyordu.


Kod çok basit ve kısadır ( açıklama ). FP'ye yazarsanız, karşılaştırmak ilginç olacaktır.

kod çok daha küçüktür, genellikle burada yayınlanır, burada dağıtmak daha iyidir, eğitim amaçlı gidecek

Dmitry Fedoseev'in kendi versiyonunu yazmasını ve ardından Expert'in onu kendi versiyonuyla trollemesini istiyorum)
 
fxsaber :

OOP yapamam. Ama ondan ilkel şeyler kullanıyorum. Yakın zamanda, çok basit bir kod yayınladı .


Sonunda ne izlemem gerektiğini anlamadığımda FP'de yazmaya başladım.

OOP'nin ilkel öğeleriyle tamamlandı. Belki FP becerilerimi kaybettim, ancak burada OOP çok daha basit ve daha okunaklı görünüyordu.


Kod çok basit ve kısadır ( açıklama ). FP'ye yazarsanız, karşılaştırmak ilginç olacaktır.

Müsait olduğumda hesap makinesine bakacağım. Ve sen bir telepatsın, başka bir konuda soracaktım, ama burada soracağım - "savaş modunda" hata ayıklama deneyiminize göre - MT4 ve MT5'te T_OHLC_V verilerinde "delikler" mümkün mü?

Onlar. Örneğin herhangi bir frenlemeden (bağlantı kopması, terminal donması, sistem donması) sonra yeni verilerin önce bir boşlukla gelmesi ve ardından boşluk / "delik" dizinin içindeymiş gibi yazılması mümkün müdür? Tabii ki, göstergeler ve uzmanlar için kendi dedektörümü yazacağım veya belki de zaten kontrol konusunda böyle bir deneyiminiz var ve endişelenmenize gerek yok.

Ve FP deneyimim yok (ya da var ama adını bilmiyordum), otomatik tüfeği nereye götürmeliyim? ), Sanırım prosedürel bir paradigma ile idare ediyorum.

not istek yeniden talep edildi)

 
Aleksey Mavrin :

Garip makale. OOP, daha kötüsü için prosedür tarzından hiçbir şekilde farklı değildir, çünkü içinde, varsayılan olarak, her şey prosedürel bir tarzda yapılabilir, ancak bunun tersi, korkunç kod şişmesi olmadan imkansızdır, yani. OOP, temelde farklı bir tarz değil, bir üst yapıdır.

Makale gerçekten prosedürle ilgili değil, işlevsellikle ilgiliyse (hata bulursanız çok açık değil), o zaman neden tamamen farklı uygulama alanlarına sahip bir şeyi karşılaştırın.

Konu başlatıcı, kendiniz bir şeyler yazıyorsunuz ve şimdi ne hakkında konuşuyordunuz? işlevsel mi, prosedürel mi?

OOP'nin ortaya çıkmasıyla birlikte, OOP'ye bir giriş başlatmanın popüler olduğu kapsüllemeler, kalıtımlar ve diğer morfizmlerle beni çok korkuttu. Verileri fonksiyonlarla birlikte tek bir blokta - sınıf olarak yazarlardı. Ama sonra bunun moda olduğu gerçeğine alıştım - her seferinde yeni terminoloji bulmak. OOP gerektiğinde - sorun değil, ancak benim düşünceme göre, prosedürel versiyondan 2 kat daha açgözlü ve daha yavaş olduğu için, prosedürel olanı mümkün olduğunca yönetiyorum.

Ve soru ortaya çıktı, çünkü. FP ve OOP ve prosedür dışındaki diğer seçenekler hakkında görüşler duymak istedim, belki birisi süper olumlu bir deneyime sahiptir. Ve bence bir çeşit kararlı karışım kullanmak ve çok çılgına dönmemek akıllıca.

 
Peter, geç şunu.
 
Fast235 :

kod çok daha küçüktür, genellikle burada yayınlanır, burada dağıtmak daha iyidir, eğitim amaçlı gidecek

Ayak bezi.

 #property strict
#property script_show_inputs

input double inPerformance = 100 ; // Сколько процентов дает система за период
input double inGift = 50 ;         // Награда управляющего в процентах (< 100)
input int inN = 12 ;               // Сколько расчетных периодов

struct BASE
{
   double Investor;
   double Manager;
   double Summary;

   // Если управляющий снимает деньги в конце каждого расчетного периода.
   void Set1( const double Performance, const double Gift, const int N )
  {
     this .Investor = :: MathPow ( 1 + (Performance - 1 )* ( 1 - Gift), N);
     this .Manager = ( this .Investor - 1 ) * Gift / ( 1 - Gift);
     this .Summary = this .Investor + this .Manager;

     return ;
  }

   // Если ничего не делалось в расчетные периоды.
   void Set2( const double Performance, const double Gift, const int N )
  {
     this .Summary = :: MathPow (Performance, N);
     this .Manager = ( this .Summary - 1 ) * Gift;
     this .Investor = this .Summary - this .Manager;

     return ;
  }

   // Если управляющий снимает деньги в конце каждого расчетного периода и реинвестирует их.
   void Set3( const double Performance, const double Gift, const int N )
  {
     this .Summary = :: MathPow (Performance, N);
     this .Investor = :: MathPow ( 1 + (Performance - 1 )* ( 1 - Gift), N);
     this .Manager = this .Summary - this .Investor;

     return ;
  }

   void operator *=( const double Deposit = 1 )
  {
     this .Investor *= Deposit;
     this .Manager *= Deposit;
     this .Summary *= Deposit;

     return ;
  }
#define TOSTRING(A) #A + " = " + :: DoubleToString (A, 4 ) + " "
   string ToString( const bool FlagName = true ) const
  {
     return (FlagName ? TOSTRING(Investor) + TOSTRING(Manager) + TOSTRING(Summary)
                    : :: StringFormat ( "||%-12.4f||%-12.4f||%-12.4f||" , this .Investor, this .Manager, this .Summary));
  }
#undef TOSTRING

};

struct PAMM
{
   double Performance; // Доходность за расчетный период
   double Gift;         // Вознагражение управляющего.
   int N;               // Сколько расчетных периодов.

  BASE Base1; // Если управляющий снимает деньги в конце каждого расчетного периода.
  BASE Base2; // Если ничего не делалось в расчетные периоды.
  BASE Base3; // Если управляющий снимает деньги в конце каждого расчетного периода и реинвестирует их.

   void Set( const double dPerformance, const double dGift, const int iN )
  {
     this .Performance = dPerformance;
     this .Gift = dGift;
     this .N = iN;

     this .Base1.Set1( 1 + this .Performance / 100 , this .Gift / 100 , this .N);
     this .Base2.Set2( 1 + this .Performance / 100 , this .Gift / 100 , this .N);
     this .Base3.Set3( 1 + this .Performance / 100 , this .Gift / 100 , this .N);
  }

   void operator *=( const double Deposit = 1 )
  {
     this .Base1 *= Deposit;
     this .Base2 *= Deposit;
     this .Base3 *= Deposit;

     return ;
  }

   string GetDescription( void ) const
  {
     return ( "Доходность за расчетный период " + :: DoubleToString ( this .Performance, 1 ) + "%\n" +
           "Вознагражение управляющего " + :: DoubleToString ( this .Gift, 1 ) + "%\n" +
           "Количество расчетных периодов. " + ( string ) this .N);
  }

   string ToString( const bool FlagName = true , const bool FlagDescription = true ) const
  {
     return (FlagDescription ? "Данные для инвестиционного счета со следующими характеристиками:\n\n" + this .GetDescription() +
                             "\n\nКонечный результат для Инвестора, Управляющего и Суммарно:"
                             "\n\nЕсли управляющий снимает деньги в конце каждого расчетного периода (1).\n" + this .Base1.ToString(FlagName) +
                             "\n\nЕсли ничего не делалось в расчетные периоды (2).\n" + this .Base2.ToString(FlagName) +
                             "\n\nЕсли управляющий снимает деньги в конце каждого расчетного периода и реинвестирует их (3).\n" + this .Base3.ToString(FlagName)
                           : this .Base1.ToString(FlagName) + this .Base2.ToString(FlagName) + this .Base3.ToString(FlagName));
  }
};

void OnStart ()
{
  PAMM Pamm;

  Pamm.Set(inPerformance, inGift, inN);

   Print (Pamm.ToString());

   string Str = Pamm.GetDescription() + "\n   " ;

   for ( int i = 1 ; i <= 3 ; i++ )
    Str += :: StringFormat ( "||%-12s||%-12s||%-12s||" , "Investor" + ( string )i, "Manager" + ( string )i, "Summary" + ( string )i);

   for ( int i = 1 ; i <= inN; i++ )
  {
    Pamm.Set(inPerformance, inGift, i);

    Str += StringFormat ( "\n%-2d:" , i) + Pamm.ToString( false , false );
  }

   Print (Str);
}

Resmi olarak, bu OOP'dir. Ama en ilkel kısmı. Ancak, onsuz yaşayamazdı. Belki aptalca bir şekilde beyin başka bir şeye dönüştü ve ben bunu perçinledim.

 

Peter hahaha kes şunu

Yaklaşımım, kova - pot

Мой подход. Ядро - Движок.
Мой подход. Ядро - Движок.
  • 2018.12.05
  • www.mql5.com
В этой ветке, я хочу рассказать о своем подходе в программировании. Заранее предупреждаю, - здесь не будет обсуждений GUI...
 
Maxim Dmitrievsky :

Peter hahaha kes şunu

Yaklaşımım, kova - pot

uzun zamandır görülmeyen şey.

Gerçekten gerçekten başka lakaplar altına mı gitti?

 
Maxim Kuznetsov :

uzun zamandır görülmeyen şey.

Gerçekten gerçekten başka lakaplar altına mı gitti?

güçlü bir yapay zeka yaratmak için ayrıldığını söylüyorlar

 
Maxim Dmitrievsky :

güçlü bir yapay zeka yaratmak için ayrıldığını söylüyorlar

Keşke hiçbir şey olmasaydı, yoksa COVID uyumaz...
Neden: