Attualmente sto lavorando su un codice di fisica computazionale in Fortran. In sintesi, il codice esegue le seguenti operazioni:
- Inizializza
- Ciclo fino al completamento
- Soluzione avanzata nel tempo
- Forse scrivi l'output
Vogliamo supportare diversi moduli di fisica, che risolvono equazioni diverse. Sto pensando al seguente progetto, che si basa molto sui puntatori di funzione:
- Genera un modello per un modulo di fisica, che contiene le definizioni per le procedure che potrebbero essere richieste e memorizza i puntatori a queste procedure. Ad esempio, ci sarebbero delle routine per l'inizializzazione, il time stepping e la produzione di output speciali.
- Ogni modulo fisico definisce quindi le proprie procedure (e alcuni dati, che possono essere comodamente archiviati in un modulo Fortran)
- All'inizio del codice, viene attivato un modulo, che imposta i puntatori del modello alle procedure del modulo
La motivazione dietro l'approccio sopra è che cambiare i moduli richiede solo un singolo cambiamento nel codice (attivarne uno diverso) e che manteniamo il codice relativamente semplice (senza astrazioni complesse, eredità e altre caratteristiche orientate agli oggetti).
Questo sarebbe considerato un buon progetto per un codice non orientato agli oggetti?