Questions sur la POO dans MQL5 - page 32

 
Vladimir Tkach:
Ces derniers temps, j'ai commencé à voir une sorte de "collecte de déchets" dans les fonctions de divers compilateurs. Qu'est-ce que c'est ?
Si vous voulez parler du ramassage des ordures, c'est la chose qui supprime à votre place, mais pas lorsque la variable quitte la portée, mais lorsqu'elle le veut. En passant, pas le fait que vous êtes autorisé à appeler le destructeur vous-même, cela dépendra de la langue, dans Sharp, comme je comprends c'est impossible.
 
Vladimir Simakov:
Ici, cela dépendra de la langue, en Sharp, d'après ce que j'ai compris, c'est impossible.

Il est, tout ce qui peut être fait est d'affecter un objet inutilisé à NULL, il ya des manuels sur le site de Microsoft comment forcer à appeler le collecteur de déchets, mais il semble que je lis sur hubra que pas le fait que le collecteur sera lancé dans cet appel comme prévu

c'est-à-dire que dans Sharp, ils ont retiré au programmeur la majeure partie de la gestion de la mémoire - tout est à la merci du système d'exploitation et du compilateur.

 
Igor Makanu:

Il est, tout ce que vous pouvez faire est d'affecter un objet inutilisé à NULL, il ya des manuels sur le site de Microsoft pour forcer le collecteur de déchets, mais il semble que je lis sur hubra que pas le fait que le collecteur sera lancé dans cet appel comme prévu

c'est-à-dire que dans Sharp, ils ont retiré au programmeur la majeure partie de la gestion de la mémoire - tout est à la merci du système d'exploitation et du compilateur.

Et voilà. Je suis en train d'écrire ma première tâche Sharp en ce moment et après la nouvelle méthode, je me sens mal à cause de l'absence de suppression dans le code))).
 
Vladimir Simakov:
Et voilà. Je suis en train d'écrire mon premier manuel sur Sharp et je suis effrayé par l'absence de delete dans le code après new dans la méthode))).

au lieu de supprimer MyObj ; écrire MyObj = null ; - cela fonctionnera

et ensuite utiliser ? ? - c'était un peu gênant au début, puis ça marche automatiquement

mais ce n'est pas la plus grande différence avec C++, en C# tous les objets sont des références et si vous définissez MyObj_1=MyObj_2 ; vous n'obtenez pas une copie, mais un pointeur... Je suis sur le point de vous embrouiller, voici un tutoriel rapide, je le consulte au cas où j'aurais oublié quelque chose.

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


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

Je pense que je commence à comprendre la nécessité et l'utilité de la POO, mais j'ai du mal à la mettre en œuvre.

J'ai une classe qui doit être utilisée avec trois ensembles différents de variables. Mais il accomplit une tâche. En termes simples, nous pouvons insérer 3 constructeurs, déclarer 3 variables et y faire référence. Mais comme je le vois, ce n'est pas tout à fait correct. En outre, il existe une variable de type chaîne de caractères dans deux variantes, mais son nom est différent et elle est utilisée dans différentes parties du code. Bien sûr, vous pouvez changer la séquence des variables mais je pense que ce n'est pas tout à fait correct non plus.

J'ai lu la documentation sur le nouvel opérateur mais je ne comprends pas en quoi il peut être utile. Je ne vois pas la différence entre trois variables d'objet différentes et trois pointeurs vers les mêmes objets. Il est peut-être rentable de créer un pointeur une fois, d'utiliser cet objet et de le supprimer lorsqu'il n'est pas nécessaire. Mais si vous avez besoin de l'objet régulièrement, il est absolument stupide de créer un pointeur vers lui à chaque fois et de le supprimer.

Alors, s'il vous plaît, donnez-moi une grande aide. J'ai lu quelques explications sur la POO en C++, mais elles y sont décrites d'une manière pire que dans la documentation sur mql5. Ne demandez pas aux impatients de me rejoindre, je poserais trop de questions. Le code tout fait sans explications ne m'intéresse pas non plus, je veux le comprendre, et non pas répéter bêtement "Faites avec nous, faites comme nous...".

 
Alexey Viktorov:

Je pense que je commence à comprendre la nécessité et l'utilité de la POO, mais j'ai du mal à la mettre en œuvre.

J'ai une classe qui doit être utilisée avec trois ensembles différents de variables. Mais il accomplit une tâche. En termes simples, nous pouvons insérer 3 constructeurs, déclarer 3 variables et y faire référence. Mais comme je le vois, ce n'est pas tout à fait correct. En outre, il existe une variable de type chaîne de caractères dans deux variantes, mais son nom est différent et elle est utilisée dans différentes parties du code. Bien sûr, vous pouvez changer la séquence des variables mais je pense que ce n'est pas tout à fait correct non plus.

J'ai lu la documentation sur le nouvel opérateur mais je ne comprends pas en quoi il peut être utile. Je ne vois pas la différence entre trois variables d'objet différentes et trois pointeurs vers les mêmes objets. Il est peut-être rentable de créer un pointeur une fois, d'utiliser cet objet et de le supprimer lorsqu'il n'est pas nécessaire. Mais si vous avez besoin de l'objet régulièrement, il est idiot de créer un pointeur vers lui à chaque fois et de le supprimer.

Dans l'ensemble, aidez-nous, s'il vous plaît. J'ai lu quelques explications sur la POO en C++, mais elles y sont décrites d'une manière pire que dans la documentation sur mql5. S'il vous plaît, ne soyez pas impatients, je vais poser trop de questions. Le code tout fait sans explications ne m'intéresse pas non plus, je veux le comprendre, et non pas répéter bêtement "Faites avec nous, faites comme nous...".

Nous avons besoin de plus de détails. Quelle est la tâche de la classe ?

 
Koldun Zloy:

Des détails sont nécessaires. Quelle est la tâche de la classe ?

Ce n'est pas un secret, un échantillon des événements du calendrier économique CalendarValueHistory(). Dans un cas, toutes les nouvelles de la période considérée. Dans un autre par pays et dans un autre intervalle de temps. Dans le troisième, c'est par un symbole. Mais y a-t-il une différence fondamentale ? Les cours de programmation divisent-ils les solutions en fonction du type de tâches qu'elles accomplissent ?

J'ai récemment rencontré une personne qui a échoué à un examen de conduite et qui s'est indignée en disant qu'elle n'avait pas conduit à cette intersection pendant ses cours de conduite et qu'elle ne savait tout simplement pas comment conduire à cette intersection.

 
Bien que maintenant je pense que peut-être il est vraiment mieux de créer un pointeur, d'utiliser l'objet et de le supprimer quand il n'est pas nécessaire ? Après tout, l'intervalle de temps sera différent à chaque fois. Ou est-il plus facile d'utiliser des setters pour insérer du temps dans un objet existant ?
 
Alexey Viktorov:

Dans un autre par pays et dans une autre fourchette de temps.

pays dans l'enum

Dans le constructeur, même par le biais de l'habituel switch - case, faire l'initialisation que vous avez besoin, j'ai montré ci-dessus un modèle avec des interfaces, je aussi initialiser l'une des stratégies dans le constructeur, en fonction des paramètres, et le reste du travail est réduit à l'écriture d'une stratégie spécifique

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

 
Igor Makanu:

pays dans l'enum

Dans le constructeur, même à travers l'habituel switch - case, faites l'initialisation comme vous le souhaitez, j'ai montré ci-dessus un modèle avec des interfaces, j'initialise également une des stratégies dans le constructeur en fonction des paramètres, et le reste du travail se résume à écrire une stratégie spécifique

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

Ennuyeux... Il y a également des modèles et des interfaces à maîtriser ???

Raison: