Скачать MetaTrader 5

Разговоры на завалинке о ООП - страница 9

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alain Verleyen
Модератор
29869
Alain Verleyen  
fxsaber:

По всей видимости, static и const (это не ООП) не нужны.

Что же касается ООП, то очень интересно, как будет выглядеть в процедурном стиле следующая, имеющая широкое практическое применение (совсем не абстрактная), функция?

Очевидно, что любой ООП можно переписать в процедурном стиле. Но интересует практика. Поэтому взял вышеприведенный крохотный код, где и ООП используется по минимуму.

Так насколько красивее/удобнее/читабельнее/правильнее процедурный стиль по сравнению с ООП будет в данном примере? Ну чтобы не голословить несколько страниц, а просто сравнить короткие исходники процедурный vs ООП. Прошу противников ООП показать мастер-класс. Это не страшный MT5, а старый добрый MT4.

Я не против ООП. Только один из плохого качества и загадочный код. (I am not an opponent of OOP. Just one of bad quality and cryptic code)

#define MC 200
#define MYOWNSELECT        OrderSelect     
#define MYOWNTICKET        OrderTicket
#define MYOWNOTIPE         OrderType
#define MYOWNOLOT          OrderLots
// Возвращает true только в случае, если с последнего вызова произошли торговые изменения
bool IsChanged_NoOOP_Cryptic_aka_fxsaber(void)
{
  static int ptot=0,tickets[MC],types[MC];
  static double lots[MC];

  int total;
  bool res=ptot!=(total=::OrdersTotal());

  for(int i=0,j=0; i<total; i++)
     if(MYOWNSELECT(i,SELECT_BY_POS))
     {
       if(res=(res || (tickets[j]!=MYOWNTICKET() || types[j]!=MYOWNOTIPE() || lots[j]!=MYOWNOLOT())))
       {
         tickets[j]=MYOWNTICKET();
         types[j]=MYOWNOTIPE();
         lots[j]=MYOWNOLOT();
       }

       j++;
     }
  ptot=total;

  return(res);
}
Alexey Volchanskiy
24832
Alexey Volchanskiy  
Dennis Kirichenko:

Сильно извиняюсь, Вы в контексте какого языка делаете такой вывод? :-)




Денис, в контексте форумного ))))))))))

fxsaber
10972
fxsaber  
Alain Verleyen:

Я не против ООП. Только один из плохого качества и загадочный код. (I am not an opponent of OOP. Just one of bad quality and cryptic code)

Спасибо за процедурный код! Немного подправил

#define MC 200
#define MYOWNSELECT        OrderSelect     
#define MYOWNTICKET        OrderTicket
#define MYOWNOTIPE         OrderType
#define MYOWNOLOT          OrderLots
// Возвращает true только в случае, если с последнего вызова произошли торговые изменения
bool IsChanged_NoOOP_Cryptic_aka_fxsaber(void)
{
  static int ptot=0,tickets[MC],types[MC];
  static double lots[MC];

  int total;
  bool res=ptot!=(total=::OrdersTotal());

  int j = 0;
  
  for(int i=0; i<total; i++)
     if(MYOWNSELECT(i,SELECT_BY_POS))
     {
       if(res=(res || (tickets[j]!=MYOWNTICKET() || types[j]!=MYOWNOTIPE() || lots[j]!=MYOWNOLOT())))
       {
         tickets[j]=MYOWNTICKET();
         types[j]=MYOWNOTIPE();
         lots[j]=MYOWNOLOT();
       }

       j++;
     }
  ptot=j;

  return(res);
}


Плюсы и минусы каждого из решений (ООП-решение) можно теперь воочию лицезреть. Каждый делает для себя свой выбор и навязывать иную точку зрения просто глупо. 

Комбинатор
16962
Комбинатор  
Dennis Kirichenko:

Сильно извиняюсь, Вы в контексте какого языка делаете такой вывод? :-)

Про плюсы конечно. 

Alexander Puzanov
18613
Alexander Puzanov  
fxsaber:

Спасибо за процедурный код! Немного подправил

Для наглядности с компактностью можно ещё чего-нибудь подправить

#define MC 200
#define MYOWNSELECT        OrderSelect     

bool IsChanged_NoOOP_Cryptic_aka_fxsaber(void)
{
  static int ptot=0;
  static string History_Unit[MC];

  string Order_Data;
  int total;
  bool res=ptot!=(total=::OrdersTotal());
  int j = 0, i = total;
  
  while(i-- > 0)
     if(MYOWNSELECT(i,SELECT_BY_POS))
     {
       Order_Data = StringFormat("%u|%u|%.2f", OrderTicket(), OrderType(), OrderLots());
       if(res=(res || History_Unit[j]!=Order_Data)) History_Unit[j]=Order_Data;

       j++;
     }
  ptot=j;

  return(res);
}

Можно, конечно, посмотреть насколько существенно изменится быстродействие при сравнении структур/массивов/строк. Но это кусочек задачи, вырванной из контекста, so смысла нет

PS И я не против ООП. За целесообразность

fxsaber
10972
fxsaber  
Alexander Puzanov:

Для наглядности с компактностью можно ещё чего-нибудь подправить

Можно, конечно, посмотреть насколько существенно изменится быстродействие при сравнении структур/массивов/строк. Но это кусочек задачи, вырванной из контекста, so смысла нет

PS И я не против ООП. За целесообразность

Рухнет!

Alain Verleyen
Модератор
29869
Alain Verleyen  
Alexander Puzanov:

Для наглядности с компактностью можно ещё чего-нибудь подправить

Можно, конечно, посмотреть насколько существенно изменится быстродействие при сравнении структур/массивов/строк. Но это кусочек задачи, вырванной из контекста, so смысла нет

PS И я не против ООП. За целесообразность

Использование DEFINE было шуткой ;-) Ваш подход будет очень медленным. (Usage of DEFINE was a joke ;-)  Your approach will be very slow.)

Alexander Puzanov
18613
Alexander Puzanov  
Alain Verleyen:

Использование DEFINE было шуткой ;-) Ваш подход будет очень медленным. (Usage of DEFINE was a joke ;-)  Your approach will be very slow.)

Sure. This is joke too - this is a code beautiness parade, isn't it?

Это тоже шутка - выкрутас в пользу компактности и наглядности

---

fxsaber:

Рухнет!

Это же замер конкретной реализации, частный случай

Alain Verleyen
Модератор
29869
Alain Verleyen  
Alexander Puzanov:

Sure. This is joke too - this is a code beautiness parade, isn't it?

Yes really nice.  (I am not able to catch joke yet unfortunately ;-)

Да, действительно приятно. К сожалению, я не в состоянии поймать шутку ;-)

Andrei
2806
Andrei  
fxsaber:

Плюсы и минусы каждого из решений (ООП-решение) можно теперь воочию лицезреть. Каждый делает для себя свой выбор и навязывать иную точку зрения просто глупо. 

Навязывать не надо, но очевидно что в процедурном виде уже просматривается логика кода без лишних телодвижений, а каждое телодвижение наемного программиста стоит работодателю денежку. Поэтому если работодатель не дурак, то он не поведется на ООП, но зато хитрый программист может ему навешать лапшу про прогрессивность ООП чтобы срубить с него побольше воспользовавшись его малограмотностью. :)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий