OOP vs. programación procedimental - página 37

 
Andrei:

Una clase sólo tiene variables internas y no variables de entrada o salida... ¿Dónde has visto el uso en la programación de un objeto que no tiene contacto con el mundo exterior y que hierve en su propio jugo?


+100

 

La discusión me recuerda a un vídeo que los chicos mostraron hace poco :)


 
Andrei:

La clase sólo tiene variables internas y no tiene entrada y salida... ¿Dónde has visto el uso en programación de un objeto así, que no tiene contacto con el mundo exterior y se cocina en su propio jugo?

La clase tiene una interfaz a través de la cual interactúa con el mundo exterior. Nos permite cortar todas las cosas "innecesarias" que no están destinadas a los bloques externos.

Por ejemplo, en mi procesador de operaciones tengo variables, algunas destinadas a MT4, otras a MT5 y otras a ambas plataformas. Pero todas estas variables son absolutamente innecesarias para cualquier parte de mi TS. Respectivamente, no tienen acceso a ellos. Todas las partes de la ST reciben una interfaz virtual del procesador comercial, en la que sólo se definen las funciones necesarias para el funcionamiento de la ST, y se elimina todo lo irrelevante, todo lo que depende de la plataforma y lo "específico del comercio".

Lo mismo ocurre con una posición comercial: las partes de la ST no tienen acceso directo a una posición comercial. Sólo pueden obtener una interfaz virtual que permite contar el número de componentes comerciales abiertos, y los datos de cada componente. Pero el ST ni siquiera sabe con qué está tratando, si es una orden MT4 o una posición MT5. Todo esto se le oculta. El ST no debería tener acceso a las variables utilizadas para tratar las órdenes de MT4 o las posiciones de MT5, y no lo tiene.

 
George Merts:

La clase tiene una interfaz a través de la cual interactúa con el mundo exterior. Permite cortar todo lo "superfluo" que no está destinado a los bloques externos.

Aquí, en particular, en mi procesador de operaciones - tengo variables, algunas de las cuales son para MT4, otras para MT5, otras para ambas plataformas. Pero todas estas variables son absolutamente innecesarias para cualquier parte de mi TS. Respectivamente, no tienen acceso a ellos. Todas las partes de la ST reciben una interfaz virtual del procesador de operaciones, en la que sólo se definen las funciones necesarias para el funcionamiento de la ST, y se eliminan todas las cosas innecesarias, todas las que dependen de la plataforma y son "específicas del comercio".


Seamos muy concretos y pongamos un ejemplo muy claro.

1. cotier en la entrada

2. hay una orden de compra/venta en la salida.

3. La entrada se convierte en salida por la intersección de dos toallitas.

¿Cuáles son las OOP entre ellos y por qué?

 
СанСаныч Фоменко:

Explíquenlo a los metacitas: por qué escribieron enormes manuales para el terminal, para el lenguaje y en general, de dónde salió esta montaña de documentación para productos de software sobre, por ejemplo, Cp... De hecho, ¿hay algún producto de software sin documentación? Es extraño que no lo veas.


Desgraciadamente, estás mezclando las cosas de nuevo. El manual de un programa no es documentación. En el siglo pasado solían mantener la documentación y obedecían las normas estatales. Ahora no lo necesitamos todo. Ahora sólo tenemos los TdR. La documentación consiste ahora en casos de prueba e interfaces de clases. Por supuesto, las clases se nombran de tal manera que su solo nombre deja claro lo que hace y para qué se utiliza.

 
Ihor Herasko:

Lamentablemente, una vez más confunde los términos. Un manual de programa no es documentación. En el siglo pasado, había documentación, y seguían las GOST, etc. Ahora todo es innecesario. Lo único que queda es el TdR. La documentación consiste ahora en casos de prueba e interfaces de clases. Y, por supuesto, las clases se nombran de manera que podamos entender por sus nombres lo que hacen y para qué se utilizan.

La documentación se mantenía en el siglo pasado, obedecíamos las normas estatales, etc. Ahora todo es innecesario.

Aquí estoy absolutamente de acuerdo contigo, porque no escriben nada serio.

Siempre han existido los TdR. Pero tales programas simples cuyo algoritmo puede ser completamente definido en TT no fueron escritos en el siglo pasado e incluso ahora no son escritos por gente seria.

¿Qué significa "casos de prueba e interfaces de clase" cuando se desarrollan compiladores? ¿Cuando se programan algoritmos matemáticos?



PS.

Solía haber una rúbrica para los perles.

Esto está en él.

Un manual de programa no es documentación.

 
СанСаныч Фоменко:

Seamos concretos y muy claros con un ejemplo.

1. la entrada es un cociente

2. la salida es una orden de compra/venta.

3. La entrada se convierte en salida por la intersección de dos toallitas.

¿Cuáles son las OOP entre ellos y por qué?

Es muy sencillo.

Hay un generador de entrada. Solicita al Asesor Experto la interfaz del proveedor de datos, la interfaz de las posiciones comerciales y la interfaz del procesador de operaciones. A continuación, solicita al proveedor de datos las dos interfaces de las varillas.

Cuando se llama a OnTick() - se llama a la misma función desde el generador de entrada. El generador de entrada mira la interfaz de ondulación, compara su valor pasado. Si detecta un cruce, busca en la interfaz de la posición comercial. Si ve que no estamos en posición - llama a la interfaz del procesador de operaciones para la función de compra o venta. Si ve que hay una posición, si la posición está en la dirección requerida - no hacemos nada, si es lo contrario - llamamos a la función de cierre de posición en la interfaz de negociación y compramos o vendemos.

Hay que tener en cuenta que el generador no tiene acceso a ninguna variable, ni para el cálculo de los wipes, ni para obtener una posición comercial, ni para abrir órdenes en MT4 o posiciones en MT5. El proveedor de fechas sólo conoce las toallitas que se han solicitado. Los recalcula en cada tic y los actualiza. Nadie más lo sabe. Un procesador comercial - cumple exclusivamente las instrucciones que le llegan a través de la interfaz, y ni siquiera sabe de quién han venido. El Asesor Experto actualiza una posición comercial en cada tick y la entrega a la interfaz solicitada, sin estudiar quién la necesita y qué tiene dentro de este bloque. Todos los bloques están separados y se comunican exclusivamente a través de interfaces predefinidas.

 
СанСаныч Фоменко:

Seamos concretos y muy claros con un ejemplo.

1. la entrada es un cociente

2. la salida es una orden de compra/venta.

3. La entrada se convierte en salida por la intersección de dos toallitas.

¿Cuáles son las OOP entre ellos y por qué?

/// применение  ООП для элементарных задач (фактически весь код)

OnInit(){

Series FAST_MA=MA(...);

Series SLOW_MA=MA(...);

OnCrossUp(FAST_MA,SLOW_MA,Buy);

OnCrossDn(FAST_MA,SLOW_MA,Sell);

}

Pero es OOP en sí mismo dentro de las bibliotecas trabajadas - se hace para escribir fácil y sencillamente y al mismo tiempo para que todo sea depurado. Hay interfaces "la fuente de las cotizaciones" y "el ejecutor de las órdenes", "series de tiempo", "indicadores" y un montón de otras cosas... Pero este código corto está listo para las condiciones rigurosas del mercado real, con todas las fallas y asquerosidades

Con un movimiento fácil se puede tomar un cociente arbitrario (sintético) o ejecutarlo en otro símbolo... o simplemente comandar otro Asesor Experto (y esta es la ventaja de OOP, la complejidad en el interior, y el problema aplicado requiere poco esfuerzo).

 
George Merts:

Es muy sencillo.

Hay un generador de entrada. Solicita al Asesor Experto la interfaz del proveedor de datos, la interfaz de posiciones comerciales y la interfaz del procesador de operaciones. A continuación, se solicitan al proveedor de datos dos interfaces de vagones.

Cuando se llama a OnTick() - se llama a la misma función desde el generador de entrada. El generador de entrada mira la interfaz de ondulación, compara su valor pasado. Si detecta un cruce, busca en la interfaz de la posición comercial. Si ve que no estamos en posición - llama a la interfaz del procesador de operaciones para la función de compra o venta. Si ve que hay una posición, si la posición está en la dirección requerida - no hacemos nada, si es lo contrario - llamamos a la función de cierre de posición en la interfaz de negociación y compramos o vendemos.

Hay que tener en cuenta que el generador no tiene acceso a ninguna variable, ni para el cálculo de los wipes, ni para obtener una posición comercial, ni para abrir órdenes en MT4 o posiciones en MT5. El proveedor de fechas sólo conoce las toallitas que se han solicitado. Los recalcula en cada tic y los actualiza. Nadie más lo sabe. Un procesador comercial - cumple exclusivamente las instrucciones que le llegan a través de la interfaz, y ni siquiera sabe de quién han venido. El Asesor Experto - actualiza la posición comercial en cada tick y la entrega a la interfaz solicitada, sin estudiar quién la necesita y qué tiene dentro de este bloque. Todos los bloques están separados y se comunican únicamente a través de interfaces predefinidas.


¡Increíble!

Me preguntaba: ¿hay alguna otra posibilidad en la programación moderna para confundir el problema del nivel de los huevos de forma más abrupta?

 
Maxim Kuznetsov:

/// применение  ООП для элементарных задач (фактически весь код)

OnInit(){

Series FAST_MA=MA(...);

Series SLOW_MA=MA(...);

OnCrossUp(FAST_MA,SLOW_MA,Buy);

OnCrossDn(FAST_MA,SLOW_MA,Sell);

}

Pero la POO en sí está dentro de las librerías desarrolladas - está hecha para escribir fácil y sencillamente, y todo está afinado en eso. Hay interfaces de "fuente de cotización" y "ejecutor de órdenes", "series de tiempo", "indicadores" y un montón de otras cosas... Pero este código corto está listo para las condiciones reales del mercado, con todos los problemas y las molestias

Con un movimiento fácil puede tomar un cociente arbitrario (sintético) o ejecutarlo en otro símbolo... o simplemente ordenar a otro Asesor Experto (y esta es la ventaja de OOP, la complejidad en el interior, y el problema aplicado requiere poco esfuerzo).


MiOnInit() tiene el mismo aspecto - una docena de líneas...

¿Y qué?