5 - I package di base in Java Vittorio Scarano Algoritmi e Strutture Dati: Algoritmi Distribuiti Università degli Studi di Salerno Organizzazione della lezione Obiettivo: Presentare gli strumenti di base offerti da Java tramite i package Panoramica sui package Il package del linguaggio: java.lang Il package delle utilità: java.util Il package di input/output: java.io 2 1
I package di Java Il riutilizzo del codice è un vantaggio della OOP la creazione di classi da cui derivare classi permette di risparmiare risorse Java fornisce una quantità di classi raggruppate in package standard che forniscono gruppi di classi correlate interface definizione di eccezioni ed errori costanti 3 I 10 package standard di Java java.lang il package del linguaggio java.util il package delle utilità java.io il package dell'input/output java.net il package per la rete java.awt Abstract Windows Toolkit java.text il package del testo java.security il package della sicurezza java.rmi Remote Method Invocation java.lang.reflect il package della riflessione java.sql il package per applicazioni SQL 4 2
Il package java.lang Il nucleo del linguaggio Java Contiene, tra l'altro Object classi wrapper per tipi primitivi Math String System Thread 5 Il package java.util Utilità per il programmatore Contiene, tra l'altro Date Classi per strutture dati (Hashtable, Vector, Stack, Enumeration ) Random StringTokenizer 6 3
Il package java.io Supporto a operazioni di I/O su diversi dispositivi Contiene, tra l'altro Classi del flusso di output Classi del flusso di input Classi per accesso ai file StreamTokenizer 7 Il package java.net Supporto a operazioni su rete Contiene, tra l'altro, Supporto per Uniform Resource Locator socket TCP indirizzi IP per socket UDP La classe ContentHandler 8 4
Il package java.awt Supporta funzionalità grafiche di Abstract Window Toolkit Contiene, tra l'altro, Classi grafiche Classi dei gestori di Layout Classi per i Font Classi delle dimensioni Classe MediaTracker 9 Il package java.text Supporta la internazionalizzazione del testo Meccanismo di base per assegnare il testo in base alle preferenze nazionali o al linguaggio Contiene, tra l'altro, Classi di formattazione NumberFormat, DateFormat, MessageFormat Classe Collator confronto tra stringhe espresse con nazionalizzazioni diverse 10 5
Il package java.security Supporta funzionalità per incorporare sicurezza nelle applicazioni Java Incorpora DSA (1.1) ma è progettato per essere ampliata Contiene, tra l'altro, Classi per le firme digitali Classe MessageDigest (MD5) Classi per la gestione delle chiavi 11 Il package java.rmi RMI = Remote Method Invocation Supporta le funzionalità per la programmazione OO in ambito distribuito Applicazioni distribuite con chiamate di metodi di oggetti remoti 12 6
Il package java.lang.reflect Tecnicamente fa parte di java.lang Permette al codice di esaminare e trovare informazioni sulla struttura delle classi a run-time Informazioni su: campi metodi costruttori 13 Il package java.sql Fornisce le funzionalità per scrivere applicazioni di database in grado di eseguire query SQL su un DBMS JDBC = Java Data Base Connectivity Contiene, tra l'altro, Classe DriverManager (per driver JDBC) Interface Connection Interface Statement e ResultSet 14 7
java.lang: La classe Object Classe superclasse di tutte le altre classi Tutti gli oggetti ereditano da Object, tra l'altro: il metodo clone() Circle c1= new Circle (); Circle c2 = c1.clone(); il metodo hashcode() restituisce un codice hash univoco per ogni oggetto il metodo equals() (solo per oggetti in una HashTable) il metodo tostring() 15 java.lang: le classi wrapper Forniscono classi per i tipi di dato primitivi Permettono di integrare i tipi di dati primitivi nell'uso di altre classi Classi wrapper (involucro): Boolean Byte Short Character Integer Long Float Double Void 16 8
java.lang: la classe wrapper Byte Alcuni metodi: static int parsebyte (String s) static int parsebyte (String s, int radice) short shortvalue() long longvalue().. double doublevalue() 17 java.lang: la classe wrapper Character Alcuni metodi: static boolean islowercase(char ch) static boolean isuppercase(char ch) static boolean isspace(char ch) static char tolowercase(char ch) static char touppercase(char ch) static int digit(char ch) // converte '9' in 9 static char fordigit(int i) // converte 9 in '9' 18 9
java.lang: la classe wrapper Integer Alcuni metodi: static int parseint (String s) short shortvalue() long longvalue() float floatvalue() double doublevalue() byte bytevalue() Costanti: MIN_VALUE, MAX_VALUE 19 java.lang: la classe Math Definisce funzioni matematiche e costanti Dichiarata final Offre metodi per: funzioni trigonometriche funzioni logaritmiche arrotondamenti, generazione numeri random min, max, valori assoluto 20 10
java.lang: la classe String Definisce stringa di caratteri non modificabile Alcuni metodi: int length() char charat(int index) boolean startswith(string s) String substring (int inizio) boolean equals (Object a) boolean equalsignorecase (String s) int compareto (String s) String tolowercase (String s) static String valueof (int i) 21 java.lang: la classe StringBuffer Definisce stringa di caratteri modificabile Alcuni metodi (molti simili a String): int length().. synchronized char charat(int index) synchronized void setcharat (int index, char ch) synchronized StringBuffer insert (int offset, Object o) String tostring() 22 11
java.lang: la classe System Permette l'accesso al sistema Alcuni metodi: static long currenttimemillis() static Properties getproperties() static void gc() Variabili membro: InputStream in PrintStream out PrintStream err 23 java.lang: la classe Runtime Permette l'accesso alle risorse della Java VM Alcuni metodi: static Runtime getruntime() long freememory() long totalmemory() static void gc() 24 12
java.lang: la classe Class Permette l'accesso alle informazioni di una classe Alcuni metodi: static Class forname(string nomeclasse) String getname() Class getsuperclass() ClassLoader getclassloader() boolean isinterface() String tostring() Ampliata con java.lang.reflect 25 Il package java.util Implementa utilities per il programmatore Classi importanti: BitSet Calendar Date Dictionary GregorianCalendar Hashtable Properties Random SimpleTimeZone TimeZone Stack StringTokenizer Vector Interface Enumeration Observer 26 13
java.util: la interface Enumeration Specifica metodi per enumerare un elenco Un oggetto di una classe che implementa Enumeration Vector v = new Vector(10);... for (Enumeration e = v.elements(); e.hasmoreelements();) System.out.print(e.nextElement() + " "); L'oggetto Enumeration si consuma nell'utilizzo L'implementazione è a carico della classe 27 java.util: la classe Vector Implementa un elenco di oggetti allocato dinamicamente Allocazione in blocchi di x elementi (per efficienza) capacità = spazio allocato dimensioni = elementi allocati Costruttori: Vector () Vector (int dim) Vector(int dim, int inc) Metodi: addelement (Object) elementat (int indice) 28 14
java.util: la classe StringTokenizer Permette di suddividere una stringa in tokens, delimitate da spazi (per default) o da qualsiasi altro testo Alcuni costruttori: StringTokenizer(String s) StringTokenizer(String s, String del) Metodi: counttokens () hasmoretokens () nexttoken() 29 Un esempio di uso delle due Classi Costruire una semplice shell di comandi che permetta di comprendere comandi del tipo: add alfa beta gamma print help quit Il numero di parametri su add è variabile L'aggiunta va fatta in un oggetto ListaNomi 30 15
La classe ListaNomi package interprete; import java.util.*; public class ListaNomi{ private Vector nomi = new Vector(3); } public void addnome (String nome) { nomi.addelement(nome); } public void printnomi () { Enumeration e = nomi.elements(); while (e.hasmoreelements()) System.out.println (e.nextelement()); } Package Dati interni: classe Vector Metodo addnome() Metodo printnomi() 31 La classe Shell package interprete; Creazione di uno Stream Buffered import java.util.*; import java.io.*; da System.in public class Shell { public static void main (String argv[]) throws IOException { ListaNomi lista = new ListaNomi(); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); for (;;) { System.out.print("Comandi >"); Creazione di un Vettore di String cmd = in.readline(); StringTokenizer st = new StringTokenizer (cmd); Tokens generati da Vector tokens = new Vector(10); StringTokenizer while (st.hasmoreelements()) tokens.addelement(st.nexttoken()); // Un semplice Parser if (tokens.elementat(0).equals ("quit")) break; else if (tokens.elementat(0).equals ("help")) Parser Comandi System.out.println ("Uso: \"add A B c\",\"print\", \"quit\""); else if (tokens.elementat(0).equals ("add")) { Enumeration e = tokens.elements(); e.nextelement(); //scarto il comando while (e.hasmoreelements()) lista.addnome((string) e.nextelement()); } else if (tokens.elementat(0).equals ("print")) lista.printnomi(); else System.out.println ("uuhh? Non capisco!"); } } } 32 16