Une question pour les experts de la POO.

 

Comment faire une boucle OOP sur les objets et leurs propriétés ?

Par exemple, j'exécute une boucle comme suit

//Цикл по объектам в поиске нужного значения конкретного свойства.

for(int a1 = 0; a1 < obj_total; a1++)
  {
   if(G_CORE[a1][_X_SIZE] == THIS_SIZE)
     {
      G_CORE[a1][_this_state_color] = clrWhite;
      Redraw(a1);
     } 
  }

//Цикл по свойствам в поиске неверного значения

for(int a1 = 0; a1 < prop_total; a1++)
  {
   if(G_CORE[ELEMENT][a1] > Max_value)
     {
      G_CORE[ELEMENT][a1] = Max_value;
      Redraw(ELEMENT);
     } 
  }
 

Il est également intéressant de savoir comment créer une hiérarchie d'objets ou de groupes. Par exemple, il y a plusieurs catégories, chaque catégorie contient un groupe avec un nombre n d'objets. Quelles méthodes de construction de hiérarchies le concept de POO suggère-t-il ?

La mise en œuvre d'une hiérarchie doit permettre des transitions faciles entre ses parties et ses niveaux dans la boucle. Si vous construisez une hiérarchie à l'intérieur d'un tableau, vous vous retrouverez avec beaucoup d'espace vide. S'il est construit à partir d'un complexe de tableaux, il ne permettra pas de boucler librement les liens. Que suggère la POO ?

 
Реter Konow:

Comment faire une boucle OOP sur les objets et leurs propriétés ?

Par exemple, j'exécute une boucle comme suit

CObj obj[];
...
for (int i=0;i<ArraySize(obj);obj[i++].CheckSomething(param));
Ça donne quelque chose comme ça. Et à l'intérieur de la classe, dans la méthode CheckSomething(), toute la logique est mise en œuvre.
 
Vladimir Simakov:
Ça donne quelque chose comme ça. Et à l'intérieur de la classe, dans la méthode CheckSomething(), toute la logique est mise en œuvre.

Merci. D'abord, nous assemblons le tableau obj[] à partir des objets, puis nous faisons une boucle ?

Et qu'en est-il de la hiérarchie ? Et nous parlons de hiérarchie statique. Constant et immuable.

 
Реter Konow:

Merci. D'abord, nous assemblons le tableau obj[] à partir des objets, puis nous faisons une boucle ?

Et qu'en est-il de la hiérarchie ? Nous parlons d'une hiérarchie statique. Constant et immuable.

class Class1{
...
};

class Class2{
...
};

class Class3{
   Class1 class1;
   Class2 class2;
...
};
 
Vladimir Simakov:
Nous créons donc une hiérarchie de classes, puis nous rassemblons tous leurs objets dans une classe distincte et nous les parcourons en boucle ?
 
Реter Konow:
Nous créons donc une hiérarchie de classes, puis nous rassemblons tous leurs objets dans une classe distincte et nous les parcourons en boucle ?

Cela dépend de ce dont vous avez besoin, mais en principe de cette façon. Vous convenez que c'est beaucoup plus élégant que vos tableaux. Et étant donné que je soupçonne fortement que leurstableaux multidimensionnels ne sont pas réellement des tableaux, puisqu'ils ne peuvent pas être passés dans une dll, l'overhead des appels de fonction pourrait bien être le même.

 
Реter Konow:

Comment boucler sur les objets et leurs propriétés en POO?

L'étiquette est Konow:
et à travers eux faire une boucle à travers tous les liens ?

Utilisez une terminologie commune, non seulement vous pourrez induire l'autre personne en erreur avec votre question, mais vous serez sûr que votre question trouvera une réponse.

OOP Wiki - termes ici.

pour votre information, vous pouvez faire des tableaux d'instances d'objets (voir ci-dessus) ou regarder les sources WndContainer.mqh et ArrayObj.mqh , elles sont utilisées pour créer des panneaux graphiques basés sur CPanelDialog (voir ndicators\Examples\Panels\SimplePanel pour un exemple prêt), mais elles fonctionnent avec des pointeurs et des listes

 
Vladimir Simakov:

Cela dépend de ce que vous recherchez, mais en principe, c'est comme ça. Vous convenez que c'est beaucoup plus élégant que vos tableaux. Et étant donné que je soupçonne fortement que leurs tableaux multidimensionnels ne sont pas réellement des tableaux, puisqu'ils ne peuvent pas être passés dans une dll, l'overhead des appels de fonction pourrait bien être le même.

Eh bien, peut-être plus élégamment, je ne discuterai pas. Je suis très soucieux de l'aspect pratique, de l'opportunité, de la simplicité et de la commodité, et je considère toute syntaxe comme "l'ennemi du peuple", car elle requiert de l'attention, de l'analyse, génère des erreurs et entrave la perception. C'est pourquoi j'essaie d'utiliser des constructions de code aussi simples et même primitives que possible. L'essentiel est qu'ils soient faciles à lire et efficaces.

Bien sûr, il y a un hic dans la hiérarchie. Si nous le faisions dans un tableau, les boucles offriraient plus d'opportunités pour analyser les liens, les groupes, les sous-groupes, les sous-sous-groupes, etc... Mais la mémoire sera utilisée de manière inefficace. Si nous utilisons des classes, cela semble être une solution idéale. Mais c'est pour une hiérarchie "morte". Pour une image. Mais si nous devons créer un moteur qui fonctionne avec lui, j'ai peur qu'ici tout l'enfer se déchaîne)).

 
Реter Konow:

Merci. D'abord, nous assemblons le tableau obj[] à partir des objets, puis nous faisons une boucle ?

Et qu'en est-il de la hiérarchie ? Nous parlons d'une hiérarchie statique. Constant et immuable.

Expliquez ce que vous entendez par "...C'est une hiérarchie statique. Constant et immuable" ?
 
Igor Makanu:

Utilisez une terminologie commune, vous risquez non seulement d'embrouiller votre interlocuteur avec votre question, mais vous aurez la certitude qu'il a répondu à votre question.

OOP Wiki - termes ici.

pour un sujet donné, vous pouvez faire des tableaux d'instances d'objets (voir les réponses ci-dessus) ou regarder les sources WndContainer.mqh et ArrayObj.mqh , elles sont utilisées pour créer des panneaux basés sur CPanelDialog (vous pouvez trouver un exemple prêt dans le dossier ndicators\Examples\Panels\SimplePanel ), mais elles fonctionnent avec des pointeurs et des listes

Dans la POO, le terme "objet" désigne une référence à une classe dans laquelle ses champs (propriétés) sont déclarés. Par "objet", j'entends un ensemble numéroté de propriétés, chacune d'entre elles étant une cellule d'un tableau. C'est là toute la différence.

Les questions ne sont pas liées au sujet des interfaces graphiques. J'ai depuis longtemps contourné les bibliothèques graphiques et je n'ai rien à y chercher. Mais, maintenant, je m'intéresse à l'IA, qui soulève de nouveaux défis et de nouvelles questions.

Raison: