Favero Michael, Roveda Daniele, Simoni Tommaso, Venturini Leonardo
Classe 4B informatica
Anno scolastico 2019-2020
FUNZIONI MATEMATICHE
Progetto per il calcolo del grafico e dello studio di funzioni matematiche, classe 4B informatica
Il progetto vuole produrre un programma il cui scopo è quello di, a partire da una o più funzioni matematiche inserite dall’utente, disegnarne il grafico e svolgerne parte dello studio.
Sommario
Introduzione ... 2
Strumenti utilizzati ... 2
Per lo sviluppo ... 2
Per la condivisione... 2
Analisi e progettazione ... 2
Diagramma dei casi d’uso ... 2
Diagramma delle classi ... 4
Scenari ... 9
Sviluppo ... 10
Architettura del sistema ... 10
Layout delle pagine ... 11
Risultati raggiunti e sviluppi futuri ... 12
Riferimenti ... 13
I NTRODUZIONE
Il progetto vuole unire le competenze informatiche ottenute nel nostro percorso scolastico
parallelamente a quelle di analisi matematica, fornendo un’interfaccia che permetta all’utente che la fruisce di eseguire uno studio parziale di una funzione matematica, o anche più di una
contemporaneamente. Il programma permetterà a chi ne fa uso di inserire come stringa la funzione da studiare e di visualizzare a schermo il grafico su piano cartesiano, oltre che lo studio di funzione svolto.
Il programma vuole dare la possibilità all’utente di mettere a confronto più grafici di funzione, visualizzandoli contemporaneamente sul piano cartesiano.
S TRUMENTI UTILIZZATI
Per la realizzazione del nostro programma abbiamo utilizzato l’IDE Eclipse, strumento di cui
conosciamo in modo sufficiente e concreto le funzionalità e che ci ha permesso di realizzare il codice e la documentazione del nostro progetto.
Per lo sviluppo
Come linguaggio di programmazione abbiamo adottato Java, studiato a livello scolastico e sufficiente per ricreare un’interfaccia grafica gradevole e comprensibile all’utente. Ci siamo avvalsi inoltre di un linguaggio a noi precedentemente sconosciuto per la scrittura in notazione scientifica delle espressioni matematiche: il Latex. Abbiamo sfruttato questo nuovo linguaggio tramite una libreria Java apposita, utile all’esportazione di formule Latex come immagini bufferizzate inseribili Runtime nell’interfaccia utente. Ci siamo avvalsi di plugin Eclipse per la modellazione automatica dei diagrammi UML utili alla documentazione finale, e per realizzare, tramite il plugin JBuilder, l’interfaccia grafica in maniera più agile dal punto di vista realizzativo rispetto alla stesura del codice manualmente, che poi è stato modificato o ritoccato in base alle esigenze.
Per la condivisione
Per la condivisione dai file prodotti da ogni componente del nostro team ci siamo avvalsi di servizio cloud di Mega. La comunicazione tra i membri del gruppo è stata facilitata da un coordinamento tramite chat di gruppo WhatsApp, mentre gli incontri vocali, tra parti del gruppo o per la comunicazione generale per il proseguo delle attività progettuali, sono stati svolti su piattaforma Zoom e Discord.
A NALISI E PROGETTAZIONE
Per la realizzazione del nostro progetto ci siamo ispirati all’ idea di un componente del nostro team, insieme ci siamo confrontati sulla fattibilità della sua idea e abbiamo poi trovato il modo di renderla qualcosa di concreto. L’idea alla base di questo progetto era quella di unire due discipline fondamentali del nostro corso di studi: la matematica e l’informatica. Ci siamo subito organizzati per suddividere il lavoro: la progettazione e l’implementazione dell’interfaccia grafica, la realizzazione della parte del calcolo matematico e la sua rappresentazione sul grafico. Spesso il nostro gruppo ha lavorato sfruttando la tecnica informatica del pair-programming che ci ha permesso di essere piuttosto produttivi
minimizzando il più possibile la probabilità di errore.
Diagramma dei casi d’uso
Diagramma delle classi
Complessivo
Pacchetto per pacchetto Model
Libreria MathParser (all’interno di Model)
Control
Scenari
Sequenza esportazione grafico
Sequenza esportazione grafico
S VILUPPO
Per lo sviluppo del software complessivo ci siamo affidati al modello MCV, perché sufficientemente completo per unire tutte le funzionalità del programma. Data la poca efficienza delle classi fornite da Oracle per poter svolgere dei calcoli matematici su un’espressione fornita sotto forma di stringa dall’utente è stato scelto di riscrivere una libreria apposita, la MathParser, che permette di creare un albero di operandi matematici e valori per lo studio ed il disegno di una funzione. Per rendere
ulteriormente efficace la libreria è stato scelto di usare una struttura dati, questa volta fornita da Oracle stessa, che simula il vettore associativo di PHP, non implementato nel linguaggio Java: la HashMap.
Questa è un’implementazione dell’interfaccia Map che mette a disposizione all’utente la possibilità di memorizzare delle associazioni chiave-valore di istanze Object a piacimento (data la parametricità dell’interfaccia Map), e cercando un’oggetto all’interno della struttura dati fornendone la sola chiave, senza dovere dunque svolgere dei cicli di ricerca (anche se non sappiamo con certezza quale sia la modalità di gestione della ricerca stessa implementata dall’interfaccia HashMap).
Architettura del sistema
Il nostro programma è stato diviso secondo il Pattern MCV (Model Control View). Oltre ad aver
sfruttato questa suddivisione dei pacchetti allo scopo di scindere in modo chiaro i 3 aspetti principali del nostro software finale, abbiamo deciso di implementare questa suddivisione in modo tale da permetterci di lavorare parallelamente al progetto. Questa organizzazione ha reso inoltre molto più facile la
localizzazione e successiva risoluzione dei problemi. Il model contiene tutti le classi che si occupano dei dati per la conversione della stringa inserita dall’ utente e delle successive operazioni matematiche, fondamentali per il corretto funzionamento del programma. Il view ospita invece tutte le classi relative all’interfaccia grafica e al disegno del grafico di funzione. Nel control sono gestiti invece tutti gli eventi generati dall’interazione utente con l’interfaccia.
Layout delle pagine
Nella prima schermata “Grafico Funzione”, relativa al disegno del grafico è possibile inserire in input una funzione, aiutandosi con i preset disponibili, e attraverso la pressione del tasto “Calcola”, verrà mostrato a video il risultato dell’elaborazione.
Questa immagine, relativa alla sezione “Studio Funzione”, mostra lo studio parziale delle funzioni date in input (Dominio, Derivata Prima, Derivata Seconda e Grafico relativo).
Questa schermata, che appare a video nel momento in cui si seleziona la voce “Esporta Grafico” presente nel menù, mostra il selettore del percorso nel quale esportare il grafico ed in quale formato.
R ISULTATI RAGGIUNTI E SVILUPPI FUTURI
Il progetto finito è risultato rispecchiare nel complesso le nostre aspettative non che la progettazione iniziale. Il disegno talvolta può presentare qualche errore, soprattutto nel disegno della funzione matematica nei dintorni dei suoi punti di discontinuità, mostrando un grafico non sempre preciso in
determinate aree. Non è stato sufficiente il tempo per trovare una soluzione adeguata alla
semplificazione del Dominio di funzione, che però è stato calcolato. In futuro vorremmo aggiungere qualche funzionalità matematica, nonché riportare il progetto in piattaforma Android con le librerie Java già scritte.
R IFERIMENTI
Look and Feel Flatlaf: formdev.com/flatlaf/
Libreria JLatexMath: github.com/
Sito icone: flaticon.com
Altre Fonti di Informazione: stackexchange.com, stackoverflow.com, oracle.com
R EQUISITI FUNZIONALI
1.1 - Generali
Nome Inserisci funzione
Scopo Inserire la funzione da studiare
Attori
Trigger Aprire il programma nella sezione grafico
funzione
Pre-condizioni La funzione inserita deve essere inserita
rispettando la sintassi adeguata
Post-condizioni -
Nome Nascondi / mostra funzione nel grafico
Scopo Nascondere la visualizzazione di una funzione nel
grafico Attori
Trigger Nel menu a destra del programma nella sezione
grafico funzione cliccando sopra ad una funzione
si può nasconderla oppure ricicciandoci questa apparirà nuovamente nel grafico
Pre-condizioni Aver inserito almeno una funzione
Post-condizioni -
Nome Inserisci presets
Scopo Inserire un presets sotto forma di simbolo,
logaritmo o di funzione di trigonometria Attori
Trigger Aprire il menu a tendina dei presets all’ interno
della sezione grafico e scegliere il presets desiderato cliccandoci sopra e questo apparirà nella cella di inserimento
Pre-condizioni Aver selezionato la sezione relativa al grafico della funzione
Post-condizioni
Nome Modificare dimensione della finestra
dell’applicazione
Scopo Poter ingrandire o diminuire la finestra
Attori
Trigger Cliccando sull’apposito tasto la finestra potrà
occupare tutto lo schermo, si potrà inoltre modificare la dimensione estendendo uno dei lati della finestra
Pre-condizioni -
Post-condizioni -
1.2 – Menù
Nome Esporta Grafico
Scopo Esportare un’immagine (in formato jpg o png)
Attori
Trigger Aprire il menu relativo all’opzione file e scegliere la funzione esporta grafico cliccandoci sopra
Pre-condizioni Aver inserito almeno una funzione
Post-condizioni -
Nome Esci
Scopo Uscire dal programma
Attori
Trigger Aprire nel menù a tendina relativo a file, cliccarci
scopra e infine confermare o meno l’uscita dal programma cliccando sui relativi pulsanti che appariranno nel popup
Pre-condizioni -
Post-condizioni -
Nome Abilita modalità scura
Scopo Attivare una modalità dove viene cambiato il
tema dell’intero programma passando ad uno con una tonalità più scura
Attori
Trigger Aprire il menu relativo ad opzioni, cliccare su
abilita modalità scura
Pre-condizioni Il programma deve essere in modalità chiara
Post-condizioni
Nome Abilita modalità chiara
Scopo Attivare una modalità dove viene cambiato il
tema dell’intero programma passando ad uno con una tonalità più chiara
Attori
Trigger Aprire il menu relativo ad opzioni, cliccare su
abilita modalità chiara
Pre-condizioni Il programma deve essere in modalità scura
Post-condizioni -
Nome Documentazione
Scopo Aprire la documentazione relativa al
funzionamento del programma Attori
Trigger Aprire il menu help e selezionare e poi cliccare
sulla voce documentazione
Pre-condizioni -
Post-condizioni -
Nome Crediti
Scopo Visualizzare gli sviluppatori
Attori -
Trigger Aprire il menu help e selezionare e poi cliccare
sulla voce Crediti
Pre-condizioni -
Post-condizioni -
R EQUISITI NON FUNZIONALI
2.1 - Requisiti di prodotto
-L’applicazione deve essere fluida ed avere brevi tempi di risposta, soprattutto nella gestione del grafico.
-L’applicazione deve essere intuitiva, in modo tale che l’utente finale posso comprenderne velocemente il suo utilizzo.
2.2 - Requisiti di processo
-L’applicazione è stata sviluppata in linguaggio java.
-L’ambiente di sviluppo scelto da tutti i membri del gruppo è Eclipse IDE.
2.3 - Requisiti esterni
-L’applicazione ha bisogno di essere eseguita in un sistema dove è presente la Java Virtual Machine.
J AVADOC
La JavaDoc è visibile facilmente al seguente dominio web:
http://functionanalysisjava.000webhostapp.com/model/mathparser/package-summary.html