Preguntas sobre POO en MQL5 - página 2

 
Yuriy Asaulenko:
Bueno, eso es demasiado. El hombre es todo un OOP desde el principio. Al menos preparando una taza de café. ¿Por qué hay rupturas de patrones? En mi opinión, un sinsentido de profesores ineptos que trasladan sus problemas a los alumnos.
Léelo con atención. Eso es lo que estoy diciendo, una persona inicialmente establece y resuelve sus problemas en un estilo aproximado a la POO. Pero luego se le enseña la programación procedimental. Después se rompen los patrones porque se trata de programación procedimental (no OOP) que difiere mucho del pensamiento humano.
 
Vasiliy Sokolov:

La POO debe explicarse sin código y sin toda esa nomenclatura abstrusa como clases, objetos, punteros, etc. etc.

¿Cómo funciona la enseñanza de la programación clásica? Al principio, el estudiante intenta agonizar para pasar del pensamiento humano a los fundamentos de la programación (bucles, funciones, variables y otras cosas como ese "bagaje de conocimientos" necesario). Entonces, cuando el lío de funciones, variables y si forma alguna estructura más o menos ordenada, se le dice al alumno: "Mira: existe la POO. Olvida lo que te han enseñado antes y empieza a pensar de nuevo como un ser humano". Lo que sigue es una ruptura de plantillas, el "bagaje de conocimientos" recién obtenido con tanta dificultad se tira a la basura, y la persona se encuentra en algún lugar entre el cielo y la tierra. Naturalmente, esta "OLP" se recuerda entonces durante varios años como un mal sueño con escalofríos y dolor en las partes restantes del cerebro (las otras han sido abrasadas por el nuevo conocimiento).

No, afirmo categóricamente que no hay que aprender a programar. Por el contrario, es perjudicial y peligroso. En cambio, es necesario enseñar a pensar. Y con ello se produce un completo fracaso del método clásico de aprendizaje.

¿Escribirías un artículo
 
pako:
Escribe un artículo.
No lo hagas
 
pako:
Escribir un artículo

Tal vez. Pero Alexei podría explicar mejor la OLP.

 
Комбинатор:
No lo hagas.
¿Ya estás escribiendo?
 
no )
 
Комбинатор:
no )
Y no escribas :)
 
Vasiliy Sokolov:
Lee con atención. Eso es lo que estoy diciendo: una persona inicialmente establece y resuelve sus tareas en un estilo aproximado a la POO. Pero luego se le enseña la programación procedimental. Después se produce una ruptura de patrones porque se trata de programación procedimental (no OOP) que difiere mucho del pensamiento humano.

No veo nada malo en aprender de antemano la programación procedimental. Para aprender a escribir novelas, es conveniente empezar por aprender el alfabeto y la sintaxis habituales y aprender a leer y escribir.

En realidad, incluso programando sólo en C/Pascal, etc., ya estamos manipulando objetos sin conocer su estructura interna y funcionamiento. Queda por explicar que es un objeto, y luego enseñar a construir estos objetos.

 
Alexey Volchanskiy:

....

Pregunta:

Sugiere un tema sobre OOP en MQL5 durante 10 minutos, lo pondré en youtube, es decir, será útil para todos

------------------

Escriba todo lo que le interese, yo lo resolveré, intentaré satisfacer sus peticiones dentro de mi tiempo libre

Buena suerte ))

Ilumina tu trabajo con objetos.
 

Ayúdame a resolver un problema. Hay dos botones y una línea. Un botón, cuando se pulsa, pone la línea en modo de edición, y cuando se suelta, borra la línea. El segundo botón, al ser pulsado, fija la línea, y al ser pulsado, la devuelve al modo de edición. Cada botón puede cambiar el color y algunas otras propiedades del objeto Línea. El objeto "Línea" se define globalmente. ¿Es posible pasar una referencia al objeto "Línea" a cada botón inmediatamente después de crear los botones, de modo que cuando se manipule la variable de referencia dentro de los objetos "Botón", todos los cambios se recuerden en el objeto global "Línea"?

He esbozado un script simplificado a continuación, en lugar de pulsar un botón, es una función addition() que incrementa el contador del objeto "Line". Entiendo que se puede pasar el objeto "Línea" como argumento de una función por referencia, pero justo en la versión de trabajo, hay varias funciones de este tipo, por lo que me gustaría pasar la referencia al principio una vez. Es decir, ¿es posible hacer que Btn1.addition() o Btn2.addition() aumenten el gLine.count?

class CLine
{
    public:
          int   count;
                CLine(void){count=0;};
               ~CLine(void){};
};


class CMyButton
{
    private:   
    public:
                CLine m_Line;
                CMyButton(void){};
               ~CMyButton(void){};
              
                void bind(CLine &aLine) {m_Line = aLine;}
                void addition() {++m_Line.count;}
};




CMyButton  Btn1;
CMyButton  Btn2;

CLine gLine;

void OnStart()
{
   Btn1.bind(gLine);
   Btn2.bind(gLine);
   
   Print("Line.count=", gLine.count);
   Btn1.addition();
   Print("Line.count=", gLine.count, "  Btn1.m_Line.count=", Btn1.m_Line.count);
   Btn2.addition();
   Print("Line.count=", gLine.count, "  Btn2.m_Line.count=", Btn2.m_Line.count);
   Btn1.addition();
   Print("Line.count=", gLine.count, "  Btn1.m_Line.count=", Btn1.m_Line.count);
   Btn2.addition();
   Print("Line.count=", gLine.count, "  Btn2.m_Line.count=", Btn2.m_Line.count);
}

Esto es lo que tengo ahora mismo: