Una pregunta para los expertos en POO. - página 17

 
Vladimir Simakov:
Me refiero al número de clases. Cada una tiene 200 líneas.
¿Cuánto más difícil sería el acceso? Tengo un núcleo global que es visible desde todas partes. En OOP tendría que renunciar a ello. ¿Cómo trabajaría entonces con los elementos en windows? Me pongo en coma cuando trato de imaginarlo)).
 
Реter Konow:
¿Cuánto más difícil sería el acceso? Tengo un núcleo global que es visible desde todas partes. En OOP tendría que renunciar a ello. ¿Cómo trabajaría entonces con los elementos en windows? Me pongo en coma cuando trato de imaginarlo)).

Clase estática.

 

Vladimir Simakov:
А теперь к эффективности. Switch - это что в конечном итоге? Это последовательное сравнение параметра с константами. Внимание Петр, последовательное.

no es necesario en absoluto.

Esto no significa que Pedro tenga razón o que el interruptor deba ponerse en todas partes, pero sin embargo.

 
Alexey Navoykov:
Sí, así es,así que en términos de velocidad, es obviamente la opción más rápida en MQL. Pero el acceso alos objetos de clase en el entorno gestionado es indirecto.
Gracias por este breve resumen. Retiro lo que dije sobre el cambio.
 
Georgiy Merts:

Así es, más sobre esta función. Tienes un interruptor de tamaño monstruoso que selecciona una de una docena de funciones necesarias. En un cambio de este tipo, es muy fácil cometer un error escribiendo accidentalmente código relacionado con una de las ramas en el lugar equivocado.

Las cosas son mucho más sencillas con una sobrecarga. Tenemos diez descendientes diferentes, y cada vez trabajamos con UNA clase, y tiene UNA función sobrecargable. No podemos escribirlo accidentalmente en otra clase, porque tenemos que abrir un archivo completamente diferente para ello.

Además, el análisis en sí mismo de este enorme interruptor es, en mi opinión, mucho más estresante que abrir la única clase que necesitamos y luego analizar sólo una función.

De hecho, en el código ensamblador todo el manejo de este interruptor se reduce de todos modos al mismo swich, dependiendo de este puntero. Pero en el caso de la POO todo esto queda oculto al programador y no interfiere en su trabajo. Sin OOP - tienes que lidiar con ello.

A grandes rasgos, cuando caminas, acabas enviando señales a tus músculos en una determinada secuencia que los mueve. Sin embargo, en el nivel de la conciencia - sólo recuerdas qué movimiento hacer. Aquí, la OOP es exactamente ese tipo de "memoria de qué movimiento hacer". Usted "no entiende por qué necesitamos recordar el movimiento cuando tenemos un montón de músculos, y los nervios conectados a ellos". bueno... Ya he dicho muchas veces que, para los titanes de la memorización, basta con recordar qué músculos hay que tensar y en qué secuencia. No tiene sentido recordar todo el movimiento. Para otros, que no pueden recordar tanto, es mucho más razonable recordar todo el movimiento, y lo que ocurre con los músculos, en qué secuencia se tensan y en qué medida - es más razonable ocultarlo a la mente.

Las funciones sobrecargadas son simplemente funciones diferentes para el compilador, y sin interrupciones.

 
Реter Konow:
¿Cuánto más difícil sería el acceso? Tengo un núcleo global que es visible desde todas partes. En OOP tendría que renunciar a ello. ¿Cómo trabajaría entonces con los elementos en windows? Me pongo en coma cuando trato de imaginarlo)).

¿Por qué?

El núcleo global y la POO no son mutuamente excluyentes.

Sólo los elementos de las ventanas deberían estar encapsulados dentro de las clases de las ventanas, no "a la vista". Sólo para que nadie pueda "equivocarse de lugar" accidentalmente. Cambiar una variable y equivocarse en su ubicación dentro de una enorme matriz global es muy fácil, mientras que es mucho más difícil consultar la interfaz correcta y luego cambiar la misma variable en el objeto correcto y equivocarse.

 
Koldun Zloy:

Las funciones sobrecargadas son simplemente funciones diferentes para el compilador, y no hay interruptor.

¿Y cómo se selecciona el que se necesita? Estamos hablando de funciones virtuales y de late binding. ¿Qué función sobrecargada será llamada? Esto viene determinado por el puntero this, que se pasa implícitamente cuando se llama. ¿Y cómo cree que se hace esta elección?

 
Georgiy Merts:

¿Y cómo se selecciona el que queremos? Hablamos de funciones virtuales y de late binding. ¿Qué función sobrecargada será llamada? Esto se determina por el puntero this, que se pasa implícitamente en la llamada. ¿Y cómo cree que se hace esta elección?

En realidad, Peter no hablaba de funciones virtuales.

Pero tampoco tienen interruptores.

Una clase que tiene funciones virtuales tiene una tabla de funciones virtuales.

Y cada objeto de esta clase contiene una variable implícita: un puntero a la tabla de funciones virtuales.

Si una o todas las funciones virtuales son sobrescritas en el descendiente, se crea una nueva tabla y las instancias descendientes contienen un puntero a la misma.

 
Koldun Zloy:

En realidad, Peter no hablaba de funciones virtuales.

Pero tampoco tienen interruptores.

Una clase que tiene funciones virtuales tiene una tabla de funciones virtuales.

Y cada objeto de esta clase contiene una variable implícita: un puntero a la tabla de funciones virtuales.

Si una o todas las funciones virtuales son anuladas en el descendiente, se crea una nueva tabla y las instancias del descendiente contienen un puntero a ella.

Exactamente. Pregunto, ¿cómo funciona esta misma tabla? En código ensamblador, es el mismo interruptor.

Y lo de "no hablar de funciones virtuales" es algo así como "por qué OOP"... Es decir, se trata de funciones virtuales, y no de simples nombres de funciones idénticas con diferentes argumentos.

 
Georgiy Merts:

Exactamente. Así que mi pregunta es: ¿cómo funciona esta misma tabla? En código ensamblador es el mismo interruptor.

No. Es sólo una matriz de punteros a una función.

El código de ensamblaje toma una dirección de tabla del objeto.

Toma la dirección de la función en una posición determinada.

Y se hace un salto a esa dirección.

Y lo de "no me refería a las funciones virtuales", a eso me refería con lo de "por qué OOP"... Es decir, se trata de funciones virtuales, no sólo de nombres de función idénticos con argumentos diferentes.

A juzgar por su pregunta, se refería a funciones con nombres idénticos.

Lo más probable es que ni siquiera conozca las funciones virtuales.