ssssssssss
on fare quello che gli altri sanno fare sicurament
meglio e/o hanno già fatto.
n generale lo sviluppo di applicazioni software
vere” pone sempre gli stessi problemi e questi
problemi sono ben noti.
The Java Technology
Corso TAPS 2001/02
Gianna Reggio
Sources
• ogni cosa disponibile in linea
http://java.sun.com/
– specifiche (specification)
* descrizioni tecniche precise
– tutorial/demo/esempi
– software
* tutto libero, eccetto le versioni “ricche” di alcuni strumenti di
sviluppo
Java Technology
• sia linguaggio di programmazione (Java ) sia una
piattaforma
• Java
– imperative OO, ma molto di più (es. multithread)
– "write once, run anywhere"
*
*
*
*
compilatore/tradutttore (1 solo)
programmi Java -> Java bytecodes
vari interpreti per il bytecodes per le diverse piattaforme
Java bytecodes: linguaggio macchina per la Java Virtual
Machine (Java VM)
* interprete del Java bytecodes = implementazione della Java VM
* stesso programma può essere eseguito su ogni computer che
ha una Java VM
Java Platform 1
• platform
– ambiente hardware o software dove sono eseguiti i
programmi (Windows 2000, Linux, Solaris, MacOS)
– una platform in genere può essere descritta come una
combinazione di sistema operativo e hardware
• la Java platform è solamente software e viene
eseguita al di sopra di altre piattaforme basate
sull’hardware
Java Platform 2
• consiste di
– Java Virtual Machine (Java VM)
– Java Application Programming Interface (Java API)
• Java API
– collezione di software components/artifacts pronti per
l’uso, es. per gestire Graphical User Interface (GUI)
– organizzate in librerie di classi e interfaces correlate
(packages)
Java API e Java VM
isolano il programma
dall’hardware
Java Platform: più dettagliata
JRE
(Java
Runtime
Environment)
Integrated
Development
Environment
Software
Development
Kit
API
(Application
Programming
Interface)
(hardware based) piattaforme
Java VM
(Java
Virtual Machine)
Cosa supporta l’API
• Gli essenziali
– oggetti, tipi base, strutture dati, threads, input/output, ...
• Applets/servlets (programmi speciali client/server side)
• Networking: URLs, TCP, UDP, sockets e indirizzi IP
• Internazionalizzazione
– aiuta i programmi ad adattarsi alla locazione di uso
• Sicurezza ad alto e basso livello
– firma elettronica, gestione delle chiavi pubbliche e private, dei certificati, e
controllo degli accessi
• Software components: JavaBeans
• Object serialization
– permette persistenza “leggera” e comunicazione via Remote Method
Invocation (RMI).
• Java Database Connectivity (JDBC)
– permette l’accesso uniforme a database relazionali
• grafica 2D e 3D, accessibilità, server, collaborazione, telefonia, parola,
animazione …..
Java 2 Platform
• Tre edizioni
– Standard Edition (J2SE)
fornisce compilatori, strumenti, runtime support e API
essenziali per scrivere, installare ed eseguire
applicazioni ed applet Java
– Enterprise Edition (J2EE)
le sue tecnologie e il suo component model semplifica lo
sviluppo e l’installazione di applicazioni “enterprise” (a unit
of economic organization or activity; especially: a business organization)
– Micro Edition (J2ME)
un Java runtime environment altamente ottimizzato
indirizzato specificamente a “computer piccoli”: smart
card, pager, telefonini, set-top box (dispositivo che permette ad
una televisione di diventare una user interface per Internet e ricevere e
decodificare trasmissioni digitali)
API / SPI / “componenti” (1)
• Java Application Programming Interface (API)
– codice già scritto organizzato in packages relativi ad
argomenti comuni
– Java package
A package is a collection of related classes and interfaces providing
access protection and namespace management.
* per usare una classe o un’interfaccia in un package
˚ usare il nome qualificato completo java.awt.BorderLayout
˚ inportare la classe o l’interfaccia import java.awt.BorderLayout;
˚ importare tutto il package import java.awt.*;
– interfaces (intese come in Java)
A Java programming language keyword used to define a collection
of method definitions and constant values. It can later be implemented
by classes that define this interface with the "implements" keyword.
API / SPI / “componenti” (2)
• Service Provider Interface (SPI)
– il mezzo con cui certe API precisano come gli
sviluppatori possano scrivere il codice corrispondente ai
servizi di cui necessitano per funzionare
– Java package
• Componenti leggerissime (“veline”)
– componente model = commenti
– component framework = Java interfaces + packages
J2SE
Java 2 Standard Edition (J2SE) v1.4.1
JavaTM 2 SDK, Standard Edition
Documentation
Version 1.4.1
Disponibile on line a
http://java.sun.com/j2se/1.4.1/docs/index.html
download a
http://java.sun.com/j2se/1.4.1/download.html#docs
J2SE overview
Development
Tools & APIs
Deployment
Technologies
User Interface
Toolkits
S
D J
K R
E
Integration
APIs
Java
Compiler
Java
Debugger
Java Plug-in
Swing
AWT
Sound
Input Methods
Accessibility
Java 2D
RMI
Corba
JNDI
JDBC
XML
Logging
Beans
Locale Support
Collections
JNI
Security
Util
New I/O
Networking
Lang
Platforms
JPDA
Java Web Start
Core
APIs Preferences
Java
Virtual
Machine
Javadoc
Java Hotspot Client Compiler
Java Hotspot Server Compiler
Java Hotspot VM Runtime
Solaris
Linux
Windows
MacOS
Other
Platforms
• implementazioni Sun del Java 2 SDK and Java
Runtime Environment per
– Microsoft Windows
– Linux
– Solaris Operating Environment (Sun)
• implementazioni non-Sun per altri sistemi operativi
– Macintosh
Java Virtual Machines
• 2 implementazioni della Java VM
– Java HotSpot Client VM
* default
* miglior performance se eseguita su un client
– Java HotSpot Server VM
* miglior performance se eseguita su un server
• Common features della tecnologia HotSpot
– Adaptive compiler
* applicazioni sono eseguite da un interprete standard, ma il
codice è analizzato per scoprire possibili performance
bottlenecks, o “hot spots”, che vengono quindi compilati
– Rapid memory allocation (per gli oggetti) e garbage
collection
– Thread synchronization
* Java supporta multiple threads (concurrent paths of program
execution)
API: Lang & Util
• Lang :le classi fondamentali per il linguaggio Java
– asserzioni (nuovo in Java 2)
• Util: varie cose, tra cui
– espressioni regolari
– zip/gzip
– jar (file in formato Java Archive = zip + manifesto)
– supporto per riflettività (il linguaggio accede e manipola I
suoi programmi)
API: Preferences
• permette alle applicazioni di immagazzinare e
recuperare preferenze degli utenti e del sitema,
e dati sulla configurazione
Collections Framework
• collection = oggetto che rappresenta un gruppo di oggetti
(come la classe Vector)
• il framework offre strumenti di rappresentare e manipolare
in modo unitario le collections indipendentemente dai
dettagli delle loro implentazioni
– Collection Interfaces, per
* vari tipi di insiemi, liste, mappe
– diverse implementazioni
* General-purpose
* Legacy
* …..
– algoritmi
* metodi che eseguono varie funzioni, come ordinare una lista
– Array Utilities
* Utility functions for arrays of primitives and reference objects.
Logging
• supporto per produrre log reports
– catturando informazioni come
*
*
*
*
security failures
configuration errors
performance bottlenecks
….
– ritornandole come testo o XML in memoria o su streams,
sockets,...
XML
• offre il supporto di base per lavorare con
documenti XML
• prossimamente nel corso
New I/O
• offre nuove features e migliori performance per
gestire l’I/O
• supplementa le facilities del package java.io
Networking
• supporto per implementare applicazioni di (in,
sulla) rete
– supporto per usare IP e UDP
– socket per comunicare con ogni server su Internet o per
implementarsene uno
– classi per usare gli Universal Resource Locators (URLs)
per recuperare dati su Internet
– socket sicuri per comunicare in modo sicuro usando
SSL, e opzionalmente per criptare i dati ed autenticare
coloro con cui si comunica
Security
• supporto per stabilire e gestire “politiche di accesso” alle
risorse da parte del codice (permessi di read/write,
restrizioni sulle applet)
• crittografia
– supporto per
*
*
*
*
*
firma digitale
sintesi dei messaggi
creazione e gestione di chiavi
gestione dei certificati
Kerberos
– basata su SPI (Service Provider Interface)
* per conneterle a “classi” (componenti) che realizzano effettivamente le
funzionalità
* per scegliere quale algoritmo utilizzare
• tools
JNI (Java Native Interface)
• permette al codice eseguito da una Java Virtual
Machine di interoperare con applicazioni e librerie
scritte utilizzando altri linguaggi di
programmazione, come C, C++, e assembler
Internationalization
• aiuta a sviluppare applicazioni adattabili alle varie
lingue e regioni (es. messaggi all’utente, formato
dei numeri e date)
Java Beans
• aggiunge la (una?) tecnologia a componenti (dette
beans) alla piattaforma
• prossimamente
Corba
• Common Object Request Broker Architecture (CORBA)
– è uno standard OMG
– per un framework (middleware)
* object-oriented
* distribuito
* che supporta l’interoperabilità
Java Naming and Directory Interface (JNDI)
• fornisce funzionalità per
“naming”
* come dei nomi sono associati a delle cose e come le cose sono ritrovati
usando i loro nomi
“directory”
* ai nomi sono associati anche degli attributi, le cose si possono cercare
anche usando questi attributi
esempi: Unix/Linux file naming system, DNS
indipendenti dalla loro implementazione
• per accedere in modo comune una varietà di servizi N&D
• consiste di
– una API (Application Programming Interface)
– uno SPI (Service Provider Interface)
• Service Provider implementati da SUN
– DNS, RMI Registry Service Provider , COS name server per accedere a
referenze ad oggetti CORBA, ...
Java Remote Method Invocation (RMI)
• Distributed Object Applications
– costituite da diversi programmi
* server
˚ di solito crea degli oggetti remoti, rende i riferimenti a tali oggetti
accessibili, e poi aspetta che i clienti chiamino i metodi di tali
oggetti
* client
˚ di solito ottiene dei riferimenti a degli oggetti remoti su un server,
e poi chiama dei loro metodi
– oggetto remoto
* i suoi metodi possono essere chiamati da un’altra Java VM,
possibilmente su un altro host
* ha una o più interfacce remote (scritte in Java) che dichiarano i suoi
metodi remoti
* Remote method invocation (RMI) è l’azione di invocare un metodo di
una interfaccia remota di un oggetto remoto
Distributed Object Applications
• necessitano di:
– localizzare oggetti remoti
* un’applicazione può registrare i suoi oggetti remoti usando
rmiregistry, il semplice naming system di RMI
* le applicazioni possono semplicemente scambiarsi riferimenti ad
oggetti remoti
– comunicare con gli oggetti remoti
* RMI si prende cura di ciò, al programmatore la comunicazione
remota sembra la solita chiamata di metodo
– caricare il bytecodes per le classe degli oggetti passati
come parametri o valori di ritorno
* RMI offre I meccanismi per caricare il codice degli oggetti e per
trasmettere I suoi dati
esempio
registry
richiesta riferimento
RMI
RMI
client
URL
protocol
web server
registrazione
comunicazione
RMI
server
URL
protocol
(HTTP, FTP, …)
URL
protocol
web server
class
loading
I/O speciali
• Sound
– per catturare, processare e suonare dati audio e MIDI,
include un sound engine
• Input Methods
– per inputtare testo senza usare la tastiera solita (lingue
orientali, handwriting, voce)
• Accesibility
– per creare semplicemente applicazioni utilizzabili da
disabili (lettori di schermo, riconoscimento del parlato,
braille displays)
JDBC
• non un acronimo, ma si può pensare come “Java Database
Connectivity”
• è una API (Java puro) per accedere virtualmente ogni genere di dati
tabulari: database relazionali (anche al sapore OO), file contenenti data
tabulari,
• rende facile mandare query SQL (qualunque dialetto)
• con JDBC è possibile scrivere applicazioni eseguibili su ogni Java VM
non dipendenti dal tipo di database usato
Open Database Connectivity
(ODBC)
Abstract Window Toolkit (AWT)
• support la programmazione di Graphical User
Interface (GUI)
• include
– un ricco insieme di costituenti (component) di interfacce
– un robusto meccanismo per gestire eventi
– strumenti per gestire disegni ed immagini (forme, colori,
font)
– gestori del layout, per organizzare il layout delle finestre
senza dipendere dalla misura della finestra o dalla
risoluzione dello schermo
– classi per gestire il trasferimento di dati via cut-andpaste attraverso clipboard della piattaforma
Project Swing
• implementa un insieme di GUI components
• usando solo Java
• che dovrebbero avere lo stesso aspetto su ogni
piattaforma (Microsoft Windows, Solaris,
Macintosh)
• contiene la versione 100% Java puro certificata
delle componenti GUI di AWT (Button, Scrollbar,
Label, etc.), più un ricco insieme di componenti a
più alto livello (come tree view, list box, e tabbed
panes)
Java Web Start
– una tecnologia per il deployment che permette di
lanciare applicazioni complete con un click da un Web
browser (es. uno spreadsheet, un Internet chat client)
senza complicate procedure di installazione
The Java Plug-in Component
• permette ad applets di essere eseguite nei Web
browsers Netscape Navigator e Microsoft Internet
Explorer
Development Tools & APIs
• Java Compiler
– traduce i programmi Java in Bytecode
• Java Debugger
– aiuta a trovare gli errori nei programmi Java
• Javadoc
– produce pagine HTML da file che contengono classi
Java utilizzando i commenti
• Java Platform Debugger Architecture (JPDA)
– aiuta a sviluppare debuggers per applicazioni Java
IDE (Integrated Development Tool)
• Sun ONE Studio 4 update 1 - Community Edition
(free)
• In laboratorio
Riferimenti su JESE
• The Java Technology Phenomenon
http://java.sun.com/docs/books/tutorial/getStarted/intro/ind
ex.html
• J2SE il sito
http://java.sun.com/j2se/
• J2SE documentazione
• http://java.sun.com/j2se/1.4.1/docs/index.html
THE END