Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona



Documenti analoghi
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Introduzione ai tipi di dato astratti: applicazione alle liste

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

L ambizione dei design pattern (letteralmente schemi di programmazione) è quella di offrire soluzioni a problemi ricorrenti che facilitano lo

Algoritmi e Strutture Dati. Tipo di dato astratto e Strutture dati elementari

Algoritmi di Ricerca. Esempi di programmi Java

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Tipi astratti di dato e loro realizzazione in Java

Ricorsione. Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona.

Il tipo di dato astratto Pila

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

SAPIENZA Università di Roma, Facoltà di Ingegneria

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

INFORMATICA III Parte B -Progettazione e Algoritmi

Oggetti Lezione 3. aspetti generali e definizione di classi I

Archivio CD. Fondamenti di Programmazione

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

Organizzazione degli archivi

Obiettivi dell esercitazione. Requisiti (cont.) Requisiti. Università di Roma La Sapienza A.A Facoltà di Ingegneria Sede di Latina

Corso Linguaggi di programmazione II - Unina Esercitazione (prova intercorso)

Funzioni in C. Violetta Lonati

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

obiettivi di questa seconda metà del corso fare un passo avanti rispetto a :... meccanismi di composizione dei dati

Corso di Laurea in INFORMATICA

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

RIFERIMENTI ATTORI GLOSSARIO. ERRORI COMUNI REV. REQUISITI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

10 - Programmare con gli Array

INFORMATICA 1 L. Mezzalira

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Abstract Data Type (ADT)

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Soluzione dell esercizio del 2 Febbraio 2004

Allocazione dinamica della memoria - riepilogo

Java: Compilatore e Interprete

GESTIONE INFORMATICA DEI DATI AZIENDALI

AA LA RICORSIONE

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Informatica 3. LEZIONE 21: Ricerca su liste e tecniche di hashing. Modulo 1: Algoritmi sequenziali e basati su liste Modulo 2: Hashing

connessioni tra i singoli elementi Hanno caratteristiche diverse e sono presentati con modalità diverse Tali relazioni vengono rappresentate QUINDI

Ottimizzazione delle interrogazioni (parte I)

Java Virtual Machine

Realizzazione di una classe con un associazione

I file di dati. Unità didattica D1 1

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

GESTIONE DEI PROCESSI

Gestione premi clienti e fornitori Corso di formazione e approfondimento

Architetture software

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Generazione Automatica di Asserzioni da Modelli di Specifica

Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002

Corso di Informatica Applicata. Lezione 3. Università degli studi di Cassino

Richiesta pagina PHP (es: index.php)

Inizializzazione, Assegnamento e Distruzione di Classi

Basi di dati. Concetti introduttivi ESEMPIO. INSEGNAMENTI Fisica, Analisi, Aule. Docenti. Entità Relazioni Interrogazioni. Ultima modifica: 26/02/2007

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Introduzione al Java Collections Framework. Java Collections Framework (cont.) Interfacce del Collections Framework

Programmazione Orientata agli Oggetti in Linguaggio Java

Esercitazione n 4. Obiettivi

Introduzione al Java Collections Framework

Gestione Risorse Umane Web

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Introduzione alla programmazione in C

Progettazione : Design Pattern Creazionali

ANTISPAM PLAYNET (nuova Piattaforma) In questa piccola guida vogliamo mostrarvi come creare regole di BlackListe e Whitelist per

Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci

Prossime lezioni. Dai TDA agli oggetti. Riassunto. Riassunto TDA. Oggi. Stefano Mizzaro 1

Protezione. Protezione. Protezione. Obiettivi della protezione

Esercizio 1: trading on-line

Concetto di Funzione e Procedura METODI in Java

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Prof. Pagani Corrado ESERCITAZIONI DIAGRAMMI DELLE CLASSI UML E JAVA

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Introduzione alla teoria dei database relazionali. Come progettare un database

ESERCIZI DI PROBLEM SOLVING E COMPOSIZIONE DEI DIAGRAMMI DI FLUSSO per le classi terza

Guida rapida per i docenti all'uso della piattaforma di e-learning dell'istituto Giua

Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche.

Tipi di Dato Ricorsivi

L amministratore di dominio

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione

Il documento rappresenta una guida sintetica per descrivere sia la filosofia che il modulo software per l implementazione dei workflow in recuper@2.

Introduzione al Java Collections Framework. Progettazione del Software Anno Accademico Interfacce del Collections Framework

Alessandra Raffaetà. Basi di Dati

ARCHIVI E DATABASE (prof. Ivaldi Giuliano)

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

Progettazione del Software Anno Accademico

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Tecnologie di Sviluppo per il Web

Modulo 4: Ereditarietà, interfacce e clonazione

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Dopo Natale puoi... Matteo Zignani. 20 dicembre 2013

Progettazione di Basi di Dati

Transcript:

Laboratorio di Programmazione II Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Tipi Tipo Astratto di Permette di specicare dati in modo astratto Astratto Indipendentemente dal linguaggio (e.g., Java, C++, etc.) Indipendentemente dalla modalità di realizzazione (e.g. Lista, ListaLink, ListaArray)

Tipi Denizione Oggetto matematico costituito da: 1 dominio del tipo (o dominio di interesse): insieme dei valori validi per il tipo 2 funzioni: operazioni che possono essere eettutate sui valori del tipo Example (Il tipo Boolean) 1 Dominio di interesse: true, false 2 Funzioni: not, or, and, etc.

Esempio: Lista TDA Lista dominio del tipo: L Liste di elementi di un certo tipo T Operazioni: 1 isempty(l): L B vero se la lista L è vuota (B = Boolean) 2 get(l,k): L N T oggetto (di tipo T ) in posizione k nella lista L (N = interi positivi) 3 lenght(l): L N il numero di contenuti in L 4 remove(l,k): L N T L oggetto in posizione k nella lista L, ed una Lista L risultante da L in cui l'oggetto in posizione k viene rimosso. 5 insert(l,k,u): L N T L Lista L risultante da L in cui viene aggiunto l'oggetto u in posizione k.

Realizzare TDA in Java TDA in Java Elementi fondamentali della realizzazione di un TDA Interfaccia che denisce le operazioni (e.g. Lista.java) Scelta della rappresentazione (ListaArray.java, ListaLink.java) Schema Realizzativo

Schema Realizzativo Modalità principali Modalità di realizzazione delle operazioni Due schemi principali 1 side eect: i metodi della classe operano modiche su di moduli cliente 2 funzionale: i metodi della classe calcolano valori senza modicare gli della classe

con Side Eect Side Eect Modica gli Si discostano notevolmente dalla denizione matematice di (concetto di oggetto) Ecienti: metodi agiscono direttamente sugli Danno luogo ad mutabili Example (Side Eect) Lista a = new ListaLink(); Lista b = a; a.insert(0, new Integer(1)); a.insert(2, new Integer(2)); System.out.println("Lista a = "+a); System.out.println("Lista b = "+b);

funzionale Funzionale Non modicano mai gli di invocazione ma restituiscono un nuovo oggetto per ogni operazione di modica Insert per Lista funzionale Lista insert(int k, Object o)... Molto simili alla denizione matematica dell' Tipicamente meno ecienti, ma più sicuri Danno luogo ad immutabili Example (Oggetti immutabili) String a = new String("ciao"); String b = a; a.touppercase(); System.out.println("Stringa a = "+a); System.out.println("Stringa b = "+b);

Uguaglianza per TDA Uguaglianza profonda promemoria == uguaglianza tra riferimenti (uguaglianza superciale) promemoria metodo equals(object) della classe Object puo' essere re-implementato da tutte le classi derivate (overriding) promemoria metodo equals di default controlla l'uguaglianza superciale uguaglianza profonda: uguaglianza basata sulle informazioni contenute nell'oggetto Per è consigliabile re-implementare equals per ottenere l'uguaglianza profonda (e.g., metodo equals() di ListaArray.java)

Utilizzo API per API per più importanti sono implementati nelle API di JAVA Utilizzo librerie disponibili riduce notevolmente il tempo di sviluppo (e soprattutto il debug)

lineari: Lista API per Lista Interfaccia List Molte realizzazioni, in particolare: ArrayList: basata su array LinkedList: basata su strutture collegate

Utilizzo delle API per Lista Esempio: ArrayList Creazione: List l = new ArrayList(); Utilizzo: aggiunta oggetto: l.add(new Integer(3)) accesso oggetto: int pos=...; l.get(pos) scansione: for (int i = 0; i < l.size(); i++) { System.out.println(i+ " " + l.get(i)); }

Note su utilizzo API Note ArrayList e LinkedList implementano l'interfaccia List quindi Utilizzare ArrayList o LinkedList per istanziare un oggetto di tipo List è trasparente in fase di compilazione Esempio: metodo ll() classe TestList.java La particolare realizzazione impatta sull'ecienza del codice: tempo esecuzione e memoria ArrayList: ri-allocazione del vettore se necessario LinkedList: accesso sequenziale

Liste e tipo degli elementi contenuti Liste e tipo degli elementi lista: sequenza di elementi di un solo tipo In java posso inserire in una lista elementi di tipi diversi, perchè tutto deriva da Object Si discosta dal e crea problemi a tempo di esecuzione Example (Esempio di lista con elementi eterogenei) List lista = new ArrayList(); lista.add(new Studente("001")); lista.add(new Studente("002")); lista.add(new Integer(3));

Forzare liste di elementi omogenei Il meccanismo della parametrizzazione del tipo Generics o tipi parametrizzati Dichiaro al momento della creazione quali elementi saranno inseriti nella lista List<tipoElemento> listat = new ArrayList<tipoElemento>() Il compilatore controlla che il vincolo sul tipo degli elementi sia rispettato listat.add(elementotipononcorretto) errore a tempo di compilazione Esempio: TestGenerics.java

Leggere le API di java Come leggere le API informazioni principali per ciascuna classe: Classi e/o interfacce che vengono estese e/o realizzate dalla classe corrente Classi e/o interfacce che implementano e/o estendono la classe corrente Eventuale parametrizzazione dei tipi Package da includere (e.g. import java.util.*);

Esercizi Esercizi API 1 realizzare il metodo elimina doppi della classe UtilList.java utilizzando ArrayList o LinkedList 2 realizzare il metodo sottosequenza della classe UtilList.java utilizzando LinkedList o ArrayList 3 realizzare il metodo stampa inversi della classe UtilList.java utilizzando la classe Stack

Nota sull'interfaccia Comparable Utilizzo appropriato di Comparable<E> 1 l'interfaccia comparable utilizza un tipo parametrizzato Comparable<E> 2 E e' il tipo degli elementi con cui la classe che implementa l'interfaccia puo' essere comparata. 3 Permette di evitare il downcast nel compareto() ed evita warning in compilazione 4 Vedi UtilComparable.java e StudenteTypeSafe.java

Oggetti

Collezioni Lista è una particolare tipologia di collezione di Ne esistono molte altre: Pila, Coda, Insieme etc. Le tipologie di collezioni principali sono realizzate nelle librerie Java di base L'interfaccia Collection rappresenta i metodi di base per una qualsiasi collezione

Collezioni in Java I Interfaccia Collection

Collezioni in Java II Interfaccia Collection: metodi

Insieme Insieme Dominio di interesse: è formato da insiemi di elementi di un certo dominio E Operazioni: 1 emptyset(), che restituisce il valore corrispondente all'insieme vuoto. 2 isempty(i), che restituisce true se l'insieme i è l'insieme vuoto, false altrimenti. 3 add(i,e), che restituisce l'insieme j ottenuto dall'insieme i aggiungendo l'elemento e; se e appartiene già a i allora j coincide con i. 4 remove(i,e), che restituisce l'insieme j ottenuto dall'insieme i eliminando l'elemento e; se e non appartiene a i allora j coincide con i. 5 contains(i,e), che restituisce true se l'elemento e appartiene all'insieme i, false altrimenti.

Insieme in Java Interfaccia Set

Insieme in Java: caratteristiche Interfaccia Set caratteristiche Tipo parametrizzato: E rappresenta il tipo degli elementi dell'insieme Mette a disposizione molti metodi oltre alle operazioni di base (e.g. addall(...), removeall(...), retainall(...)) Insieme di Interi: Set<Integer> insiemeinteri =... L'interfaccia Set viene realizzata da numerose classi 1 HashSet: operazioni di base in tempo costante (sotto opportune ipotesi) 2 TreeSet: operazioni di base in tempo O(log n) Un insieme non puo' avere occorrenze multiple di elementi, questo viene garantito dai metodi che gestiscono l'insieme (tutti i metodi add)

Utilizzo Set HashSet Dichiarazione Set<Integer> s1 = new HashSet<Integer>(); Aggiunta elementi s1.add(new Integer(1)); Aggiunta di una collezione di elementi s1.addall(collezione);

Set: Accesso agli elementi Iteratori Non esiste il concetto di posizione di un elemento non esiste il metodo s.get(i) dove i è la posizione dell'elemento Si utilizzano gli iteratori Un iteratore è un riferimento ad un oggetto contenuto in una collezione Permettono di accedere in maniera sequenziale qualsiasi collezione (pile,liste,code,insiemi, etc.)

Utilizzo iteratori Creare un iteratore Data una collezione c Collection<T> c =... iterator() metodo della collezione, restituisce un iteratore al primo elemento della collezione Iterator<T> it = c.iterator();

Utilizzo degli iteratori iteratori un iteratore Iterator<T> it = c.iterator(); metodo hasnext() restituisce true se la collezione su cui l'iteratore agisce ha almeno un altro elemento for(iterator<t> it = c.iterator(); it.hasnext();) metodo next() restituisce l'elemento a cui l'iteratore si riferisce ed aggiorna l'iteratore al prossimo elemento della collezione. for(iterator<t> it = c.iterator(); it.hasnext();) T elemento = it.next() esempio di scansione di tutti gli elementi di un insieme: calcolamedia(set<integer>) della classe TestSet.java

Esercizi Esercizi su Set Implementare il metodo migliormedia(set<set<integer>>) della classe TestSet.java Implementare il metodo intersezione(set<integer>, Set<Integer>) della classe TestSet.java

Sottoinsiemi di un insieme (insieme delle parti) Insieme delle parti (power set) dato un insieme S il power set P(S) è l'insieme di tutti i sottoinsiemi di s S = {1, 2}, P(S) = {{}, {1}, {2}, {1, 2}} concetto molto importante per algoritmi a forza bruta

Calcolo ricorsivo dell' insieme delle parti Insieme delle parti: calcolo ricorsivo dato un insieme di elementi S ed un insieme (di insiemi) T detta F(e, T ) = {X {e} X T } denizione ricorsiva: P(S) = { } se S = e primo elemento di S, T = S \ {e}, P(S) = P(T ) F(e, P(T ))

Esercizi Esercizi su Set Implementare il metodo sottoinsiemi(set<integer>) della classe TestSet.java