Prova di esame del 19 giugno 2017

Documenti analoghi
Compito di Fondamenti della Programmazione: Metodi Evoluti - A.A Prova di esame del 24 settembre 2015

Prova di esame del 22 luglio 2016

Prova di esame del 1 luglio 2019

Compito di Fondamenti della Programmazione: Metodi Evoluti - A.A Prova di esame del 19 luglio 2014

Prova di esame del 16 giugno 2016

SOLUZIONE: come antenato comune. Fondamenti della Programmazione: Metodi Evoluti - A.A Prova d esame del 24 febbraio 2014

Compito di Fondamenti della Programmazione: Metodi Evoluti - A.A Prova di esame del 24 settembre 2013

Esercizio: Lista Circolare

Programmazione in Python per la bioinformatica

La classe java.lang.object

Algoritmi e Strutture di Dati

Concetti Base Encapsulation ed Ereditarietà Programmare con l Ereditarietà. Java: Ereditarietà. Damiano Macedonio

Programmazione in Java (I modulo) Lezione 21: Classi derivate e l'operatore instanceof Riscrivere il metodo tostring() Riscrivere il metodo equals()

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

ereditarietà e polimorfismo

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

Svigruppo. Monga. Il modello di. Asserzioni. What & How Contratti ed ereditarietà Eccezioni. Svigruppo. Monga. Il modello di.

Controllo di flusso negli script: if-then-else

Svigruppo. Monga. Il modello di. Asserzioni. What & How Contratti ed ereditarietà Eccezioni Qualche dettaglio in più sul linguaggio. Svigruppo.

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

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

Corso di Algoritmi e Strutture dati Programmazione Object- Oriented in Java (Parte I)

Strutture di Controllo IF-ELSE

Programmazione orientata agli oggetti La classe Object, metodi e classi final, this. Object

VBA Principali Comandi

Programmazione. Cognome... Nome... Matricola... Compitino del 17 gennaio 2007

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 02/07/2015/ Foglio delle domande /VERSIONE 1 Matricola Cognome Nome

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

Riuso di classi. Ereditarietà. Ereditarietà. Spesso si ha bisogno di classi simili

Progettazione By Contract

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Programmazione con il linguaggio LibreOffice Basic

OOP L 10a Interfacce e classi interne Java

Esame Laboratorio di Programmazione

Introduzione alla programmazione Object Oriented. Luca Lista

Programmazione a Oggetti. Astrazione sui Dati e Iteratori

Linguaggio C: Strutture e Liste Concatenate Valeria Cardellini

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Progettazione By Contract

Programmazione ad oggetti

Esempio su strutture dati dinamiche: ArrayList

Controllo del flusso di esecuzione di un programma

Principi di Progettazione del Software a.a

Il linguaggio PHP. Insegnarvi tutto il PHP? Non esattamente Obiettivo: insegnarvi ad interagire via web con una base dati

Array di array. E' possibile creare strutture a matrice (2D, 3D,..., ND), esempio: double [ ][ ] entrate = new double [NANNI][NMESI];

Programmazione Orientata agli Oggetti

Caratteristiche generali del linguaggio Visual Basic

COGNOME NOME MATRICOLA DATA

Istruzioni Condizionali

CAPITOLO 3 - ALGORITMI E CODIFICA

Paradigmi della PO. Incapsulamento. Ereditarietà. Polimorfismo. Software per TLC - AA 2008/2009 1

FUNZIONI FUNZIONI COME COMPONENTI SW

Fondamenti di Informatica T-1

Progettazione Object-Oriented

Programmazione. Cognome... Nome... Matricola... Prova scritta del 20 febbraio 2012

Introduzione alla programmazione orientata agli oggetti (prima parte) Rel 1.0

PROGRAMMAZIONE Gerarchie di tipi: implementazioni multiple e principio di sostituzione

Laboratorio di Sistemi Polimorfismo Java. Prerequisiti: per la comprensione dell'articolo è necessario conoscere il concetto di Ereditarietà in Java.

Informatica (A-K) 5. Algoritmi e pseudocodifica

OOP Ereditarietà A. FERRARI

Modello sequenziale. Modello sequenziale: i Process 13/11/2014. ENTITY ffsr IS Port ( s,r: IN std_logic; q, qn: OUT std_logic); END ffsr;

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Esercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica

Object-Oriented Programming

UML Introduzione a UML Linguaggio di Modellazione Unificato. Corso di Ingegneria del Software Anno Accademico 2012/13

Uso di Asserzioni alla Hoare nei Linguaggi O.O. Java Modeling Language

Ereditarietà e Polimorfismo

Esercitazione n 2. Obiettivi

Lezione 6 Introduzione al C++ Mauro Piccolo

4. I moduli in Access 2000/2003

Lezione 5: Controllo del flusso e costrutti avanzati

Motorino colore velocità tipo antifurto getvelocità accelera antifurto inserisciantifurto antifurto

Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

Astrazioni sui dati : Specifica di Tipi di Dato Astratti in Java

Array. Walter Didimo

Fondamenti di informatica T-1 (A K) Esercitazione 8: classi e oggetti

Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java

Catia Trubiani. Laboratorio di Ingegneria del Software a.a

Richiami su oggetti e OOP

FUNZIONI FUNZIONI COME COMPONENTI SW

18 - Classi parzialmente definite: Classi Astratte e Interfacce

17 - Classi parzialmente definite: Classi Astratte e Interfacce

Corso di Linguaggi di Programmazione

Esame di Ingegneria del software (360II, 374II) Appello del 15 gennaio 2013

Alberi Binari Alberi Binari

Fondamenti di Informatica

Corso di Laboratorio di Sistemi Operativi

FUNZIONI. Esempi (pseudo-c): dare un nome a una espressione rendere tale espressione parametrica. float f(){ * sin(0.75); } float f1(int x) {

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Orario delle lezioni LABORATORIO TEORIA. mercoledì. martedì aula P/4. lab Turing. Strutture Dati

Esercitazione n 2. Obiettivi

Calcolare x n = x x x (n volte)

Corso di Progettazione del Software

Istruzioni Condizionali

Informatica 1. Prova di recupero 21 Settembre 2001

Transcript:

Prova di esame del 19 giugno 2017 Esercizio 1) [10 punti] Marcare le affermazioni che si ritengono vere. Ogni manda può avere un qualunque numero naturale di affermazioni vere. Vengono assegnati 0.5 punti sia per ogni affermazione vera che viene marcata che per ogni affermazione falsa che viene lasciata non marcata. Analogamente vengono sottratti 0.5 punti sia per ogni affermazione falsa che viene marcata che per ogni affermazione vera che viene lasciata non marcata. 1. a. Il risultato ritornato da una query è fornito sempre da una funzione b. Il risultato ritornato da una query è fornito sempre da un attributo c. Il risultato ritornato da una query è fornito da una funzione o da un attributo d. Il risultato ritornato da un coman è fornito da una procedura o da un attributo 2. La ridefinizione di una feature che è una funzione può a. Cambiare arbitrariamente l implementazione purché vengano rispettati i contratti ereditati b. Cambiare arbitrariamente la lista dei tipi degli argomenti c. Cambiare arbitrariamente il contratto d. Cambiare arbitrariamente il tipo del risultato può essere usata come procedura di creazione 3. Una query a. può essere usata come procedura di creazione b. può essere implementata come una routine c. può apparire nelle precondizioni e postcondizioni di una qualunque routine d. può apparire tra gli invarianti di classe 4. a. Se un loop non definisce un invariante il programma non compila correttamente b. Se la clausola from del loop è vuota il programma compila correttamente c. Il variante del loop deve essere uguale a 0 po l ultima iterazione d. Se la clausola until del loop è falsa si esce dal loop 5. a. Una struttura dati è polimorfica se può contenere riferimenti a oggetti di tipi diversi b. Un assegnazione o un passaggio di argomenti sono polimorfici se la variabile di destinazione (target variable) e l espressione sorgente (source expression) hanno tipi diversi c. Il polimorfismo è la capacità degli oggetti di cambiare il loro tipo a tempo di esecuzione (run-time) d. Un entità è polimorfica se durante l esecuzione può riferirsi ad oggetti di tipi diversi SOLUZIONE: 1. a. Il risultato ritornato da una query è fornito sempre da una funzione b. Il risultato ritornato da una query è fornito sempre da un attributo c. Il risultato ritornato da una query è fornito da una funzione o da un attributo d. Il risultato ritornato da un coman è fornito da una procedura o da un attributo 2. La ridefinizione di una feature che è una funzione può a. Cambiare arbitrariamente l implementazione purché vengano rispettati i contratti ereditati b. Cambiare arbitrariamente la lista dei tipi degli argomenti c. Cambiare arbitrariamente il contratto d. Cambiare arbitrariamente il tipo del risultato Università di Roma Tor Vergata Corso di Laurea in Matematica 1 / 8

3. Una query a. può essere usata come procedura di creazione b. può essere implementata come una routine c. può apparire nelle pre-condizioni e post-condizioni di una qualunque routine d. può apparire tra gli invarianti di classe 4. a. Se un loop non definisce un invariante il programma non compila correttamente b. Se la clausola from del loop è vuota il programma compila correttamente c. Il variante del loop deve essere uguale a 0 po l ultima iterazione d. Se la clausola until del loop è falsa si esce dal loop 5. a. Una struttura dati è polimorfica se può contenere riferimenti a oggetti di tipi diversi b. Un assegnazione o un passaggio di argomenti sono polimorfici se la variabile di destinazione (target variable) e l espressione sorgente (source expression) hanno tipi diversi c. Il polimorfismo è la capacità degli oggetti di cambiare il loro tipo a tempo di esecuzione (run-time) d. Un entità è polimorfica se durante l esecuzione può riferirsi ad oggetti di tipi diversi Università di Roma Tor Vergata Corso di Laurea in Matematica 2 / 8

Esercizio 2) [10 punti] La classe INT_LINKABLE modella un elemento di una lista che può rappresentare valori interi. La sua implementazione è la seguente: class INT_LINKABLE create make feature -- accesso value : INTEGER -- L intero memorizzato in questo elemento next : INT_LINKABLE -- Il successivo elemento della lista feature -- operazioni fondamentali make (i : INTEGER) -- crea l elemento value := i link_to (other: INT_LINKABLE) -- collega questo elemento con `other' next := other next = other insert_after (other: INT_LINKABLE) -- inserisce questo elemento po `other' conservan quello che c era po di esso require other /= Void link_to (other.next) other.link_to (Current) other.next = Current other.next.next = old other.next La classe INT_LINKED_LIST modella una lista di interi. Una parte della sua implementazione è fornita qua sotto: class INT_LINKED_LIST feature -- accesso first_element: INT_LINKABLE -- Il primo elemento della lista last_element: INT_LINKABLE -- L ultimo elemento della lista Università di Roma Tor Vergata Corso di Laurea in Matematica 3 / 8

count: INTEGER -- Il numero di elementi della lista feature -- operazioni fondamentali has (a_value: INTEGER): BOOLEAN -- La lista contiene `a_value'? local temp, pre_temp: INT_LINKABLE from temp := first_element; pre_temp := Void invariant not Result implies (pre_temp /= Void implies pre_temp.value /= a_value) until (temp = Void) or Result loop if temp.value = a_value then Result := True pre_temp := temp temp := temp.next get_element (a_value: INTEGER): INT_LINKABLE -- Ritorna l elemento contenente `a_value', se esiste local temp, pre_temp: INT_LINKABLE from temp := first_element; pre_temp := Void invariant Result = Void implies (pre_temp /= Void implies pre_temp.value /= a_value) until (temp = Void) or (Result /= Void) loop if temp.value = a_value then Result := temp pre_temp := temp temp := temp.next (Result /= Void) implies Result.value = a_value invariant count >= 0 last_element /= Void implies last_element.next = Void count = 0 implies (first_element = last_element) and (first_element = Void) count = 1 implies (first_element = last_element) and (first_element /= Void) count > 1 implies (first_element /= last_element) and (first_element /= Void) and (last_element /= Void) and then (first_element.next /= Void) Università di Roma Tor Vergata Corso di Laurea in Matematica 4 / 8

Aggiungere alla classe INT_LINKED_LIST una feature insert_multiple_before (new, target: INTEGER) che inserisce un nuovo elemento di valore new prima di ogni occorrenza dell elemento di valore target, se quest ultimo è presente. Altrimenti il nuovo elemento viene inserito all inizio della lista. feature -- operazioni fondamentali insert_multiple_before (new, target: INTEGER) -- Inserisce elemento con valore `new' prima di ogni elemento con valore `target', se ne esistono -- Altrimenti inserisce elemento con valore `new' all'inizio della lista local Università di Roma Tor Vergata Corso di Laurea in Matematica 5 / 8

SOLUZIONE: feature -- operazioni fondamentali insert_multiple_before (new, target: INTEGER) -- Inserisce elemento con valore `new' prima di ogni elemento con valore `target', se ne esistono -- Altrimenti inserisce elemento con valore `new' all'inizio della lista local new_element, previous_element, current_element: INT_LINKABLE if has(target) then from previous_element := Void current_element := first_element until current_element = Void loop if current_element.value = target then create new_element.make (new) if current_element = first_element then new_element.link_to (first_element) first_element := new_element else new_element.link_to(current_element) previous_element.link_to(new_element) count := count + 1 previous_element := current_element current_element := current_element.next else -- la lista non contiene `target' create new_element.make (new) if count=0 then first_element := new_element last_element := new_element else new_element.link_to(first_element) first_element := new_element count := count + 1 count > old count not (old has(target)) implies count = old count + 1 not (old has(target)) implies first_element.value = new; not (old has(target)) implies first_element.next = old first_element; old has(target) implies get_element(new).next.value = target; Si noti che l ultima post-condizione garantisce soltanto che sia stato fatto l inserimento di new prima della prima occorrenza di target nella lista. Università di Roma Tor Vergata Corso di Laurea in Matematica 6 / 8

Esercizio 3) [10 punti] Il software usato da un editore multimediale modella libri, riviste, DVD e libri digitali (e-book). Il software ha una specifica classe per ognuno di questi tipi di oggetti. I libri, le riviste e i libri digitali possono essere stampati e quindi il software fornisce un coman stampa per ognuna delle relative classi. Un DVD non può essere stampato ma può essere eseguito e quindi il software fornisce un coman esegui per la relativa classe. Anche un libro digitale può essere eseguito e quindi anche per la relativa classe il software fornisce un coman esegui. Ogni istanza di un tipo di oggetto ha un suo nome e quindi il software fornisce un attributo nome di tipo stringa. Nell attuale implementazione ognuna di queste classi è definita come sottoclasse di ANY e quindi non viene ottenuto alcun vantaggio dall utilizzo di un approccio object-oriented. Ridefinire la struttura di ereditarietà delle classi (anche introducone di nuove, se necessario) disegnan il nuovo diagramma di ereditarietà che mostra: 1. la struttura di ereditarietà delle classi (cioè le relazioni superclasse sottoclasse) 2. quali classi e feature sono deferred (*), effective (+) o redefined (++). Non è necessario scrivere alcun codice. SOLUZIONE: La soluzione introduce una classe deferred per rappresentare ciò che è comune a tutti i protti e due sue sottoclassi (anch esse deferred) per rappresentare ciò che è comune a tutti i protti stampabili e a tutti i protti eseguibili. Si possono poi avere diverse soluzioni, a seconda di ciò che si assume sulla condivisione di caratteristiche tra libro digitale e libro, da un lato, e tra libro digitale e dvd, dall altro. Ad un estremo non vi sono caratteristiche condivisibili, e si ottiene il primo diagramma qua sotto, all altro vi sono caratteristiche condivisibili sia con il libro che con il dvd, e si ottiene il diagramma successivo. * Protto + nome * Stampabile * stampa * Eseguibile * esegui Rivista + stampa Libro + stampa E-Book + esegui DVD + stampa + esegui Università di Roma Tor Vergata Corso di Laurea in Matematica 7 / 8

* Protto + nome * Stampabile * stampa * Eseguibile * esegui Rivista + stampa Libro + stampa DVD + esegui E-Book ++ esegui ++ stampa Università di Roma Tor Vergata Corso di Laurea in Matematica 8 / 8