Una domanda per gli esperti di OOP.

 

Come si fa un ciclo OOP sugli oggetti e le loro proprietà?

Per esempio, eseguo un ciclo come segue

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

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

Un'altra cosa interessante è come creare una gerarchia di oggetti o gruppi. Per esempio, ci sono diverse categorie, ogni categoria contiene un gruppo con n numero di oggetti. Quali metodi di costruzione delle gerarchie suggerisce il concetto di OOP?

Un'implementazione di una gerarchia dovrebbe fornire facili transizioni tra le sue parti e livelli nel ciclo. Se si costruisce una gerarchia all'interno di un array, si rimane con un sacco di spazio vuoto. Se è costruito a partire da un complesso di matrici, non permetterà di eseguire liberamente un ciclo attraverso i collegamenti. Cosa suggerisce OOP?

 
Реter Konow:

Come si fa un ciclo OOP sugli oggetti e le loro proprietà?

Per esempio, eseguo un ciclo come segue

CObj obj[];
...
for (int i=0;i<ArraySize(obj);obj[i++].CheckSomething(param));
Va più o meno così. E all'interno della classe, nel metodo CheckSomething(), tutta la logica è implementata.
 
Vladimir Simakov:
Va più o meno così. E all'interno della classe, nel metodo CheckSomething(), tutta la logica è implementata.

Grazie. Prima assembliamo l'array obj[] dagli oggetti e poi facciamo il ciclo?

E la gerarchia? E stiamo parlando di una gerarchia statica. Costante e immutabile.

 
Реter Konow:

Grazie. Prima assembliamo l'array obj[] dagli oggetti e poi facciamo un ciclo?

E la gerarchia? Stiamo parlando di una gerarchia statica. Costante e immutabile.

class Class1{
...
};

class Class2{
...
};

class Class3{
   Class1 class1;
   Class2 class2;
...
};
 
Vladimir Simakov:
Quindi creiamo una gerarchia di classi e poi raccogliamo tutti i loro oggetti in una classe separata e facciamo un ciclo attraverso di essi?
 
Реter Konow:
Quindi creiamo una gerarchia di classi e poi raccogliamo tutti i loro oggetti in una classe separata e facciamo un ciclo attraverso di essi?

Dipende da ciò di cui avete bisogno, ma in linea di massima in questo modo. Siete d'accordo che è molto più elegante dei vostri array. E dato il mio forte sospetto che i loroarray multidimensionali non siano affatto array, dato che non possono essere passati in una DLL, l'overhead delle chiamate di funzione potrebbe essere lo stesso.

 
Реter Konow:

Come si fa a fare un loop sugli oggetti e le loro proprietà in OOP?

L'etichetta è Konow:
e attraverso di loro fare un ciclo attraverso tutti i link?

Usa una terminologia comune, non solo puoi fuorviare l'altra persona con la tua domanda, ma sarai sicuro che la tua domanda avrà una risposta

OOP Wiki - termini qui.

per tua informazione, puoi fare array di istanze di oggetti (vedi sopra) o guardare i sorgenti WndContainer.mqh e ArrayObj.mqh , sono usati per creare pannelli grafici basati su CPanelDialog (vedi ndicators\Examples\Panels\SimplePanel per un esempio pronto), ma lavorano con puntatori e liste

 
Vladimir Simakov:

Dipende da ciò che si cerca, ma in linea di principio è così. Siete d'accordo che è molto più elegante dei vostri array. E dato il mio forte sospetto che i loro array multidimensionali non siano affatto array, dato che non possono essere passati in una DLL, l'overhead delle chiamate di funzione potrebbe essere lo stesso.

Beh, forse in modo più elegante, non voglio discutere. Mi interessa molto la praticità, la convenienza, la semplicità e la comodità, e guardo qualsiasi sintassi come "il nemico del popolo", perché richiede attenzione, parsing, genera errori e ostacola la percezione. Ecco perché cerco di usare costrutti di codice più semplici e anche primitivi possibile. La cosa principale è che devono essere facili da leggere ed efficaci.

Naturalmente, c'è un intoppo nella gerarchia. Se lo facessimo in un array, i cicli fornirebbero più opportunità per analizzare collegamenti, gruppi, sottogruppi, sottogruppi, ecc... Ma la memoria sarà usata in modo inefficiente. Se usiamo le classi, sembra essere una soluzione ideale. Ma è per una gerarchia "morta". Per un'immagine. Ma se dobbiamo creare un motore che funzioni con esso - ho paura che qui si scatenerà l'inferno)).

 
Реter Konow:

Grazie. Prima assembliamo l'array obj[] dagli oggetti e poi facciamo un ciclo?

E la gerarchia? Stiamo parlando di una gerarchia statica. Costante e immutabile.

Spiega cosa intendi con "...È una gerarchia statica. Costante e immutabile"?
 
Igor Makanu:

Usate una terminologia comune, non solo potrete confondere l'altra persona con la vostra domanda, ma sarete sicuri che la vostra domanda ha avuto una risposta.

OOP Wiki - termini qui.

per un dato argomento, si possono fare array di istanze di oggetti (vedi le risposte sopra) o guardare i sorgenti WndContainer.mqh e ArrayObj.mqh , sono usati per creare pannelli basati su CPanelDialog (puoi trovare un esempio pronto nella cartella ndicators\Examples\Panels\SimplePanel ), ma lavorano con puntatori e liste

In OOP "oggetto" significa un riferimento a una classe in cui sono dichiarati i suoi campi (proprietà). Per "oggetto" intendo un insieme numerato di proprietà, ognuna delle quali è una cella di un array. Questa è la differenza.

Le domande non sono legate al tema delle interfacce grafiche. Ho bypassato da tempo le librerie grafiche e non ho nulla da cercare lì. Ma ora sono interessato all'IA, che solleva nuove sfide e domande.

Motivazione: