Javacalc
Progetto finale per il corso di Ingegneria del Software (A.A. 1996/97)
Si sviluppi il sistema software JavaCalc per l'automatizzazione di procedure di calcolo. Il sistema sara' basato su di un paradigma a "foglio di calcolo" (spreadsheet); i dati e le formule, cioe', verranno memorizzati all'interno di "celle" organizzate in una matrice.
Le tipologie di celle
Ogni cella della matrice e' dotata di un valore, valore che puo' essere un valore numerico, un testo oppure una formula. Una formula definisce una relazione funzionale che consente di calcolare il valore della cella in relazione a quello di altri valori numerici costanti o del valore di altre celle.
I tipi di dati ammessi
I tipi di valori numerici gestiti dal sistema saranno : interi, in virgola mobile (singola precisione) e percentuali (interi compresi tra 0 e 100). I valori numerici potranno contenere le cifre numeriche 0 1 2 3 4 5 6 7 8 9 ed uno o piu' dei seguenti caratteri speciali + - % . , E e.
La notazione X% verra' utilizzata per indicare un valore numerico in virgola mobile pari al X/100 (es. 15% e' uguale a 15/100 = 0,15).
La notazione scientifica [+|-] I.F[e|E] esp sara' utilizzata per indicare un valore pari a (I.F)x10esp. Ad esempio 15.4 e 2 indica il valore 15.4x102 = 1540.
La virgola sara' utilizzata come separatore decimale (per separare cioe' la parte intera dalla parte frazionaria in un numero in virgola mobile) ed il punto come separatore delle migliaia. Si veda ad esempio il valore 1.234.678. Qualsiasi altra rappresentazione verra' interpretata come una stringa (testo).
Le formule conterranno come primo carattere un segno = al quale seguira' il corpo della formula. All'interno delle formule sara' possibile far uso di parentesi tonde ().
Gli operatori unari consentiti saranno + - (valore positivo, valore negativo).
Gli operatori binari consentiti saranno: + - * / ^ (somma, sottrazione, moltiplicazione, divisione, modulo, esponente).
Le funzioni predefinite saranno: ABS(val), MOD([val1,val2), ABS(range), SOMMA(range), MEDIA(range). Queste calcolano ripettivamente il valore assoluto di un valore, il risultato dell'operaazione val1 modulo val2, la somma dei valori contenuti in un range (vedi piu avanti per la definizione di range), la media dei valori contenuti in una range (la somma dei valori diviso il numero delle celle comprese nel range).
Le singole celle nella formula saranno identificate con una sigla composta da una o piu' lettere e da un valore intero, utilizzate come riferimento, rispettivamente, alla colonna ed alla riga in cui la cella si trova. Ad esempio la sigla AA23 indica la cella sulla colonna AA e sulla riga 23.
I range
Con la notazione Cella1:Cella2 sara' possibile indicare un rettangolo di celle in cui Cella1 indica l'angolo superiore sinistro e la Cella2 indica l'angolo inferiore destro. Ad esempio B2:C3 indica le celle B2,B3,C2,C3.
Esempio di foglio elettronico.
Si veda di seguito un esempio del contenuto di un foglio elettonico. In questo esempio una matrice di 16 celle e' utilizzata per calcolare le tasse da pagare per l'anno 1996. L'area viola e' amorfa e non contiene alcun elemento della procedura automatizza, fornisce invece un contesto di riferimento per identificazione delle celle centenute all'area attiva ed il nome del file utilizzato per la memorizzazione del foglio (nell'esempio "Tabella").
L'area blu contiene le celle che costituiscono il vero e proprio foglio
elettronico. Fra di esse troviamo celle contenenti costanti di tipo stringa
(es. la cella in posizione A,1, che indichiamo con la simbologia A1 contiene
la stringa "Guadagni 1996"), costanti di tipo numerico (es. C2
contenente 1.000.000), formule (es. D2 contenente C2 + (C2 * 19%))
Esempio dei contenuti (in azzurro scuro) della foglio elettronico "Tabella"
| Tabella | A | B | C | D |
| 1 | "Guadagni 1996" | "Descrizione" | "Ammontare" | "Ammontare con IVA al 19%" |
| 2 | "Parcella 1" | 1.000.000 | C2 + (C2 * 19%) | |
| 3 | "Parcella 2" | 2.000.000 | C3 + (C3 *19%) | |
| 4 | "Totale" | C2+C3 | D2 + D3 |
Modalita' di calcolo
La modalita' di calcolo della formula contenuta in una cella potra' essere automatico, eseguito cioe' ogni qualvolta il valore di una cella contenuta nella formula varia, oppure manuale, sara' cioe' fornito all'utente un meccanismo esplicito (ad esempio tramite menu') per attivare il ricalcolo di tutte le formule contenute in un foglio elettronico.
In entrambi i casi sara' necessario effettuare il calcolo delle formule contenute nelle singole celle in un ordine che garantisce che l'operazione di calcolo avvenga solo dopo che tutte le celle a cui si fa riferimento siano state calcolate. Ad esempio se la formula contenuta nella cella D4 e' (D2 + D3) ed il valore di D2 e' una formula (C2 + (C2 * 19%)) allora e' necessario che il calcolo di D2 venga effettuato prima di quello di D4 per consentire il computo di un risultato corretto. Sara' inoltre necessario verificare che non esistano cicli di dipendenza come ad esempio nel caso in cui C2 dovesse dipendere da D4 (es. contenendo una formula del tipo D4 * 10%).
Una cella priva di contenuti assume per default un valore numerico nullo, mentre una cella contennte una formula ed il cui calcolo non e' stato effettuato o in cui si e' verificato errore avra' un valore non definito (e quindi avranno valori non definiti tutte le cella da essa dipendenti).
Funzionalita' d'applicativo
Sara' possibile salvare i valori contenuti in un foglio elettronico (dati e formule) in un file nonche' eseguire l'operazione inversa di caricamento dei valori da file.
Sara' possibile aggiungere righe e colonne alla matrice mantenendo tuttavia le relazioni esistenti tra celle, ad esempio se l'inserimento di una riga in posizione 3 sposta una cella dalla posizione B4 a B5 tutte le celle contenenti formule che facevano riferimento alla cella B4 debbono essere aggiornate di modo che facciano riferimento a B5..
Ogni cella sara' dotata di una veste grafica che identifichi se la cella e' vuota, se contiene una formula incorretta, se contiene una formula corretta ma il cui valore non e' stato ancora calcolato, ed infine se contiene un valore costante o un valore correttamente calcolato (nel qual caso tale valore sara' chiaramente visibile nella visualizzazione della cella).
Esempio:
| Tabella | A | B | C | D |
| 1 | "Guadagni 1996/97" | "Descrizione" | "Ammontare" | "Ammontare con IVA al 19%" |
| 2 | "Parcella 1" | 1.000.000 | C2 + (C2 * 19%) | |
| 3 | "Parcella 2" | 2.000.000 | C3 + (C3 * 19%) | |
| 4 | "Totale" | 3.000.000 | C4 +* (C4 * 19%) |
Leggenda:
| Valore costante o cella vuota |
"Stringa o numero" |
Formula corretta ma non calcolata |
C2 + C3 |
|
| Formula correttamente calcolata |
1.000.000 |
Formula non corretta | C2 +* |