Depende de dónde se encuentre en el ciclo de desarrollo, pero a veces al dibujar un algoritmo, desea hacer abstracciones sobre bloques complejos sin implementarlos de inmediato.
def full_algo():
init_stuff()
process_stuff()
...
Sabes cómo init_stuff
funcionará, es bastante simple en tu cabeza, pero realmente no lo necesitas de inmediato, por lo que lo declaras como una función vacía. Permitirá que su código se compile y se ejecute sin preocuparse por los detalles sangrientos.
Otro uso para las aplicaciones lanzadas es cuando se usa la herencia. Suponga que tiene una clase grande que define el comportamiento del código específico de la plataforma. Puede terminar con una lógica similar a esta:
init_filesystem();
access_files();
release_filesystem();
Este código funcionará en muchas plataformas, pero algunas plataformas pueden no necesitar la inicialización del sistema de archivos. Entonces su herencia se verá así (virtual con = 0 en C ++ solo significa que las clases derivadas DEBEN implementar esos métodos):
class FileSystem{
virtual void init_filesystem() = 0;
virtual void access_files() = 0;
virtual void release_filesystem() = 0;
};
Entonces, una implementación particular de esta clase (interfaz) podría no hacer nada para algunos de esos métodos. Alternativamente, la clase base podría declarar métodos vacíos para init / release en lugar de declararlos virtuales.
Finalmente (y vergonzosamente), a veces mantienes una aplicación muy antigua. Temes que eliminar métodos rompa las cosas. Esto sucede cuando tiene una herencia compleja que no se entiende correctamente o cuando tiene muchos punteros de función (devoluciones de llamada). Simplemente elimine el código dentro de ellos para que se les llame de todos modos sin romper nada.