Programmation OOP vs programmation procédurale - page 6

 
Dmitry Fedoseev:

Et comment allez-vous faire pour que le suivi s'adapte aux différents paramètres ?

Essayons-le sur une tâche spécifique. Si vous en avez une, veuillez la fournir.
 
Реter Konow:
De préférence, mener à une tâche spécifique. Une telle description n'est pas très claire. Dans ma pratique, l'algorithme ne change pas en cas de modification des paramètres externes. Il est rendu universel par avance pour toute valeur de ces paramètres. Par conséquent, ce que vous voulez dire n'est pas très clair. Décrivez-la sur un exemple concret.
class Ордер
{
  public: int SELL;

  Ордер(void) // Конструктор имеет то же имя, что и класс. Выполняется при инициализации переменной класса
  {
    SELL=0;
    int k=OrdersHistoryTotal()-1;
    for(; k>=0; k--)
    {
      if(!OrderSelect(k, SELECT_BY_POS, MODE_HISTORY)) continue;
      if(OrderType()==OP_SELL)SELL++;
    }
  }
}x;

void OnStart()
{
  Alert(x.SELL);
}

Grâce à la POO, le programme principal est très bref et clair. Ce n'est que le premier exemple qui me vient à l'esprit. Si vous devez calculer fréquemment le nombre de commandes, les avantages sont évidents. Il est difficile de le comprendre la première fois. Mais les fonctions, même avec des paramètres, étaient aussi autrefois une difficulté

 
Реter Konow:
Essayons une tâche particulière. Si c'est le cas, merci de le préciser.

Tâche spécifique. Le client a commandé un conseiller expert pour deux MA, qui comprendrait toutes les variantes de suivi disponibles dans la base de code, mais qui ne ralentirait pas dans le testeur.

L'EA devrait également avoir la possibilité d'être mise à jour avec de nouvelles variantes de suivi à l'avenir (à faible coût).

 
STARIJ:

Grâce à la POO, le programme principal est très court et clair. Ce n'est que le premier exemple qui me vient à l'esprit. Si nous devons calculer fréquemment le nombre de commandes, les avantages sont évidents. Il est difficile de le comprendre la première fois. Mais les fonctions, même avec des paramètres, étaient aussi autrefois une difficulté

Je ne comprends pas, pourquoi ne pas faire une fonction "int Number_orders()" qui fera toujours la boucle ci-dessus et retournera la valeur du compteur "SELL" ?

Par exemple :

 int Количество_ордеров()
  {
    SELL=0;
    int k=OrdersHistoryTotal()-1;
    for(; k>=0; k--)
    {
      if(!OrderSelect(k, SELECT_BY_POS, MODE_HISTORY)) continue;
      if(OrderType()==OP_SELL)SELL++;
    }
   return(SELL);
  }


Pourquoi avons-nous besoin d'une classe ici ?

 
Dmitry Fedoseev:

Par exemple, 100 variantes d'arrêts suiveurs doivent être entassées dans un seul conseiller expert. Lorsque l'on programme de manière procédurale, on obtient un désordre comme celui-ci :

100 fragments de code identiques. Lorsque le programme est en cours d'exécution, il ne comprendra généralement qu'un seul stop suiveur, les 99 ifs restants ne faisant que consommer des ressources.

Maintenant pour la variante OOP. Pendant l'initialisation d'Expert Advisor, nous mettons à l'échelle le tableau avec des pointeurs en fonction du nombre de pistes, nous créons des objets uniquement pour les pistes incluses. Par conséquent, le code suivant fonctionnera tout le temps :

Si une barre oblique est activée, alors cnt=1, c'est-à-dire qu'il n'y a rien d'inutile.

Créez un tableau de noms de fonctions, choisissez le nom à partir de l'index et accédez-y.


L'OOP n'a rien à voir avec cela. Il s'agit d'une limitation du langage qu'ils essaient de résoudre avec la POO.

 

Je n'ai pas essayé, mais par exemple vous ne pouvez pas faire un langage non-typique sans une OOP.

 
Реter Konow:

Je ne comprends pas pourquoi ne pas faire une fonction "int Number_orders()" qui fera toujours la boucle ci-dessus et retournera la valeur du compteur "SELL" ?

Ayant finalisé la classe, j'obtiendrai x.SELL x.BUY x.ALL et tout le reste dont j'ai besoin. Et il sera très facile de les aborder. Classes OOP - pour plus de simplicité
 
Dmitry Fedoseev:

Tâche spécifique. Le client a commandé un conseiller expert pour deux MA, qui comprendrait toutes les variantes de suivi disponibles dans la base de code, mais qui ne ralentirait pas dans le testeur.

Et avec la perspective d'ajouter de nouvelles variantes de queue à l'avenir (pas cher).

Je vois. C'est un argument indiscutable en faveur de la POO. Stupidité du client, manque de temps pour la combattre et manque de volonté d'améliorer l'algorithme de quelqu'un d'autre). Oui, vous avez besoin de la POO dans ce cas. Je suis d'accord).
 
STARIJ:
En affinant la classe, j'obtiendrai x.SELL x.BUY x.ALL et tout ce qui est nécessaire. Et il sera très facile de les aborder. Classes OOP - pour plus de simplicité
En affinant la fonction, vous pouvez obtenir toutes ces mêmes variables dans un tableau, que vous passerez dans cette fonction. Alors utilisez-le comme prévu...
 
СанСаныч Фоменко:

Créez un tableau de noms de fonctions, choisissez un nom dans l'index et appelez-le.


Cela n'a rien à voir avec la POO. Il s'agit d'une limitation du langage qu'ils essaient de résoudre à l'aide de la POO.

Il n'existe pas d'appel de fonction par le nom défini comme une chaîne de caractères. Et dans les langages où elle existe, elle se fait par le biais d'un hash d'une table, c'est-à-dire que c'est un frein terrible.

Une façon normale de résoudre ce problème serait d'utiliser des pointeurs vers des fonctions (à ce sujet, j'ai écrit ici). Mais pourquoi utiliser uniquement les pointeurs, il existe un moyen plus pratique - la POO, qui permet non seulement de tirer parti des pointeurs de fonction, mais aussi de structurer commodément les données et le code.

Raison: