Il linguaggio java Esercitazioni del corso di Sistemi Informativi Marina Mongiello [email protected] Torna alla prima pagina Documentazione su java Jdk(Java Development Kit) versioni 1.0 e successive disponibili sul sito internet: http://java.sun.com Ambienti di sviluppo integrato (IDE): Inprise J-builder Java Workshop Torna alla prima pagina Java è: Portabile: non prevede dall’implementazione aspetti dipendenti es. le dimensioni dei tipi predefiniti sono fisse Indipendente dall’architettura: il compilatore genera un bytecode interpretabile in processori diversi Robusto: il compilatore riscontra molti errori che in altri linguaggi sono riscontrabili solo in esecuzione Sicuro: è destinato all’uso in ambienti distribuiti e di rete Torna alla prima pagina Programmi Java Java consente di realizzare due tipi di programmi: applet: programmi memorizzati su un computer remoto a cui l’utente può connettersi mediante un browser web applicazioni: comuni programmi memorizzati ed eseguiti sul computer locale Il compilatore java genera un bytecode che verrà successivamente interpretato dalla macchina virtuale java Torna alla prima pagina La java virtual machine JVM Creazione ed esecuzione di un programma java fase 1: creazione del programma sorgente con estensione .java fase 2: compilazione e creazione di un bytecode, un codice intermedio portabile con estensione .class fase 3: caricamento del bytecode in memoria primaria fase 4: verifica del bytecode. fase 5: interpretazione del bytecode da parte della JVM Torna alla prima pagina L’applet Un documento HTML contiene un riferimento all’applet; l’HTML dispone di tag per gestire applet es. <applet code> Il loader del browser web carica da un computer remoto l’applet tramite la rete per eseguirla sul computer locale Il browser ha un interprete java che esegue le istruzioni del bytecode se si usa jdk dalla shell dos si può usare il comando: • appletviewer program.html per visualizzare l’applet sul computer locale Torna alla prima pagina L’applet Java consente di eseguire applet all’interno di browser Web Java Class client HTML page server Browser Web HTML source request Java interpreter Torna alla prima pagina Applicazioni stand alone Un’applicazione java è caricata in memoria dall’interprete java che ha anche la funzione eseguire il bytecode dell’applicazione se si sta usando jdk dalla shell dos si esegue il comando: • java program Torna alla prima pagina Shell Dos program.java Java Virtual Machine Editor Disk javac program.java program.class Browser Web o appletviewer program.html java program Compiler Primary Memory bytecode Class Loader Interpreter applet applet application application Torna alla prima pagina La programmazione OO Elementi fondamentali Classi e oggetti Metodi Messaggi Interfacce Proprietà ereditarietà (riuso del software) incapsulamento (information hiding) polimorfismo Torna alla prima pagina Classi e Oggetti Il programma è costituito da oggetti Classe: modello o schema di un oggetto Oggetto: una istanza della classe Le classi consentono la creazione di più oggetti con lo stesso comportamento Lo stato di un oggetto può cambiare nel tempo in conseguenza dei messaggi inviati Ogni oggetto ha un propria identità Torna alla prima pagina Classi e Oggetti in java Classe è l’unità fondamentale dei programmi java definisce la struttura degli oggetti contiene campi e metodi Sintassi per la definizione di una classe: ModificatoreAccesso class Nomeclasse {//definizione dei campi // definizione dei metodi } Creazione di un oggetto creazione di un’istanza della classe Sintassi per la creazione di un oggetto NomeClasse oggetto = new CostruttoreClasse(); Metodo costruttore Torna alla prima pagina Metodi e Messaggi I metodi: Definiscono le operazioni che la classe può effettuare Operano sui campi della classe La comunicazione tra oggetti avviene mediante messaggi: chiamate di metodi sono una generalizzazione delle chiamate tra funzioni: se un oggetto deve eseguire un’operazione non prevista dalle proprie responsabilità, ha necessità di chiedere ad un secondo oggetto di eseguire l’operazione inviando un messaggio Torna alla prima pagina Metodi in java Sintassi per definire un metodo Sintassi per chiamare un metodo: ModificatoreAccesso tipo_restituito nome_metodo (Lista argomenti) { // dichiarazioni e statement} oggetto.metodo(argomenti) Metodi costruttori usati per inizializzare gli oggetti di una classe new costruttore permette di creare un nuovo oggetto nella classe hanno lo stesso nome della classe se il codice della classe non specifica alcun costruttore java fornisce costruttori predefiniti - senza argomenti - che inizializzano i valori a quelli predefinti Torna alla prima pagina Ereditarietà Le classi possono essere costruite a partire da altre classi Classe padre o superclasse Classe derivata o Le sottoclassi sottoclasse ereditano le funzionalità delle superclassi hanno più funzionalità I metodi delle classi esistenti delle superclassi sono riutilizzabili o modificabili Nuovi campi o nuovi metodi Employee possono essere aggiunti per adattarli a situazioni nuove Manager Executive Secretary Programmer Gerarchia dell’ereditarietà: l’insieme delle classi che si estendono da una classe padre comune Torna alla prima pagina Ereditarietà in java Java fornisce un insieme di classi e metodi predefiniti disponibili in librerie di classi Java API Le librerie di classi sono organizzate in packages La parola chiave extends indica che si sta creando una nuova classe derivante da una esistente In java tutte le classi estendono una classe base Object la parola chiave import indica dove è localizzata la classe che si sta importando Una classe che ne estende un’altra possiede inzialmente tutti i metodi della classe parent ma può fornirne di nuovi Si usa il modificatore d’accesso final per disabilitare l’ereditarietà Java non gestisce l’ereditarietà multipla ossia la situazione in cui una classe deve riflettere il comportamento di due o più classi padre Torna alla prima pagina Incapsulamento I dettagli implementativi sono nascosti all’interno di una classe Non deve essere consentito agli oggetti di manipolare dati interni ad altri oggetti La comunicazione deve avvenire solo tramite messaggi Incapsulamento in java Combinazione di dati e comportamenti in un unico package Torna alla prima pagina Polimorfismo Rende il software facilmente estensibile e ne aumenta la manutenibilità Capacità di un oggetto di decidere quale metodo applicare a se stesso in base alla posizione nella gerarchia dell’ereditarietà Polimorfismo in java Overloading: se più metodi hanno lo stesso nome ma argomenti diversi l’interprete java sceglie quale metodo chiamare anche per i metodi costruttori è consentito l’overloading: è possibile scrivere più metodi costruttori per una classe Torna alla prima pagina Interfacce Java non gestisce l’ereditarietà multipla: una classe può avere una sola superclasse le interfacce sono utilizzate per fronteggiare situazioni in cui è necessario che una classe rifletta il comportamento di due o più classi padre L’interfaccia può essere implementata da una classe: la classe definisce le modalità di funzionamento dei metodi propri dell’interfaccia la parola chiave implements indica che una classe implementa un’interfaccia Torna alla prima pagina Modificatori di accesso Specificano da chi può essere usato il metodo o la classe public: visibile ovunque private: visibile alla sola classe di appartenenza protected: visibili dal package e dalle sue sottoclassi Metodi static non sono legati ad alcuna particolare istanza della classe e sono Un campo static è tale che tutte le istanze della classe condividono un’unica copia del campo Torna alla prima pagina Esempi di codice java // applicazione public class example { public static void main (String []args) { System.out.println(“example”); } } // applet public class example extends Applet { public void paint(Graphics g) {} } //interfaccia public interface Comparable { public incompareTo(Object b);} class Tile extends Rectangle implements Comparable {} Esercizi svolti sono disponibili Torna alla prima pagina Java API packages java.applet: contiene la classe Applet e le interfacce per abilitare la creazione di applet e l’interazione tra applet e browser java.awt: contiene le classi e le interfacce necessarie per creare e manipolare interfacce grafiche Abstract Windowing Toolkit java.io: contiene le classi per abilitare l’input e l’output di dati java.lang: è importato automaticamente dal compilatore java; contiene le classi e e le interfacce richieste da molti programmi java.net: contiene le classi per abilitare la comunicazione via Internet o Intranet java.sql:classi e interfacce per gestire l’interazione con database Torna alla prima pagina Programmazione grafica Da Java 1.0 le librerie grafiche sono contenute nel package AWT che utilizza un approccio basato sui peer, delegando la creazione e il comportamento delle interfacce al toolkit GUI nativo delle piattaforme di destinazione Java 2.0 introduce i componenti SWING non basato su peer in cui gli elementi grafici assumo la stesso comportamento su qualsiasi piattaforma Torna alla prima pagina Gestione degli eventi Eventi: pressione di tasti o clic del mouse gestibili con interfacce grafiche Il sistema operativo rileva eventi di questo tipo e li segnala ai programmi java definisce sorgenti di eventi: rilevatori di eventi (event listener) Le informazioni sugli eventi sono incapsulate in oggetto evento Torna alla prima pagina Interfacce del pacchetto java.awt.event ActionListener Adjustment Listener ComponentListener ContainerListener FocusListener ItemListener KeyListener MouseListener MouseMotionListener TextListener WindowListener Torna alla prima pagina Il package javax.swing Le classi swing si trovano nel package javax.swing, non un package appartenente al nucleo del linguaggio, ma un’estensione di java 1.1 Tutti i componenti awt possiedono il corrispondente swing ( es. Frame Jframe) Torna alla prima pagina Componenti dell’interfaccia utente Pulsanti Button (JButton) Pannelli Panel (JPanel) Input di testo campi di testo (JtextField) aree di testo (JTextArea) Etichette Label (JLabel) Caselle di controllo : Checkbox Pulsanti di scelta: RadioButton Elenchi : List (JList) Caselle combinate: ComboBox Barre di scorrimento: ScrollBar (JScrollBar) Torna alla prima pagina Gerarchia dei componenti dell’interfaccia utente Abstract button JComboBox Object JLabel Component JList Container JMenuBar Window JComponent JButton JMenuItem JCheckBox JToggleButton JRadioButton JOptionPanel JPanel Frame JFrame Dialog JDialog JScrollBar JTextField JText Component JTextArea Torna alla prima pagina Altre caratteristiche di java assenza di puntatori garbage collection automatica multithreading è case sensitive Torna alla prima pagina