Em uma aplicação do OOP - página 11

 
СанСаныч Фоменко:

Desde o anúncio do MT5, tenho tentado obter uma resposta para a pergunta:

Quanto aumentará meu desempenho da EA (ou de qualquer outra pessoa) se eu colocar todo esse material super-duper?

Eu nunca obtive resposta...

...

Você não pode implementar um algoritmo comercial complexo sem uma linguagem de programação desenvolvida. Soluções simples no nível de "comprar mais do que mashka, vender menos" estão no passado, na década de 80. Conseqüentemente, você basicamente não pode escrever nada lucrativo em uma linguagem de programação limitada (a sorte não é levada em conta, é claro).
 
СанСаныч Фоменко:

...

As bibliotecas externas são proibidas, daí o mercado R. Se não fosse por esta restrição eu ficaria rico sem nenhum risco de vender indicadores de qualidade muito alta.

...

Você sabe o que impede um mau dançarino?

Ninguém se proíbe de se enriquecer com a conversão de métodos estatísticos superprofissionais em código MQL. AlgLib é a sua ajuda.

Mas é tudo igual à sua fantasia: "Se eu tivesse a mesma, mas com buracos de botão rosa, eu teria feito algo que me teria feito um top! - Tente escrever algo e vender pelo menos uma cópia de seu produto primeiro. Rapidamente você descerá à terra e entenderá que tudo é muito mais complicado do que apenas implementar algum método estatutário.

 
Vasiliy Sokolov:

Infelizmente, as interfaces são proibidas na MQL5, o que é muito lamentável, embora pudessem ter sido habilitadas em um movimento limpo: permitir a herança múltipla de classes puramente abstratas.

As interfaces na MQL5 funcionam:

class Interface
  {
public:
   virtual void      Do(void)=0;
  };

class MyTest : public Interface
  {
public:
                     MyTest(void) {};
                    ~MyTest(void) {};

   virtual void      Do(void) { Print("Hello!"); }
  };

void OnStart()
  {
   MyTest test;
   test.Do();
  }
 
Renat Fatkhullin:

As interfaces em MQL5 funcionam:

Um objeto deve ser capaz de suportar múltiplas interfaces, caso contrário, ele se torna sem sentido.

 

Infelizmente, apenas no nível do pensamento desejoso:

//+------------------------------------------------------------------+
//| Class of all classes                                             |
//+------------------------------------------------------------------+
class CObject
{
};
//+------------------------------------------------------------------+
//| Enumerator interface                                             |
//+------------------------------------------------------------------+
template<typename T>
class IEnumerator
{
public:
   virtual bool MoveNext();
   virtual void Reset();
   virtual T    Current();
};
class CList : public CObject, public IEnumerator
{
   ...
}

Isto é, enquanto o IEnumerator for uma classe puramente abstrata, a herança múltipla envolvendo-o é completamente segura.

 
Renat Fatkhullin:

As interfaces em MQL5 funcionam:

Enquanto isso, de fato, as interfaces ainda precisam ser envoltas em longas cadeias de herança. Um exemplo disso é a maravilhosa biblioteca interna afixada pela MQ:

IList -> ICollection -> IEnumerable + IEnumerator
 
Vasiliy Sokolov:

Um objeto deve ser capaz de suportar múltiplas interfaces, caso contrário, ele se torna sem sentido.

Já estamos trabalhando nisso, precisamos fazer isso nós mesmos.
 
Renat Fatkhullin:
Já estamos trabalhando nisso, precisamos disso nós mesmos.
Muito bem feito. Vai ser muito legal. Além disso, a solução é bastante elegante: basta permitir herança múltipla de classes se e somente se elas forem representadas como classes puramente abstratas (não contêm dados ou implementações, todos os métodos são públicos). Ou seja, não é necessário introduzir alguma construção específica ou palavra-chave que não faça parte do padrão C++.
 
Também em uma nota lateral: a biblioteca interna precisa ser mais desenvolvida. Tornar-se-á uma grande característica quando as interfaces aparecerem. O velho CObject será esquecido como um pesadelo.
 
Vasiliy Sokolov:
é suficiente permitir herança múltipla de classes se e somente se elas forem representadas como classes puramente abstratas (não contêm dados ou implementações, todos os métodos são públicos).
... e não são herdados de ninguém, caso contrário, ainda são losangos.