Politecnico di Milano

Documenti analoghi
Politecnico di Milano Ingegneria del Software a.a. 2008/09

Politecnico di Milano

Politecnico di Milano. Ingegneria del Software a.a. 2006/07. Appello del 14 settembre 2007 Cognome Nome Matricola

Politecnico di Milano Facoltà di Ingegneria Industriale INFORMATICA B Appello del 21 Luglio 2010 COGNOME E NOME RIGA COLONNA MATRICOLA

Programmazione 1 A.A. 2015/2016

FONDAMENTI DI INFORMATICA

Ogni parte non cancellata a penna sarà considerata parte integrante della soluzione.

Implementazione ADT: Alberi

Laboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo

3. un metodo che restituisce l elenco delle matricole di tutti gli studenti del corso;

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione

Esame di Ingegneria del software Appello del 16 febbraio 2018

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercitazione n 2. Obiettivi

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercizio 1: archivio CD e DVD

GESTIONE DEGLI ERRORI

Progettazione del Software

Politecnico di Milano

Algoritmi di Ricerca. Esempi di programmi Java

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

ESERCIZIO 1 Si consideri la seguente funzione f (A, B, C, D) non completamente specificata definita attraverso il suo ON-SET e DC-SET:

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Informatica 1. Prova di recupero 21 Settembre 2001

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Corso di Fondamenti di Informatica (M-Z) Prof. Aldo Franco Dragoni. Prova Scritta 19 aprile 2007

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Algoritmi di Ricerca. Esempi di programmi Java

Alberi Binario in Java

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Esercizi sui metodi. Carla Limongelli. Maggio Esercizi 1

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione Orientata agli Oggetti in Linguaggio Java

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Traccia delle soluzioni. Si consideri il seguente enunciato: Spett Ditta,

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Polimorfismo parametrico vs polimorfismo per inclusione

Le eccezioni in Java

Cognome e Nome : Corso e Anno di Immatricolazione: Modalità di Laboratorio (Progetto/Prova) :

Alcuni diagrammi. OCL (Object Constraint Language)

Transcript:

Politecnico di Milano Anno accademico 2011-2012 Ingegneria del Software Appello del 29 giugno 2012 Cognome: Nome: Matricola: Sezione (segnarne una): Baresi Ghezzi San Pietro Istruzioni 1. La mancata indicazione dei dati anagrafici e della sezione comporta l annullamento del compito. 2. Al termine, consegnare solo i fogli distribuiti utilizzando il retro delle pagine in caso di necessità. Non separare questi fogli. Eventuali fogli di brutta, ecc. non verranno in nessun caso presi in considerazione. È possibile scrivere in matita. 3. È possibile consultare liberamente libri, manuali o appunti. È proibito l uso di ogni dispositivo elettronico (quali calcolatrici tascabili, telefoni cellulari, ecc.). 4. Non è possibile lasciare l aula conservando il tema della prova in corso. 5. Tempo a disposizione: 2h. Esercizio 1: Esercizio 2: Esercizio 3: Esercizio 4: 1

Esercizio 1 Si consideri un applicazione che gestisce archivi di film. Un film può essere a colori o in bianco e nero, e può essere muto. In ogni caso, ha un titolo, un anno di pubblicazione, e un elenco di artisti, fra cui il regista e un cast di attori. Il sistema deve permettere ai soli utenti registrati di inserire proprie recensioni, relative a un film o a un artista per un certo film. L utente quindi seleziona innanzitutto il film e quindi inserisce direttamente la recensione (se si tratta di recensione del film) oppure cerca anche l artista e quindi ne inserisce la recensione. Si chiede di definire: 1. il diagramma UML delle classi che rappresenta questa specifica, arricchendo eventualmente la descrizione con dettagli che qui non sono specificati (ma senza esagerare!); 2. la specifica dell aggiunta di una recensione, con relativa autenticazione, mediante un sequence diagram di UML; 3. la definizione dell utilizzo di un film mediante un diagramma a stati gerarchico. Per poter guardare il film, occorre innanzitutto caricarlo (operazione LOAD). Il film caricato è predisposto per la visione a partire dall inizio. Per vedere il film, occorre fornire il comando START. Il comando PAUSE ferma la visione a un certo punto e la ripresa avviene mediante il comando START. Il comando STOP ferma la visione, riposizionando il sistema all inizio del film. Il comando RESTART consente di riprendere la visione dall inizio: esso corrisponde dunque all abbreviazione della sequenza: STOP START (purché ovviamente il film sia stato caricato). Infine, l operazione END scarica il film dalla memoria. Si ipotizzi anche che un macrostato PLAYABLE indichi che il film è stato caricato in memoria e quindi può essere visionato. 2

Soluzione 3

4

5

Esercizio 2 Si consideri una variante del problema dei film di cui all Esercizio 1, in cui esistono solo i film e i film muti. Si considerino in Java le classi Film e FilmMuto e si discuta se Film debba essere sottoclasse di FilmMuto o viceversa nei seguenti casi alternativi: 1. Film ha due metodi startplayingsound() e startplayingvideo() mentre FilmMuto ha solo il metodo startplayingvideo(). 2. entrambe le classi hanno un solo metodo startplaying() e inoltre esistono due metodi osservatori hasvideo() e hasaudio(). Il metodo startplaying() ha precondizione TRUE per entrambe le classi. Per la classe Film ha post-condizione hasvideo() && hasaudio(), mentre per la classe FilmMuto ha post-condizione hasvideo(). 3. come sopra, ma la post-condizione di startplaying() di FilmMuto, è hasvideo() &&!hasaudio(). Soluzione 1. Film può ereditare da FilmMuto, mentre il viceversa violerebbe la regola della segnatura. 2. Film può ereditare da FilmMuto, mentre il viceversa violerebbe la regola dei metodi, in quanto la postcondizione di Film.startPlaying() implica la postcondizione di FilmMuto.startPlaying() (ossia è pi forte), ma non viceversa. 3. Nessuna possibilità di fare ereditare una dall altra, in quanto la postcondizione di Film.startPlaying() e quella di FilmMuto.startPlaying() sono in contraddizione: nessuna delle due implica l altra. 6

Esercizio 3 Si supponga di voler realizzare un applicazione per gestire i film di una videoteca personale. Sono date le classi Film, e Artista, che contengono le ovvie informazioni: titolo, anno, regista, lista di attori per Film, nome cognome, etc per Artista. La sottoclasse ValArtista di Artista rappresenta un artista recensito e pertanto aggiunge un campo numerico da 1 a 5 che rappresenta la valutazione (5 max, 1 min) per l artista e per un certo film. La classe Videoteca è una collezione di Film. Si definisca per Videoteca un iteratore direttoda(artista a) che consente di iterare su tutti i film della collezione diretti da un certo regista. Si chiede sia la specifica JML del metodo direttoda(artista a) sia l implementazione Java dell iteratore. Il metodo bestof(artista a) restituisce il film con la migliore recensione di un certo regista passato come parametro. Fornire la specifica JML, ipotizzando che una mancata recensione di un film di un regista valga 0. La specifica può basarsi sull iteratore definito in precedenza e sulla disponibilità di un metodo di supporto getvalutazione() per avere la valutazione di un certo film. Si considerino i seguenti due casi per gestire la situazione di regista non presente nella collezione : 1. lo esclude la precondizione; 2. non lo richiede la precondizione, ma, nel caso, viene generata un opportuna eccezione. Soluzione All interno della classe Videoteca si definiscono il metodo e la classe privata per l iteratore: public class Videoteca { private ArrayList<Film> film; //@ensures (*\result e true se f e nella collezione *); public boolean contains (Film f);... public direttoda(artista a) { return new VideoIter(this, a); private static class VideoIter implements Iterator<Film> { private Videoteca vid; private Artista reg; private int n; private /*@ helper @*/ searchnext() { for(; n<vid.size() &&!vid.film.get(n).regista().equals(reg); n++); VideoIter(Videoteca v, Artista a) {vid=v; reg=a; n=0; searchnext(); public boolean hasnext{return n<vid.size(); public Film next() throws NoSuchElementException { if (n>=vid.size()) throw new NoSuchElementException(); Film f = film.get(n); searchnext(); return f; Specifica del metodo bestof(artista a): Si usa il metodo contains definito sopra per Videoteca. Versione con precondizione: //@ requires (\exists Film f; this.contains(f) && f.regista().equals(a); //@ ensures this.contains(\result) && \result.regista().equals(a) && //@ (\forall Film f; contains(f) && f.regista().equals(a); \result.getvalut(a)>= f.getvalut(a); public Film bestof(artista a) Versione con eccezione: //@ ensures this.contains(\result) && \result.regista().equals(a) && //@ (\forall Film f; contains(f) && f.regista().equals(a); \result.getvalut(a)>= f.getvalut(a); //@ signals(notfoundexception e)!(\exists Film f; contains(f) && f.regista().equals(a); public Film bestof(artista a) throws NotFoundException; 7

Esercizio 4 1. Si consideri la specifica fornita nell Esercizio 1 (parte 3) per la classe Film, che descrive come poter vedere un film. In base a questa descrizione, quali sequenze di invocazioni di metodi della classe potrebbero essere definite per testare la classe stessa secondo un metodo black-box? Per ciascuna sequenza di invocazioni, si dica quale è lo scopo atteso del test. 2. Si consideri il seguente metodo in Java che effettua la ricerca binaria in un array: static int binarysearch(int[] search, int find) { int start, end, midpt; start = 0; end = search.length - 1; while (start <= end) { midpt = (start + end) / 2; if (search[midpt] == find) { return midpt; else if (search[midpt] < find) { start = midpt + 1; else { end = midpt - 1; return -1; Soluzione Si fornisca un insieme di casi di test minimo che consenta la copertura di tutte le istruzioni del programma. 1. Alcune sequenze significative: LOAD START STOP END uscita corretta in caso di stop LOAD START STOP START il film riparte dall inizio LOAD START PAUSE START il film riprende dal punto di interruzione (pausa) LOAD START RESTART il film riparte dall inizio LOAD START PAUSE RESTART il film riparte dall inzio dopo una pausa 2. Bastano due casi di test. a) search = [1], find = 0; b) search = [0,1,2,3,4,5,6], find = 1 Il caso (a) copre l istruzione return -1. Il caso (b) fa percorrere tutte le altre istruzioni. 8