OOP与程序化编程 - 页 6

 
Dmitry Fedoseev:

那你打算如何使拖尾适应不同的参数?

让我们在一项具体的任务上试试。如果你有,请提供。
 
Реter Konow:
最好能引出一项具体的任务。这样的描述并不十分清楚。在我的实践中,算法不会因为改变外部参数而改变。对于这些参数的任何数值,它都是事先通用的。因此,你的意思不是很清楚。用一个具体的例子来描述它。
class Ордер
{
  public: int SELL;

  Ордер(void) // Конструктор имеет то же имя, что и класс. Выполняется при инициализации переменной класса
  {
    SELL=0;
    int k=OrdersHistoryTotal()-1;
    for(; k>=0; k--)
    {
      if(!OrderSelect(k, SELECT_BY_POS, MODE_HISTORY)) continue;
      if(OrderType()==OP_SELL)SELL++;
    }
  }
}x;

void OnStart()
{
  Alert(x.SELL);
}

由于采用了OOP,主程序非常简短和清晰。这只是我想到的第一个例子。如果你需要经常计算订单数量,其优势是显而易见的。在第一时间很难理解它。但函数,即使是带参数的函数,也曾是一个难题

 
Реter Konow:
让我们在一些特定的任务上进行尝试。如果你有,请提供。

具体任务。客户已经订购了两个MA的专家顾问,这将包括代码库中所有可用的尾随变体,但在测试器中不会放慢。

该EA也应该有前景,可以在未来更新新的尾随变体(成本低)。

 
STARIJ:

由于采用了OOP,主程序非常简短和清晰。这只是我想到的第一个例子。如果我们需要经常计算订单数量,其优势是显而易见的。在第一时间很难理解它。但函数,即使是带参数的函数,也曾是一个难题

我不明白,为什么不做一个函数 "int Number_orders()",总是做上述循环,并返回计数器的值 "SELL"?

比如说。

 int Количество_ордеров()
  {
    SELL=0;
    int k=OrdersHistoryTotal()-1;
    for(; k>=0; k--)
    {
      if(!OrderSelect(k, SELECT_BY_POS, MODE_HISTORY)) continue;
      if(OrderType()==OP_SELL)SELL++;
    }
   return(SELL);
  }


为什么我们在这里需要一个班?

 
Dmitry Fedoseev:

例如,100个尾随止损变体需要塞进一个专家顾问。当程序化编程时,你会得到这样的混乱。

100个相同的代码片段。当程序运行时,通常只包括一个尾随止损,其余的99个if只会消耗资源。

现在说说OOP的变体。在专家顾问的初始化过程中,我们根据轨迹的数量来扩展带有指针的数组,我们只为包含的轨迹创建对象。因此,下面的代码将一直工作。

如果启用了一个尾巴,那么cnt=1,也就是说,没有什么不必要的。

做一个函数名称的数组,从索引中选择名称并访问。


OOP与此毫无关系。这是他们试图用OOP来解决的语言限制

 

我没有试过,但比如说没有OOP,你就不能做一个非典型的语言。

 
Реter Konow:

我不明白为什么不做一个函数 "int Number_orders()",它总是做上述循环并返回计数器的值 "SELL"?

敲定班级后,我将得到x.SELL x.BUY x.ALL和其他一切我需要的东西。而解决这些问题将是非常容易的。OOP类--为了简单起见
 
Dmitry Fedoseev:

具体任务。客户已经订购了两个MA的专家顾问,这将包括代码库中所有可用的尾随变体,但在测试器中不会放慢。

并有望在未来增加新的尾随变体(不贵)。

我明白了,这是一个支持OOP的无可争议的论据。客户的愚蠢和没有时间与之斗争,不愿意改进别人的算法)。是的,在这种情况下你需要OOP。我同意)。
 
STARIJ:
通过提炼类,我将得到x.SELL x.BUY x.ALL和其他需要的东西。而解决这些问题将是非常容易的。OOP类--为了简单起见
通过微调函数,你可以在一个数组中得到所有这些相同的变量,你将把这些变量传给这个函数。然后按计划使用它...
 
СанСаныч Фоменко:

做一个函数名称的数组,从索引中选取一个名称并调用它。


这与OOP没有关系。这是他们在OOP的帮助下试图解决的语言限制。

没有定义为字符串的名称的函数调用。而在那些存在的语言中,它是通过表的哈希值完成的,也就是说,它是一个可怕的障碍。

解决这个问题的正常方法是使用 函数的指针(关于这一点我在这里写过)。但为什么要单独使用指针呢,有一种更方便的方法--OOP,它不仅可以利用函数指针的优势,还可以方便地构造数据和代码。