Eine Frage an die OOP-Experten.

 

Wie führt man eine OOP-Schleife über Objekte und ihre Eigenschaften aus?

Ich führe zum Beispiel eine Schleife wie folgt aus

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

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);
     } 
  }
 

Interessant ist auch, wie man eine Hierarchie von Objekten oder Gruppen erstellen kann. Zum Beispiel gibt es mehrere Kategorien, jede Kategorie enthält eine Gruppe mit n Objekten. Welche Methoden zum Aufbau von Hierarchien schlägt das OOP-Konzept vor?

Eine Implementierung einer Hierarchie sollte einfache Übergänge zwischen ihren Teilen und Ebenen in der Schleife bieten. Wenn Sie eine Hierarchie innerhalb eines Arrays aufbauen, bleibt viel leerer Platz übrig. Wenn sie aus einem Komplex von Arrays aufgebaut ist, können die Links nicht frei durchlaufen werden. Was bedeutet OOP?

 
Реter Konow:

Wie führt man eine OOP-Schleife über Objekte und ihre Eigenschaften aus?

Ich führe zum Beispiel eine Schleife wie folgt aus

CObj obj[];
...
for (int i=0;i<ArraySize(obj);obj[i++].CheckSomething(param));
Es geht ungefähr so. Und innerhalb der Klasse, in der Methode CheckSomething(), wird die gesamte Logik implementiert.
 
Vladimir Simakov:
Es geht ungefähr so. Und innerhalb der Klasse, in der Methode CheckSomething(), wird die gesamte Logik implementiert.

Ich danke Ihnen. Zuerst stellen wir das Array obj[] aus Objekten zusammen und machen dann eine Schleife?

Und wie sieht es mit der Hierarchie aus? Und wir sprechen hier von einer statischen Hierarchie. Konstant und unveränderlich.

 
Реter Konow:

Ich danke Ihnen. Zuerst stellen wir das Array obj[] aus Objekten zusammen und machen dann eine Schleife?

Und wie sieht es mit der Hierarchie aus? Wir sprechen hier von einer statischen Hierarchie. Konstant und unveränderlich.

class Class1{
...
};

class Class2{
...
};

class Class3{
   Class1 class1;
   Class2 class2;
...
};
 
Vladimir Simakov:
Wir erstellen also eine Hierarchie von Klassen und sammeln dann alle ihre Objekte in einer separaten Klasse und durchlaufen sie in einer Schleife?
 
Реter Konow:
Wir erstellen also eine Hierarchie von Klassen und sammeln dann alle ihre Objekte in einer separaten Klasse und durchlaufen sie in einer Schleife?

Es hängt davon ab, was Sie brauchen, aber im Prinzip geht es so. Sie stimmen zu, dass dies viel eleganter ist als Ihre Arrays. Und da ich den starken Verdacht habe, dass ihremehrdimensionalen Arrays eigentlich gar keine Arrays sind, da sie nicht an eine DLL übergeben werden können, kann der Overhead der Funktionsaufrufe durchaus derselbe sein.

 
Реter Konow:

Wie kann man in OOP eine Schleife über Objekte und ihre Eigenschaften ziehen?

Der Tag heißt Konow:
und durch sie eine Schleife durch alle Links machen ?

Verwenden Sie eine gängige Terminologie. So können Sie nicht nur Ihr Gegenüber mit Ihrer Frage in die Irre führen, sondern auch sicher sein, dass Ihre Frage beantwortet wird.

OOP Wiki - Begriffe hier.

Zu Ihrer Information können Sie Arrays von Objektinstanzen erstellen (siehe oben) oder sich die Quellen WndContainer.mqh und ArrayObj.mqh ansehen. Sie werden verwendet, um grafische Panels auf der Grundlage von CPanelDialog zu erstellen (fertiges Beispiel im Ordner ndicators\Examples\Panels\SimplePanel ), aber sie arbeiten mit Zeigern und Listen

 
Vladimir Simakov:

Es kommt darauf an, was man will, aber im Prinzip ist es so. Sie stimmen zu, dass dies viel eleganter ist als Ihre Arrays. Und da ich den starken Verdacht habe, dass ihre mehrdimensionalen Arrays eigentlich gar keine Arrays sind, da sie nicht an eine DLL übergeben werden können, kann der Overhead von Funktionsaufrufen durchaus derselbe sein.

Nun, vielleicht ist es eleganter, ich werde nicht widersprechen. Ich bin sehr auf Praktikabilität, Zweckmäßigkeit, Einfachheit und Bequemlichkeit bedacht und betrachte jede Syntax als "Feind des Volkes", weil sie Aufmerksamkeit und Analyse erfordert, Fehler erzeugt und die Wahrnehmung behindert. Deshalb versuche ich, so einfache und sogar primitive Codekonstrukte wie möglich zu verwenden. Das Wichtigste ist, dass sie leicht zu lesen und effektiv sind.

Natürlich gibt es einen Haken in der Hierarchie. Wenn wir dies in einem Array tun würden, gäbe es in Schleifen mehr Möglichkeiten, Links, Gruppen, Untergruppen, Unter-Untergruppen usw. zu analysieren. Aber der Speicher wird ineffizient genutzt. Wenn wir Klassen verwenden, scheint dies eine ideale Lösung zu sein. Aber es geht um eine "tote" Hierarchie. Für ein Bild. Aber wenn wir eine Engine erstellen müssen, die damit arbeitet - ich fürchte, dass hier die ganze syntaktische Hölle losbrechen wird)).

 
Реter Konow:

Ich danke Ihnen. Zuerst stellen wir das Array obj[] aus Objekten zusammen und machen dann eine Schleife?

Und wie sieht es mit der Hierarchie aus? Wir sprechen hier von einer statischen Hierarchie. Konstant und unveränderlich.

Erklären Sie, was Sie mit "...Es handelt sich um eine statische Hierarchie" meinen. Konstant und unveränderlich"?
 
Igor Makanu:

Benutzen Sie die übliche Terminologie, so können Sie Ihr Gegenüber nicht nur mit Ihrer Frage verwirren, sondern auch sicher sein, dass Ihre Frage beantwortet wurde.

OOP Wiki - Begriffe hier.

für ein bestimmtes Thema, können Sie Arrays von Objektinstanzen (siehe die Antworten oben) oder schauen Sie sich die Quellen WndContainer.mqh und ArrayObj.mqh , sie werden verwendet, um Panels auf der Grundlage von CPanelDialog (Sie können ein fertiges Beispiel in den Ordner ndicators\Examples\Panels\SimplePanel finden), aber sie arbeiten mit Zeigern und Listen

In der OOP bedeutet "Objekt" einen Verweis auf eine Klasse, in der ihre Felder (Eigenschaften) deklariert sind. Mit "Objekt" meine ich einen nummerierten Satz von Eigenschaften, von denen jede eine Zelle in einem Array ist. Das ist der Unterschied.

Die Fragen stehen nicht im Zusammenhang mit dem Thema grafische Schnittstellen. Ich habe schon lange keine grafischen Bibliotheken mehr und habe dort nichts mehr zu suchen. Aber jetzt interessiere ich mich für KI, was neue Herausforderungen und Fragen aufwirft.