Perguntas sobre OOP em MQL5 - página 33

 
Alexey Viktorov:

Não é segredo que a amostra de eventos do calendário econômico é CalendarValueHistory(). Em um caso, todas as notícias em um intervalo de tempo. Em outro por país e em outro intervalo de tempo. Na terceira, por um símbolo. Mas existe uma diferença fundamental? Eles dividem as soluções pelo tipo de tarefa que realizam?

Recentemente conheci alguém que não passou no teste de direção e estava indignado, dizendo que não dirigia neste cruzamento em suas aulas de direção e que ele simplesmente não sabe dirigir neste cruzamento.

Quando você cria uma classe, você está introduzindo um novo tipo de dados.

O que exatamente sua classe faz não é tão importante.

O que é importante é o que você planeja fazer com os objetos de classe como dados?

(Colocar em uma matriz, passar em funções, retornar de funções, ...).

O que não está claro no momento é se esta classe é mesmo necessária.

E se for, deve ser necessariamente uma classe em vez de três?

Talvez em sua tarefa você possa se dar bem com uma (ou três) função?

 
Alexey Viktorov:

Tédio... Há também modelos com interfaces para master????

interfaces como tais não existem na MQL, há um par de páginas atrás com uma classe abstrata seria a mesma, é mais fácil para mim apenas ler o código depois

as interfaces são convenientes para inicializar com diferentes construtores

o exemplo na ajudahttps://www.mql5.com/ru/docs/basis/types/classes pela interface da palavra-chave é igual ao meu modelo, tente reproduzir o exemplo em seu próprio lugar, talvez seja isso que você esteja procurando

 
Igor Makanu:

interfaces como tais não existem na MQL, há um par de páginas atrás com uma classe abstrata seria a mesma, é mais fácil para mim apenas ler o código depois

as interfaces são convenientes para inicializar com diferentes construtores

o exemplo na ajudahttps://www.mql5.com/ru/docs/basis/types/classes pela interface da palavra-chave - este é exatamente meu modelo, tente reproduzir o exemplo em seu próprio ambiente, talvez isto seja o que você está procurando

Igor, você se lembra da tarefa que o Czar deu a Fedot, o Forte?

     Tente me conseguir que o To-Can't-Be! Anote o nome, para que você não esqueça com pressa!

E qual foi a resposta dos dois homens de caráter?

     Se tivéssemos apenas um esquema ou um plano, teríamos um plano, mas se não tivéssemos, procuraríamos e encontraríamos o diabo!

Como você pode tentar reproduzir algo se você não conhece as regras ou o resultado final a ser obtido...

 
Alexey Viktorov:

Chato... Há modelos e interfaces a serem dominados também????

Bem, se é chato, não é a sua coisa.
 
Koldun Zloy:

Quando você cria uma classe, você está introduzindo um novo tipo de dados.

Ainda não está claro se esta classe é de todo necessária.

E se for, tem que ser um e não três?

Talvez em sua tarefa você consiga sobreviver com uma (ou três) funções?

Pode ser possível, e muito provavelmente é possível, mas eu gostaria de escrever uma classe que possa ser conectada tanto ao indicador quanto ao Expert Advisor. E o indicador, do meu ponto de vista, é projetado para que a função seja chamada em diferentes variantes.

 
Alexey Viktorov:

Pode ser possível fazê-lo, e muito provavelmente você pode, mas seria bom escrever uma classe que possa ser chamada a partir de um indicador e de um consultor especializado. E o indicador, na minha opinião, é projetado de tal forma que a função deve ser chamada em diferentes variantes.

A função também pode ser chamada a partir do indicador e do Conselheiro Especialista.

 
Alexey Viktorov:

Acho que estou começando a entender a necessidade e a utilidade do OOP, mas estou tendo problemas para implementá-lo.

Eu tenho uma classe que deve ser usada com três conjuntos diferentes de variáveis. Mas ele realiza uma tarefa. Em termos simples, podemos inserir 3 construtores, declarar 3 variáveis e referir-nos a elas. Mas, do meu ponto de vista, isso não é totalmente correto. Além disso, há uma variável do tipo string em duas variantes, mas é diferente no nome e é usada em diferentes partes do código. É claro que você pode mudar a seqüência de variáveis, mas acho que isto também não é muito correto.

Eu li a documentação sobre o novo operador, mas não entendo como isso pode ajudar. Não vejo a diferença entre três variáveis de objeto diferentes e três ponteiros para os mesmos objetos. Talvez seja rentável quando você cria um ponteiro uma vez, use este objeto e o apague quando não for necessário. Mas se você precisa do objeto regularmente, é absolutamente bobo criar um ponteiro para ele cada vez e apagá-lo.

Portanto, por favor, me ajude. Li algumas explicações sobre o OOP em C++, mas elas são descritas lá de forma pior do que na documentação em mql5. Por favor, não peça aos impacientes que se juntem a mim, eu farei muitas perguntas. Também não estou interessado em código pronto sem explicações, quero entendê-lo e não repetir estupidamente "Faça conosco, faça como nós fazemos...".

A entidade mais próxima ao conceito de "Classe" é a estrutura. E uma estrutura é um conjunto de dados interligados. Ou seja, é um grupo de variáveis heterogêneas que estão ligadas entre si de forma significativa. Uma classe também acrescenta métodos, que podem ser usados para manipular esses dados. O análogo mais próximo de um "Método" é uma função. Isto é, uma classe é uma estrutura com um conjunto de funções incorporadas, que pode ser usada para controlar e formar os dados que estão dentro dela. Podem existir vários métodos para diferentes situações e variantes de formação de dados dentro do objeto de classe. No seu caso, você precisará de três métodos, que formarão dados dentro da classe, de acordo com cada situação.
Deve haver um "construtor padrão" na classe. Esta coisa é chamada quando um novo objeto da classe é criado usando o novo operador. Eu compararia o construtor padrão com a função OnInit em um programa MQL.
O destruidor é, para continuar a analogia, um análogo da função OnDeinit.
Você não precisa "matar" o objeto logo após ele ter sido criado e feito seu trabalho. Você pode "matar" objetos criados na função OnDeinit após o término do programa MQL, e enquanto o programa estiver em execução, todos os objetos podem estar na memória e você pode se referir a eles.
 
Koldun Zloy:

A função também pode ser chamada tanto do indicador como da EA.

Eu não duvido disso. Eu queria me juntar às formas modernas de programação, e vocês me dão tais conselhos)))). Você também pode recusar do OOP. Eu já não entendo a necessidade desses artifícios e agora você me dissuade :)))

 
Alexey Viktorov:

Eu não duvido disso. Eu queria me juntar às formas modernas de programação, e você me dá este tipo de conselho). Você também pode se recusar a usar o OOP de forma alguma. Eu já não entendo a necessidade desses artifícios e agora você me dissuade :)))

Se você está usando aulas para algo que não entende, não é OOP.

E sim, eu o aconselho, até que você entenda a necessidade desses artifícios, não os utilize.

 
BlackTomcat:
A entidade mais próxima ao conceito de "Classe" é a estrutura. E uma estrutura é um conjunto de dados interligados. Ou seja, é um grupo de variáveis heterogêneas que estão ligadas entre si de forma significativa. Uma classe também acrescenta métodos, que podem ser usados para manipular esses dados. O análogo mais próximo de "Método" é uma função. Isto é, uma classe é uma estrutura com um conjunto de funções incorporadas, que pode ser usada para controlar e formar os dados que estão dentro dela. Podem existir vários métodos para diferentes situações e variantes de formação de dados dentro do objeto de classe. No seu caso, você precisará de três métodos que irão gerar dados dentro da classe de acordo com cada situação.
Deve haver um "construtor padrão" na classe. Esta coisa é chamada quando um novo objeto da classe é criado usando o novo operador. Eu compararia o construtor padrão com a função OnInit em um programa MQL.
O destruidor é, para continuar a analogia, um análogo da função OnDeinit.
Você não precisa "matar" o objeto logo após ele ter sido criado e feito seu trabalho. Você pode "matar" objetos criados na função OnDeinit após o término do programa MQL, e enquanto o programa estiver em execução, todos os objetos podem estar na memória e você pode se referir a eles.

Portanto, estou tentando evitar o uso de três métodos similares. Afinal, eles são quase os mesmos. Eles recebem uma série de eventos do calendário e peneirando registros desnecessários, eles fornecem uma série para processamento posterior.

Razão: