Il linguaggio java Esercitazioni del corso di Sistemi Informativi Marina Mongiello mongiello@poliba.it
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
Java è: Portabile: non prevede aspetti dipendenti dall’implementazione 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
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
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
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
L’applet Java consente di eseguire applet all’interno di browser Web Class client HTML source server Browser Web HTML page request Java interpreter
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
Java Virtual Machine Disk Shell Dos program.java Editor javac program.java Compiler program.class Primary Memory bytecode Class Loader Browser Web o appletviewer program.html applet Interpreter java program application application applet
La programmazione OO Elementi fondamentali Proprietà Classi e oggetti Metodi Messaggi Interfacce Proprietà ereditarietà (riuso del software) incapsulamento (information hiding) polimorfismo
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à
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
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
Metodi in java Sintassi per definire un metodo ModificatoreAccesso tipo_restituito nome_metodo (Lista argomenti) { // dichiarazioni e statement} Sintassi per chiamare un metodo: 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
Ereditarietà Le classi possono essere Classe padre o superclasse Classe derivata o sottoclasse Le classi possono essere costruite a partire da altre classi Le sottoclassi ereditano le funzionalità delle superclassi hanno più funzionalità delle superclassi I metodi delle classi esistenti sono riutilizzabili o modificabili Nuovi campi o nuovi metodi possono essere aggiunti per adattarli a situazioni nuove Employee Manager Secretary Programmer Gerarchia dell’ereditarietà: l’insieme delle classi che si estendono da una classe padre comune Executive
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
Incapsulamento Incapsulamento in java 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
Polimorfismo Polimorfismo in java 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
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
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
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
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
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
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
Interfacce del pacchetto java.awt.event ActionListener Adjustment Listener ComponentListener ContainerListener FocusListener ItemListener KeyListener MouseListener MouseMotionListener TextListener WindowListener
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)
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)
Gerarchia dei componenti dell’interfaccia utente Object Component Container Window Frame JFrame Dialog JDialog JComponent JButton JMenuItem JToggleButton JCheckBox JRadioButton JLabel JList JMenuBar JOptionPanel JPanel JScrollBar JText Abstract button JTextField JTextArea JComboBox Gerarchia dei componenti dell’interfaccia utente
Altre caratteristiche di java assenza di puntatori garbage collection automatica multithreading è case sensitive