Questions sur la POO dans MQL5 - page 33

 
Alexey Viktorov:

Ce n'est pas un secret que l'échantillon d'événement du calendrier économique est CalendarValueHistory(). Dans un cas, toutes les nouvelles d'une période donnée. Dans un autre par pays et dans une autre tranche horaire. Dans le troisième, 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é quelqu'un qui n'a pas réussi son examen de conduite et qui s'est indigné en disant qu'il n'avait pas conduit sur cette intersection dans ses leçons de conduite et qu'il ne sait tout simplement pas comment conduire sur cette intersection.

Lorsque vous créez une classe, vous introduisez un nouveau type de données.

Ce que fait exactement votre classe n'est pas si important.

Ce qui est important, c'est ce que vous prévoyez de faire avec les objets de la classe comme données ?

(Mettre dans un tableau, passer dans des fonctions, retourner des fonctions, ...).

A ce stade, je ne suis pas sûr que ce cours soit nécessaire.

Et si c'est le cas, doit-il nécessairement s'agir d'une seule classe au lieu de trois ?

Peut-être que dans votre tâche, vous pouvez vous contenter d'une (ou trois) fonctions ?

 
Alexey Viktorov:

L'ennui... Il existe également des modèles avec des interfaces pour les maîtres.

les interfaces en tant que telles n'existent pas dans MQL, il y a quelques pages avec une classe abstraite, ce serait la même chose, il est plus facile pour moi de lire le code après coup

Les interfaces sont pratiques à initialiser avec différents constructeurs.

l'exemple dans l'aidehttps://www.mql5.com/ru/docs/basis/types/classes par l'interface de mot-clé est un-à-un mon modèle, essayez de reproduire l'exemple dans votre propre endroit, peut-être c'est ce que vous recherchez

 
Igor Makanu:

les interfaces en tant que telles n'existent pas dans MQL, il y a quelques pages avec une classe abstraite, ce serait la même chose, il est plus facile pour moi de lire le code après coup

Les interfaces sont pratiques à initialiser avec différents constructeurs.

l'exemple dans l'aidehttps://www.mql5.com/ru/docs/basis/types/classes par le mot clé interface - c'est exactement mon modèle, essayez de reproduire l'exemple dans votre propre environnement, peut-être est-ce ce que vous recherchez

Igor, te souviens-tu de la tâche que le Tsar a confiée à Fedot le Streltsy ?

     Essaie de m'avoir ce To-Can't-Be ! Note le nom, de peur de l'oublier dans ta hâte !

Et quelle a été la réponse des deux jeunes gens ?

     Si seulement nous avions un schéma ou un plan, nous aurions un plan, mais sinon, nous le chercherions et nous trouverions le diable !

Comment pouvez-vous essayer de reproduire quelque chose si vous ne connaissez pas les règles ou le résultat final à obtenir...

 
Alexey Viktorov:

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

Eh bien, si c'est ennuyeux, ce n'est pas ton truc.
 
Koldun Zloy:

Lorsque vous créez une classe, vous introduisez un nouveau type de données.

On ne sait pas encore si cette classe est vraiment nécessaire.

Et si c'est le cas, faut-il qu'il y en ait un plutôt que trois ?

Peut-être que dans votre tâche, vous pouvez vous contenter d'une (ou trois) fonctions ?

C'est peut-être possible, et c'est très probablement le cas, mais j'aimerais écrire une classe qui puisse être connectée à la fois à l'indicateur et au conseiller expert. Et l'indicateur, de mon point de vue, est conçu pour que la fonction soit appelée dans différentes variantes.

 
Alexey Viktorov:

C'est peut-être le cas, et c'est très probablement possible, mais j'aimerais écrire une classe qui puisse être appelée depuis un indicateur et depuis un conseiller expert. Et l'indicateur, à mon avis, est conçu de telle manière que la fonction doit être appelée dans différentes variantes.

La fonction peut également être appelée depuis l'indicateur et depuis l'Expert Advisor.

 
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 absolument stupide de créer un pointeur vers lui à chaque fois et de le supprimer.

Alors, s'il vous plaît, donnez-moi un coup de main. 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...".

L'entité la plus proche du concept de "classe" est la structure. Et une structure est un ensemble de données liées. C'est-à-dire qu'il s'agit d'un groupe de variables hétérogènes qui sont liées entre elles de manière significative. Une classe ajoute également des méthodes, qui peuvent être utilisées pour manipuler ces données. L'analogue le plus proche d'une "méthode" est une fonction. C'est-à-dire qu'une classe est une structure avec un ensemble de fonctions intégrées, qui peuvent être utilisées pour contrôler et former les données qu'elle contient. Il peut y avoir plusieurs méthodes pour différentes situations et variantes de formation des données à l'intérieur de l'objet classe. Dans votre cas, vous aurez besoin de trois méthodes, qui formeront les données à l'intérieur de la classe, en fonction de chaque situation.
Il doit y avoir un "constructeur par défaut" dans la classe. Cette chose est appelée lorsqu'un nouvel objet de la classe est créé à l'aide de l'opérateur new. Je comparerais le constructeur par défaut à la fonction OnInit d'un programme MQL.
Le destructeur est, pour continuer l'analogie, un analogue de la fonction OnDeinit.
Il n'est pas nécessaire de "tuer" l'objet dès qu'il a été créé et qu'il a fait son travail. Vous pouvez "tuer" les objets créés dans la fonction OnDeinit après que le programme MQL soit terminé, et pendant que le programme est en cours d'exécution, tous les objets peuvent être en mémoire et vous pouvez y faire référence.
 
Koldun Zloy:

La fonction peut également être appelée à partir de l'indicateur et de l'EA.

Je n'en doute pas. Je voulais rejoindre les méthodes de programmation à la mode, et vous me donnez de tels conseils)))). Vous pouvez tout aussi bien refuser de faire de l'OOP. Je ne comprends déjà pas la nécessité de ces gadgets et maintenant vous m'en dissuadez :))))

 
Alexey Viktorov:

Je n'en doute pas. Je voulais rejoindre les modes de programmation à la mode, et vous me donnez ce genre de conseils). Vous pouvez tout aussi bien refuser d'utiliser la POO. Je ne comprends déjà pas la nécessité de ces gadgets et maintenant vous m'en dissuadez :))))

Si vous utilisez des classes pour quelque chose que vous ne comprenez pas, ce n'est pas de la POO.

Et oui, je vous le conseille, tant que vous ne comprenez pas la nécessité de ces gadgets, ne les utilisez pas.

 
BlackTomcat:
L'entité la plus proche du concept de "classe" est la structure. Et une structure est un ensemble de données liées. C'est-à-dire qu'il s'agit d'un groupe de variables hétérogènes qui sont liées entre elles de manière significative. Une classe ajoute également des méthodes, qui peuvent être utilisées pour manipuler ces données. L'analogue le plus proche de "Méthode" est une fonction. C'est-à-dire qu'une classe est une structure avec un ensemble de fonctions intégrées, qui peuvent être utilisées pour contrôler et former les données qu'elle contient. Il peut y avoir plusieurs méthodes pour différentes situations et variantes de formation des données à l'intérieur de l'objet classe. Dans votre cas, vous aurez besoin de trois méthodes qui généreront des données à l'intérieur de la classe en fonction de chaque situation.
Il doit y avoir un "constructeur par défaut" dans la classe. Cette chose est appelée lorsqu'un nouvel objet de la classe est créé à l'aide de l'opérateur new. Je comparerais le constructeur par défaut à la fonction OnInit d'un programme MQL.
Le destructeur est, pour continuer l'analogie, un analogue de la fonction OnDeinit.
Il n'est pas nécessaire de "tuer" l'objet dès qu'il a été créé et qu'il a fait son travail. Vous pouvez "tuer" les objets créés dans la fonction OnDeinit après que le programme MQL soit terminé, et pendant que le programme est en cours d'exécution, tous les objets peuvent être en mémoire et vous pouvez y faire référence.

J'essaie donc d'éviter d'utiliser trois méthodes similaires. Après tout, ils sont presque identiques. Ils obtiennent un tableau d'événements de calendrier et, en éliminant les enregistrements inutiles, ils fournissent un tableau pour un traitement ultérieur.

Raison: