Callbacks. Scelta delle classi di un progetto Criteri di coesione e accoppiamento Interfacce e subtype polimorfismo Tipi, sottotipi e conversioni di tipo.

Slides:



Advertisements
Presentazioni simili
Training On Line - CONP. 2 Richiesta Da Menu: Conferimenti ad inizio anno termico > Agosto > Pluriennali > Nuova Richiesta Si accede alla pagina di Richiesta.
Advertisements

Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
1 Tutto su liceoclassicojesi.it 1° Incontro sulla gestione di liceoclassicojesi.it.
1 MeDeC - Centro Demoscopico Metropolitano Provincia di Bologna - per Valutazione su alcuni servizi erogati nel.
TAV.1 Foto n.1 Foto n.2 SCALINATA DI ACCESSO ALL’EREMO DI SANTA CATERINA DEL SASSO DALLA CORTE DELLE CASCINE DEL QUIQUIO Foto n.3 Foto n.4.
1 Le s-espressioni. 2 Un nuovo esempio completo: le s-espressioni Sexpr 4 alberi binari (possibilmente vuoti) che hanno sulle foglie atomi (stringhe)
1 Progettazione gerarchica delle s- espressioni, utilizzando lereditarietà
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
Interfacce Java.
Capitolo 2 Nozioni fondamentali su Java Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill.
Frontespizio Economia Monetaria Anno Accademico
1 Tavolo del Patto per la crescita intelligente, sostenibile e inclusiva Il ricorso agli ammortizzatori sociali nei territori colpiti dagli eventi sismici.
Implementazione dell algortimo di Viterbi attraverso la soluzione del problema di cammino mi- nimo tramite software specifico. Università degli studi di.
Elementi di programmazione grafica
Elementi di programmazione grafica
Interfacce. Interfacce come strumento di progetto Scelta delle classi di un progetto Criteri di coesione e accoppiamento Interfacce e riuso di codice.
EIE 0607 III / 1 A B P a = 30 P b = 35 t = 2, tc = 1 Questo può essere un equilibrio? No! Politiche di un paese importatore: una tariffa allimportazione.
Layouts and Graphics. component - container - layout Un Container contiene [0 o +] Components Il Layout specifica come i Components sono disposti nel.
Model – View - Controller
Esempio: Tombola! Parte seconda.
Unified Modeling Language class C {…} class B extends C {…} Esiste una notazione grafica per mostrare le relazioni di ereditarietà. Object StringC B Tutte.
J0 1 Marco Ronchetti Java Threads & Sincronizzazione.
Sezione: Costruttori Costruttori. Definizione dei costruttori Se per una classe A non scrivo nessun costruttore, il sistema automaticamente crea il costruttore.
prompt> java SumAverage
1 struct Pila { private: int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public: Pila(int initialSize) ; Pila();
Programmazione 1 9CFU – TANTE ore
Canale A. Prof.Ciapetti AA2003/04
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
Realizzazione e caratterizzazione di una semplice rete neurale per la separazione di due campioni di eventi Vincenzo Izzo.
1. Conoscere luso delle collezioni in Java Comprendere le principali caratteristiche nelle varie classi di Collection disponibili Saper individuare quali.
Programming with JXTA Hello World Peer discovery Peer Group discovery Creating Peer group Joining a Peer Group.
6.6Ordinamento di Vettori Ordinamento di dati –Applicazione computazionale importante –Virtualmente ogni organizzazione deve ordinare dei dati Enormi quantità
Master universitario di II livello in Ingegneria delle Infrastrutture e dei Sistemi Ferroviari Anno Accademico 2012/2013 Cultura dimpresa, valutazione.
La partita è molto combattuta perché le due squadre tentano di vincere fino all'ultimo minuto. Era l'ultima giornata del campionato e il risultato era.
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Scritte scritte scritte scritte scritte scritte scritte Scritte scritte Titolo.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Progetto di applicazioni grafiche. Disegno di forme complesse Prassi : un classe per ciascuna forma Progetta la forma individuando le componenti base.
Packages. Package: insieme di classi e interfacce in relazione Per formare un package basta inserire la direttiva come prima istruzione nel file sorgente.
Programmazione con Interfacce
Capitolo 9 Interfacce e polimorfismo
Lezione 6 Encoder ottici
Contatore: esempio di circuito sequenziale
2 3 4 RISERVATEZZA INTEGRITA DISPONIBILITA 5 6.
Melfi, 1 aprile 2011 – MediaShow 1 Social Network: possibilità di uso consapevole nella didattica Uso, consapevolezza, opportunità, proposte Caterina Policaro.
CORSO TECNICO R.C.A. ELABORATO PERITALE
JavaScript Lezione 5 Tipizzazione ed operazioni tra tipi diversi Istruzioni di input.
Fondamenti di Informatica Corsi di Laurea in Ingegneria Gestionale Canale AL ESERCITAZIONE 6 ARGOMENTI: LAVORARE CON CLASSI METODI DELLISTANZA, COSTRUTTORI.
INTERNET Internet è una rete a livello mondiale che permette alle persone di comunicare ed ad accedere a banca dati da qualunque parte del mondo e su qualunque.
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
ISOIVA (LOCALE) TO ISOIVA (WEB) RIPARTIZIONE INFORMATICA UFFICIO APPLICATIVI AMMINISTRATIVI 13/04/2011 UNIVERSITÀ DEGLI STUDI DI FERRARA 1.
Scheda Ente Ente Privato Ente Pubblico. 2ROL - Richieste On Line.
1 Guida per linsegnamento nei corsi per il conseguimento del CERTIFICATO DI IDONEITÀ ALLA GUIDA DEL CICLOMOTORE.
Esordienti RESPONSABILE TECNICO Portieri Calcio Gallico 2001
Bando Arti Sceniche. Per poter procedere è indispensabile aprire il testo del Bando 2ROL - Richieste On Line.
24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente,
LE SAI LE TABELLINE? Mettiti alla prova!.
1 Questionario di soddisfazione del servizio scolastico Anno scolastico 2011/2012 Istogramma- risposte famiglie.
21 marzo 2002 (ri-)Avvisi: Giovedi 28 marzo la lezione e sospesa. Nuovo indirizzo di Spedire messaggi e esercizi solo.
Settimana: 10 – 14 marzo Orariolunedimartedi Mercoledi 12 Giovedi 13 Venerdi Lezione Dal c al c Lezione Dal c al c
1 Simulated multiple inheritance Sandro Pedrazzini Approfondimento Simulated multiple inheritance in Java.
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
-17 Aspettative economiche – Europa Settembre 2013 Indicatore > +20 Indicatore 0 a +20 Indicatore 0 a -20 Indicatore < -20 Unione Europea Totale: +6 Indicatore.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Collection & Generics in Java
NO WASTE Progetto continuità scuola primaria scuola secondaria Salorno a.s. 2013_
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
1 Acceleratori e Reattori Nucleari Saverio Altieri Dipartimento di Fisica Università degli Studi - Pavia
IL GIOCO DEL PORTIERE CASISTICA. Caso n. 1 Il portiere nella seguente azione NON commette infrazioni.
30/11/2004Laboratorio di Programmazione - Luca Tesei1 Interfacce e Polimorfismo.
Transcript della presentazione:

Callbacks

Scelta delle classi di un progetto Criteri di coesione e accoppiamento Interfacce e subtype polimorfismo Tipi, sottotipi e conversioni di tipo Polimorfismo e dinamic dispatch Interfacce come strumento di progetto Interfacce e riuso di codice Callbacks Classi interne

Interfacce e callbacks La tecnica che abbiamo visto funziona per classi di cui abbiamo il controllo Nel caso delle forme geometrice, possiamo rendere Car e Smiley implementazioni di Shape Nel caso del DataSet rendiamo Measurable le classi Coin e BankAccount Che facciamo se non possiamo modificare la definizione delle classi? Continua…

Interfacce e callbacks Esempio: Vogliamo misurare larea media e larea massima di un insieme di Rectangle s Rectangle è una classe predefinita, e non implementa Measurable … Continua…

Interfacce e callbacks Callback: tradizionalmente (*) indica un meccanismo per passare ad una funzione unaltra funzione che esegue una qualche operazione specifica La funziona passata come argomento si definisce callback (*) almeno dai tempi del progetto MIT che diede luogo a X (meglio noto com X11) … correva lanno 1984 Continua…

Interfacce e callbacks Esempio classico: una funzione che gestisce le scelte di un menù definita in termini di un parametro di tipo funzione che viene invocata per gestire loperazione da eseguire in risposta alla selezione degli items del menù Il parametro è una callback Continua…

Interfacce e callbacks Nei linguaggi ad oggetti non possiamo passare parametri di tipo funzione In C# esiste un costrutto predefinito che realizza questo meccanismo: i delegates In Java il meccanismo può essere simulato definiamo una classe con un metodo che implementa la funzione callback passiamo un oggetto di quella classe e lo utilizziamo per invocare la callback

Callbacks per DataSet Problema: misurare larea media e larea massima di un insieme di Rectangle s Nellimplementazione vista, gli oggetti da misurare offrono direttamente il metodo che misura Alternativa: passiamo alla classe DataSet un metodo per misurare oggetti Continua…

measure() misura qualunque oggetto e Measurer rappresenta qualunque classe lo definisca Object è il supertipo di tutti i tipi riferimento qualunque riferimento si può passare per un parametro di tipo Object public interface Measurer { double measure(Object anObject); } Callbacks per DataSet Continua…

Callbacks per DataSet La classe DataSet diventa dipendente dal metodo di misura, ovvero da qualunque classe che definisca questo metodo public class DataSet {... public DataSet(Measurer aMeasurer) { measurer = aMeasurer; }... private Measurer measurer; } Continua…

Callbacks per DataSet Ora il metodo add() richiede la misura al measurer non alloggetto che viene incluso nel dataset. public void add(Object x) { sum = sum + measurer.measure(x); if (count == 0 || measurer.measure(maximum) < measurer.measure(x)) maximum = x; count++; } Continua…

Callbacks per DataSet Possiamo definire Measurers per qualunque tipo di misura, in particolare per misurare Rectangle s public class RectangleMeasurer implements Measurer { public double measure(Object anObject) { if (!anObject instanceof Rectangle) return Double.NaN; Rectangle aRectangle = (Rectangle) anObject; double area = aRectangle.getWidth() * aRectangle.getHeight(); return area; } } Continua…

Callbacks per DataSet Notiamo il cast da Object a Rectangle Passiamo il measurer desiderato al momento della costruzione del dataset Dynamic dispatch => invochiamo limplementazione di measure() fornita da RectangleMeasurer Rectangle aRectangle = (Rectangle) anObject; Measurer m = new RectangleMeasurer(); DataSet data = new DataSet(m); data.add(new Rectangle(5, 10, 20, 30));... Continua…

Diagramma delle classi Notate che la classe Rectangle è disaccoppiata dallinterfaccia Measurer double measure(Object o)

Raffronto tra le due soluzioni Callbacks Measurer double measure(Object o) Rectangle double getMeasure() Oggetti Measurable

File DataSet.java 01: /** 02: Calcola la media di un insieme di oggetti. 03: */ 04: public class DataSet 05: { 06: /** 07: Costruisce un insieme vuoto con un dato misuratore. aMeasurer il misuratore utilizzato per misurare i valori 09: */ 10: public DataSet(Measurer aMeasurer) 11: { 12: sum = 0; 13: count = 0; 14: maximum = null; 15: measurer = aMeasurer; 16: } 17: Continua…

File DataSet.java 18: /** 19: aggiunge un valore al dataset. x un dato 21: */ 22: public void add(Object x) 23: { 24: sum = sum + measurer.measure(x); 25: if (count == 0 26: || measurer.measure(maximum) < measurer.measure(x)) 27: maximum = x; 28: count++; 29: } 30: 31: /** 32: Calcola la media dei dati considerati. la media o 0 se linsieme di dati è vuoto 34: */ Continued…

File DataSet.java 35: public double average() 36: { 37: if (count == 0) return 0; 38: else return sum / count; 39: } 40: 41: /** 42: Il massimo del dataset. il massimo o 0 se non il dataset è vuoto 44: */ 45: public Object maximum() 46: { 47: return maximum; 48: } 49: Continua…

File DataSet.java 50: private double sum; 51: private Object maximum; 52: private int count; 53: private Measurer measurer; 54: }

File DataSetTester.java 01: import java.awt.Rectangle; 02: 03: /** 04: Dimostra luso del misuratore. 05: */ 06: public class DataSetTester 07: { 08: public static void main(String[] args) 09: { 10: Measurer m = new RectangleMeasurer(); 11: 12: DataSet data = new DataSet(m); 13: 14: data.add(new Rectangle(5, 10, 20, 30)); 15: data.add(new Rectangle(10, 20, 30, 40)); 16: data.add(new Rectangle(20, 30, 5, 10)); 17: Continua…

File DataSetTester.java 18: System.out.println("Average area = " + data.getAverage()); 19: Rectangle max = (Rectangle) data.getMaximum(); 20: System.out.println("Maximum area rectangle = " + max); 21: } 22: }

File Measurer.java 01: /** 02: Interfaccia di qualunque classe le cui istanze misurano altri oggetti. 03: */ 04: public interface Measurer 05: { 06: /** 07: Calcola la misura di un oggetto. anObject loggetto da misurare la misura 10: */ 11: double measure(Object anObject); 12: }

File RectangleMeasurer.java 01: import java.awt.Rectangle; 02: 03: /** 04: le istanze di questa classe misurano larea di un rettangolo 05: */ 06: public class RectangleMeasurer implements Measurer 07: { 08: public double measure(Object anObject) 09: { 10: Rectangle aRectangle = (Rectangle) anObject; 11: double area = aRectangle.getWidth() * aRectangle.getHeight(); 12: return area; 13: } 14: } 15: Continua…

File RectangleMeasurer.java Average area = Maximum area rectangle = java.awt.Rectangle[x=10,y=20, width=30,height=40 ] Output:

Domanda Supponiamo di voler utilizzare la prima versione della classe DataSet per trovare la String a più lunga di un insieme dato in input. Quale è il problema?

Risposta Problema: la classe String non implementa Measurable.

Domanda Come possiamo utilizzare la seconda versione di DataSet (con callbacks) per risolvere il problema precedente?

Risposta Definendo una classe StringMeasurer che implementa linterfaccia Measurer

Domanda Perchè il metoto measure() dellinterfaccia Measurer ha un parametro in più del metodo getMeasure() dellinterfaccia Measurable ?

Risposta measure() misura un oggetto, passato come argomento, mentre getMeasure() misura this, ovvero il parametro implicito.

Esercizio Definiamo una nuova versione della classe DataSet che sia utilizzabile sia su oggetti generici, mediante un Measurer, sia su oggetti Measurable. Il comportamento del metodo add() dipende dal tipo dellargomento: se il tipo è Measurable, largomento viene misurato utilizzando il suo metodo getMeasure() in tutti gli altri casi, viene misutato dal Measurer del data set

Callbacks nella gestione di un timer La classe javax.swing.Timer definisce oggetti che generano eventi ( ticks ) Utile tutte le volte che vogliamo modificare un oggetto ad intervalli di tempo regolari Ad esempio nelle animazioni: Smiley: modifica il saluto oppure lespressione Car: si muove sul frame ad intervalli regolari Continua…

Gestione di un timer Eventi notificati ad un Action Listener associato al timer Action Listener descritto da una interfaccia standard (predefinita) actionPerformed() invocato ad ogni tick event : contiene informazione sullevento public interface ActionListener { void actionPerformed(ActionEvent event); } Continua…

Gestione di un timer La gestione dellevento avviene nel metodo actionPerformed() Gestioni diverse realizzate da classi diverse che implementano ActionListener class MyListener implements ActionListener { public void actionPerformed(ActionEvent event) { // Eseguito ad ogni tick. } } Continua…

Gestione di un timer Per associare un particolare listener al timer è necessario registrare il listener sul timer Ora possiamo far partire il timer MyListener listener = new MyListener(); Timer t = new Timer(interval, listener); t.start(); // Esegue in un thread separato tra due tick

Domanda Quale è il ruolo del listener nel timer?

Risposta Il listener implementa una callback: il metodo actionPerformed() è la vera callback che viene inclusa nel listener per poter essere passata al controllore del timer che la invoca ad ogni tick

Esempio: conto alla rovescia Un timer che esegue il countdown

File CountDown.java class CountDown implements ActionListener { public CountDown(int initialCount) { count = initialCount; } public void actionPerformed(ActionEvent event){} public void actionPerformed() { if (count >= 0) System.out.println(count); if (count == 0) System.out.println("Liftoff!"); count--; } private int count; } Continua…

File TimeTester.java import java.awt.event.*; import javax.swing.*; /** Esemplifica la classe timer luso di action listeners. */ public class TimeTester { public static void main(String[] args) { CountDown listener = new CountDown(10); final int DELAY = 1000;// Millisecondi tra due tick Timer t = new Timer(DELAY, listener); t.start(); JOptionPane.showMessageDialog(null, "Quit?"); System.exit(0); }

Domanda Quante volte viene chiamato il metodo actionPerformed nel programma precedente?

Risposta Il metodo viene invocato una volta al secondo. Le prime 11 volte scrive un messaggio. Le successive termina senza output, decrementando il contatore. Il timer termina quando lutente chiude lapplicazione

NOTE Tutti gli eventi del timer vengono gestiti dallo stesso thread (lEvent Dispatch Thread) se la gestione dellevento richiede più tempo dellintervallo, gli eventi vengono persi Informazione sullutilizzo di timers in swing: Timer.html Timer.html

Packages Package: insieme di classi e interfacce in relazione Per formare un package basta inserire la direttiva come prima istruzione nel file sorgente Una sola direttiva per file Classi contenute in file che non dichiarano packages vengono incluse in un package anonimo package anonimo OK solo per micro applicazioni, o in fase di sviluppo package packageName; Continua…

PackageFinalitàClasse Tipica java.langSupporto al linguaggioMath, String java.utilUtilitiesRandom java.ioInput e OutputPrintStream Java.awtAbstract Window ToolkitColor Java.appletAppletsApplet Java.netNetworkingSocket Java.sqlAccesso a databaseResultSet Java.swingIngerfaccia utente SwingJButton ……… Packages

Per accedere ai tipi di un package utilizziamo il nome qualificato Uso dei nomi qualificati verboso import permette sintesi java.util.Scanner in = new java.util.Scanner(System.in); import java.util.Scanner;... Scanner in = new Scanner(System.in) Accesso agli elementi di un package

Import di una classe di tutte le classi di un package import java.util.*; import java.util.Scanner;... Scanner in = new Scanner(System.in) Continua…

Import Packages non formano gerarchie Static import delle costanti e metodi statici dei tipi di un package // import dei tipi di java.awt.color import java.awt.color.*; // import dei tipi di java.awt (non del package color!) import java.awt.*;// import dei tipi di java.awt. import static java.lang.Math.PI import static java.lang.Math.*;.

Nomi di package Packages utili anche come namespaces per evitare conflitti di nomi (per classi/interfacce) Esempio, Java ha due classi Timer Nomi di package devono essere univoci Convenzione: utilizziamo come prefissi domini internet, oppure indirizzi (in ordine inverso) java.util.Timer vs. javax.swing.Timer it.unive.dsi it.unive.dsi.mp Continua…

Localizzazione di package Nomi di package devono essere consistenti con i path della directory che li contengono Deve essere contenuto in un folder/directory localizzato nel path corrispondente WINDOWS: \it\unive\dsi\mp\banking it.unive.dsi.mp.banking UNIX: /it/unive/dsi/mp/banking Continua…

Localizzazione di package CLASSPATH: definisce le directory base dove localizzare i packages Spesso utili due directory base per file sorgenti (.java) per file compilati (.class) UNIX: export CLASSPATH=/home/mp/java/src:/home/mp/java/classes:. WINDOWS: set CLASSPATH=c:\home\mp\java\src;\home\mp\java\classes;.