TDE 10-7-2014.

Slides:



Advertisements
Presentazioni simili
Astrazioni Polimorfe e Tipi Generici. 2 Polimorfismo Dal Greco molte forme Una variabile polimorfa può riferirsi a oggetti di classi diverse Un metodo.
Advertisements

1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
MultiSet, Liste Ordinate
Le gerarchie di tipi.
LIP: 19 Aprile Contenuto Soluzione Compitino Tipo di dato MultiSet, estensione con sottoclasse.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
SOTTOINSIEMI, INCLUSIONE
1 Le gerarchie di tipi. 2 Supertipi e sottotipi 4 un supertipo –class –interface 4 può avere più sottotipi –un sottotipo extends il supertipo ( class.
Il concetto di insieme è un assioma, possiamo dire che è un raggruppamento di oggetti di cui è possibile stabilire con certezza se appartengono o no.
Lezione IX Laboratorio di Programmazione. Le Classi Una classe C++ è definita come segue: class Nomeclasse { private: // metodi e attrib. visibili solo.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti dispense prof. G. Levi.
Multiset. Progettare (specifica con identificazione delle eventuali astrazioni necessarie, incluse eccezioni, e implementazione) del tipo di dato Multiset,
AB =x/xA  xB Unione tra insiemi o
Astrazione di dati Dati Astratti: cosa e perchè Dati Astratti: due meccanismi differenti Dati Astratti: due meccanismi differenti Astrazione e incapsulamento.
1 Astrazioni polimorfe. 2 Perché il polimorfismo 4 non vogliamo definire versioni differenti dell’astrazione corrispondente ad una collezione di elementi.
1 Astrazioni sui dati : Ragionare sui Tipi di Dato Astratti.
LIP: 2 Maggio 2008 Classi Astratte. Cos’e’ una Classe Astratta una classe astratta e’ un particolare tipo di classe permette di fornire una implementazione.
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Astrazioni sui dati : Specifica ed Implementazione di Tipi di Dato Astratti in Java.
1 Astrazioni polimorfe. 2 Perché il polimorfismo 4 Abbiamo visto come si definiscono insiemi di stringhe, insiemi di interi, insiemi di caratteri, etc.
Ex.1 - Astrazioni su Dati Si abbia il tipo di dato stack di interi, IntStack, specificato sotto: public class IntStack { \\ OVERVIEW: uno Stack è una collezione.
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
TDE ESERCIZIO 1 Si consideri la classe Mazzo di carte (da bridge). L’universo di tutte le possibili carte può contenere anche carte di altro.
Le funzioni in C++. Introduzione  Spesso alcuni gruppi di operazioni vengono ripetute in diverse parti all’interno del medesimo programma  Si pensi.
ESERCIZI MATLAB/OCTAVE MANOLO VENTURIN UNIVERSITÀ DEGLI STUDI DI PADOVA DIP. DI MATEMATICA PURA ED APPLICATA A. A. 2007/2008.
PRIMI CONCETTI ESEMPI INTRODUTTIVI DEFINIZIONI INTRODUZIONE ALLE FUNZIONI.
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
Basi di dati - Fondamenti
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
= 2x – 3 x Definizione e caratteristiche
Insiemi di numeri e insiemi di punti
UML Pattern.
Introduzione al linguaggio C
Testing.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Tutorato Elementi di Informatica 2013
I PERMESSI IN LINUX.
Le postcondizioni specificano l’output della funzione.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Programmazione a oggetti
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Vettori dinamici Definiremo la classe vector.
Corso Java Esercitazione.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Titolo dell'evento Data evento Ora evento
Basi di dati - Fondamenti
Strutture di Controllo
Esercitazioni di C++ 31 dicembre 2018 Claudio Rocchini IGMI.
Oggetti Java.
SQL per la modifica di basi di dati
Sommario cos’è un tipo di dato astratto astrazione tramite specifica:
Strapazziamo le immagini…
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
esercizi alberi binari
Process synchronization
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
PICCOLA GUIDA PER FUNZIONI REALI A DUE VARIABILI
APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C Alberi Binari – primi esercizi
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
La programmazione strutturata
Programmazione e Laboratorio di Programmazione
Ese 3 (del 3 Aprile 2003).
Corso di Fondamenti di Informatica
Transcript della presentazione:

TDE 10-7-2014

ESERCIZIO 1 È data la specifica della classe IntSet (come presentata in aula), con i seguenti metodi: osservatori puri isIn, size; costruttori: IntSet; modificatori: insert, remove. Si vuole aggiungere un nuovo metodo, chiamato extract, che restituisce un IntSet e che ha parametro x intero. Il metodo solleva un’eccezione IllegalArgument se x non appartiene all’insieme corrente, altrimenti restituisce il sottoinsieme dei valori contenuti nell’insieme corrente inferiori a x. 1. Fornire una specifica formale del metodo extract, ipotizzando che si tratti di un osservatore puro. 2. Definire un insieme di casi di test per il metodo utilizzando un approccio black-box 3. Supporre che il metodo extract abbia l’effetto collaterale di eliminare dall’insieme corrente il sottoinsieme calcolato. Come cambia la specifica? 4. Come cambia l’insieme dei dati di test per la nuova versione del metodo?

SOLUZIONE Punto 1 Il metodo extract deve essere dichiarato puro e deve avere questa clausola ensures //@ ensures isIn(x) && (forall int i;;(\result.isIn(i) <==> this.isIn(i) && i<x)); //@signals (IllegalArgumentException e) (!isIn(x)); public /*@ pure @*/ IntSet extract(int x);

//@signals (IllegalArgumentException e) (!isIn(x)) && Punto 3 Il metodo non è più puro. Nella specifica di ensures cui al punto 1 a this bisogna sostituire old(this) e aggiungere la condizione che tutti e soli gli elementi diversi da x sono ancora nell’insieme. Anche la signals deve modificata: il metodo non è puro quindi occorre imporre che this non cambi. //@ ensures (forall int i;;\result.isIn(i) <==> \old(this.isIn(i)) && i<x) && //@ (forall int i;;this.isIn(i) <==> \old(this.isIn(i)) && i>=x); //@signals (IllegalArgumentException e) (!isIn(x)) && //@ (forall int i;;isIn(i) <==> \old(isIn(i))); public IntSet extract(int x);

Punto 4 Se non era presente nei test definiti per la versione pura del metodo (ma nel nostro caso lo era), aggiungere un test in cui vengono eliminati zero elementi e uno in cui vengono eliminati tutti gli elementi. Il metodo non è puro, quindi i test precedenti devono anche verificare il valore di this al termine della chiamata (i valori di this sono rispettivamente): {1,5,2}, {}, {}, {5, 6}, {}

ESERCIZIO 2

Cosa stampa?

Cosa stampa? SOLUZIONE Le stampe sono Mela-Arancia Sono uguali Mela-Mela Arancia-Mela non ho idea

ESERCIZIO 3