© CEFRIEL Alcune API di base nel JDK J2SE Docente: Gabriele Lombardi
© CEFRIEL The present original document was produced by CEFRIEL and the Teacher for the benefit and internal use of this course, and nobody else may claim any right or paternity on it. No right to use the document for any purpose other than the Intended purpose and no right to distribute, disclose, release, furnish or disseminate it or a part of it in any way or form to anyone without the prior express written consent of CEFRIEL and the Teacher. © copyright Cefriel and the Teacher-Milan-Italy-23/06/2008. All rights reserved in accordance with rule of law and international agreements.
© CEFRIEL Sommario SLIDECONTENUTO java.lang.** Features del linguaggio.. nel linguaggio stesso! java.io.* Streams e Input/Output. java.nio.** Un nuovo strumento per lI/O. java.util.* Un tour dei tool. java.beans.* Cosa sono i fagionlini (magici)? java.lang.reflect.* Manipolare la struttura interna degli oggetti. java.applet.* Codice attivo lato client web… senza JavaScript!
© CEFRIEL Classi base Tipi di dato builtin (e boxed): –stringhe.. gestione particolare; –boxed-types: * extends Number (e non solo). Concetti e interfacce: –command-pattern con Runnable; –iterators con Iterable; –eccezioni con la classe Throwable; –Comparable, Cloneable, … Processi e thread: –gestione dei thread (Thread); –gestione dei progessi (Process); –il runtime della JVM (Runtime); –problemi di concorrenza. Class, ClassLoader e Compiler: –un minimo di reflection si usa sempre! Containers & Iterators true0.1 Text2 Elaborazione 1Elaborazione 2 Thread principale fork join Thread principale
© CEFRIEL IO e streams Stream come astrazione per lIO: –uno stream è un canale di Input oppure Output; –supporta uninterfaccia indipendente dal behavior; –può essere composto con altri stream; –permette la scrittura/lettura di dati binari. Reader e Writer: –sono lastrazione specifica per il testo; –permettono di lavorare con un minimo di formattazione; –permettono di gestire lencoding. stream dati stream storage Testo Writer storage Proviamoli!!! vedere 02_BaseAPIs\IO con: Streams: esempi base Serializables: esempio di serializzazione
© CEFRIEL NIO: destinazione efficienza! Esempio di problemi di efficienza: –si consideri lo stack TCP/IP … –… problemi di copia ripetuta dei dati nei buffer. Soluzione: –metafora del carrellino e della miniera; –miniere in fila, carrellino ribaltabile; –passaggio di riferimenti al posto della copia dei dati. Altre utili funzionalità: –encoding/decoding dei dati (testo); –viste multiple di un buffer; –giochiamoci un po! vedere 02_BaseAPIs\NIONostre con: esempio di utilizzo di view-buffers vedere 02_BaseAPIs\Altre\NIO con: esempi vari by Sun Microsystems
© CEFRIEL java.uti.*: Collections Algoritmi + strutture dati = programmi: –problema: astrarre (e fornire) gli strumenti per manipolare le strutture dati più comuni: collezioni, liste, code, insiemi, mappe, … Collection, List, Queue, Set, Map, … –problema: scegliere limplementazione desiderata: ad esempio, scegliere una lista: –LinkedList, Stack, Vector, ArrayList,CopyOnWriteArrayList; scegliere una mappa: –HashMap, Hashtable, IdentityHashMap, LinkedHashMap, TreeMap, WeakHashMap, ConcurrentHashMap, EnumMap. Navigare in una Collection? –Iterator, ListIterator, Enumeration. Altre classi interessanti: –Properties, StringTokenizer, Arrays, Collections, Abstract*. vedere 02_BaseAPIs\ Collections con: esempi con Set, Stack, List; esempio di utilizzo degli iteratori
© CEFRIEL java.util.*: gestire tempo e formattazione Classi di gestione del tempo: –tipi temporali: Date, TimeZone, SimpleTimeZone; –strumenti per lavorare con i giorni: Calendar, GregorianCalendar. Classi per schedulare operazioni: –Timer, TimerTask. Classi per la formattazione di testo: –Formatter, Scanner; Classi per linternazionalizzazione: –Locale, ResourceBundle; –si veda java.text.*. Proviamoli!!! vedere 02_BaseAPIs\ Timers con: uso classe Timer uso classe Date
© CEFRIEL java.util.** java.util.prefs.* –strumenti per laccesso a semplici file di configurazione contenenti preferenze di esecuzione; –formati supportati: classico e XML. java.util.logging.* –strumenti per la generazione e gestione di messaggi di log. java.util.concurrent.* –strumenti per affrontare problematiche di concorrenza. java.util.zip/jar.* –creazione/analisi di file compressi. java.util.regex.* –espressioni regolari Perl-like. java.text.* –analisi/generazione di messaggi di testo formattato.
© CEFRIEL JavaBeans JavaBeans: –semplici POJO con: costruttore di default: –senza parametri affinché possano essere istanziati; proprietà: –rappresentate da metodi getter e setter; –una proprietà prop deve avere: »un getter public type getProp(); se è read; »un setter public void setProp(type val); se è write; –rappresentano: entità reali a cui sono associate proprietà; –possono essere gestiti: tramite le API contenute in java.beans.*; –vengono utilizzati: per moltissimi scopi (essendo generali); per la descrizione di entità grafiche in Swing; per la definizione di Entity beans (in JPA).
© CEFRIEL java.applet.* Cosa sono: –estensioni della classe java.applet.Applet; –componenti grafiche inseribili ovunque … … non solo in una pagina web!!! –(infatti estendono java.awt.Panel) –applicazioni da embeddare in altre applicazioni. A cosa servono: –per essere incluse in unaltra applicazione … … come un browser! Si usano ancora? –poco e quasi no; –limitate per problemi di sicurezza! Vediamo qualche esempio già pronto! vedere 02_BaseAPIs\Altre\Applet
© CEFRIEL java.lang.reflect.* Scopo: –permettere a codice scritto in Java di manipolare entità semantiche del linguaggio stesso: classi, metodi, attributi, … –fornisce uno strumento di meta-programmazione formidabile e fondamentale … e usatissimo in pratica! Caratteristiche: –flessibilissimo … entro il possibile (Generics?); –non particolarmente efficiente: meno rispetto al codice nativo; non drammatico … ma da non usare per applicazioni di tipo real-time o time-critical. Vediamo qualche esempio già pronto! vedere 02_BaseAPIs\Reflection con: uso della reflection; esempio giocattolo di astrazione di entity persistenti utilizzo massiccio di collections (Map)
© CEFRIEL Esempi già esistenti Consiglio vivamente di: –analizzare degli esempi già esistenti: cercare di identificare i pattern e le decisioni architetturali importanti; isolare le singole collaborazioni per poterle analizzare separatamente (anche come codice); –provare a sviluppare dei propri esempi complessi: partire dallidea generale e spezzarla in sottoproblemi; identificarne una parte relativamente piccola; descrivere in UML i casi duso della parte; identificare le classi che entrano in gioco e le loro collaborazioni; scegliere una collaborazione alla volta ed implementarla creando o modificando le classi implicate (refactoring, si veda Fowler). Guardare ad esempio: –02_BaseAPIs\Altre\SimulationEngine framework di simulazione di apparati (non completo); –02_BaseAPIs\Altre\DMS framework di gestione documantale (beta-version); –doc. in UML tramite ArgoUML o Visio: guardare nella cartella Docs; scaricare ed installare ArgoUML, è open-source. scaricare il visualizzatore Visio gratuito.