Classi astratte. Master in Web Technology e Security luglio - settembre 2000. Interfacce



Documenti analoghi
Programmazione in rete e laboratorio

Paradigmi di programmazione (sperimentazioni)

Programmazione in rete e laboratorio

L interfaccia grafica in Java

Java Applet. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

I Canvas. import java.awt.*; import javax.swing.*; public class Graf{ public Graf () { JFrame f = new JFrame("Finestra"); // crea frame invisibile

TECNOLOGIE APPLICAZIONI WEB Linguaggio Java: Le Applet

Corso sul linguaggio Java

Programmazione Java: Interfacce grafiche (GUI)

APPLICAZIONI & APPLET

Le basi della grafica in Java. Prof. Francesco Accarino IIS Altiero Spinelli via Leopardi 132 Sesto san Giovanni

Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Polistena (RC)

INTERFACCE GRAFICHE IN JAVA CON SWING DISPENSE

Eventi di azione. // con interfaccia per eventi di azione

Alessandro De Luca. Lezione, 13 maggio 2015

Grafico della parabola

Gestione degli eventi in Java

L interfaccia grafica con Java

Modulo 4: Ereditarietà, interfacce e clonazione

Java Interfaccia Grafica

Introduzione al package grafico Swing

Corso Eclipse. Prerequisiti. 3 Window Builder

Interazioni col mondo: eventi

Alcuni Design Pattern in Java

Java: Compilatore e Interprete

Progettazione : Design Pattern Creazionali

23 - Graphical User Interface GUI (Cenni)

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

ISTRUZIONI XCODE. Autore: Luca Florio (luca.florio<at>polimi.it)

Programmazione Orientata agli Oggetti in Linguaggio Java

Esercizi di JavaScript

DESIGN PATTERNS Parte 6. State Proxy

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:

Programmazione ad oggetti

Programmazione a Oggetti Lezione 10. Ereditarieta

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

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

Scope e visibilità per classi

Introduzione a Classi e Oggetti

!"#$%&&'()#*%+%+!"#$"',,'()#*%+ -")%*&'&'+'$.)+-$$%&&) !"#$%&&'(%)'*+%",#-%"#.'%&'#/0)-+#12"+3,)4+56#7+#.')8'9

Applicazioni grafiche e finestre

UML Diagrammi delle classi. UML Diagramma classi 1

APPLICAZIONI & APPLET

Concetto di Funzione e Procedura METODI in Java

Java Virtual Machine

interfacce ed eventi intercettare il mouse ed altri eventi

Android. Implementare una interfaccia utente

Tale attività non è descritta in questa dispensa

Programmare in Java. Olga Scotti

Interfacce grafiche. Una GUI (Graphic User Interface) contiene vari componenti: bottoni, etichette, immagini...

Esercitazione 4 JDBC

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

Multithreading in Java. Fondamenti di Sistemi Informativi

Riassunto. GUI in Java con l AWT 1. Cos è una GUI. Oggi: GUI in Java, l AWT. GUI in Java. Un esempio. Stefano Mizzaro 1

Strumenti per la programmazione

Application VS Applet

Struttura di un programma Java

I DATABASE Database relazionale

Inizializzazione, Assegnamento e Distruzione di Classi

L applicazione di MVC alla simulazione di ascensore I COMPONENTI DELLE INTERFACCE UTENTE GRAFICHE: PARTE II 1

GESTIONE DEI PROCESSI

ESERCITAZIONI SU Java

Guida all uso di Java Diagrammi ER

Introduzione alla programmazione Java. Dott. Ing. M. Banci, PhD

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

L algoritmo di ricerca binaria. Daniele Varin LS Ing. Informatica Corso di Informatica teorica Docente: prof. Paolo Sipala

Esercitazione n 4. Obiettivi

Oggetti Lezione 3. aspetti generali e definizione di classi I

Corso Eclipse. Prerequisiti. 1 Introduzione

Impostare il browser per navigare in sicurezza Opzioni di protezione

Mac Application Manager 1.3 (SOLO PER TIGER)

La prima applicazione Java con NetBeans IDE. Dott. Ing. M. Banci, PhD

Appunti di Informatica 1

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Java? Sì, grazie. Scopo del corso

14 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Funzioni in C. Violetta Lonati

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB.

Aggiornamenti Sistema Addendum per l utente

Figura 1 Le Icone dei file di Excel con e senza macro.

Manuale Utente Albo Pretorio GA

Guida Joomla. di: Alessandro Rossi, Flavio Copes

Guida all uso dell ambiente di sviluppo 1 integrato o IDE. JCreator LE 4.50

Tutorial per l installazione del J2SE 6 e configurazione del sistema operativo

Alcune configurazioni del browser Internet Explorer e del runtime Java necessarie per utilizzare l'interfaccia GIS del sistema gestionale ARTEA.

Creare un sito Multilingua con Joomla 1.6

ISTRUZIONI PER L INSTALLAZIONE DI MINGW

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

Parola chiave extends

Sviluppo di Interfacce Grafiche in Java

7.4 Estrazione di materiale dal web

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Capitolo 4 Pianificazione e Sviluppo di Web Part

Adobe Flash CS5.5 e Web Animation. Lezione 7: introduzione ad ActionScript 3.0, livelli guida, realizzazione di un player audio in streaming

XTOTEM offline sul proprio PC

Biblioteca di Cervia NOZIONI BASE DI INFORMATICA

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

Transcript:

Master in Web Technology e Security luglio - settembre 2000 JAVA Alberto Martelli Parte III Programmazione grafica Classi astratte Vogliamo implementare un algoritmo di ordinamento di un array che sia indipendente dal tipo degli elementi dell'array. Poiché gli elementi devono essere confrontabili tra di loro, richiediamo che siano sottoclassi di una classe Ordinabile. abstract class Ordinabile { public abstract int confronta(ordinabile og); Il metodo confronta confronta l'oggetto a cui appartiene con l'oggetto og, e restituisce 0 se sono uguali, un numero < 0 se è minore, > 0 se è maggiore. A. Martelli - Master in web technology e security 2000 - Parte III 2 In un'altra classe possiamo definire un metodo per l'ordinamento Se vogliamo ordinare degli impiegati rispetto allo stipendio: class Employee extends Ordinabile { public int confronta(ordinabile e) { Employee emp = (Employee)e; if (salary<emp.salary) return -1; if (salary>emp.salary) return 1; return 0;.. void ordina(ordinabile[] a) { if (a[i].confronta(a[j]) < 0) // implementa un algoritmo di ordinamento e nel main avremo: Employee[] staff = new Employee[25]; //inizializzare staff ordina(staff); A. Martelli - Master in web technology e security 2000 - Parte III 3 A. Martelli - Master in web technology e security 2000 - Parte III 4 Supponiamo di avere la classe Rettangolo che è sottoclasse di Poligono, e di voler usare il metodo ordina definito in precedenza per ordinare i rettangoli secondo la loro altezza. La classe Rettangolo dovrebbe estendere Ordinabile, ma questo non si può fare perché Rettangolo estende già Poligono e in Java c'è ereditarietà singola. Un effetto analogo può però essere ottenuto utilizzando le interfacce (interface) di Java. Interfacce Una interfaccia in Java è simile ad una classe astratta pura. interface Forma { void disegna(); class Linea implements Forma { void disegna() { Forma f = new Linea(); f.disegna(); A. Martelli - Master in web technology e security 2000 - Parte III 5 A. Martelli - Master in web technology e security 2000 - Parte III 6 1

Interfacce e classi astratte Le classi astratte possono essere miste, ossia possono contenere anche metodi non astratti. Con l'ereditarietà singola di Java, una classe può essere sottoclasse solo di una classe astratta. Le interfacce invece non sono soggette al vincolo della struttura gerarchica ad albero. Una classe può implementare più di una interfaccia (qualche analogia con ereditarietà multipla). Le librerie standard di Java forniscono un'interfaccia public interface Comparable { public int compareto(object b); e una classe Arrays che contiene un metodo sort per ordinare un array di oggetti Comparable. A. Martelli - Master in web technology e security 2000 - Parte III 7 A. Martelli - Master in web technology e security 2000 - Parte III 8 Per confrontare i rettangoli: class Rettangolo extends Poligono implements Comparable { int altezza, larghezza;. public int compareto(object ob) { Rettangolo r = (Rettangolo)ob; return altezza - r.altezza; e nel main: Rettangolo[] a = new Rettangolo[10]; Arrays.sort(a); interface A { void metoda(); Interfacce multiple interface B { void metodb(); class C implements A,B { void metoda() {System.out.println("sono A"); void metodb() {System.out.println("sono B"); public static void main(string[] args) { A a = new C();//l oggetto è visto come un A B b = new C();//l oggetto è visto come un B a.metoda(); b.metodb(); a.metodb(); //errore: A non ha il metodb A. Martelli - Master in web technology e security 2000 - Parte III 9 A. Martelli - Master in web technology e security 2000 - Parte III 10 PROGRAMMAZIONE GRAFICA Molti programmi interagiscono con l utente attraverso una interfaccia grafica GUI - Graphical User Interface Nelle prime versioni di Java (1.0, 1.1) era fornita la libreria AWT (Abstract Window Toolkit) per realizzare la portabilità, la gestione dei componenti grafici era delegata ai toolkit nativi delle varie piattaforme (Windows, Solaris, Mac, ) Java fornisce diverse librerie di classi per realizzare GUI. Nelle ultime versioni di Java è fornita la libreria SWING, che fa un uso molto ridotto dei toolkit nativi. In ogni caso, programmi Java che usano Swing, devono spesso usare anche classi AWT. A. Martelli - Master in web technology e security 2000 - Parte III 11 A. Martelli - Master in web technology e security 2000 - Parte III 12 2

Il componente di più alto livello di una interfaccia grafica è una finestra, realizzata dalla classe JFrame. Tutte le classi i cui nomi iniziano con J appartengono alla libreria Swing. I frame sono dei contenitori, in cui si possono inserire altri componenti (pulsanti, testo, ) o in cui si può disegnare. Altri contenitori sono: Jpanel Container Nella libreria Swing sono disponibili numerosi componenti: pulsanti check box menu barre di scorrimento liste finestre di dialogo file chooser campi di testo alberi e numerosi strumenti per realizzare grafica. A. Martelli - Master in web technology e security 2000 - Parte III 13 A. Martelli - Master in web technology e security 2000 - Parte III 14 Vediamo un semplice esempio di una finestra che contiene un pulsante che, quando viene premuto, fa beep. Come si inserisce il pulsante (JButton) nella finestra? Un JFrame ha una struttura complessa. In particolare ha un pannello del contenuto (che è un Container) in cui si possono inserire i componenti. Un JFrame fornisce il metodo getcontentpane() per accedere al pannello del contenuto. Per inserire un componente in un contenitore si usa il metodo add del contenitore. Il componente viene inserito nel contenitore secondo un layout predefinito. I layout possono essere modificati dal programmatore. JPanel JButton pulsante = new JButton("premi"); panel.add(pulsante); premi A. Martelli - Master in web technology e security 2000 - Parte III 15 A. Martelli - Master in web technology e security 2000 - Parte III 16 import javax.swing.*; import java.awt.*; import java.awt.event.*; JButton button; NOTA Si potrebbe evitare di usare il JPanel e inserire direttamente il pulsante nel pannello del contenuto. Tuttavia l'aspetto sarebbe diverso perché il pannello del contenuto, che è un Container, ha un layout di default diverso da quello del JPanel. public static void main(string[] args) { Beeper beep = new Beeper(); beep.pack(); beep.setvisible(true); A. Martelli - Master in web technology e security 2000 - Parte III 17 A. Martelli - Master in web technology e security 2000 - Parte III 18 3

Quando si esegue il main di Beeper, questo crea la finestra e termina l'esecuzione. La visualizzazione della finestra attiva un thread di interfaccia utente che rimane attivo finché non si chiude la finestra. Se si "clicca" sul pulsante di chiusura della finestra, il thread dell'interfaccia rimane attivo. Eventi Gli eventi sono gestiti con un meccanismo di delega. sorgente evento listener L'interazione con l'utente è realizzata con un meccanismo ad eventi. Nell'esempio, gli eventi da gestire sono: il clic del bottone la chiusura della finestra (e disattivazione del thread) A. Martelli - Master in web technology e security 2000 - Parte III 19 La sorgente,quando genera un evento, passa un oggetto che descrive l'evento ad un "listener". Il listener deve essere "registrato" presso la sorgente. Il passaggio dell'evento causa l'invocazione di un metodo del listener. A. Martelli - Master in web technology e security 2000 - Parte III 20 Ad es. i bottoni causano un solo tipo di evento: ActionEvent. La classe ActionEvent fornisce (fra l'altro) i metodi: String getactioncommand() Object getsource() Il rispettivo listener deve implementare l'interfaccia interface ActionListener { void actionperformed(actionevent e); Per registrare l'actionlistener nel bottone, si usa il metodo della classe JButton void addactionlistener(actionlistener l) A. Martelli - Master in web technology e security 2000 - Parte III 21 JButton button; public static void main(string[] args) { A. Martelli - Master in web technology e security 2000 - Parte III 22 NOTA L'ActionListener potrebbe essere implementato direttamente dal JFrame Analogamente si deve gestire l'evento di chiusura della finestra. public class Beeper extends JFrame implements ActionListener { JButton button; button.addactionlistener(this); public static void main(string[] args) { A. Martelli - Master in web technology e security 2000 - Parte III 23 Un JFrame genera un WindowEvent ogni volta che la finestra cambia stato: aperta, chiusa, ridotta ad icona, L'interfaccia WindowListener deve gestire tutti i possibili cambiamenti di stato della finestra, e per questo contiene sette metodi: windowactivated(windowevent e) windowclosing(windowevent e) ecc. A noi interessa solo il metodo windowclosing, ma per implementare correttamente l'interfaccia, dovremmo comunque definire anche gli altri sei metodi. A. Martelli - Master in web technology e security 2000 - Parte III 24 4

Per risparmiarci la fatica, Java fornisce la classe WindowAdapter, che implementa l'interfaccia WindowListener con i sette metodi che non fanno nulla. Noi dovremo solo estendere questa classe ridefinendo i metodi che ci interessano. Nel nostro caso solo windowclosing. In generale Java fornisce una classe Adapter per tutti i Listener che hanno più di un metodo. addwindowlistener(new WL()); public static void main(string[] args) { class WL extends WindowAdapter { public void windowclosing(windowevent e) { System.exit(0); //termina l'esecuzione A. Martelli - Master in web technology e security 2000 - Parte III 25 A. Martelli - Master in web technology e security 2000 - Parte III 26 Classi annidate (nested classes) Java dà la possibilità di definire classi all'interno di altre. Il meccanismo può essere utile perché: le classi annidate possono essere nascoste. un oggetto di una classe annidata può accedere alla implementazione dell'oggetto della classe esterna che lo ha creato. Nel nostro caso i listener sono usati solo da Beeper e possono essere nascosti al suo interno. addwindowlistener(new WL()); public static void main(string[] args) { class WL extends WindowAdapter { public void windowclosing(windowevent e) { System.exit(0); //termina l'esecuzione //abbiamo spostato solo questa parentesi // la classe Beeper termina qui A. Martelli - Master in web technology e security 2000 - Parte III 27 A. Martelli - Master in web technology e security 2000 - Parte III 28 Le classi annidate sono un fenomeno che riguarda il compilatore, non l'interprete del bytecode. Le classi annidate sono tradotte dal compilatore in file.class separati, e l'interprete non ha conoscenze specifiche al loro riguardo. Nel nostro esempio, la compilazione di Beeper produce tre file: Beeper.class Beeper$BeepListener.class Beeper$WL.class Per mostrare l'utilità delle classi annidate, estendiamo l'esempio con un campo in cui inserire il numero di volte che si è "cliccato" sul bottone. Il campo può essere realizzato con un componente JLabel, che può contenere una figura o una stringa (nel nostro caso una stringa che rappresenta un numero). L'ActionListener collegato al bottone può modificare direttamente il contenuto di questo componente. Se una classe è usata una sola volta si può evitare di darle un nome, usando la notazione delle classi anonime. A. Martelli - Master in web technology e security 2000 - Parte III 29 A. Martelli - Master in web technology e security 2000 - Parte III 30 5

private JButton private JPanel private JLabel display = new JLabel("0"); private int i = 0; Il BeepListener può accedere alle variabili display e i del Beeper. panel.add(display); addwindowlistener(new WL()); Se la classe BeepListener fosse definita esternamente a Beeper, gli oggetti BeepListener avrebbero bisogno di usare un riferimento esplicito all'oggetto Beeper su cui devono operare. Inoltre non potrebbero accedere alle variabili display e i perché queste sono dichiarate private. i++; display.settext(integer.tostring(i));.. A. Martelli - Master in web technology e security 2000 - Parte III 31 A. Martelli - Master in web technology e security 2000 - Parte III 32 Layout Java fornisce diversi manager di layout predefiniti, fra cui: FlowLayout - i componenti vengono inseriti uno dopo l'altro e riga per riga. BorderLayout - i componenti vengono inseriti in posizione nord, sud, est, ovest e centro. GridLayout - i componenti vengono disposti in una tabella. BoxLayout - i componenti vengono disposti uno per riga. Ogni contenitore ha un layout predefinito. Ad esempio per il JPanel è FlowLayout. E' possibile cambiare il layout con il metodo setlayout. JPanel p = new JPanel(); p.setlayout(new GridLayout(4,4)); A. Martelli - Master in web technology e security 2000 - Parte III 33 A. Martelli - Master in web technology e security 2000 - Parte III 34 Applet Applet: speciali programmi Java che un browser può scaricare dalla rete ed eseguire. La chiamata dell'applet viene inserita in un documento HTML. (Non sono uno strumento per realizzare pagine web) Attualmente l'interesse è diminuito perché HTML ed i linguaggi di scripting sono molto potenziati rispetto ai primi tempi di Java. I principali browser non supportano più le ultime versioni di Java. Occorre installare dei plug-in. Uso vantaggioso soprattutto in applicazioni intranet aziendali. Come trasformare una applicazione grafica in un'applet Sostituire JFrame con JApplet. Eliminare il main. Eliminare i listener della finestra. Trasformare il costruttore nel metodo init(). Creare una pagina HTML con un tag per caricare il codice dell'applet. A. Martelli - Master in web technology e security 2000 - Parte III 35 A. Martelli - Master in web technology e security 2000 - Parte III 36 6

public class BeeperApplet extends JApplet { JButton button; public void init() { File HTML: <HTML> <TITLE>Beeper</TITLE> <BODY> <APPLET CODE = "BeeperApplet.class" WIDTH = 100 HEIGHT = 50 > </APPLET> </BODY> </HTML> Purtroppo il browser non riesce ad eseguire direttamente questo file. Occorre trasformarlo in un file html più complesso, usando un traduttore fornito dalla SUN, che inserisce degli script per caricare i plug-in. A. Martelli - Master in web technology e security 2000 - Parte III 37 A. Martelli - Master in web technology e security 2000 - Parte III 38 Sicurezza delle applet Le applet (diversamente dalle applicazioni) sono limitate nelle operazioni che possono svolgere. Non possono avviare programmi locali. Non possono comunicare con host diversi da quello da cui sono state prelevate. Non possono accedere al file system locale. Non possono recuperare informazioni riguardanti il computer locale. I controlli sono effettuati dall'interprete della Java Virtual Machine in base ad un modello predefinito di gestione della sicurezza. Le applet possono essere firmate. Se chi firma l'applet è una persona di fiducia, è possibile concedere più privilegi all'applet modificando la politica di gestione della sicurezza. Ad esempio si può concedere ad una applet di una intranet aziendale di accedere ai file locali. A. Martelli - Master in web technology e security 2000 - Parte III 39 A. Martelli - Master in web technology e security 2000 - Parte III 40 I principali metodi delle applet Per gestire il ciclo di vita di un'applet, la classe JApplet contiene i seguenti quattro metodi (che naturalmente possono essere ridefiniti). start() - viene chiamato dopo init e tutte le volte che si rientra nella pagina contenente l'applet. Riavvia le attività bloccate dalla stop. init() - viene chiamato quando viene creata l'applet (come un costruttore) stop() - viene chiamato tutte le volte che si esce dalla pagina contenente l'applet. Interrompe le attività costose computazionalmente, come animazioni o calcoli complessi. destroy() - viene chiamato quando si chiude il browser. A. Martelli - Master in web technology e security 2000 - Parte III 41 A. Martelli - Master in web technology e security 2000 - Parte III 42 7