Programmation OOP vs programmation procédurale - page 4

 
Реter Konow:
George Merts:

Erm... Je n'ai pas bien compris.

L'objectif était de séparer le CT du terminal. Le code doit être compilé sur les deux plateformes sans aucune modification. La super tâche - transférer tous les TS écrits à WealhtLab Developer en écrivant seulement les classes de travail avec le serveur commercial.

//--------------------------------------------------


J'ai posé des questions sur la tâche actuelle afin de comparer ses solutions selon plusieurs critères et de parvenir à une conclusion sur l'efficacité de chacune. Tu éloignes la conversation de la partie pratique. Lorsque vous affirmez l'efficacité de la POO, vous devez être en mesure de le prouver dans la pratique. Mais je suis prêt à essayer de prouver mon opinion.

Alors, quel est le problème actuel ? J'espère que vous vous en souvenez)


Si vous utilisez des pointeurs vers des fonctions, vous pouvez vous passer de la POO. Mais si vous n'utilisez pas de pointeurs, vous devez comprendre que vous ne pouvez pas rattraper le programme opérationnel.

 
Alexey Volchanskiy:

Je suppose que vous n'êtes pas un programmeur ? Ensuite, rappelez-vous où vous étiez 2017.07.05 14:55 GMT 00, à qui vous parliez et à quel sujet ;))

Facile. J'étais chez moi, en train de me parler de mon programme))))
 
Dmitry Fedoseev:

Si vous utilisez des pointeurs vers des fonctions, vous pouvez vous passer de la POO. Mais si vous n'utilisez pas de pointeurs, vous devez comprendre que vous ne pouvez pas rattraper le programme opérationnel.

Non. Tant qu'il n'y a pas de tâche concrète qui me montre que je ne peux pas rattraper la POO, je ne peux pas l'appréhender. Malheureusement. Ce ne sont que des mots.


Actuellement, j'ai 4 ans de pratique de la programmation. Vous pouvez sans risque les multiplier par 2, car je programme pendant de nombreuses heures chaque jour. Pendant cette période, j'ai résolu d'innombrables tâches différentes. Je n'ai pas encore utilisé OOP. Je ne comprends pas pourquoi j'en ai besoin. Dans ma pratique, toutes les tâches sont résolues sans lui, pas moins, et parfois même plus efficacement.

 
Реter Konow:
Non. Tant qu'il n'y a pas de tâche concrète qui me montre que je ne peux pas rattraper la POO, je ne peux pas du tout l'appréhender. Malheureusement. Ce ne sont que des mots.

Imaginez un programme hypothétique qui modifie son algorithme en fonction de paramètres externes, il pourrait y avoir un très grand nombre de variantes. Nous pouvons le résoudre sans la POO, mais comme ces commutateurs à plusieurs étages auraient l'air stupides. De plus, il est clair que les performances vont ralentir à mesure que le nombre de variantes augmente. Il est également clair que la construction pendant l'initialisation se produit dans la POO et, en outre, pendant le fonctionnement, aucun branchement inutile ne se produit, c'est-à-dire que l'augmentation du nombre de variantes ne diminuera pas les performances.

 

Une caractéristique distinctive de la programmation structurée est la division des programmes en blocs de code,
qui effectuent une tâche spécifique. Dans ce cas, les éléments constitutifs sont les fonctions
et les modules (qui peuvent être déplacés dans des fichiers séparés).
La programmation orientée objet (POO) est plus moderne.
Le concept de POO fait davantage référence à l'organisation des données. La POO facilite la vie d'un programmeur.
Les concepts clés de la POO sont les objets et les classes.
Les classes sont des structures dans lesquelles des fonctions sont ajoutées. Et les objets sont des variables structurées ou des instances de classes

La programmation structurée est la première étape. En le maîtrisant, le programmeur obtient un avantage. La POO est l'étape suivante avec les avantages suivants

Классы и объекты в C++
  • gamesmaker.ru
Наконец-то мы добрались до самой важной темы во вступительном курсе. Сегодня мы будем говорить о классах и объектах. Выпуск небольшой и не сложный. Что есть хорошо. Класс - не что иное, как структура, к которой добавили функции. А объект - это структурная переменная. Данный материал будет более понятным, если вы хорошо освоились со структурами...
 
Реter Konow:
Résolvons un problème particulier et comparons.

Voici une tâche simple (il faudrait beaucoup d'écriture pour l'expliquer en détail).

Tout se passe dans OnTick(). Supposons que nous vérifions certaines conditions et que nous ouvrions un ordre. La condition n'est pas importante, supposons qu'il s'agisse d'un maximum ou d'un minimum.

Le robot se place naturellement sur un graphique et obtient les cotations de ce symbole. Il est clair que nous n'avons pas seulement une fonction OnTick, mais aussi d'autres fonctions : OnTrade, OnTimer, des fonctions personnalisées, etc.

Par conséquent, toutes les variables qui sont partagées doivent être déclarées en dehors de ces fonctions au début du code. Par exemple, le nom du symbole, la demande, l'offre, l'écart, le nombre de chiffres de la cotation, etc. Il y en aura des dizaines.

Ce robot ne négociera que sur un seul symbole, c'est-à-dire là où il se trouve. Supposons qu'il y ait 20 graphiques de ce type et que nous installions le même robot sur chacun d'entre eux pour négocier simultanément les 20 paires.

Mais il ne s'agit pas d'un robot de trading multi-devises, comme l'ont souligné certains traders du marché.


Ici, nous devons le transformer en un robot multi-devises. C'est-à-dire que nous le mettons sur n'importe quel graphique (seulement sur 1 graphique) et il ouvre des transactions pour 20 paires. Cela signifie que nous le lançons dans le testeur en mode solitaire et qu'il négociera sur les paires qui sont dans Market Watch.

Voici comment vous allez l'implémenter sans OOP. Allez-vous transformer toutes les variables communes en tableaux de 20 éléments ?

Et qu'en est-il des fonctions qui seront appelées simultanément pour toutes les paires ?

Vous ne pouvez pas vous passer de la POO. :)


P.S. Je tiens à noter que je n'ai pas d'éducation russe, donc j'ai écrit longtemps et je n'ai pas eu le temps de lire plusieurs pages.

 
Dmitry Fedoseev:

Si vous utilisez des pointeurs vers des fonctions, vous pouvez vous passer de la POO. Si vous n'utilisez pas les pointeurs, vous devez vous rendre compte que vous ne pouvez pas rattraper le programme opérationnel.


Je ne suis pas d'accord. J'écrivais des programmes de télévision numérique à une époque, le compilateur était C++, mais il était utilisé au sein du C car la mémoire était rare. Les pointeurs vers les fonctions étaient très largement utilisés, mais on est loin de la POO.

 
Petros Shatakhtsyan:

...

Voici comment vous allez le faire sans OOP.

...

La question la plus pertinente ici n'est pas "comment" mais "pourquoi" ? Pourquoi auriez-vous besoin de coder quelque chose qui est déjà implémenté dans le terminal - il vous suffit d'ouvrir le nombre requis de graphiques et de les joindre à l'EA. En outre, les paramètres sont susceptibles d'être différents selon les symboles et les périodes.

 
Alexey Volchanskiy:

Je ne suis pas d'accord. J'écrivais des programmes pour la télévision numérique, le compilateur était C++, mais il était utilisé en C car la mémoire était rare. Les pointeurs vers les fonctions étaient très largement utilisés, mais on est loin de la POO.


Ce n'est pas très pratique, mais vous pouvez vous contenter des pointeurs en ce qui concerne les performances.

Et la commodité est un concept relatif.

 
Dmitry Fedoseev:

Imaginez un programme hypothétique qui modifie son algorithme en fonction de paramètres externes, il pourrait y avoir un très grand nombre de variantes. Nous pouvons le résoudre sans la POO, mais comme ces commutateurs à plusieurs étages auraient l'air stupides. En outre, il est clair que les performances ralentiront à mesure que le nombre de variantes augmentera. Il est également clair qu'avec la POO, il y a une construction à l'initialisation et ensuite aucun branchement inutile pendant le travail ; c'est-à-dire que l'augmentation du nombre de variantes ne diminuera pas les performances.

Il est souhaitable de mener à une tâche spécifique. Une telle description n'est pas très claire. Dans ma pratique, l'algorithme ne change pas lorsque les paramètres externes changent. Il est rendu par avance universel pour toute valeur de ces paramètres. Par conséquent, ce que vous voulez dire n'est pas très clair. Décrivez-la à l'aide d'un exemple précis.