Preguntas sobre POO en MQL5 - página 33

 
Alexey Viktorov:

No es ningún secreto que el ejemplo de evento de calendario económico es CalendarValueHistory(). En un caso todas las noticias en un rango de tiempo. En otro por país y en otro rango de tiempo. En la tercera por un símbolo. Pero, ¿existe una diferencia fundamental? ¿Dividen las soluciones por el tipo de tarea que realizan?

Hace poco conocí a alguien que no aprobó el examen de conducir y se indignó diciendo que en sus clases de conducción no pasaron por esa intersección y que él no sabe conducir por ella.

Cuando se crea una clase, se introduce un nuevo tipo de datos.

Lo que hace exactamente su clase no es tan importante.

Lo importante es lo que piensas hacer con los objetos de la clase como datos.

(Poner en un array, pasar a funciones, devolver de funciones, ...).

Lo que no está claro en este momento es si esta clase es incluso necesaria.

Y si lo es, ¿debe ser necesariamente una clase en lugar de tres?

¿Tal vez en su tarea pueda llevarse bien con una (o tres) funciones?

 
Alexey Viktorov:

El aburrimiento... También hay plantillas con interfaces para dominar...

las interfaces como tal no existen en MQL, un par de páginas atrás con una clase abstracta sería lo mismo, es más fácil para mí sólo leer el código después

son convenientes para inicializar con diferentes constructores

el ejemplo en la ayudahttps://www.mql5.com/ru/docs/basis/types/classes por la palabra clave interfaz es uno en el mismo que mi plantilla, tratar de reproducir el ejemplo en su propio lugar, tal vez eso es lo que estás buscando

 
Igor Makanu:

las interfaces como tal no existen en MQL, un par de páginas atrás con una clase abstracta sería lo mismo, es más fácil para mí sólo leer el código después

son convenientes para inicializar con diferentes constructores

el ejemplo en la ayudahttps://www.mql5.com/ru/docs/basis/types/classes por la palabra clave interfaz - esto es exactamente mi plantilla, tratar de reproducir el ejemplo en su propio entorno, tal vez esto es lo que estás buscando

Igor, ¿recuerdas la tarea que el Zar encomendó a Fedot el Streltsy?

     ¡Intenta conseguirme a ese To-Can't-Be! ¡Anota el nombre, no sea que lo olvides con las prisas!

¿Y cuál fue la respuesta de los dos hombres de carácter?

     Si tuviéramos un esquema o un plano, tendríamos un plano, pero si no, ¡lo buscaríamos y encontraríamos al diablo!

Cómo se puede intentar reproducir algo si no se conocen las reglas o el resultado final que se debe obtener...

 
Alexey Viktorov:

Aburrido... También hay que dominar las plantillas y las interfaces.

Si es aburrido, no es lo tuyo.
 
Koldun Zloy:

Cuando se crea una clase, se introduce un nuevo tipo de datos.

Todavía no está claro si esta clase es necesaria en absoluto.

Y si lo es, ¿tiene que ser una clase en lugar de tres?

¿Tal vez en su tarea pueda arreglárselas con una (o tres) funciones?

Puede ser posible, y lo más probable es que sea posible, pero me gustaría escribir una clase que se pueda conectar tanto al indicador como al Asesor Experto. Y el indicador, desde mi punto de vista, está diseñado para que la función sea llamada en diferentes variantes.

 
Alexey Viktorov:

Puede ser posible hacerlo, y lo más probable es que se pueda, pero sería bueno escribir una clase que pueda ser llamada desde un indicador y desde un Asesor Experto. Y el indicador, en mi opinión, está diseñado de tal manera que la función debe ser llamada en diferentes variantes.

La función también puede ser llamada desde el indicador y desde el Asesor Experto.

 
Alexey Viktorov:

Creo que empiezo a entender la necesidad y la utilidad de la POO, pero me cuesta implementarla.

Tengo una clase que se va a utilizar con tres conjuntos diferentes de variables. Pero realiza una tarea. En términos simples, podemos insertar 3 constructores, declarar 3 variables y referirnos a ellas. Pero tal y como yo lo veo, no es del todo correcto. Además, hay una variable de tipo cadena en dos variantes, pero su nombre es diferente y se utiliza en distintas partes del código. Por supuesto, se puede cambiar la secuencia de las variables, pero creo que esto tampoco es del todo correcto.

He leído la documentación sobre el nuevo operador pero no entiendo cómo puede ayudar. No veo la diferencia entre tres variables de objeto diferentes y tres punteros a los mismos objetos. Quizás sea rentable cuando se crea un puntero una vez, se utiliza este objeto y se elimina cuando no se necesita. Pero si necesitas el objeto regularmente, es absolutamente tonto crear un puntero a él cada vez y borrarlo.

Así que, por favor, échame una mano. He leído algunas explicaciones de POO en C++, pero allí se describen de peor manera que en la documentación de mql5. Por favor, no pidan a los impacientes que se unan a mí, pues haré demasiadas preguntas. Tampoco me interesa un código ya hecho sin explicaciones, quiero entenderlo, y no repetir estúpidamente "Haz con nosotros, haz como nosotros...".

La entidad más cercana al concepto de "Clase" es la estructura. Y una estructura es un conjunto de datos vinculados. Es decir, se trata de un conjunto de variables heterogéneas que se relacionan entre sí de forma significativa. Una clase también añade métodos, que pueden ser utilizados para manipular estos datos. El análogo más cercano de un "Método" es una función. Es decir, una clase es una estructura con un conjunto de funciones integradas en ella, que pueden utilizarse para controlar y formar los datos que se encuentran en su interior. Puede haber varios métodos para diferentes situaciones y variantes de formación de datos dentro del objeto de clase. En su caso, necesitará tres métodos, que formarán los datos dentro de la clase, según cada situación.
Debe haber un "constructor por defecto" en la clase. Esta cosa se llama cuando se crea un nuevo objeto de la clase utilizando el operador new. Yo compararía el constructor por defecto con la función OnInit en un programa MQL.
El destructor es, para seguir con la analogía, un análogo de la función OnDeinit.
No hay que "matar" el objeto justo después de que se haya creado y haya hecho su trabajo. Puedes "matar" los objetos creados en la función OnDeinit después de que el programa MQL haya finalizado, y mientras el programa se esté ejecutando, todos los objetos pueden estar en la memoria y puedes referirte a ellos.
 
Koldun Zloy:

La función también puede ser llamada tanto desde el indicador como desde el EA.

No lo dudo. Quería unirme a la moda de la programación, y tú me das esos consejos)))). También puede negarse desde la OOP. Ya no entiendo la necesidad de estos artilugios y ahora me hablas de ello :)))

 
Alexey Viktorov:

No lo dudo. Quería unirme a la moda de la programación, y me das este tipo de consejos). También puedes negarte a utilizar la OOP en absoluto. Ya no entiendo la necesidad de estos artilugios y ahora me hablas de ello :)))

Si estás usando clases para algo que no entiendes, no es POO.

Y sí, te aconsejo que hasta que no entiendas la necesidad de estos trucos, no los uses.

 
BlackTomcat:
La entidad más cercana al concepto de "Clase" es la estructura. Y una estructura es un conjunto de datos vinculados. Es decir, se trata de un conjunto de variables heterogéneas que se relacionan entre sí de forma significativa. Una clase también añade métodos, que pueden ser utilizados para manipular estos datos. El análogo más cercano de un "Método" es una función. Es decir, una clase es una estructura con un conjunto de funciones integradas en ella, que pueden utilizarse para controlar y formar los datos que se encuentran en su interior. Puede haber varios métodos para diferentes situaciones y variantes de formación de datos dentro del objeto de clase. En su caso, necesitará tres métodos, que formarán los datos dentro de la clase en función de cada situación.
Debe haber un "constructor por defecto" en la clase. Esta cosa se llama cuando se crea un nuevo objeto de la clase utilizando el operador new. Yo compararía el constructor por defecto con la función OnInit en un programa MQL.
El destructor es, para seguir con la analogía, un análogo de la función OnDeinit.
No hay que "matar" el objeto justo después de que se haya creado y haya hecho su trabajo. Puedes "matar" los objetos creados en la función OnDeinit después de que el programa MQL haya finalizado, y mientras el programa se esté ejecutando, todos los objetos pueden estar en la memoria y puedes referirte a ellos.

Por lo tanto, estoy tratando de evitar el uso de tres métodos similares. Al fin y al cabo, son casi lo mismo. Obtienen una matriz de eventos del calendario y, eliminando los registros innecesarios, proporcionan una matriz para su posterior procesamiento.