Tuesday, January 20, 2015

Alcune considerazioni su progettazione del software, moduli e classi

Nel momento in cui si iniziano a definire le linee progettuali di un software, si cerca anche di capire quali strumenti un linguaggio di programmazione mette a disposizione per assistere il programmatore nella costruzione del software stesso.

Gli esempi di codice che ho pubblicato finora sono sufficientemente piccoli da non richiedere una eccessiva strutturazione. Man mano che le dimensioni del progetto aumentano fino a diverse migliaia di linee di codice, se non abbiamo fatto una scelta iniziale corretta degli strumenti, siamo destinati a entrare in crisi. Una buona progettazione puo' proteggerci dal rischio di fallimento iniziale e da quelli futuri, quando si imporrà necessariamente un ammodernamento del software o una sua parziale riscrittura.

La prima cosa che dobbiamo fare è individuare le "aree" in cui il nostro software si muove: per un software astrologico, possiamo tentare di schematizzarle così:

  1. Area del tempo, del calendario, delle convenzioni locali
  2. Area del movimento dei pianeti, delle posizioni relative degli stessi, dei loro moti apparenti
  3. Area dello zodiaco, dell'eclittica e dell'equatore celeste, delle angolarità tra gli elementi del tema
  4. Area di ciò che non rientra necessariamente nelle prime tre

Cio' detto, si impone una prima separazione tra queste aree per creare una prima mappa del software e iniziarne lo sviluppo.

Cosa conviene utilizzare per il tempo? Sicuramente delle funzioni del tempo, che abbiano a che fare con la gestione dell'ora e della localizzazione temporale. Forse lo strumento più adatto è un modulo dedicato, fatto di definizioni di funzioni. In python un modulo è un file con estensione .py che si trova in una posizione rintracciabile dal programma principale, di solito nella stessa directory o in una sottodirectory. Ci basterà chiamare il modulo con un import, seguito dal nome del modulo senza estensione .py. Ogni funzione sarà accessibile chiamando il nome del modulo seguito da un punto e dal nome della funzione stessa.

Per i pianeti puo' valere forse la pena di considerarli come oggetti, istanze di un prototipo comune definito attraverso una classe. In questo modo potremo creare tanti oggetti quanti sono i pianeti (e altri componenti del tema) per legare in un insieme unico proprietà e metodi, cioè variabili di classe o di istanza (ne parleremo a breve) e funzioni proprie della classe.

In effetti scrivere una classe ha senso se dobbiamo creare dei prototipi con molte istanze, quindi va bene per oggetti abbastanza elementari ma anche per il tema natale nel suo complesso, qualora volessimo confrontare fra loro più temi (fatti di oggetti più semplici), riferiti a persone diverse o a momenti diversi della vita di una stessa persona.

Dovremo scegliere anche un modo per garantire lo storage definitivo dei dati raccolti, per esempio attraverso un database, che potrebbe essere quindi lo strumento adatto per questa funzione.

Per andare avanti abbiamo bisogno anche di un documento teorico, che consenta di effettuare i calcoli astronomici e/o astrologici con accuratezza e precisione. Per la sua semplicità, relativamente al moto dei pianeti, penso di avvalermi, come già in passato, delle pagine di Paul Schlyter How to compute planetary positions e Computing planetary positions - a tutorial with worked examples.

Da queste iniziamo, a partire dal prossimo post, a costruire un primo nucleo di funzioni dedicate alla misura del tempo e al moto dei pianeti. Ove necessario, attingeremo ad altre fonti. Al prossimo post.

No comments:

Post a Comment

How to create a virtual linux machine with qemu under Debian or Ubuntu with near native graphics performance

It's been a long time since my latest post. I know, I'm lazy. But every now and then I like to publish something that other people c...