Programmation OOP vs programmation procédurale

 
Les commentaires qui ne sont pas liés au "projet EA" ont été déplacés vers ce sujet.
 

Je ne veux pas créer un chœur ici, mais je me demande si les partisans de la POO peuvent soumettre un code résolvant un problème, qui montre clairement que cette solution est plus efficace qu'une solution sans POO ?


Je suis un maître de la résolution de problèmes sans POO et j'aimerais me battre avec un maître de la résolution de problèmes avec POO.

 
Реter Konow:

Je ne veux pas créer un chœur ici, mais je me demande si les partisans de la POO peuvent soumettre un code résolvant un problème, qui montre clairement que cette solution est plus efficace qu'une solution sans POO ?

Je suis un résolveur de problèmes sans POO et j'aimerais combattre un résolveur de problèmes avec POO.

Il ne s'agit pas d'une plateforme où vous pouvez reproduire la comparaison - le programme est d'une seule page(single-file). Ici, vous pouvez écrire comme vous le souhaitez et les performances et l'accès au programme resteront pratiquement au même niveau. Bien qu'il soit possible de se tromper dans n'importe quel style d'écriture, qu'il soit procédural ou OOP.

 
Vitaly Muzichenko:

Il ne s'agit pas d'une plateforme où vous pouvez reproduire la comparaison - le programme est d'une seule page(single-file). Ici, vous pouvez écrire comme vous le souhaitez, et les performances et l'accès au programme resteront pratiquement au même niveau. Bien que vous puissiez vous planter dans n'importe quel style de programmation - procédural ou POO.

Je ne vous comprends pas bien. Que voulez-vous dire par "un programme d'une page" ? Vous pouvez simplement comparer deux approches différentes pour résoudre une même tâche. Lors de la comparaison, vous devez évaluer chaque solution en fonction des principaux critères : la solution elle-même, la compacité du code et sa lisibilité.


Ce sont les principaux critères de la programmation.

Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым...
 
Реter Konow:

L'écriture d'énormes blocs de code occupant des centaines de lignes. Presque aucun commentaire. Pas d'OOP. Code en russe. Tout fonctionne très efficacement. Je n'ai aucun problème d'orientation dans le programme, bien qu'il y ait une centaine de fichiers connectés. Probablement parce que je m'y suis habitué et que je me suis souvenu de tout il y a longtemps. L'essentiel est de connaître et de comprendre votre programme, tout le reste est secondaire. Je pense.

Nous pouvons débattre de l'"efficacité" du travail.

Il en va de même pour la modifiabilité - si votre code doit être utilisé sur des devis de précision différente, devra-t-il être modifié, et sera-t-il facile de le faire ?

Le principal problème dans ce type de projet est d'apporter des modifications. Comme le montre la pratique, plus les blocs sont grands, plus il y a de chances que des erreurs soient introduites lors de la modification. L'absence de commentaires est un inconvénient, pas un avantage. C'est pourquoi vous devez mémoriser beaucoup de choses.

 
Реter Konow:

Je ne veux pas créer un chœur ici, mais je me demande si les partisans de la POO peuvent soumettre un code résolvant un problème, où il est clairement visible que cette solution est plus efficace qu'une solution sans POO ?

Je suis un maître de la résolution de problèmes sans POO et j'aimerais combattre un maître de la résolution de problèmes avec POO.

J'ai déjà présenté un tel code ci-dessus. Il existe une interface entièrement virtuelle dans laquelle l'historique des transactions est géré. Le même système est utilisé dans mon travail avec le poste actuel et dans d'autres endroits similaires.

C'est grâce à OOP que nous avons une unité complète de MT4 et MT5, et dans MT5 cela fonctionne indépendamment du fait qu'il s'agisse de couverture ou de compensation.

De plus, grâce à l'OOP que j'ai, je peux facilement utiliser plusieurs TS, différents dans leurs magies, au sein d'une même EA.

En fait, la POO a été inventée pour simplifier le support du code. En même temps, vous devez payer un coût important pendant la rédaction. Si vous écrivez du code, que vous l'utilisez sans modification et que vous le supprimez ensuite, il n'y a aucun sens à s'embêter avec la POO. La POO donne un avantage précisément lorsque le même code est requis à plusieurs endroits et qu'il doit être modifié périodiquement.

Par conséquent, la portée de l'application et de la non-application de la POO est déterminée par la nécessité de la maintenance et des modifications du code.

 
George Merts:

On pourrait discuter de l'"efficacité".

Il en va de même pour la modifiabilité - si votre code doit être utilisé sur des devis de précision différente - nécessitera-t-il des modifications, et sera-t-il facile de les effectuer ?

Le principal problème dans ce type de projet est d'apporter des modifications. Comme le montre la pratique, plus les blocs sont grands, plus il y a de chances que des erreurs soient introduites lors de la modification. L'absence de commentaires est un inconvénient, pas un avantage. C'est pourquoi vous devez vous souvenir de beaucoup de choses.

La polyvalence des blocs est un autre critère d'évaluation. Bien entendu, un bloc doit pouvoir être utilisé pour un large éventail de tâches et s'adapter facilement à des conditions changeantes. C'est exactement ce que j'ai. Par exemple, j'utilise la technologie dite "focus". C'est-à-dire que les valeurs des principaux paramètres sont fixées en permanence dans des variables globales, et ces variables et placées dans tous les blocs.

 
Nous devons comparer dans la pratique. Sinon, c'est une discussion inutile.
 
Реter Konow:

La polyvalence des blocs est un autre critère d'évaluation. Il est certain qu'un bloc doit pouvoir être utilisé pour un large éventail de tâches et s'adapter facilement à des conditions changeantes. C'est exactement ce que j'ai. Par exemple, j'utilise la technologie dite "focus". C'est-à-dire que les valeurs des principaux paramètres sont fixées en permanence dans des variables globales, et ces variables et placées dans tous les blocs.

Je crains que les variables globales ne soient également un inconvénient. Il doit y avoir le moins possible de variables globales disponibles dans tous les blocs. Il s'agit simplement de veiller à ce que chaque bloc ne reçoive que les données dont il a besoin et, dans la mesure du possible, uniquement sous une forme constante, afin qu'il soit impossible de modifier quelque chose qui n'est pas censé changer.

Les deux seules variables globales dans mes projets sont l'objet de la classe CExpert, dont les fonctions encapsulent la fonctionnalité de Init(), OnTick() et d'autres événements, et l'objet CLogFile - un fichier journal, qui sort le traçage, car les macros de traçage doivent fonctionner à n'importe quel endroit du programme.

À mon avis, se fier à la mémoire n'est pas la meilleure solution, du moins parce que, comme l'a dit Sherlock Holmes, à un moment donné, les connaissances nécessaires seront enterrées sous un tas de déchets inutiles. Et la mémoire peut aussi faire défaut.

 
George Merts:

Je crains que les variables globales ne soient également un inconvénient. Il doit y avoir le moins possible de variables globales disponibles dans tous les blocs. Juste pour que chaque bloc ne reçoive que les données dont il a besoin et, dans la mesure du possible, uniquement sous forme constante, afin qu'il n'y ait aucune possibilité de modifier ce qui n'est pas censé l'être.

Les deux seules variables globales dans mes projets sont l'objet de la classe CExpert, dont les fonctions encapsulent la fonctionnalité de Init(), OnTick() et d'autres événements, et l'objet CLogFile - un fichier journal, qui sort le traçage, parce que les macros de traçage doivent fonctionner à n'importe quel endroit dans un programme.

S'en remettre à la mémoire n'est pas la meilleure solution, ne serait-ce que parce que, comme l'a dit Sherlock Holmes, à un moment donné, les connaissances requises seront enfouies sous un tas de choses inutiles. Et la mémoire peut aussi faire défaut.

Vous savez, derrière tous ces termes et ce code OOP, je ne peux pas voir la tâche que vous avez résolue. Quelle était son essence ? Veuillez le décrire et je vous proposerai ma solution. Nous pouvons alors les comparer selon tous les critères possibles.
 
Реter Konow:
Il faut la comparer dans la pratique. Sinon, cette discussion est inutile.

Pourquoi "inutile" ? Très utile.

Mais comment peut-on comparer la "facilité de prise en charge" dans la pratique ?

Disons qu'il s'agit d'un code écrit en un seul bloc et d'un code divisé en parties fonctionnelles - l'introduction de changements dans les deux cas est absolument identique. La seule différence est que dans le premier cas, il faut se souvenir de tous les liens qui seront affectés par la modification et les prendre en compte. Dans le second cas, puisque l'unité n'a accès qu'aux liens dont elle a besoin pour fonctionner - la modification affectera tous les liens disponibles. Vous n'avez pas besoin de vous souvenir de quoi que ce soit - ajustez systématiquement tout ce qui est disponible pour le bloc que vous voulez modifier.

C'est ainsi que l'on peut évaluer la différence ici ? La quantité de travail est exactement la même !

Raison: