03_BaseAPIs - Home di homes.di.unimi.it

annuncio pubblicitario
Alcune API di base nel JDK J2SE
Docente: Gabriele Lombardi
[email protected]
© 2010 - 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.
© 2010 - CEFRIEL
Sommario
SLIDE
CONTENUTO
java.lang.**
Features del linguaggio.. nel linguaggio stesso!
java.io.*
Streams e Input/Output.
java.nio.**
Un nuovo strumento per l’I/O.
java.util.*
Un tour dei tool.
java.beans.*
Cosa sono i fagionlini (magici)?
java.applet.*
Codice attivo lato client web… senza JavaScript!
java.lang.reflect.*
Manipolare la struttura interna degli oggetti.
© 2010 - CEFRIEL
Classi base

Tipi di dato builtin (e boxed):
true
Text
– stringhe.. gestione particolare;
– boxed-types: “* extends Number” (e non solo).

command-pattern con Runnable;
iterators con Iterable;
eccezioni con la classe Throwable;
Comparable, Cloneable, …
Processi e thread:
–
–
–
–

2
Concetti e interfacce:
–
–
–
–

0.1
Containers
&
Iterators
Thread principale
gestione dei thread (Thread);
gestione dei progessi (Process);
Elaborazione 1
il runtime della JVM (Runtime);
problemi di concorrenza.
Class, ClassLoader e Compiler:
– un minimo di reflection si usa sempre!
© 2010 - CEFRIEL
fork
Elaborazione 2
Thread principale
join
IO e streams
Stream come astrazione per l’IO:
–
–
–
–

uno stream è un canale di Input oppure Output;
supporta un’interfaccia indipendente dal behavior;
può essere composto con altri stream;
permette la scrittura/lettura di dati binari.
Reader e Writer:
– sono l’astrazione specifica per il testo;
– permettono di lavorare con un minimo di formattazione;
– permettono di gestire l’encoding.
dati
Testo
stream
stream
stream

Writer
storage
storage
vedere 02_BaseAPIs\IO con:
Streams: esempi base
Serializables: esempio di serializzazione
© 2010 - 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
© 2010 - 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 l’implementazione 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:
vedere 02_BaseAPIs\Collections con:
esempi con Set, Stack, List;
esempio di utilizzo degli iteratori
– Properties, StringTokenizer, Arrays, Collections, Abstract*.
© 2010 - 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 l’internazionalizzazione:
– Locale, ResourceBundle;
– si veda java.text.*.
© 2010 - CEFRIEL
vedere 02_BaseAPIs\Timers con:
uso classe Timer
uso classe Date
java.util.**

java.util.prefs.*
– strumenti per l’accesso 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.
© 2010 - 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).
© 2010 - 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 un’altra applicazione …

• … come un browser!
Si usano ancora?
– poco e quasi “no”;
vedere 02_BaseAPIs\Altre\Applet
– limitate per problemi di sicurezza!
© 2010 - CEFRIEL

Scopo:
java.lang.reflect.*
– 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.
vedere 02_BaseAPIs\Reflection con:
uso della reflection;
esempio giocattolo di astrazione di entity persistenti
utilizzo massiccio di collections (Map)
© 2010 - 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 dall’idea generale e spezzarla in sottoproblemi;
identificarne una parte relativamente piccola;
descrivere in UML i casi d’uso 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.
© 2010 - CEFRIEL
Scarica