Preguntas sobre POO en MQL5 - página 32

 
Vladimir Tkach:
Últimamente he empezado a ver una especie de "recogida de basura" en las funciones de varios compiladores. ¿Qué es?
Si te refieres a la recolección de basura, es lo que hace el borrado en lugar de ti, pero no cuando la variable sale del ámbito, sino cuando quiere. Por cierto, no el hecho de que te permitan llamar al destructor tú mismo, dependerá del lenguaje, en Sharp, según tengo entendido es imposible.
 
Vladimir Simakov:
Aquí dependerá del idioma, en Sharp, según tengo entendido es imposible.

Así es, lo único que se puede hacer es asignar un objeto no utilizado a NULL, hay manuales en el sitio de Microsoft de cómo forzar a llamar al recolector de basura, pero parece que leí en hubra que no el hecho de que el recolector se lanzará en esta llamada como se esperaba

es decir, en Sharp han quitado al programador la mayor parte de la gestión de la memoria: todo queda a merced del SO y del compilador

 
Igor Makanu:

Así es, lo único que se puede hacer es asignar un objeto no utilizado a NULL, hay manuales en el sitio de Microsoft para forzar el recolector de basura, pero parece que leí en hubra que no el hecho de que el recolector se lanzará en esta llamada como se esperaba

es decir, en Sharp han quitado al programador la mayor parte de la gestión de la memoria: todo queda a merced del SO y del compilador

Ahí lo tienes. Estoy escribiendo mi primera tarea de Sharp en este momento y después de nuevo en el método me siento terrible debido a la ausencia de eliminar en el código))).
 
Vladimir Simakov:
Ahí lo tienes. Actualmente estoy escribiendo mi primer libro de texto de Sharp y me chirría la ausencia de delete en el código después de new en el método)).

en lugar de borrar MiObj; escribir MiObj = null; - esto funcionará

y luego usar ? - al principio fue un poco incómodo, luego funciona automáticamente

pero no es la mayor diferencia con C++, en C# todos los objetos son referencias y si estableces MiObj_1=MiObj_2; no obtienes una copia, obtienes un puntero... Estoy a punto de confundirte, aquí tienes un tutorial rápido, lo estoy repasando por si se me ha olvidado algo

https://metanit.com/sharp/tutorial/2.16.php


Типы значений и ссылочные типы | C#
  • metanit.com
Ранее мы рассматривали следующие элементарные типы данных: int, byte, double, string, object и др. Также есть сложные типы: структуры, перечисления, классы. Все эти типы данных можно разделить на типы значений, еще называемые значимыми типами, (value types) и ссылочные типы (reference types). Важно понимать между ними различия. Ссылочные типы...
 

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...".

 
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 una tontería crear un puntero a él cada vez y borrarlo.

En definitiva, por favor, ayuda. He leído algunas explicaciones de POO en C++, pero allí se describen de forma peor que en la documentación de mql5. Por favor, no se impaciente la gente, voy a hacer 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...".

Necesitamos más detalles. ¿Qué tarea realiza la clase?

 
Koldun Zloy:

Se necesitan detalles. ¿Qué tarea realiza la clase?

No es un secreto, una muestra de eventos del calendario económico CalendarValueHistory(). En un caso, todas las noticias en el rango de tiempo. En otro por país y en otro rango de tiempo. En la tercera es por un símbolo. Pero, ¿existe una diferencia fundamental? ¿Las clases de programación dividen las soluciones por el tipo de tareas que realizan?

Hace poco conocí a una persona que suspendió un examen de conducir y se indignó diciendo que no había pasado por ese cruce en sus clases de conducción y que, sencillamente, no sabía conducir en esa intersección.

 
Aunque ahora estoy pensando que tal vez sea mejor crear un puntero, usar el objeto y borrarlo cuando no sea necesario. Al fin y al cabo, el rango de tiempo será diferente cada vez. ¿O es más fácil usar setters para insertar el tiempo en un objeto existente?
 
Alexey Viktorov:

En otro por país y un rango de tiempo diferente.

países en enum

En el constructor, incluso a través del habitual interruptor - caso, hacer la inicialización como usted necesita, me mostró por encima de una plantilla con las interfaces, también inicializar una de las estrategias en el constructor, en función de los parámetros, y el resto del trabajo se reduce a escribir una estrategia específica

https://www.mql5.com/ru/forum/85652/page24#comment_13054686

 
Igor Makanu:

países en enum

En el constructor, incluso a través del habitual interruptor - caso, hacer la inicialización como usted necesita, me mostró por encima de una plantilla con las interfaces, también inicializar una de las estrategias en el constructor en función de los parámetros, y el resto del trabajo se reduce a escribir una estrategia específica

https://www.mql5.com/ru/forum/85652/page24#comment_13054686

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