Ciao ragazzi...
Avrei bisogno di un aiutino... Devo fare un progetto con delle specifiche diciamo "un po' poco restrittive" quindi non so da dove iniziare e avrei bisogno di qualche spunto/consiglio! Non so davvere dove sbattere la testa!
Dunque, queste sono le specifiche che devo seguire:
Lo scopo del progetto `e lo sviluppo in C++ di una calcolatrice estendibile mediante una
interfaccia utente grafica (GUI) sviluppata in Qt; questa calcolatrice dovra` essere in
grado di gestire almeno tre diversi tipi di dati (non necessariamente numerici), la cui
implementazione `e lasciata allo studente.
La specifica dettagliata di quali funzionalit`a il progetto debba fornire `e lasciata in
massima parte a libera scelta dello studente, che pu`o trarre ispirazione dal buon senso, dai
propri interessi e dalla fantasia.
In particolare la calcolatrice deve soddisfare i seguenti requisiti:
1. rigida separazione tra il codice che gestisce la GUI e il codice che gestisce la parte
logica della calcolatrice; quest’ultima deve essere incapsulata in una o pi`u classi
che non hanno alcuna relazione con le librerie o il codice grafico e che potrebbero
altrettanto legittimamente essere usate come parte logica di una calcolatrice a riga di
comando.
2. la parte logica della calcolatrice deve includere almeno tre classi non triviali (cio`e
che non siano semplici wrapper attorno a tipi primitivi del c++), e che non siano una
delle classi sviluppate durante il corso, come orario o dataora, corrispondenti ai
tre tipi gestiti dalla calcolatrice. Lo studente non `e per nulla obbligato a scegliere tipi
matematici o numerici, a patto che gli altri requisiti del progetto vengano rispettati.
3. per quanto concerne la parte logica del progetto vi deve essere una rigida separazione
tra il codice generale della parte logica (ad esempio il codice che si occupa dell’interpretazione
dei comandi dati alla calcolatrice) e il codice che si occupa dei tipi gestiti
dalla calcolatrice. Ad esempio se la calcolatrice gestisce operazioni tra complessi,
tutte le operazioni tra complessi e tutta la gestione di errori relativi a complessi (come
ad esempio un’errore “divisione per zero”) potrebbero essere gestite all’interno
di una classe Complex.
4. lo studente `e libero di scegliere la gerarchia delle classi che gestiscono i tipi su cui
lavora la calcolatrice, ma vi deve essere una gerarchia minima come segue:
A<--B
C
La gerarchia deve quindi comprendere due classi di cui una eredita dall’altra, e un’altra
classe che non eredita n`e `e classe base di nessuna delle altre due. `E ovviamente
permesso ereditare tutte le classi da una ulteriore classe base comune. Inoltre la classe
B dell’esempio sopra deve offrire delle funzionalit`a aggiuntive rispetto a quelle
offerte dalla classe base (ad esempio se la classe base `e Reale e la classe derivata `e
Intero, Intero deve offrire un’operazione che ha senso solo per gli interi e che
`e si attiva solo quando il tipo corrente `e un intero, ad esempio l’operazione di calcolo
del fattoriale). Si intende che la calcolatrice deve comportarsi coerentemente con
questa gerarchia: ad esempio se il tipo corrente `e B, devono essere disponibili non
solo tutte le operazioni disponibili per A ma anche le operazioni addizionali disponibili
per il tipo B. Inoltre se qualche operazione applicata a oggetti di tipo B porta
ad altri oggetti di tipo B, questo deve rispecchiarsi nell’operativit`a della calcolatrice.
Nell’esempio di prima se l’oggetto corrente `e un intero deve essere disponibili tutte
le operazioni della calcolatrice, come l’addizione o la radice quadrata, ma se eseguo
la radice quadrata il tipo corrente diventer`a un reale, mentre se eseguo l’addizione
otterr`o un altro intero.
5. la calcolatrice deve essere dotata di una completa gestione degli errori; ogni tipo di
errore (ad esempio la divisione per zero) deve provocare un messaggio all’utente,
senza corrompere lo stato della calcolatrice o peggio provocarne un crash.
Ben accetti suggerimenti di qualsiasi tipo perchè io non so davvero da dove cominciare!