En respuesta a la respuesta de Aaronaught a la pregunta en:
¿No puedo usar todos los métodos estáticos?
¿No se usa menos memoria para un método estático? Tengo la impresión de que cada instancia de objeto lleva consigo su propia versión ejecutable de una función miembro no estática.
Independientemente de la cantidad de sobrecarga involucrada en llamar a un método estático, independientemente del mal diseño de OO y los posibles dolores de cabeza en el futuro, ¿no usa menos memoria en tiempo de ejecución?
Aquí hay un ejemplo:
Hago un vector de objetos con inicialización cero. Cada objeto contiene una pieza de datos (un triángulo que consta de nueve dobles). Cada objeto se rellena en secuencia a partir de los datos leídos de un archivo .stl. Solo se necesita un método estático. El diseño adecuado de OO dicta que un método que se ocupa directamente de los datos debe distribuirse a cada objeto. Aquí está la solución estándar de OO:
foreach(obj in vec) {
obj.readFromFile(fileName);
}
¡Cada obj lleva readFromFile
el código compilado junto con los datos!
La memoria es más preocupante que el rendimiento en este caso, y hay MUCHOS datos en un sistema restringido.
Soluciones:
- Método de espacio de nombres (ideal para C ++ pero no posible en Java)
- Un método estático en la clase de obj. El código ejecutable se mantiene en un lugar en tiempo de ejecución. Hay una pequeña sobrecarga para llamar al método.
- Una clase padre de la que se deriva obj, que contiene el método privado
readFromFile
. Llamada con lasuper.callPrivateMethod()
que llamareadFromFile
. Desordenado, y todavía algo de memoria en cada objeto. - Implemente
readFromFile
fuera del alcance de obj, de modo que en la clase vec o en la clase llamante. Esto, en mi opinión, rompe la encapsulación de datos.
Me doy cuenta de que para grandes cantidades de datos, un objeto explícito para cada triángulo no es el mejor enfoque. Este es solo un ejemplo.