Una pregunta para los expertos en POO.

 

¿Cómo se hace un bucle OOP sobre los objetos y sus propiedades?

Por ejemplo, ejecuto un bucle como el siguiente

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

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

Otra cosa interesante es cómo crear una jerarquía de objetos o grupos. Por ejemplo, hay varias categorías, cada una de las cuales contiene un grupo con un número n de objetos. ¿Qué métodos de construcción de jerarquías sugiere el concepto OOP?

Una implementación de una jerarquía debe proporcionar transiciones fáciles entre sus partes y niveles en el bucle. Si construyes una jerarquía dentro de un array, te quedará mucho espacio vacío. Si se construye a partir de un complejo de matrices, no permitirá realizar un bucle libre a través de los enlaces. ¿Qué sugiere la OOP?

 
Реter Konow:

¿Cómo se hace un bucle OOP sobre los objetos y sus propiedades?

Por ejemplo, ejecuto un bucle como el siguiente

CObj obj[];
...
for (int i=0;i<ArraySize(obj);obj[i++].CheckSomething(param));
Es algo así. Y dentro de la clase, en el método CheckSomething(), se implementa toda la lógica.
 
Vladimir Simakov:
Es algo así. Y dentro de la clase, en el método CheckSomething(), se implementa toda la lógica.

Gracias. Primero montamos el array obj[] a partir de los objetos y luego hacemos un bucle?

¿Y qué pasa con la jerarquía? Y estamos hablando de jerarquía estática. Constante e inmutable.

 
Реter Konow:

Gracias. Primero ensamblamos el array obj[] de objetos y luego hacemos un bucle?

¿Y qué pasa con la jerarquía? Estamos hablando de una jerarquía estática. Constante e inmutable.

class Class1{
...
};

class Class2{
...
};

class Class3{
   Class1 class1;
   Class2 class2;
...
};
 
Vladimir Simakov:
¿Así que creamos una jerarquía de clases y luego recogemos todos sus objetos en una clase separada y hacemos un bucle a través de ellos?
 
Реter Konow:
¿Así que creamos una jerarquía de clases y luego recogemos todos sus objetos en una clase separada y hacemos un bucle a través de ellos?

Depende de lo que necesites, pero en principio es así. Está de acuerdo en que es mucho más elegante que sus matrices. Y dada mi fuerte sospecha de que susarrays multidimensionales no son en realidad arrays, ya que no pueden pasarse a una dll, la sobrecarga de las llamadas a funciones puede ser la misma.

 
Реter Konow:

¿Cómo se hace un bucle sobre los objetos y sus propiedades en POO?

La etiqueta es Konow:
y a través de ellos hacer un bucle a través de todos los enlaces?

Utiliza una terminología común, no sólo puedes despistar a la otra persona con tu pregunta, sino que te asegurarás de que tu pregunta sea respondida

OOP Wiki - términos aquí.

para tu información, puedes hacer arrays de instancias de objetos (ver arriba) o mirar las fuentes WndContainer.mqh y ArrayObj.mqh , se usan para crear paneles gráficos basados en CPanelDialog (ver ndicators\examples\Panels\SimplePanel para un ejemplo listo), pero trabajan con punteros y listas

 
Vladimir Simakov:

Depende de lo que busques, pero en principio es así. Está de acuerdo en que es mucho más elegante que sus matrices. Y dada mi fuerte sospecha de que sus arrays multidimensionales no son en realidad arrays, ya que no pueden pasarse a una dll, la sobrecarga de las llamadas a funciones puede ser la misma.

Bueno, tal vez más elegante, no voy a discutir. Me preocupa mucho la practicidad, la conveniencia, la sencillez y la comodidad, y considero que cualquier sintaxis es "el enemigo del pueblo", porque requiere atención, parsing, genera errores y dificulta la percepción. Por eso intento utilizar construcciones de código lo más sencillas e incluso primitivas posibles. Lo principal es que sean fáciles de leer y eficaces.

Por supuesto, hay un inconveniente en la jerarquía. Si lo hiciéramos en una matriz, los bucles proporcionarían más oportunidades para analizar enlaces, grupos, subgrupos, sub-subgrupos, etc. Pero la memoria se utilizará de forma ineficiente. Si usamos clases, parece ser una solución ideal. Pero es para una jerarquía "muerta". Para una imagen. Pero si tenemos que crear un motor que funcione con él, me temo que aquí se desatará el infierno)).

 
Реter Konow:

Gracias. Primero ensamblamos el array obj[] de objetos y luego hacemos un bucle?

¿Y qué pasa con la jerarquía? Estamos hablando de una jerarquía estática. Constante e inmutable.

Explique lo que quiere decir con "...Es una jerarquía estática. ¿"Constante e inmutable"?
 
Igor Makanu:

Utiliza una terminología común, no sólo puedes confundir a la otra persona con tu pregunta, sino que estarás seguro de que tu pregunta ha sido respondida.

OOP Wiki - términos aquí.

para un tema determinado, puede hacer matrices de instancias de objetos (ver las respuestas anteriores) o mirar las fuentes WndContainer.mqh y ArrayObj.mqh , se utilizan para crear paneles gráficos basados en CPanelDialog (puede encontrar un ejemplo listo en la carpeta ndicators\Examples\Panels\SimplePanel ), pero trabajan con punteros y listas

En POO, "objeto" significa una referencia a una clase en la que se declaran sus campos (propiedades). Por "objeto" me refiero a un conjunto numerado de propiedades, cada una de las cuales es una celda de una matriz. Esa es la diferencia.

Las preguntas no están relacionadas con el tema de las interfaces gráficas. Hace tiempo que pasé por alto las bibliotecas gráficas y no tengo nada que buscar allí. Pero ahora me interesa la IA, que plantea nuevos retos y preguntas.