Si analizza il problema e si capisce cosa può costituire una soluzione (e cosa no)
Si progetta una serie di passi che risolvono il problema (algoritmo)
Si traducono i passi in istruzioni per il calcolatore seguendo la sintassi
Si valuta l’implementazione sui casi di test per capire se le istruzioni risolvono il problema
Come approcciare un problema?
Fase di analisi: Analisi del problema e comprensione approfondita
Controllare tutti i casi di test per vedere se ci sono casistiche particolari non descritte
Provare a darne una breve spiegazione in italiano
Capire cosa può costituire una soluzione al problema
Fase di definizione strutture dati e algoritmo꞉
Capire quali strutture dati sono appropriate per il problema
Capire quali sono le istruzioni per risolvere il problema (algoritmo)
Implementazione in python꞉
Rappresentazione dei dati
Scrivere l’algoritmo secondo sintassi e potenzialità di Python
Testing e debug di eventuali casi incorretti
Capire velocemente eventuali errori in maniera da isolare la parte di codice non corretta
Approccio bottom-up
Parto da piccoli sottoproblemi che ho localizzato nell’analisi e provo a scrivere piccole funzioni che risolvono questi sotto problemi
Mi assicuro che le funzioni siano corrette (debug oppure prova nell’interprete ipython)
Compongo le funzionalità al fine di risolvere il problema principale
Approccio top-down
Fornisco una descrizione del problema ad alto livello oppure pseudo‐codice (descrivo in italiano cosa devo fare)
Implemento l’infrastruttura globale (flusso del programma principale)
Creo funzioni placeholder che NON implementano la semantica ma sono dei segnaposti
Definisco l’interfaccia delle funzioni (parametri di ingresso e valore di ritorno) in maniera congruente al problema da risolvere
A questo punto ho il sistema che “esegue” da cima a fondo ma senza la logica corretta. Passo ad implementare la logica specifica di ogni funzione segnaposto