Programação OOP vs procedimento - página 6

 
Dmitry Fedoseev:

E como você vai fazer para que o trilho se adapte aos diferentes parâmetros?

Vamos experimentá-lo em uma tarefa específica. Se você tiver um, por favor, forneça-o.
 
Реter Konow:
De preferência, levar a uma tarefa específica. Tal descrição não é muito clara. Em minha prática, o algoritmo não muda em relação à mudança de parâmetros externos. É tornado universal com antecedência para quaisquer valores destes parâmetros. Portanto, não está muito claro o que você quer dizer. Descreva-o em um exemplo concreto.
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);
}

Graças ao OOP, o programa principal é muito breve e claro. Este é apenas o primeiro exemplo que me vem à mente. Se você precisar calcular o número de pedidos com freqüência, as vantagens são óbvias. É difícil entender isso na primeira vez. Mas as funções, mesmo com parâmetros, também já foram uma dificuldade

 
Реter Konow:
Vamos tentar alguma tarefa em particular. Se você tiver, por favor, forneça.

Tarefa específica. O cliente encomendou um Expert Advisor para dois MAs, que incluiria todas as variantes de rastreamento disponíveis na base de código, mas não abrandaria no testador.

A EA também deve ter a perspectiva de ser atualizada com novas variantes de rastreamento no futuro (a baixo custo).

 
STARIJ:

Graças ao OOP, o programa principal é muito curto e claro. Este é apenas o primeiro exemplo que me vem à mente. Se precisarmos calcular o número de pedidos com freqüência, as vantagens são óbvias. É difícil entender isso na primeira vez. Mas as funções, mesmo com parâmetros, também já foram uma dificuldade

Não entendo, por que não fazer uma função "int Number_orders()" que sempre fará o laço acima e retornará o valor do contador "SELL"?

Por exemplo:

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


Por que precisamos de uma aula aqui?

 
Dmitry Fedoseev:

Por exemplo, 100 variantes de trailing stop precisam ser agrupadas em um único Expert Advisor. Ao programar proceduralmente, você recebe uma bagunça como esta:

100 fragmentos de código idênticos. Quando o programa estiver em execução, ele normalmente incluirá apenas uma parada de trilha. Os 99 ifs restantes apenas consumirão recursos.

Agora para a variante OOP. Durante a inicialização do Expert Advisor, escalamos a matriz com apontadores de acordo com o número de trilhas, criamos objetos apenas para as trilhas incluídas. Como resultado, o seguinte código funcionará o tempo todo:

Se uma barra móvel estiver habilitada, então cnt=1, ou seja, não há nada desnecessário.

Faça um conjunto de nomes de funções, escolha o nome do índice e o acesso.


O OOP não tem nada a ver com isso. Esta é uma limitação de linguagem que eles estão tentando resolver com o OOP

 

Eu não tentei, mas por exemplo, você não pode fazer uma linguagem atípica sem um OOP.

 
Реter Konow:

Não entendo por que não fazer uma função "int Number_orders()" que sempre fará o laço acima e retornará o valor do contador "SELL"?

Tendo finalizado a aula, vou conseguir x.SELL x.BUY x.ALL e tudo mais que eu precisar. E será muito fácil abordá-los. Classes OOP - por simplicidade
 
Dmitry Fedoseev:

Tarefa específica. O cliente encomendou um Expert Advisor para dois MAs, que incluiria todas as variantes de rastreamento disponíveis na base de código, mas não abrandaria no testador.

E com a perspectiva de acrescentar novas variantes de trilhas no futuro (não caras).

Estou vendo. Este é um argumento indiscutível a favor do OOP. Estupidez do cliente e falta de tempo para combatê-lo e falta de vontade de melhorar o algoritmo de outra pessoa). Sim, você precisa de OOP neste caso. Eu concordo).
 
STARIJ:
Ao refinar a classe, eu obterei x.SELL x.BUY x.ALL e tudo mais que for necessário. E será muito fácil abordá-los. Classes OOP - por simplicidade
Ao afinar a função, você pode obter todas estas mesmas variáveis em um array, que você passará para esta função. Então use-o como previsto...
 
СанСаныч Фоменко:

Faça um conjunto de nomes de funções, escolha um nome do índice e chame-o.


Não tem nada a ver com o OOP. Esta é uma limitação lingüística que eles estão tentando resolver com a ajuda do OOP.

Não há nenhuma chamada de função pelo nome definido como uma string. E naqueles idiomas onde ela existe, é feita através de um hash de uma mesa, ou seja, é uma terrível desvantagem.

Uma maneira normal de resolver este problema seria usar apontadores para as funções (sobre isto escrevi aqui). Mas por que usar somente os indicadores, há uma maneira mais conveniente - OOP, que permite não somente tirar proveito dos indicadores de função, mas também estruturar convenientemente dados e códigos.

Razão: