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

 
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 hay con los músculos, en qué secuencia se tensan y en qué medida - es más razonable ocultarlo a la mente.

Sí, George, tus argumentos son razonables y lógicos. De hecho, mi enfoque requiere que recuerdes y conozcas todo en tu programa. Esto es bueno y malo a la vez. Bueno, porque conocer asegura un rápido desarrollo de código y soluciones, poca sintaxis y mucha funcionalidad, y malo, porque no se prevé la portabilidad de partes de código a otros programas debido a la interconexión global de todos los bloques.

Al fin y al cabo, nuestro lenguaje hablado también utiliza la memoria global. Conocemos y recordamos todas las palabras y no sólo las que pertenecen al tema de conversación actual. Todo está revuelto en nuestras mentes. Así es como funciona la Mente, y así es como funciona mi enfoque. Todos los resultados más importantes de los bloques funcionales están disponibles de forma universal. Y así, dentro de ellos hay una terminología casi humana. Hablo en código, como un lenguaje normal. Es muy conveniente. Pero hay mucho que recordar. Es cierto.


ZS. Por cierto, el interruptor gigante se puede descomponer en archivos y ocultar su contenido. Es conveniente para mí ver todo el asunto.

 
Vict:

Tinny, estás haciendo una especie de construcción de bicicletas sin un estudio adecuado del enfoque convencional. Peter, busca un buen libro, quizás Stroustrup, en algún libro escribió un editor de texto, aprenderás algo de un problema real, no recuerdo el contenido, pero es poco probable que te enseñe cosas malas.

Gracias, por supuesto. Pero es poco probable que las tareas específicas puedan abrirme los ojos a algo, porque he resuelto infinidad de ellas en los últimos 6 años. Una verdadera miríada. Así que sé de lo que hablo.
 
Ahora a la eficiencia. ¿Cambiar es, en definitiva, qué? Se trata de una comparación secuencial de un parámetro con constantes. Atención, Peter, secuencial. Es decir, si la constante buscada es 100500, entonces se harán todas estas comparaciones en el procesador. Qué son las funciones/métodos sobrecargados - son bloques de código completamente diferentes en el código máquina después de la compilación, con sus propios puntos de entrada. Entonces, ¿qué es más eficiente?
 
Реter Konow:
Gracias, por supuesto. Pero es poco probable que las tareas específicas me abran los ojos a algo, ya que he resuelto una infinidad de ellas en los últimos 6 años. Una verdadera miríada. Así que sé de lo que hablo.

Hay un montón de tareas, y todavía no has entendido la utilidad de la sobrecarga. Imagina que una función de plantilla, sus argumentos pueden pasar por int, double o tipo usuario, y queremos encontrar un valor absoluto a través de abs(), ¿cómo podemos hacerlo sin sobrecargar?

Me gustaría ver sus muletas en torno a estas matrices cuando el proyecto crezca: simular rueda de coche -> coche con 4 buggies -> carretera con cien coches.

 
Vladimir Simakov:
Y ahora a la eficiencia. ¿El cambio es qué al final? Es una comparación secuencial de un parámetro con las constantes. Atención, Peter, secuencial.

No, el interruptor funciona de forma diferente. Es una tabla en la que el interruptor va directamente a la constante deseada. Esta es la diferencia esencial entre él y el bloque if.

 
Vladimir Simakov:
Y ahora a la eficiencia. ¿Cambiar es qué al final? Es una comparación secuencial de un parámetro con las constantes. Atención, Peter, secuencial. Es decir, si la constante buscada es 100500, entonces se harán todas estas comparaciones en el procesador. Qué son las funciones/métodos sobrecargados - son bloques de código completamente diferentes en el código máquina después de la compilación, con sus propios puntos de entrada. Entonces, ¿qué es más eficiente?

Por desgracia, la inevitable exageración. En esto pierdo, en lo otro gano.

Por ejemplo, la función con el interruptor gigante realiza el posicionamiento de objetos en elementos y elementos en ventanas. Calcula sus tamaños. Lo llamo una vez y todos los elementos y todos los objetos se colocan en sus posiciones según sus puntos de anclaje. Calcula sus tamaños y su posición en relación con los demás. Determina qué elementos deben estar ocultos, cuál es el tamaño de kanvas necesario... Una llamada es un trabajo enorme. El mismo bloque puede calcular el tamaño o la posición de un elemento de la ventana entre miles. Un bloque. La llamada es Object();

¿Cuántas clases y funciones tendría que escribir en POO para resolver tal número de tareas? Me da miedo imaginarlo.

 
Реter Konow:

Por desgracia, la inevitable exageración. En esto pierdo, en lo otro gano.

Por ejemplo: La misma función con un interruptor gigante realiza el posicionamiento de objetos en elementos y elementos en ventanas. Lo llamo una vez y todos los elementos y todos los objetos se colocan en sus posiciones según sus ataduras. Se calculan sus tamaños y posiciones. Se determina qué elementos deben estar ocultos, cuál es el tamaño del kanvas requerido, etc... Una llamada es un trabajo enorme. El mismo bloque puede calcular el tamaño o la posición de un elemento de la ventana entre miles. Un bloque.

¿Cuántas clases y funciones tendría que escribir en POO para resolver tal número de tareas? Me da miedo imaginarlo.

Alrededor de 5-10, en una estimación aproximada. Con una interfaz completamente autoexplicativa.
 
Me refiero al número de clases. Cada una tiene 200 líneas.
 
Ihor Herasko:

No, el interruptor funciona de forma diferente. Es una tabla en la que el interruptor va directamente a la constante deseada. Esta es la diferencia esencial entre él y el bloque if.

Así que, en términos de velocidad, esta es obviamente la opción más rápida en MQL. Pero el acceso alos objetos de clase en el entorno gestionado es indirecto.
 
Реter Konow:

Hacemos una función sin parámetros, escribimos todos los cálculos de la función sobrecargada dentro, hacemos las variables globales y tenemos acceso a los resultados de cualquier otra función. Bueno, es una belleza, ¿no?

Sí, está bien... Deberíamos ponerlo en la rama de "Humor". )
Razón de la queja: