Appello del 17 giugno 2016

Problema [6/30]

WhatsApp è l'applicazione di istant messaging per piattaforme mobili attualmente più utilizzata al mondo. È disponibile per tutti i maggiori sistemi operativi e offre la medesima esperienza utente su ognuna delle piattaforme su cui opera. Al primo accesso, l'applicazione rileva il numero di telefono associato al cellulare e crea automaticamente una utenza. Un utente può attivamente modificare il proprio profilo, ossia il proprio username e l'immagine associata a esso. Come prima pagina, l'applicazione visualizza la lista delle conversazioni recenti, nella quale appare il nome dell'interlocutore, la sua immagine e l'ora dell'ultimo messaggio scambiato. È inoltre possibile ricercare una conversazione per nome utente oppure effettuare una ricerca fra i contatti in rubrica associati a una utenza Whatsapp. Una singola conversazione visualizza la lista dei messaggi scambiati con quell'interlocutore, e l'ultimo suo accesso alla conversazione. Ogni messaggio visualizza se esso è stato ricevuto o meno dal destinatario e se è stato letto o meno. È possibile inviare un messaggio di testo, o un allegato (immagine, video, audio, posizione geografica). Il destinatario riceverà una notifica, che visualizzerà il nome del mittente del messaggio e un'anteprima dello stesso per i messaggi testuali. Il sistema permette inoltre di creare conversazioni di gruppo. L'utente che crea il gruppo è contraddistinto come amministratore. L'amministratore può aggiungere altri utenti e fra questi nominare altri amministratori.

Si utilizzino i diagrammi dei casi d'uso per modellare gli scenari sopra descritti. Non ne è richiesta la descrizione testuale.

Problema [7/30]

Per rapporto qualità/prezzo, il Kindle di Amazon è uno dei migliori ebook reader attualmente sul mercato. Negli anni, Amazon ne ha prodotte molte versioni. Attualmente sussistono due versioni principali: Kindle, e Kindle Paperwhite, che utilizzano il medesimo sistema operativo. Amazon ha però voluto distinguere per alcuni tratti le rispettive UI, in modo tale da poter sfruttare al meglio le caratteristiche differenti dei due schermi e-ink. Ecco quindi che pulsanti, slider e liste hanno un look-and-feel differente a seconda della versione. La gestione dell'interfacciamento con l'utente avviene utilizzando un classico pattern MVC. Per ogni libro letto, oltre al suo contenuto, il Kindle associa una serie di metadati e statistiche, come ad esempio la percentuale già letta, il tempo trascorso dall'inizio della lettura, eccetera. Sulla base del formato del libro, che può essere AZW3, PDF o MOBI, il sistema operativo seleziona un algoritmo specializzato di impaginazione a video (rendering), che ritorna la successiva pagina da leggere. Inoltre, per aumentare l'efficienza di lettura, il Kindle non precarica in RAM l'intero libro, ma solo la pagina attualmente il lettura. Tale meccanismo è stato progettato in modo da essere completamente trasparente alle classi che accedono all'interfaccia di recupero delle informazioni di un libro.

Si modelli tale sistema tramite un diagramma delle classi che utilizzi opportuni design pattern. Utilizzando un diagramma di sequenza, si descriva poi la "renderizzazione" della prima pagina di un libro appena selezionato dalla lista di libri disponibili nella pagina di apertura del Kindle.

Problema [3/30]

L'interfaccia Microwave espone i metodi per cucinare una pietanza al suo interno. Tale interfaccia include il metodo cook, con il quale è possibile decidere di cucinare una pietanza al microonde oppure alla griglia, usando la resistenza interna. La tipologia di cottura è specificata attraverso una opportuna enumerazione. Alcune versioni di prodotto presentano anche un timer, che permette di cucinare cibi per una quantità di tempo prestabilita.

Utilizzando l'Interface Segregation Principle, si modelli una soluzione che permetta di avere sia modelli di prodotto che utilizzino il timer, sia modelli che non lo utilizzino.

Domanda aperta [4/30]

Discutere brevemente ma esaustivamente le interpretazioni (per significato e contesto d'uso) della nozione di copertura (coverage) nel dominio dell'ingegneria del software.

Domanda aperta [5/30]

Discutere la relazione tra encapsulation e information hiding, esaminando criticamente l'affermazione: encapsulation is a programming language feature; information hiding is a design principle.

Domanda aperta [6/30]

Fornire una definizione dei concetti di milestone e baseline, specificando la relazione che intercorre tra essi e come ciascuno sia da utilizzare all'interno delle attività di progetto.