MovieStar

Un progetto di Ingegneria Del Software I, per l’Università di Napoli Federico II

DOCUMENTO DI DESIGN DEL SISTEMA

ANALISI DELL’ARCHITETTURA

LAYER

CRITERI DI DESIGN

Abbiamo optato per il modello MVC (Model – View – Controller), nello specifico nell’ambito mobile ogni classe di tipo View presenta l’etichetta “Activity” e nell’ambito desktop ogni classe di tipo View presenta l’etichetta “Schermata”. 

Per una maggiore organizzazione del codice i metodi necessari per il fetch di operazioni da Firestore sono stati inseriti nelle classi “DAO” relative ai model che tali metodi andavano a reperire. 

SERVIZI CLOUD UTILIZZATI

Firebase: Backend-as-a-Service — BaaS

Molti database richiedono che il client esegua delle chiamate HTTP per ricevere e sincronizzare i dati; sono quindi event driven e comunicano la presenza di nuovi dati solo su richiesta esplicita. Connettendo la propria app a Firebase, invece, non si utilizza il normale protocollo HTTP, bensì un Websocket (decisamente più rapido di HTTP). Non c’è quindi bisogno di effettuare chiamate WebSocket individuali in quanto occorre una sola “socket connection”; tutti i dati vengono automaticamente sincronizzati mediante questo singolo WebSocket, l’unico limite di velocità è dettato dalla connessione del client, e non dipende in alcun modo dal protocollo. Firebase invia i nuovi dati non appena vengono aggiornati; quando un client effettua un aggiornamento tutti gli altri client connessi ricevono tale aggiornamento in un istante.

Firebase – Authentication

Molto simile a quanto offerto da Cognito; ma si integra in modo effortless con Firestore.

Per loggare un utente occorre prima chiedere all’utente stesso le proprie credenziali (email e password / un token OAuth proveniente da un altro identity provider autorizzato); dopodiché passando queste credenziali al Firebase Authentication SDK sarà Firebase stesso a verificare le credenziali ed inviare una risposta al client. 

Firebase – Cloud Firestore

Un cloud database flessibile e scalabile di tipo NoSQL, utile per immagazzinare e sincronizzare dati per il development lato client e lato server (Firebase e Google Cloud). Consente di mantenere i dati sincronizzati tra diverse app client attraverso realtime listeners; offre inoltre supporto offline sia lato web sia lato mobile. Offre infine un’integrazione nativa con altri servizi Firebase e Google Cloud, incluse le Cloud Functions.

(Desktop) Amazon – RDS

Amazon Relational Database Service è un servizio di gestione per database che consente una facile scalabilità ed una forte efficienza, grazie a prestazioni ottimali e sicurezza garantita. 

DIAGRAMMA DI GANTT

Proposta di impegno risorse e pianificazione attività

L’idea

Movie Star è un ramo di “CineMates”, nello specifico è un’applicazione nata dall’esigenza di recensire mediante mezzi informatici i film visti di recente, o anche quelli del cuore visti durante l’infanzia. 

Lo scopo di questo progetto è proporre agli utenti un applicativo intuitivo, con una forte libertà di utilizzo, che consenta agli utenti di esprimere la propria opinione riguardo ad un film visto, sia mediante una vera e propria recensione, o meglio “un commento”, sia mediante un voto da 1 a 5; per rappresentare tale voto abbiamo scelto di utilizzare le classiche “stelline”, tipiche del settore dell’hôtellerie ma anche del mondo del cinema – vedasi Walk of Fame.

Il focus del progetto è stato quindi invogliare l’utente ad utilizzare la lista dei film preferiti, consentendogli di aggiungere dei film. In aggiunta, in accordo col committente, l’utente può utilizzare l’applicativo anche come “reminder” ovvero personalizzando la propria lista di film da vedere. Anche questo requisito nasce da una necessità: quante volte abbiamo voglia di vedere un film ma non abbiamo idee e quante volte invece vorremmo vedere un film in particolare ma in quello specifico momento non abbiamo tempo a sufficienza per guardarlo? Ecco che nasce Movie Star, facendo di necessità virtù.

In questo periodo difficile a causa del COVID-19 tutti noi ci siamo ritrovati relegati in casa, con i cinema chiusi, e senza la possibilità di scambiarci opinioni sui film appena visti insieme. Movie Star è un’occasione per esprimere sé stessi, per condividere, per leggere, per sentirci parte del mondo del Cinema, senza andare al cinema. 

Prima di iniziare a progettare ci siamo chiesti quindi: cosa vorrebbe un utente da un’applicazione di questo tipo? Ed abbiamo quindi fatto qualche ricerca riguardo quelli che pensiamo saranno i principali fruitori: gli appassionati del cinema, un po’ critici e sicuramente tanto recensori.

Ma in cosa consiste una recensione? Per noi una recensione è in realtà un commento personale volto a mettere in luce un particolare aspetto (positivo o negativo che sia) di un determinato prodotto. Per conseguire l’obiettivo della libertà e proporre un prodotto più moderno, incentrato sul modello dei social, abbiamo quindi optato per la nomenclatura “commento”. Ciò che fa share, che diventa virale, sono i “meme”, le immagini, le frasi simpatiche, i momenti clou; Movie Star è la piattaforma su cui condividere tutto questo, ma non solo. Parte fondamentale di un film è quanto questo ci emoziona, cosa ci trasmette e in che modo. Movie Star è quindi anche un luogo sicuro in cui struggersi per il finale di un film, o, perché no, condividere teorie complottiste (la trottola si ferma, è ancora un sogno?)

Il target di utenti

Chi sono gli utenti che useranno Movie Star?

Fondamentalmente sono appassionati di Film o persone con la passione per l’organizzazione. L’età di tali individui spazia ampiamente, ma la più grande fetta di mercato coinvolge sicuramente una clientela abbastanza giovane (13-40 anni). Tali utenti hanno solitamente diverse competenze ed abilità, anche in ambito informatico.

I loro compiti più frequenti riguarderanno la visualizzazione e recensione di un film, con lo scopo di condividere la propria opinione o scoprire nuovi film.

L’ambiente finora descritto, quindi, risulta un ambiente molto libero, socialmente “borghese”.

Quali sono i driver di domanda degli utenti target? Quali sono le loro priorità?

Un applicativo funzionale che consente una forte interazione e permette di esprimere liberamente la propria opinione, commentando anche più volte uno stesso film, volendo anche frame per frame.

Alcune scelte implementative

**** Modifica di una recensione inserita in precedenza: Movie Star attua una politica restrittiva riguardo la modifica di un commento inserito in precedenza, questo per consentire in futuro di ampliare l’insieme di funzionalità attualmente previsto, implementando ad esempio la possibilità di aggiungere reazioni ad un particolare commento. Per questo motivo non è possibile modificare un commento inserito in precedenza, ma qualora si ritenga opportuno il commento può essere eliminato e riscritto come si desidera. Questa politica è volta a tutelare l’utente.


Usabilità

Cos’è l’usabilità? E’ il grado con cui il prodotto può essere usato da specifici utenti per raggiungere specifici obiettivi con efficacia, efficienza e soddisfazione in uno specifico contesto di utilizzo.

L’efficacia è l’accuratezza e la completezza con cui gli utenti raggiungono gli specifici obiettivi, è quindi traducibile nel “livello di precisione” con cui l’utente riesce a raggiungere i suoi scopi.

L’efficienza, invece, è la quantità di risorse spese in relazione all’accuratezza e alla completezza con cui gli utenti raggiungono gli obiettivi; un sistema efficace richiede una quantità di risorse direttamente proporzionale alla propria efficacia. Per quantificare l’efficienza si può pensare al tempo impiegato per raggiungere un determinato scopo.

Alla luce di quanto appena descritto abbiamo, sin dalle fasi iniziali di prototipazione dell’applicativo, chiesto ad un bacino di utenti (non novizi del settore) (15 utenti) di valutare efficacia, efficienza, ed il loro rapporto, per ottenere un feedback. Inoltre abbiamo effettuato dei test controllati, monitorando i percorsi ed i tempi che ogni utente “sceglieva” per effettuare una determinata operazione. Tutti gli utenti presenti nel campione riuscivano ad usare a pieno l’applicazione entro i primi 5 minuti di utilizzo, definendola intuitiva e “facile da usare”.

Con utenti novizi questi tempi si sono dilatati, giungendo a massimo 10 minuti.

Sia gli utenti occasionali che gli utenti continuativi analizzati sono rimasti ampiamente sotto i tempi soglia prefissati nei requisiti. Per questa ragione non è stato ritenuto necessario offrire supporto agli utenti (sussidi, help desk…). Questa prima fase di analisi è stata effettuata utilizzando dei mockup ed interrogando gli utenti, chiedendogli cosa si aspettassero che accadesse una volta premuto un determinato pulsante, al variare dell’input. Iterando questo processo siamo giunti ai mock-up presenti in questo documento.

PROGETTAZIONE HUMAN-CENTERED

Risulta chiaro, quindi, che l’approccio scelto per la realizzazione di questo progetto è di tipo human-centered, con coinvolgimento attivo degli utenti ed un’ampia iterazione tra le fasi di “progettazione” e “realizzazione”. La massima espressione di questo approccio avverrà mediante la descrizione dei casi d’uso.

PROGETTAZIONE UNIVERSALE

Un altro elemento portante di questo progetto è stata la filosofia del design universale (“La progettazione di prodotti e ambienti usabili da tutte le persone, al massimo grado possibile, senza la necessità di adattamenti o progettazioni speciali”), utilizzando mezzi quali Firebase per avvicinarsi quanto più all’idea di “accessibilità”.

VALUTAZIONE DELL’USABILITÀ’ SUL CAMPO

In questa fase del progetto siamo quindi ad un terzo livello di maturità: il prodotto funziona, fornisce le funzionalità necessarie ed è facile da usare, ma come renderlo invisibile durante l’uso? Per passare a tale livello di maturità è stato necessario attendere le fasi finali di sviluppo, e procedere con una grande gamma di test, coinvolgendo gli utenti target. Nonostante l’applicativo fornito fosse una demo, alcuni degli utenti hanno dimostrato la volontà di voler utilizzare Movie Star con più frequenza, e con più funzionalità, limitandosi non solo a creare e costruire liste, ma volendo sempre più condividere ed interagire con altri utenti. Movie Star è diventato dunque parte dell’esperienza “guardare e recensire un film”, transumanando.

Il goal, dunque, è stato fissato in linea con il modello ISO 13407, seguendone le linee guida.

TOLLERANZA VERSO L’ERRORE

Di fondamentale importanza è stato anche realizzare un sistema che fosse tollerante verso l’errore, e che contemporaneamente fosse in grado di garantire il numero minore di errori possibili, a questo fine i campioni di utenti di cui sopra sono stati intervistati e studiati durante le loro interazioni col sistema, chiedendo loro di ipotizzare gli eventi scaturiti dalla pressione di un determinato pulsante e così via.

Analizziamo le tipologie di errori:

Azione intenzionale ma errata: l’utente voleva agire ma desiderava ottenere uno scopo diverso da quello ottenuto.

Azione errata e non intenzionale (o lapsus): secondo il modello di Norman l’utente dopo aver formato correttamente l’azione ed averla specificata, ne ha eseguita invece un’altra, errata. Questo avviene ad esempio quando due pulsanti sono tra loro vicini, o simili.

Azione spontanea: un riflesso, considerabile errore solo se genera effetti collaterali non desiderati.

Azione involontaria: ad esempio la pressione accidentale di un pulsante su una pagina appena caricata.

Per evitare i lapsus abbiamo utilizzato etichette chiare che evidenziassero immediatamente il tipo di azione da compiere (soprattutto qualora si passasse da azioni distruttive a costruttive e viceversa). Abbiamo inoltre predisposto la presenza di popup di conferma qualora l’azione da intraprendere fosse di tipo distruttivo (utilizzando come risposta di preset quella di tipo inoffensivo).

Abbiamo dunque analizzato le azioni tipiche dei volontari e provveduto a riprogettare il sistema per prevenire determinati errori, permettendo comunque sempre un percorso di recupero dall’errore (solitamente backward recovery), ispirandoci allo standard ISO 9241-110.

VALUTARE L’USABILITÀ’

Giunti a questo punto, in quanto step fondamentale in un tipo di progettazione human-centered, siamo passati a una fase di verifica e validazione. Il primo punto è stato quindi verificare che il sistema facesse solo e soltanto quanto documentato; il secondo è stato invece validare la corrispondenza tra requisiti e funzionalità effettive del sistema.

Abbiamo quindi condotto degli usability test, in seguito ad una nostra prima fase euristica valutazione (effettuata sulla base delle dieci euristiche di Nielsen), utilizzando principalmente test di compito.

Ecco i compiti assegnati:

1) Cosa faresti per aggiungere un determinato film ad una lista?

2) Cosa faresti per eliminare da una lista un film ad essa aggiunto in precedenza?

3) A. Come procederesti se volessi aggiungere un determinato utente alla tua lista amici? 

B. E se in seguito volessi rimuoverlo?

4) Inserisci un commento ed un voto relativamente al seguente film: “Titanic”

5) Cambia la tua password

Il tasso di successo registrato è stato del 100%, ma sono stati riscontrati problemi relativamente all’inserimento di una recensione**, questo perché le funzioni sono nascoste a meno che il film non sia presente tra i film visti (è evidente che per vincoli di dominio non abbia molto senso recensire un film non visto). Questa scelta è stata intenzionale durante la progettazione, quindi attribuiamo i tempi (comunque nella norma) leggermente maggiorati ad un contesto “simulato” piuttosto che ad un errore di progettazione. Con questo fine abbiamo deciso di ripetere tali test in un ambiente meno controllato. I test effettuati semplicemente osservando l’utente hanno confermato che l’utente non aveva problemi a recensire un film visto.

Di seguito i dati utilizzati per l’analisi:

Abbiamo poi trascorso gli ultimi giorni di testing ascoltando i nostri utenti volontari, migliorando ogni giorno l’interfaccia dell’applicazione, valutando e capendo le necessità ed i desideri dell’utente.


PROTOTIPAZIONE FUNZIONALE

Statechart – Accesso:

Statechart – Commenti:

Statechart – Bottom menu

Statechart – Film

Statechart – Mostra Dettagli Film

Statechart – Profilo

Statechart – Registrazione

Statechart – Social

Statechart – Verifica


ORGANIZZAZIONE GERARCHICA

Film

Social

Profilo

Bottom Menu

Edit Profilo

Autenticazione

Si allega, inoltre, un esempio di esecuzione (cliccare qui per aprire l’immagine in una nuova finestra).

Un altro esempio di esecuzione (qui per il link)

Log ottenuti mediante Firebase e Google Analytics riguardanti “Pagine e Schermate”

Panoramica Coinvolgimento -1

Panoramica Coinvolgimento – 2

Analisi eventi

TABELLA DEGLI SVILUPPI

Requisiti

Documento dei Requisiti Software

Requisiti funzionali – mobile

Nome Registrazione alla piattaforma
ID Mobile_RF01
DescrizioneIl sistema deve consentire ad un nuovo utente (o un utente che desidera creare un nuovo account) la registrazione, compilando i campi previsti (email, nome utente e password)
Nome Accesso alla piattaforma
ID Mobile_RF02
DescrizioneIl sistema deve consentire l’accesso alla piattaforma, ad un utente registrato (e verificato) in precedenza, compilando i campi previsti (email, nome utente e password)
Nome Verifica dell’account
ID Mobile_RF03
DescrizioneIl sistema deve prevedere obbligatoriamente che l’account sia verificato, consentendo quindi ad un utente appena registrato/che desideri ricevere un nuovo codice di verifica, la possibilità di verificare il proprio account
Nome Modificare password
ID Mobile_RF04
DescrizioneIl sistema deve consentire ad un utente registrato in precedenza di modificare la propria password.
Nome Effettuare ricerche
ID Mobile_RF05
DescrizioneIl sistema deve consentire ad ogni utente autenticato la possibilità di effettuare ricerche sia tra gli utenti che tra i film presenti nel database della piattaforma, compilando un apposito campo di testo e mostrando i risultati (qualora esistenti) che corrispondono a quanto chiesto dall’utente.
Nome Inviare richieste di collegamento ad un altro utente
ID Mobile_RF06
DescrizioneIl sistema deve consentire ad un utente autenticato di poter inviare richieste di collegamento ad un qualsiasi altro utente registrato alla piattaforma.
Nome Rispondere a richieste di collegamento
ID Mobile_RF07
DescrizioneIl sistema deve consentire ad un utente di visualizzare e rispondere a richieste di collegamento ricevute da altri utenti (accettare/respingere una richiesta).
Nome Rimozione utente da lista amici
ID Mobile_RF08
DescrizioneIl sistema deve consentire ad un utente autenticato di poter rimuovere un determinato utente dalla propria lista amici.
Nome Aggiungere film ad una lista
ID Mobile_RF09
DescrizioneIl sistema deve consentire agli utenti autenticati di poter aggiungere un determinato film alla lista dei film visti/preferiti/da vedere.
Nome Visualizzare informazioni film
ID Mobile_RF10
DescrizioneIl sistema deve consentire agli utenti autenticati di visualizzare tutte le informazioni relative ad un film (trama, titolo, commenti inseriti da altri utenti…)
Nome Recensire film
ID Mobile_RF11
DescrizioneIl sistema deve consentire ad un utente autenticato la possibilità di recensire un film visto (aggiungere un voto oppure un commento).
Nome Rimozione film da una lista
ID Mobile_RF12
DescrizioneIl sistema deve consentire ad un utente autenticato di rimuovere un particolare film da una delle liste (lista dei film visti, lista dei film da vedere, lista dei film preferiti).
Nome Modificare recensione
ID Mobile_RF13
DescrizioneIl sistema deve consentire ad un utente che ha inserito una recensione in precedenza di poterla modificare: sovrascrivere un voto oppure eliminare e aggiungere un nuovo commento. ****
Nome Visualizzazione e condivisione dell’id utente
ID Mobile_RF14
DescrizioneIl sistema deve consentire ad un utente autenticato la possibilità di visualizzare e condividere il proprio id utente.
Nome Visualizzazione di una lista
ID Mobile_RF15
DescrizioneIl sistema deve consentire ad un utente autenticato la possibilità di consultare le proprie liste (amici, film visti, film da vedere e film preferiti).
Nome Visualizzazione film in tendenza
ID Mobile_RF16
DescrizioneIl sistema deve consentire ad un utente autenticato di poter visualizzare i film in tendenza in quello specifico istante.
Nome Effettuare il logout dalla piattaforma
ID Mobile_RF17
DescrizioneIl sistema deve consentire ad un utente autenticato di poter effettuare il logout dalla piattaforma.

Requisiti non funzionali – mobile

Nome Usabilità
ID Mobile_RNF01
DescrizioneUn nuovo utente deve essere in grado di utilizzare la piattaforma come desidera, entro un massimo di 1 ora di utilizzo.
Nome Sicurezza: accesso ai dati
ID Mobile_RNF02
DescrizioneIl sistema deve utilizzare un metodo non diretto di accesso al database.
Nome Sicurezza: verifica account
ID Mobile_RNF03
DescrizioneIl sistema deve richiedere che un utente abbia verificato il suo account prima di consentirgli l’accesso alla piattaforma.
Nome Sicurezza: formazione password
ID Mobile_RNF04
DescrizioneIl sistema deve richiedere che l’utente in fase di registrazione/in qualsiasi fase di modifica della password scelga una password di almeno 6 caratteri.

Requisiti di dominio – mobile

NomeGDPR
ID Mobile_RD01
DescrizioneIl sistema deve aderire agli standard del Regolamento Generale sulla Protezione dei Dati.

MOCK-UP DELL’APPLICAZIONE MOBILE

Popup

Per garantire una migliore leggibilità i popup sono stati creati dinamicamente; il contenuto a cui far riferimento è quindi quello presente all’interno della seguente tabella:

POPUPTESTO
MCK_V01Codice inviato!
MCK_Password00Link inviato con successo! Controlla la tua casella di posta ed inserisci il codice ricevuto
MCK_Password01Password reimpostata con successo!
MCK_Password02Compilare i campi di testo!
MCK_Password03Codice non valido!
MCK_Password04La password deve essere di almeno sei caratteri!
MCK_RespingiRichiestaRichiesta rimossa con successo
MCK_AccettaRichiestaUtente aggiunto con successo
MCK_F01Sei sicuro di voler inviare una richiesta di collegamento a “NomeUtente#1234”?
MCK_F02Sei sicuro di voler eliminare dai tuoi amici “NomeUtente#1234”?
MCK_M01Sei sicuro di voler eliminare il commento? Quest’azione è irreversibile
MCK_M02Sei sicuro di voler leggere i commenti relativi a questo film? Potrebbero contenere spoiler
MCK_L01Eliminando il film dalla lista lista dei tuoi film visti eliminerai anche gli eventuali commenti al film postati in precedenza. Continuare?
MCK_L02Eliminare il film dalla lista dei preferiti?
MCK_L03Eliminare il film dalla lista dei film da vedere?

GLOSSARIO
Voto
Un voto è una valutazione da 1 a 5 espressa da un utente, che riguarda un particolare film.

Amico
Un amico è un utente presente nella lista amici del Current User, per diventare amici occorre inviare ed accettare una richiesta di collegamento.

Richiesta Amico
Il termine richiesta amico e richiesta di collegamento sono usati indifferentemente

Stellina
La stellina/stella è relativa al voto, come convenzionalmente accade nel mondo dell’hôtellerie

GDPR 
Il Regolamento generale per la protezione dei dati personali n. 2016/679 (General Data Protection Regulation o GDPR) è la normativa europea in materia di protezione dei dati
Iscritti
Gli iscritti sono tutti gli utenti registrati alla piattaforma, verificati. Tali utenti hanno fornito il consenso per ricevere mail promozionali.

MODELLI DI DOMINIO – CLASSI DI ANALISI mobile
Class Diagram per Use Case 1: Registrazione alla piattaforma


Class Diagram per Use Case 2: Accesso alla piattaforma




Class Diagram per Use Case 3: Verifica dell’account




Class Diagram per Use Case 4: Modificare password




Class Diagram per Use Case 5: Effettuare ricerche

Class Diagram per Use Case 6: Inviare richieste di collegamento ad un altro utente

Class Diagram per Use Case 7: Rispondere a richieste di collegamento

Class Diagram per Use Case 8: Rimozione utente da lista amici




Class Diagram per Use Case 9: Aggiungere film ad una lista





Class Diagram per Use Case 10: Visualizzare informazioni film



Class Diagram per Use Case 11: Recensire film



Class Diagram per Use Case 12: Rimozione film da una lista



Class Diagram per Use Case 13: Modificare recensione

Class Diagram per Use Case 14: Visualizzazione e condivisione dell’id utente



Class Diagram per Use Case 15: Visualizzare liste




Class Diagram per Use Case 16: Visualizzare film in tendenza

Class Diagram per Use Case 17: Effettuare il logout dalla piattaforma






DIAGRAMMI DI SEQUENZA DI ANALISI
Sequence 1: Registrazione alla piattaforma







Sequence 2: accesso alla piattaforma

Sequence 3: Visualizzare informazioni film

Sequence 4: Aggiungere recensione






ACTIVITY DIAGRAM DI ANALISI

L’utente cerca un film e lo apre (open film dopo ricerca)



Tabella degli sviluppi

Si riporta, nuovamente, per completezza, la tabella degli sviluppi.

CRC CARDS – mobile

Nome ClasseAggiungiAListaFilmController
Sottoclassi//
Superclassi//
ResponsabilitàAggiungere un film ad una lista film (Preferiti/Visti/DaVedere)
CollaborazioniFilmDAO
Nome ClasseCondividiIdUtenteController
Sottoclassi//
Superclassi//
ResponsabilitàCondividere mediante android l’id utente
CollaborazioniUtente
Nome ClasseCurrentUser
Sottoclassi//
SuperclassiApplication
ResponsabilitàContenere i dati relativi all’istanza di Utente corrente onde evitare di doverli caricare più volte durante una singola istanza della stessa applicazione
CollaborazioniUtente, Film
Nome ClasseEffettuaRicercheController
SottoclassiGetData -> AsyncTask
Superclassi//
ResponsabilitàCerca le parole chiave ricevute nell’API e crea un model Film da inserire nella RecyclerView
CollaborazioniFilm
Nome ClasseForgotPasswordController
Sottoclassi//
Superclassi//
ResponsabilitàManda un nuovo codice per reimpostare la password, se necessario. Cambia la password del current user con una da lui indicata
Collaborazioni//
Nome ClasseLoginController
Sottoclassi//
Superclassi//
ResponsabilitàEffettua il login via firebase previ controlli, carica i dettagli dell’utente appena loggato
CollaborazioniUtente, UtenteDAO
Nome ClasseLogoutController
Sottoclassi//
Superclassi//
ResponsabilitàEffettua il logout ed elimina i dati per il login automatico salvati in precedenza
CollaborazioniUtenteDAO
Nome ClasseModificaRecensioneController
Sottoclassi//
Superclassi//
ResponsabilitàElimina una recensione chiamando il relativo metodo di RecensioneDAO / modifica il numero di stelle (voto) precedentemente isnerito dall’utente
CollaborazioniRecensioneDAO
Nome ClasseMostraDettagliFilmController
Sottoclassi//
Superclassi//
ResponsabilitàApre un film, decidendo quale istanza visualizzare, sulla base di quanto presente nel Current User
CollaborazioniCurrentUser, Film, UtenteDAO
Nome ClassePopupController
Sottoclassi//
Superclassi//
ResponsabilitàMostra popup di ogni tipo (avviso, errore, conferma operazione) e gestisce l’input utente richiamando le apposite funzioni
CollaborazioniModificaRecensioneController, RimuoviAmicoController, RecensioniFilmController, RimuoviFilmDaListaController <- operazioni di conferma; 
Nome ClasseRecensioniFilmController
Sottoclassi//
Superclassi//
ResponsabilitàGrazie all’overloading del metodo onClickLeggiCommenti stabilisce se le recensioni che l’utente vuole visualizzare contengono spoiler o no, e all’evenienza mostra un popup per avvisare l’utente e consentirgli di procedere o annullare l’operazione. Consente inoltre di aggiungere un commento ad un film visto.
CollaborazioniRecensioneDAO, PopupController, 
Nome ClasseRegistrazioneController
Sottoclassi//
Superclassi//
ResponsabilitàControlla i campi inseriti, eventualmente registra l’utente
CollaborazioniUtente, UtenteDAO
Nome ClasseRicercaUtentiController
Sottoclassi//
Superclassi//
ResponsabilitàSfrutta UtenteDAO permettendo di mostrare gli utenti che corrispondono alle keyword inserite
CollaborazioniUtenteDAO
Nome ClasseRichiesteAmicoController
Sottoclassi//
Superclassi//
ResponsabilitàGrazie a UtenteDAO carica le richieste amico presenti e consente di inviarne di nuove
CollaborazioniCurrentUser, UtenteDAO
Nome ClasseRimuoviAmicoController
Sottoclassi//
Superclassi//
ResponsabilitàConsente l’eliminazione di un amico dalla lista amici, previa conferma
CollaborazioniUtenteDAO, PopupController
Nome ClasseRimuoviFilmDaListaController
Sottoclassi//
Superclassi//
ResponsabilitàConsente di rimuovere un film da una qualsiasi lista (se precedentemente presente)
CollaborazioniFilmDAO, PoupController, MostraDettagliFilmController
Nome ClasseRispondiRichiestaAmicoController
Sottoclassi//
Superclassi//
ResponsabilitàAccettare/Respingere una richiesta amico
CollaborazioniUtenteDAO
Nome ClasseTrendingFilmController
SottoclassiGetData -> AsyncTask
Superclassi//
ResponsabilitàCarica i film in tendenza nella schermata relativa
CollaborazioniFilm
Nome ClasseVerificaController
Sottoclassi//
Superclassi//
ResponsabilitàManda email con link di verifica e controlla se l’utente in questione è verificato
Collaborazioni//
Nome ClasseVisualizzaListaController
Sottoclassi//
Superclassi//
ResponsabilitàCarica una lista tra quelle presenti
CollaborazioniUtenteDAO, LoginController, FilmDAO
Nome ClasseFilmDAO
Sottoclassi//
Superclassi//
ResponsabilitàGestisce interazioni con Firebase, lato “Film”
CollaborazioniFilm, CurrentUser, LoginController, UtenteDAO
Nome ClasseRecensioneDAO
Sottoclassi//
Superclassi//
ResponsabilitàGestisce interazioni con Firebase, lato “Recensione” (commenti e voti)
CollaborazioniRecensione, ModificaRecensioneController, RecensioniFilmController, LoginController
Nome ClasseUtenteDAO
Sottoclassi//
Superclassi//
ResponsabilitàGestisce interazioni con Firebase, lato “Utente” (caricamento liste, amici, trovare utenti tramite il loro id/nome…)
Collaborazioni
Nome ClasseCommento
Sottoclassi//
SuperclassiRecensione
ResponsabilitàRappresenta un commento di un utente
CollaborazioniRecensioneDAO
Nome ClasseFilm
Sottoclassi//
Superclassi//
ResponsabilitàRappresenta un oggetto film
CollaborazioniFilmDAO
Nome ClasseUtente
Sottoclassi//
Superclassi//
ResponsabilitàRappresenta un utente iscritto alla piattaforma
CollaborazioniUtenteDAO