OOP reduce rendimiento?

B

Hola! Estoy implementando un codigo para dibujar el conjunto de mandelbrot (tipico fractal). Mi duda es un poco chorra, pero a ver si me podeis ayudar. De momento tengo una clase 'Iterator' con los parametros (resolution, MAX_ITER) y el metodo Mandel(bool **Tx) que modifica una matriz de booleanos (1 si el punto esta en el conjunto de Mandelbrot, 0 ELSE).

Mi pregunta es, si en lugar de esto hago una funcion tipo C y la llamo desde el main en lugar de usar la clase, habra alguna diferencia de rendimiento? Tengo entendido que el compilador las funciones las mete inline pero las clases las considera aparte y por tanto hay mas llamadas. (En este caso la diferencia no es muy significativa seguramente, pero me refiero a en general).

Mi problema es que me resulta mas sencillo a la hora de hacer el prototipo usar clases y OOP, asi que me gustaria saber si una vez hecho es mejor que lo convierta en un caos de funciones y todo apretado o el compilador ya se encarga de eso.

Josepanaero

Mi recomendación sería que escribieses siempre código legible y mantenible. Si después notas que hay alguna parte de tu aplicación que va especialmente lenta, intenta optimizar dicha parte. No te pongas a optimizar prematuramente.

En cuanto a tu pregunta, la programación orientada a objetos es simplemente un paradigma de programación, en principio no tiene nada que ver con el rendimiento.

Quizá esta respuesta sea un poco genérica, pero como tampoco te has explayado mucho en tu post, pues no sé qué más responder. Si pudieses ser un poco más específico (¿qué lenguaje usas?, ¿puedes poner el pseudocódigo de las dos soluciones?, etc.), te podría intentar dar una respuesta algo más concreta.

Si no lo he entendido mal, creo que lo que preguntas es qué es más eficiente, si A o B:

A:

main
  // Inicialización de la matriz
  matriz = ...
  
miObjeto = new Iterator miObjeto.Mandel(matriz); endmain

B:

main
  // Inicialización de la matriz
  matriz = ...
  
Mandel(matriz) endmain
function Mandel(matriz) // Aquí va el mismo código que en la versión orientada a objetos endfunction

Si lo que estás preguntando es cuál de los dos escenarios anteriores es más rápido, la respuesta es que los dos son igual de rápidos.

¡Un saludo!

1 1 respuesta
B

#2 si exacto esa era mi pregunta, muchas gracias!

Y gracias por recordarme lo de no optimizar prematuramente, xD siempre lo hago y luego me acuerdo de pasar el profiler y descubro que me he tirado 2 h para una cosa que no importaba mucho xDD.

MTX_Anubis

Sinceramente, no te preocupes por el rendimiento de ese tipo a no ser que sean cosas críticas con tiempos de respuesta de microsegundos y sepas que de antemano que esa parte hay que optimizarla. La OOP genera cierto overhead que no vas a apreciar. Lo que si vas a notar seguramente es como incrementa el uso de memoria con la OOP.

Lo normal cuando una aplicación tiene un rendimiento muy malo es que sea por un mal diseño del algoritmo o de la propia aplicación.

1

Usuarios habituales