Repository github per progetto del corso di Ingegneria del Software A.A. 2020/2021 alla Federico II di Napoli.
Clicca per espandere/comprimere
Applicazione Web società finanziaria
Bloomfin è una società di intermediazione finanziaria che ha commissionato la realizzazione di
una applicazione web per le proprie attività. L'azienda è costituita da broker finanziari che
aiutano i risparmiatori a investire i loro patrimoni in borsa.
I broker interagiscono con il sistema per consultare il valore di titoli azionari oppure per creare
pacchetti finanziari: i pacchetti finanziari, che costituiscono una fonte di investimento per i
risparmiatori, sono un insieme di titoli che possiedono un buon mix di livello di rendimento e
rischio. I risparmiatori visitano il sito web per acquistare i pacchetti finanziari proposti da
Bloomfin oppure per consultare il valore dei pacchetti in loro possesso. All'atto della
consultazione del valore dei propri pacchetti finanziari, un risparmiatore che non sia soddisfatto
del rendimento dell'investimento, può infine disporne la vendita.
L'applicazione deve avere informazioni riguardo i broker registrati nel sistema e deve
memorizzare il loro nome, cognome, data di nascita e numero di registrazione alla camera di
commercio; e riguardo i risparmiatori, di cui deve memorizzare il loro nome, cognome, indirizzo
di residenza, codice fiscale e data di nascita.
In gergo finanziario, sia i titoli azionari sia i pacchetti finanziari sono asset economici, che
Bloomfin gestisce e che l'applicazione deve memorizzare: gli asset posseggono un identificativo
univoco nel sistema. I titoli azionari, oltre all’identificativo, hanno un valore per azione e sono
registrati presso una borsa. Delle borse occorre avere informazione del loro orario di apertura e
di chiusura, del loro nome e dello stato di appartenenza. I pacchetti finanziari sono composti da
titoli azionari e posseggono, oltre all’identificativo, il fattore di rischio, una stima di rendimento, e
il numero di azioni per titolo di cui il pacchetto è composto. I pacchetti finanziari possono essere
acquistati da uno o più risparmiatori. Un risparmiatore può scegliere di acquistare più unità di
uno stesso pacchetto finanziario e, all'acquisto, il sistema deve memorizzare la data e la
quantità desiderata.
Infine il sistema deve gestire le quotazioni: ogni minuto l'applicazione deve contattare le borse
per aggiornare i valori associati ai titoli azionari. I broker possono chiedere al sistema di
visionare il valore di un asset finanziario, che è richiesto al sistema tramite l’identificativo: se l’id
corrisponde ad un titolo azionario, il sistema fornisce l’ultimo aggiornamento del valore per
azione; mentre, se l’id corrisponde a un pacchetto finanziario, il sistema deve calcolare il valore
del pacchetto, che è pari al prodotto della somma dei valori di tutti i titoli azionari di cui un
pacchetto finanziario è composto per il numero di azioni per titolo del pacchetto.
Clicca per espandere/comprimere
Abbiamo fatto varie assunzioni interpretando la traccia:
- Un broker può consultare tutti i pacchetti esistenti e non solo quelli che ha creato.
- I titoli azionari possono appartenere a una sola borsa, per non complicare maggiormente le relazioni UML e le tabelle SQL.
- I titoli hanno "infinite azioni", non c'è un controllo sul massimo numero di azioni di un titolo che possono essere inserite in un pacchetto o comprate.
Clicca per espandere/comprimere
Il modello di ciclo di vita che abbiamo scelto di seguire nello sviluppo di questo progetto è il modello a cascata.
Clicca per espandere/comprimere
Legenda
| Sigla | Tipologia Requisito |
|---|---|
| PER | Persistenza |
| FUN | Funzionale |
DATI1 PER <must> - Il sistema deve memorizzare tutte le informazioni riguardanti i broker registrati per garantirne la persistenza.
DATI2 PER <must> - Il sistema deve memorizzare tutte le informazioni riguardanti i risparmiatori registrati per garantirne la persistenza.
DATI3 PER <must> - Il sistema deve memorizzare gli asset finanziari.
DATI4 PER <must> - Il sistema deve memorizzare tutte le informazioni riguardanti le borse.
DATI5 PER <must> - Il sistema deve memorizzare la data e la quantità di ogni acquisto.
FUNZ1 FUN <must> - I broker devono poter consultare il valore di titoli azionari.
FUNZ2 FUN <must> - I broker devono poter creare pacchetti finanziari.
FUNZ3 FUN <must> - I risparmiatori devono poter acquistare i pacchetti finanziari proposti.
FUNZ4 FUN <must> - I risparmiatori devono poter consultare il valore dei pacchetti azionari in loro possesso.
FUNZ5 FUN <should> - I risparmiatori devono poter vendere i pacchetti finanziari posseduti.
FUNZ6 FUN <must> - Il sistema deve aggiornare i valori associati ai titoli azionari ogni minuto.
FUNZ7 FUN <must> - Il sistema deve saper calcolare il valore di un pacchetto finanziario.
Clicca per espandere/comprimere
Nota: Il campo 'attori secondari' è stato omesso in quanto non necessario. Non c'è interazione diretta tra broker e risparmiatori negli scenari dei casi d'uso.
| Caso d'uso | Creazione Pacchetti Finanziari |
|---|---|
| id | creazione_pacchetto |
| descrizione | Il broker crea un nuovo pacchetto finanziario. |
| attori primari | Broker |
| precondizioni | Il broker è registrato nel sistema. I titoli azionari sono registrati nel sistema. |
| sequenza di azioni | 1. Il broker sceglie di creare il nuovo pacchetto. 2. Il broker seleziona i titoli da aggiungere al pacchetto. 3. Il sistema memorizza il pacchetto. |
| postcondizioni | Il pacchetto finanziario è stato creato e memorizzato. |
| Caso d'uso | Acquisto Pacchetti Finanziari |
|---|---|
| id | acquisto_pacchetto |
| descrizione | Il risparmiatore acquista una o più unità di un pacchetto finanziario. |
| attori primari | Risparmiatore |
| precondizioni | Il risparmiatore è registrato al sistema. |
| sequenza di azioni | 1. Il risparmiatore sceglie di acquistare il pacchetto. 2. Il risparmiatore seleziona il pacchetto. 3. Il risparmiatore seleziona la quantità di unità del pacchetto da acquistare. 4. Il sistema registra l’acquisto. |
| postcondizioni | La transazione è memorizzata. |
| Caso d'uso | Registrazione |
|---|---|
| id | registrazione |
| descrizione | L'utente si registra al sistema. |
| attori primari | Utente |
| precondizioni | nessuna |
| sequenza di azioni | 1. L'utente richiede di registrarsi al sistema. 2. Il sistema chiede di inserire indirizzo e-mail e password. 3. Il sistema chiede l’inserimento di nome, cognome, data di nascita. 4. Se l’utente è un broker il sistema chiede l’inserimento del numero di registrazione alla camera di commercio. 5. Se l’utente è un risparmiatore il sistema chiede l’inserimento di codice fiscale e indirizzo di residenza. 6. Il sistema memorizza l’utente. |
| postcondizioni | L'utente è registrato nel sistema. |
| Caso d'uso | Vendita Pacchetti Finanziari |
|---|---|
| id | vendita_pacchetto |
| descrizione | Il risparmiatore vende un pacchetto finanziario in suo possesso. |
| attori primari | Risparmiatore |
| precondizioni | Il pacchetto finanziario è registrato nel sistema. Il risparmiatore è registrato nel sistema e ha precedentemente acquistato il pacchetto. |
| sequenza di azioni | 1. Il risparmiatore consulta il pacchetto. 2. Il risparmiatore richiede di vendere il pacchetto. 3. Il sistema dispone la vendita del pacchetto. |
| postcondizioni | Il risparmiatore non è più in possesso del pacchetto. |
| Caso d'uso | Consultazione Titoli Azionari |
|---|---|
| id | consultazione_titoli |
| descrizione | L’utente (o il sistema) consulta i titoli finanziari. |
| attori primari | Broker/nessuno |
| precondizioni | L'utente è registrato nel sistema ed è un broker. Almeno un titolo azionario è registrato nel sistema. |
| sequenza di azioni | 1. L’utente (o il sistema) richiede di consultare il valore dei titoli. 2. Il sistema fornisce per ogni titolo l’ultimo aggiornamento del valore per azione. |
| postcondizioni | L'utente riceve il valore dei titoli. |
| Caso d'uso | Consultazione Pacchetti Finanziari |
|---|---|
| id | consultazione_pacchetto |
| descrizione | L’utente consulta un pacchetto finanziario. |
| attori primari | Utente |
| precondizioni | L'utente è registrato al sistema. Il pacchetto finanziario è registrato nel sistema. Se l'utente è un risparmiatore deve possedere il pacchetto di interesse. |
| sequenza di azioni | 1. L’utente richiede di consultare il valore del pacchetto. 2. Il sistema consulta i titoli azionari [includendo consultazione_titolo]. 3. Il sistema effettua la somma del valore dei titoli che compongono il pacchetto. 4. Il sistema moltiplica il valore trovato per il numero di azioni per titolo. 5. Il sistema fornisce il valore. |
| postcondizioni | L'utente riceve il valore del pacchetto d'interesse. |
| Caso d'uso | Aggiornamento Valore Titoli |
|---|---|
| id | aggiorna_titoli |
| descrizione | Il sistema aggiorna periodicamente il valore dei titoli finanziari. Periodo: 1min |
| attori primari | Tempo |
| precondizioni | I titoli sono registrati nel sistema. La borsa è registrata nel sistema ed aperta. |
| sequenza di azioni | 1. Il sistema contatta le borse. 2. Il sistema aggiorna il valore dei titoli. |
| postcondizioni | I valori dei titoli sono aggiornati. |
Clicca per espandere/comprimere
Nota: 'Pacchetto Azionario' è utilizzato come sinonimo di 'Pacchetto Finanziario'.

Clicca per espandere/comprimere
Creazione Pacchetti Finanziari:

Acquisto Pacchetti Finanziari:

Registrazione:

Vendita Pacchetti Finanziari:

Consultazione Titoli Azionari:

Consultazione Pacchetti Finanziari:

Aggiornamento Valore Titoli:

Clicca per espandere/comprimere
Cambiamenti rispetto al diagramma semplice:
- Aggiunta delle molteplicità di tutte le relazioni
- Separazione delle responsabilità con l'approccio BCE, introducendo un gestore dell'applicazione e delle classi boundary di interfacciamento degli attori con esso
Clicca per espandere/comprimere
Creazione Pacchetti Finanziari:

Acquisto Pacchetti Finanziari:

Vendita Pacchetti Finanziari:

Consultazione Titoli Azionari:

Clicca per espandere/comprimere
Creazione Pacchetti Finanziari:

Acquisto Pacchetti Finanziari:

Vendita Pacchetti Finanziari:

Consultazione Titoli Azionari:

Clicca per espandere/comprimere
L'applicazione funziona correttamente ed è eseguibile dal file Bloomfin/src/boundary/Console.java, prima di usarla bisogna però inizializzare il database h2 (Utente: sa, nessuna password) con il seguente codice:
DROP TABLE ComposizionePacchetti;
DROP TABLE AppartenenzaTitoli;
DROP TABLE PacchettiCreati;
DROP TABLE Transazioni;
DROP TABLE Pacchetti;
DROP TABLE Borse;
DROP TABLE Titoli;
DROP TABLE Broker;
DROP TABLE Risparmiatori;
CREATE TABLE Broker (
Id LONG NOT NULL AUTO_INCREMENT PRIMARY KEY,
NumeroCameraCommercio VARCHAR(255),
Nome VARCHAR(255),
Cognome VARCHAR(255),
DataNascita DATE,
Email VARCHAR(255),
Password VARCHAR(255),
UNIQUE KEY Broker_Email_Unique (Email) );
CREATE TABLE Risparmiatori (
Id LONG NOT NULL AUTO_INCREMENT PRIMARY KEY,
CodiceFiscale VARCHAR(16),
Nome VARCHAR(255),
Cognome VARCHAR(255),
DataNascita DATE,
IndirizzoResidenza VARCHAR(255),
Email VARCHAR(255),
Password VARCHAR(255),
UNIQUE KEY Risparmiatori_Email_Unique (Email) );
CREATE TABLE Borse (
Nome VARCHAR(255) NOT NULL PRIMARY KEY,
StatoAppartenenza VARCHAR(255),
OrarioApertura TIME,
OrarioChiusura TIME );
CREATE TABLE Pacchetti (
Id LONG NOT NULL AUTO_INCREMENT PRIMARY KEY,
FattoreRischio FLOAT,
StimaRendimento FLOAT );
CREATE TABLE Titoli (
Id LONG NOT NULL AUTO_INCREMENT PRIMARY KEY,
ValoreAzione FLOAT );
CREATE TABLE Transazioni (
Id LONG NOT NULL AUTO_INCREMENT PRIMARY KEY,
Quantita INTEGER,
Data DATE,
IdProprietario LONG,
IdPacchetto LONG,
FOREIGN KEY (IdProprietario) REFERENCES Risparmiatori (Id),
FOREIGN KEY (IdPacchetto) REFERENCES Pacchetti (Id));
CREATE TABLE PacchettiCreati (
IdBroker LONG,
IdPacchetto LONG,
FOREIGN KEY (IdBroker) REFERENCES Broker (Id),
FOREIGN KEY (IdPacchetto) REFERENCES Pacchetti (Id),
PRIMARY KEY(IdBroker,IdPacchetto) );
CREATE TABLE AppartenenzaTitoli (
IdTitolo LONG,
NomeBorsa VARCHAR(255),
FOREIGN KEY (IdTitolo) REFERENCES Titoli (Id),
FOREIGN KEY (NomeBorsa) REFERENCES Borse (Nome),
PRIMARY KEY(IdTitolo,NomeBorsa) );
CREATE TABLE ComposizionePacchetti (
IdPacchetto LONG,
IdTitolo LONG,
FOREIGN KEY (IdTitolo) REFERENCES Titoli (Id),
FOREIGN KEY (IdPacchetto) REFERENCES Pacchetti (Id),
NumeroAzioni INT,
PRIMARY KEY(IdPacchetto,IdTitolo) );
INSERT INTO Borse (Nome, StatoAppartenenza, OrarioApertura, OrarioChiusura) VALUES ('Borsa di Milano', 'Italia', '08:00:00', '17:30:00');
INSERT INTO Borse (Nome, StatoAppartenenza, OrarioApertura, OrarioChiusura) VALUES ('Borsa di Zurigo', 'Svizzera', '08:00:00', '18:00:00');
INSERT INTO Borse (Nome, StatoAppartenenza, OrarioApertura, OrarioChiusura) VALUES ('Borsa di Parigi', 'Francia', '07:00:00', '16:30:00');
INSERT INTO Titoli (ValoreAzione) VALUES (1);
INSERT INTO Titoli (ValoreAzione) VALUES (1.3);
INSERT INTO Titoli (ValoreAzione) VALUES (1.5);
INSERT INTO Titoli (ValoreAzione) VALUES (2);
INSERT INTO Titoli (ValoreAzione) VALUES (2.3);
INSERT INTO Titoli (ValoreAzione) VALUES (3.8);
INSERT INTO Titoli (ValoreAzione) VALUES (0.5);
INSERT INTO Titoli (ValoreAzione) VALUES (5.6);
INSERT INTO Titoli (ValoreAzione) VALUES (4.4);
INSERT INTO AppartenenzaTitoli (IdTitolo, NomeBorsa) VALUES (1 , 'Borsa di Milano');
INSERT INTO AppartenenzaTitoli (IdTitolo, NomeBorsa) VALUES (2 , 'Borsa di Milano');
INSERT INTO AppartenenzaTitoli (IdTitolo, NomeBorsa) VALUES (3 , 'Borsa di Milano');
INSERT INTO AppartenenzaTitoli (IdTitolo, NomeBorsa) VALUES (4 , 'Borsa di Zurigo');
INSERT INTO AppartenenzaTitoli (IdTitolo, NomeBorsa) VALUES (5 , 'Borsa di Zurigo');
INSERT INTO AppartenenzaTitoli (IdTitolo, NomeBorsa) VALUES (6 , 'Borsa di Zurigo');
INSERT INTO AppartenenzaTitoli (IdTitolo, NomeBorsa) VALUES (7 , 'Borsa di Parigi');
INSERT INTO AppartenenzaTitoli (IdTitolo, NomeBorsa) VALUES (8 , 'Borsa di Parigi');
INSERT INTO AppartenenzaTitoli (IdTitolo, NomeBorsa) VALUES (9 , 'Borsa di Parigi');


