Une question pour les experts de la POO. - page 5

 
Artyom Trishkin:
Toutes les listes sont déjà pourvues d'une recherche binaire. Il ne s'agit pas de parcourir les listes une par une, mais plutôt de filtrer par la propriété recherchée. En conséquence, nous obtenons l'indice de l'élément que nous recherchons.
Ces listes sont-elles attachées à quelque chose à l'intérieur de l'OOP ? C'est-à-dire, quelle "cargaison" transportent-ils avec eux ? Classes, constructeurs, interfaces... ? Ils sont intégrés dans l'environnement de la classe, n'est-ce pas ?
 
Nikolai Semko:
Lorsqu'un objet de classe est créé, outre l'allocation de mémoire pour toutes les propriétés (variables) de la classe, l'un des constructeurs est lancé (il peut y en avoir plusieurs). Les constructeurs peuvent être non-paramétriques (par défaut), paramétriques (lorsque certains paramètres sont spécifiés lors de la création d'une instance d'une classe, ou un constructeur de copie, lorsqu'une autre instance de la classe est spécifiée comme paramètre d'une instance de la classe.
Je vois, merci, Nikolay. J'en serai conscient.
 
Реter Konow:

J'ai déjà résolu cette tâche publiquement. L'idée était de créer un tableau de tous les symboles et de toutes les échéances et de le parcourir en boucle, en fixant les événements d'une nouvelle barre. Après le premier appel d'une fonction de cet événement, son drapeau est effacé du tableau. Je ne peux pas juger à quel point c'est plus compliqué qu'en OOP. Mais, en fait, une solution plutôt simple et pratique.

comme vous l'avez écrit plus haut, tout est relatif.... en utilisant le dernier plan du clip...

avez-vous regardé labibliothèque standard de la livraison de MT ? c'est tout le style OOP, il y a 2 options ici, soit les programmeurs de Metakvot sont des professionnels et utilisent des styles compréhensibles ou... Votre version ;)

 
Igor Makanu:

comme vous l'avez écrit plus haut, tout est relatif.... en utilisant le dernier plan du clip...

avez-vous regardé labibliothèque standard de la livraison de MT ? c'est tout le style OOP, il y a 2 options ici, soit les programmeurs de Metakvot sont des professionnels et utilisent des styles compréhensibles ou... Votre version ;)

Je ne suis pas encore très au fait de la POO. Ils me parlent de listes mais je ne sais pas avec quoi ils "mangent". Comment ils sont annoncés, comment on y accède, comment ils sont modifiés, etc... Pour moi, une liste est juste un tableau dynamique sans aucune syntaxe supplémentaire. Un objet est un ensemble de propriétés dans un tableau. Et dans la POO - l'objet est une classe entière. Héritage - liaison d'objets. Accès aux propriétés de l'objet par le biais des références nommées. Dans mon cas, tout est donc beaucoup plus simple et il m'est donc difficile de comparer les caractéristiques et l'efficacité. J'ai besoin de l'approfondir.

Mais une chose que j'ai apprise. Vous ne pouvez pas comprendre et utiliser une seule entité du concept OOP sans comprendre l'ensemble du concept OOP et y passer complètement. C'est soit OOP, soit ce que vous voulez. Utiliser simplement l'un de ses mécanismes pratiques ne fonctionnera probablement pas.

 
Реter Konow:

La simple utilisation d'un de ses mécanismes pratiques ne fonctionnera probablement pas.

La POO peut coexister sans problème avec le style procédural, mais les fonctions doivent être des blocs de code complètement séparés et indépendants, c'est-à-dire que tout ce que la fonction utilise doit se trouver dans la fonction ou lui être passé en paramètre.

en général, comme ils l'écrivent dans Wiki, que la POO est une extension du style procédural

Retag Konow:

Mais il y a une chose que j'ai comprise. Vous ne pouvez pas comprendre et utiliser une entité quelconque du concept OOP sans comprendre l'ensemble de l'OOP et sans y aller complètement.

vous pouvez, j'ai donné un exemple, et sur le forum 90% des sources dans le style POO sont des enveloppes autour du style procédural - pas d'héritage, pas d'abstractions, pas de ..... rien, seulement l'encapsulation, mais de toute façon c'est au moins pratique - c'est pratique d'avoir un morceau de code complètement transférable à une autre tâche - après tout tout ce qui est à l'intérieur d'une classe... ;)

 
Igor Makanu:

avec le style procédural OOP sans problèmes, mais les fonctions doivent être des blocs de code complètement séparés et indépendants, c'est-à-dire que tout ce qu'une fonction utilise doit être dans celle-ci ou lui être passé en paramètre

en général, comme ils l'écrivent dans Wiki, la POO est une extension du style procédural

vous pouvez, j'ai donné un exemple, et sur le forum, 90% du code source dans le style POO est une enveloppe autour du style procédural - pas d'héritage, pas d'abstractions, pas de ..... rien, seulement l'encapsulation, mais de toute façon c'est au moins pratique - il est pratique d'avoir un morceau de code complètement transférable à une autre tâche - tout à l'intérieur d'une classe, non ? ;)

Oui, la portabilité du code est un grand avantage de la POO. Dans mon cas, seules les fonctions individuelles sont portables (et seulement rarement), mais lorsque je construis un gros mécanisme, rien n'est portable. Tout comme les organes humains ne sont pas transférables (sans intervention professionnelle). Mes mécanismes ressemblent davantage à des "organismes" dans le sens où ils sont divisés en grands blocs, chacun effectuant une multitude de tâches. Par conséquent, la portabilité est presque inexistante. Toutefois, il est très facile d'étendre la fonctionnalité de ces blocs. Vous l'"ajoutez" en quelques lignes seulement, et voilà ! - Les blocs effectuent toute une série de nouvelles tâches pour lesquelles vous devez écrire de nombreuses fonctions distinctes. Tout compte fait, il a ses avantages. Eh bien, la portée globale est un outil incroyablement puissant. Le matériel avec lequel les blocs travaillent est absolument disponible pour eux et il n'y a pas besoin de transférer quoi que ce soit. Tout ce qui est nécessaire pour travailler est déjà là. En somme, les approches sont différentes et chacune a ses propres avantages.

 
Реter Konow:

Je ne connais pas encore très bien la POO. Ils me parlent de listes et je ne sais pas avec quoi ils sont "mangés". Comment ils sont déclarés, comment on y accède, comment on les modifie et ainsi de suite... Pour moi, une liste est juste un tableau dynamique sans aucune syntaxe supplémentaire. Un objet est un ensemble de propriétés dans un tableau. Et dans la POO - l'objet est une classe entière. Héritage - liaison d'objets. Accès aux propriétés de l'objet par le biais des références nommées. Dans mon cas, tout est donc beaucoup plus simple et il m'est donc difficile de comparer les caractéristiques et l'efficacité. Il faut que j'approfondisse la question.

Mais une chose que j'ai apprise. Vous ne pouvez pas comprendre et utiliser une seule entité du concept OOP sans comprendre l'ensemble du concept OOP et sans vous y convertir complètement. C'est soit OOP, soit ce que vous voulez. L'utilisation d'un de ses mécanismes pratiques ne suffira probablement pas.

Peter, tu dois juste l'essayer. Et je recommanderais d'essayer exactement sur les structures de liste parce que là vous pouvez voir tous les avantages de la POO dans les trois directions - héritage, encapsulation et polymorphisme.

Grâce à l'héritage, vous disposez d'une seule interface (un ensemble de fonctions virtuelles) pour travailler avec les objets d'une liste. Les objets peuvent être simples ou complexes, hérités de la base.

Par polymorphisme - vous pouvez travailler avec des objets fondamentalement différents avec cette seule interface.

En raison de l'encapsulation, vous n'avez QUE cette interface et vous n'avez pas accès aux détails de la mise en œuvre. Par conséquent, vous ne pouvez pas vous tromper. De plus, vous savez exactement, non seulement comment les objets actuels fonctionnent, mais aussi comment les objets qui ne sont pas encore écrits interagiront avec votre code.

 
Реter Konow:
Ces listes sont-elles attachées à quelque chose dans l'OOP ? Je veux dire, quelle "charge" portent-ils avec eux ? Classes, constructeurs, interfaces... ? Ils sont intégrés dans l'environnement de la classe, n'est-ce pas ?
Essentiellement, une liste est très proche d'un tableau. Vous pouvez la déclarer comme une variable de type liste ou en créer une nouvelle via l'opérateur new. Mais dans le cas du nouveau, la liste n'est pas contrôlée par le sous-système terminal et doit toujours être supprimée lorsque le travail est terminé - delete. Mais si une telle liste est ajoutée à une autre liste en tant qu'objet, elle n'a pas besoin d'être contrôlée.
 
Реter Konow:

Eh bien, la portée globale est un outil incroyablement puissant. Le matériel avec lequel les blocs travaillent est absolument disponible pour eux et il n'est pas nécessaire de transférer quoi que ce soit. Tout ce dont vous avez besoin pour travailler est déjà là.

lorsqu'il s'agit de la portée globale des variables à utiliser comme paramètres de fonctions ou de sections de code, alors..... imho, c'est la meilleure façon d'obtenir un code complètement non transportable avec la possibilité d'obtenir des bogues cachés qui sont impossibles à détecter plus tard

SZZ : J'ai modifié de tels codes pour des EAs MT4 à plusieurs reprises, au début j'ai renommé les variables déclarées globalement - puis j'ai fait des changements quand j'ai vu des erreurs de compilation, mais la dernière fois je l'ai fait correctement - j'ai ajouté de nouveaux paramètres aux signatures de fonctions et puis j'ai supprimé les variables déclarées globalement, parce que si vous avez réussi à modifier ce code misérable une fois, vous devrez le faire à nouveau ? - hélas je suis paresseux, mais raisonnablement paresseux )))))

 
Igor Makanu:

lorsqu'il s'agit de la portée globale des variables à utiliser comme paramètres de fonctions ou de sections de code, alors..... imho, c'est la meilleure façon d'obtenir un code complètement non transportable avec la possibilité d'obtenir des bogues cachés qui sont impossibles à détecter plus tard

SZZ : J'ai modifié de tels codes pour des EAs MT4 à plusieurs reprises, au début j'ai renommé les variables déclarées globalement - puis j'ai fait des changements quand j'ai vu des erreurs de compilation, mais la dernière fois je l'ai fait correctement - j'ai ajouté de nouveaux paramètres aux signatures de fonctions et puis j'ai supprimé les variables déclarées globalement, parce que si vous avez réussi à modifier ce code misérable une fois, vous devrez le faire à nouveau ? - hélas je suis paresseux, mais raisonnablement paresseux )))))

Le code n'est pas portable, c'est ce qui le rend spécial. Il n'est pas destiné à être portable. Il a un autre but. Eh bien, la portée globale des variables est un outil puissant pour travailler avec des mécanismes complexes. Vous devez juste savoir comment l'utiliser. Lorsque les gens me parlent d'erreurs cachées et de bogues, je ne sais plus où donner de la tête. Je n'ai jamais eu de bogue lié à la visibilité des variables globales. En un mot, pas du tout.

Raison: