OOP vs. programación procedimental

 
Los comentarios no relacionados con el "proyecto EA" se han trasladado a este tema.
 

No quiero crear un coro aquí, pero me pregunto si los partidarios de la POO pueden presentar algún código que resuelva un problema, que demuestre claramente que esta solución es más eficiente que una solución sin POO.


Soy un maestro en resolver problemas sin POO y me gustaría pelearme con un maestro en resolver problemas con POO.

 
Реter Konow:

No quiero crear un coro aquí, pero me pregunto si los partidarios de la POO pueden presentar algún código que resuelva un problema, que demuestre claramente que esta solución es más eficiente que una solución sin POO.

Soy un solucionador de problemas sin POO y me gustaría luchar contra un solucionador de problemas con POO.

No se trata de una plataforma en la que se pueda reproducir la comparación: el programa es de una sola página (un solo archivo). Aquí puedes escribir como quieras y el rendimiento y el acceso al programa se mantendrán casi al mismo nivel. Aunque es posible meter la pata en cualquier estilo de escritura, procedimental u OOP.

 
Vitaly Muzichenko:

No se trata de una plataforma en la que se pueda reproducir la comparación: el programa es de una sola página (un solo archivo). Aquí puedes escribir como quieras, y el rendimiento y el acceso al programa se mantendrán casi al mismo nivel. Aunque se puede meter la pata en cualquier estilo de programación: procedimental u OOP.

No te entiendo muy bien. ¿Qué quiere decir con "un programa de una página"? Simplemente puede comparar dos enfoques diferentes para resolver una tarea. A la hora de comparar, debemos estimar cada solución según los criterios principales: la solución en sí, la compacidad del código y la legibilidad del código.


Estos son los principales criterios en la programación.

Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым...
 
Реter Konow:

Escribir enormes bloques de código que ocupan cientos de líneas. Casi sin comentarios. No hay OOP. Código en ruso. Todo funciona de manera muy eficiente. No tengo ningún problema de orientación en el programa, aunque hay unos 100 archivos conectados a él. Probablemente porque me he acostumbrado a ello y lo recuerdo todo desde hace mucho tiempo. Lo principal es conocer y entender su programa, todo lo demás es secundario. Yo creo que sí.

Podemos discutir sobre la "eficiencia" del trabajo.

Lo mismo se aplica a la modificabilidad: si su código se va a utilizar en presupuestos de distinta precisión, ¿habrá que modificarlo y será fácil hacerlo?

El principal problema en este tipo de proyectos es la realización de cambios. Como muestra la práctica, cuanto más grandes sean los bloques, más probable será que se introduzcan errores durante la modificación. La falta de comentarios es una desventaja, no una ventaja. Por eso hay que recordar muchas cosas.

 
Реter Konow:

No quiero crear un coro aquí, pero me pregunto si los partidarios de la POO pueden presentar algún código que resuelva un problema, donde se vea claramente que esta solución es más eficiente que una solución sin POO.

Soy un maestro en la resolución de problemas sin POO y me gustaría luchar contra un maestro en la resolución de problemas con POO.

Ya he presentado dicho código más arriba. Existe una interfaz totalmente virtual en la que se maneja el historial de operaciones. El mismo sistema se utiliza en mi trabajo con el puesto actual y en otros lugares similares.

Es debido a OOP que tenemos la unidad completa de MT4 y MT5, y en MT5 funciona independientemente de si es la cobertura o la compensación.

Además, precisamente debido a la OOP que tengo, dentro de un EA puedo utilizar fácilmente varias TS, diferentes en sus magias.

De hecho, la POO se inventó para simplificar el soporte del código. Al mismo tiempo, hay que pagar un gran coste durante la redacción. Si escribes código, lo utilizas sin modificaciones y luego lo eliminas, no tiene sentido molestarse con la POO. La programación orientada a objetos (OOP) ofrece una ventaja precisamente cuando se requiere el mismo código en muchos lugares y periódicamente hay que modificarlo.

En consecuencia, el alcance de la aplicación y la no aplicación de la POO está determinado por la necesidad de mantenimiento y cambios del código.

 
George Merts:

Se podría discutir sobre la "eficiencia".

Lo mismo ocurre con la modificabilidad: si tu código se va a utilizar en presupuestos de distinta precisión, ¿requerirá cambios y será fácil hacerlos?

El principal problema en este tipo de proyectos es la realización de cambios. Como muestra la práctica, cuanto más grandes sean los bloques, más probable será que se introduzcan errores durante la modificación. La falta de comentarios es una desventaja, no una ventaja. Por eso hay que recordar muchas cosas.

La versatilidad de los bloques es otro criterio de evaluación. Por supuesto, un bloque debe ser utilizable para una amplia gama de tareas y fácilmente adaptable a las condiciones cambiantes. Esto es exactamente lo que tengo. Por ejemplo, yo utilizo la tecnología llamada "focus". Es decir, los valores de los parámetros principales se fijan en variables globales todo el tiempo, y estas variables y ponen en todos los bloques.

 
Tenemos que comparar en la práctica. De lo contrario, es una discusión inútil.
 
Реter Konow:

La versatilidad de los bloques es otro criterio de evaluación. Ciertamente, un bloque debe ser utilizable para una amplia gama de tareas y fácilmente adaptable a las condiciones cambiantes. Esto es exactamente lo que tengo. Por ejemplo, yo utilizo la tecnología llamada "focus". Es decir, los valores de los parámetros principales se fijan en variables globales todo el tiempo, y estas variables y ponen en todos los bloques.

Me temo que las variables globales también son una desventaja. Debe haber el menor número posible de variables globales disponibles en todos los bloques. Sólo para que cada bloque reciba sólo los datos que necesita, y siempre que sea posible - sólo en forma constante, para que no haya posibilidad de cambiar lo que no debe cambiar.

Las únicas dos variables globales en mis proyectos son el objeto de clase CExpert, cuyas funciones encapsulan la funcionalidad de Init(), OnTick() y otros eventos, y el objeto CLogFile - un archivo de registro, que da salida al trazado, porque las macros de trazado deben trabajar desde cualquier lugar del programa.

En mi opinión, confiar en la memoria no es la mejor solución, al menos, porque como dijo Sherlock Holmes, en algún momento el conocimiento necesario quedará enterrado bajo el montón de basura innecesaria. Y la memoria también puede fallar.

 
George Merts:

Me temo que las variables globales también son una desventaja. Debe haber el menor número posible de variables globales disponibles en todos los bloques. Sólo para garantizar que cada bloque reciba sólo los datos que necesita, y siempre que sea posible, sólo en forma constante, para que no haya manera de cambiar algo que no se supone que cambie.

Las únicas dos variables globales en mis proyectos son el objeto de clase CExpert, cuyas funciones encapsulan la funcionalidad de Init(), OnTick() y otros eventos, y el objeto CLogFile - un archivo de registro que da salida al trazado, porque las macros de trazado tienen que trabajar desde cualquier lugar de un programa.

Confiar en la memoria no es la mejor solución, al menos porque, como decía Sherlock Holmes, en algún momento los conocimientos necesarios quedarán enterrados bajo un montón de basura innecesaria. Y la memoria también puede fallar.

Detrás de todos estos términos y código OOP no puedo ver la tarea que estabas resolviendo. ¿Cuál era su esencia? Por favor, descríbalo y le ofreceré mi solución. Entonces podemos compararlos según todos los criterios posibles.
 
Реter Konow:
Hay que compararlo en la práctica. De lo contrario, esta es una discusión inútil.

¿Por qué "inútil"? Muy útil.

Pero, ¿cómo podemos comparar la "facilidad de apoyo" en la práctica?

Digamos que un código escrito como un bloque enorme y un código dividido en partes funcionales - la introducción de cambios en ambos casos es absolutamente la misma. La única diferencia es que en el primer caso uno debe recordar todos los enlaces que serán afectados por la modificación y tenerlos en cuenta. En el segundo caso, como la unidad sólo tiene acceso a los enlaces que necesita para trabajar, la modificación afectará a todos los enlaces disponibles. No es necesario recordar nada: ajuste sistemáticamente todo lo que está disponible para el bloque que desea modificar.

¿Así es como se evalúa la diferencia aquí? La cantidad de trabajo es exactamente la misma.

Razón de la queja: