Lezione 1 Introdurre il linguaggio Java ed esaminarne le ... · Lezione 1 Introduzione a Java 2...
Transcript of Lezione 1 Introdurre il linguaggio Java ed esaminarne le ... · Lezione 1 Introduzione a Java 2...
Lezione 1Lezione 1Introduzione a JavaIntroduzione a Java
2
Organizzazione della lezioneOrganizzazione della lezione
• Obiettivo:Introdurre il linguaggio Java ed esaminarne le caratteristiche
che lo rendono particolare
• La genesi di Java– Caratteristiche peculiari del linguaggio e scelte progettuali
• Le keyword di Java
• Il “dado” delle caratteristiche di Java
• Gli strumenti per Java (JDK)
• Un primo esempio
3
Java è...Java è...
• Un tipo di caffè
• Un linguaggio di programmazione…
• Una piattaforma di sviluppo…
• Una moda…
• Una storia interessante di …
4
Java: la carta di identitàJava: la carta di identità
• Genitori: Sun Microsystem• Data di nascita: 23 maggio 1995• Segni particolari:
– Utilizzato nel World Wide Web
• Luoghi frequentati:– Sistemi di middleware– Sistemi embedded– Ambienti a componenti per il calcolo distribuito
Java
Seriamente parlando… Perché Java?
5
Perché Perché Java…Java…
• Frutto dalla esperienza C e C++–– OObject OOriented PProgramming (OOPOOP)
– Linguaggio che facilita programmi bug-free
• Indipendente dalla piattaforma
• Ricco di AApplication PProgramming IInterface (APIAPI)– Organizzate in packages
• La presentazione da parte di Sun Microsystem– Un whitepaper con tante keywords
6
Il Il whitepaperwhitepaper di Java...di Java...
• Java è un linguaggio di programmazione
7
Organizzazione della lezioneOrganizzazione della lezione
• Obiettivo:Introdurre il linguaggio Java ed esaminarne le caratteristiche
che lo rendono particolare
• La genesi di Java– Caratteristiche peculiari del linguaggio e scelte progettuali
• Le keyword di Java
• Il “dado” delle caratteristiche di Java
• Gli strumenti per Java (JDK)
• Un primo esempio
8
La preistoria: Il progetto GreenLa preistoria: Il progetto Green
• La situazione alla Sun Microsystem nel 90– La rivoluzione dei Personal Computer era nel pieno
del suo svolgimento
– All’allargarsi del mercato dei desktop, il mercato delle workstation si restringeva
– La reputazione delle macchine Sun:• affidabili, solide ma …
• complicate, brutte e “secchione”
9
Un giovane progettista della Un giovane progettista della SunSun....
• Patrick Naughton, amico del CEO della Sun McNealy
• Gli viene offerto un lavoro migliore alla Next..
• … ma prima di lasciare gli viene richiesto di scrivere cosa ritiene si faccia di sbagliato alla Sun e quale può essere una soluzione.
• Scrive 12 videate di e-mail , dicendo tra l’altro di– “far sviluppare la interfaccia utente ad un artista”
– “utilizzare un unico tool di sviluppo”
– “focalizzare gli sforzi verso un solo sistema grafico”
– “licenziare tutti quelli che stavano lavorando ai sistemi grafici”
10
La risposta:La risposta:
• E’ sommerso da risposte entusiastiche:“Patrick ha scritto quello che mi dicevo ogni
mattina ma avevo paura di ammettere”
Una tipica reazione
“ Patrick ha brutalmente ragione: da qualche parte abbiamo perso il contatto con quello che significa produrre un prodotto di qualità”
James Gosling
11
Un meeting: “Cosa si fa?”Un meeting: “Cosa si fa?”
• Una proposta:– Innanzitutto una contro-offerta a Naughton che
accetta di restare alla Sun
– Creare un piccolo team ..“piccolo abbastanza da poter andare a cena in un
ristorante cinese tutti insieme….”
– … tenerne segreta la missione al resto della Sun per proteggere il team da influenze negative contro le innovazioni.
12
La missione: Produrre “La missione: Produrre “qualcosaqualcosa”…”…
• Sun aveva già perso la battaglia in corso sui Personal Computer
• Doveva prepararsi per la prossima..
• Una convinzione sul terreno di battaglia:La convergenza tra La convergenza tra
–– le apparecchiature domestiche controllate da le apparecchiature domestiche controllate da microprocessori microprocessori
–– i i computerscomputers propriamente detti.propriamente detti.
13
L’inizio del progetto Green: l’esilioL’inizio del progetto Green: l’esilio
– Dicembre 1990: si rinchiudono in 3 (Gosling, Naughton e Sheridan) in un ufficio fuori dal campus Sun con “Cokes and Dove bars”
– Ed un milione di dollari da spendere in un anno.
– La prima idea nell’Aprile 1991:• I microprocessori sono ovunque
• I telecomandi sono anche essi ovunque
• Ogni apparecchiatura ha il proprio complicato telecomando!
14
L’idea: L’idea:
• Un telecomando– universale
– di immediato utilizzo
– multimediale
– per tutte le apparecchiature domestiche!
15
Il Green Team al lavoro:Il Green Team al lavoro:
• Il settore hardware:– La Hammer Technology: si comprano apparecchiature e
vengono smontate
• Studio sulla interfaccia utente:– giocano ore ed ore a Nintendo
• Il settore software:– decidono di inventare un nuovo linguaggio!
16
Il ragionamento di Il ragionamento di GoslingGosling
• Un linguaggio per elettrodomestici– deve essere affidabile
“Come mettere una spina nella presa elettrica..”
– deve essere compatto“Non c’è tanta memoria in un piccolo apparato..”
– deve essere portabile“Deve funzionare su diversi processori..”
• Conclusione: il C++ non va bene!
17
Nel 1992….(3 settembre)Nel 1992….(3 settembre)
• “Cokes and Dove Bars” + $1,000,000 =
18
E funziona anche!E funziona anche!
19
Cosa c’è “Cosa c’è “sotto il cofanosotto il cofano”?”?
– Processore SPARC
– Motherboard ripiegata
– 5’’ touchscreen display
– un chip grafico custom a doppio buffer
– connessioni remote senza filo a 900Mhz
– interfaccia PCMCIA
– multimedia audio codec
– batteria custom
(continua..)
20
Cosa c’è “Cosa c’è “sotto il cofanosotto il cofano”? (2)”? (2)
– Una versione di Unix che in meno di 1Mb ha:• drivers per PCMCIA, • radio networking, • touchscreen, display, • flash RAM file system
– Oak: un linguaggio di programmazione compatto, sicuro affidabile, distribuito, interpretato, garbage-collected, multithreaded, dinamico
– libreria grafica – una interfaccia grafica che usa animazione
audio e metafore dello spazio virtuale(continua..)
21
Cosa c’è “Cosa c’è “sotto il cofanosotto il cofano”? (3)”? (3)
– Un insieme di classi per implementare la metafora della interfaccia utente a 3D
– Un insieme di applicazioni tra le quali:
• una guida TV
• un telecomando per televisione, VCR
• una lavagna distribuita condivisa via radio
• un agente visivo che guida l’utente Ciao!
22
L’entusiasmo per *7…. L’entusiasmo per *7….
• Trattative con– Mitsubishi (telefoni cellulari, televisioni)
– France Telecom (per il nuovo Minitel)
• Nel novembre 1992:– La Sun fonda la “First Person Inc.”
– Il progetto Green passa a First Person
– I 14 dipendenti passano a 60….
23
E le “E le “docce gelate”...docce gelate”...
• Nel 93 Mitsubishi e France Telecom si ritirano dalle trattative
• Il prezzo per un apparato in grado di eseguire programmi in Oak è stimato a 50$ dalla Sun..
• … circa 50 volte il prezzo che i produttori sono disposti di solito a pagare.
• E la First Person Inc.?
24
““Contrordine! TVContrordine! TV--Interattiva!”Interattiva!”
• In marzo 93, in Orlando parte un tentativo della Time Warner di TV interattiva.
• La First Person decide di partecipare con un device basato su Oak che gestisca:– immagini
– dati
– soldi (in maniera sicura)
attraverso la rete distribuita.
25
La “La “Doccia gelataDoccia gelata”...”...
• L’appalto viene dato alla Silicon Graphics
• Chairman della SG è Jim Clark
• Il tentativo di TV interattiva con la Time Warnerfallisce nella estate 1993.
• Jim Clark lascia la SG per fondare (94) una società per entrare nel mercato di una novità: il World Wide Web..
• E la First Person Inc.?
26
““Contrordine! Videogiochi con CDContrordine! Videogiochi con CD--ROM!”ROM!”
• Trattative con la 3DO per inserire Oak in un videogioco con lettore CD-ROM
• Ci vogliono solo 10 giorni per portare Oak sul videogioco 3DO
• ...e 3 mesi di trattative commerciali con 3DO• …chiuse negativamente di fronte alla richiesta di
3DO di avere l’esclusiva su Oak• E la First Person Inc.?
27
La situazione nel 1994:La situazione nel 1994:
• Il World Wide Web è già diffuso negli USA…• Nel 1993, Marc Andreessen (NCSA) ha lanciato
Mosaic…• Più del 50% degli host su Internet è Sun• Viene fondata da Clark la Netscape• Patrick Naughton fa 300.000 miglia di volo per cercare
di vendere la tecnologia...
• E la First Person Inc.?28
““Contrordine!Contrordine! CDCD--ROM Interattivi per PC !”ROM Interattivi per PC !”
• Nella primavera del 94, First Person Inc viene chiusa dalla Sun
• Bill Joy (Unix BSD e fondatore Sun) decide con Gosling che – Oak è un sistema operativo basato su un linguaggio
– Oak è il prodotto da “vendere”!
29
La nascita di “Java”La nascita di “Java”
• Oak è un nome già soggetto a copyright
• Alternative al nome Java:– Neon, Lyric, Pepper, Silk
• Joy (20 anni prima) aveva deciso di distribuire i sorgenti di BSD
• Netscape già stava usando l’approccio
• La Sun decide di distribuire gratis Java!
30
La gestazione di Java...La gestazione di Java...
• Gosling lavora sul linguaggio Java
• Naughton prepara un browser WWW chiamato WebRunner (poi HotJava)
• In Dicembre 94 una versione alfa viene distribuita
• Il 23 Maggio 1995, Java viene presentato a SunWorldinsieme all’accordo con Netscape per inserire Java nei suoi browser
31
Cosa rimane di questo fallimento?Cosa rimane di questo fallimento?
• Java: un linguaggio di programmazione
32
Organizzazione della lezioneOrganizzazione della lezione
• Obiettivo:Introdurre il linguaggio Java ed esaminarne le caratteristiche
che lo rendono particolare
• La genesi di Java– Caratteristiche peculiari del linguaggio e scelte progettuali
• Le keyword di Java
• Il “dado” delle caratteristiche di Java
• Gli strumenti per Java (JDK)
• Un primo esempio
33
Java è semplice e familiareJava è semplice e familiare
• Di facile apprendimento quindi basato su linguaggi noti
• Ma progettato con accento sulla semplicità
• Quindi realizzato per sottrazione da linguaggi esistenti
• La base è comunque il C++
• Ambiente snello:– Poche centinaia di Kb per interprete, librerie di base
(Graphical User Interface però più ampia)
34
Cosa si elimina da C e C++Cosa si elimina da C e C++
Dal C si elimina:
• goto
• struct e union
• header files
• preprocessore
• casting automatico
Dal C++ si elimina:
• ereditarietà multipla
• operator overloading
• funzioni
• puntatori
• allocazione memoria fatta a carico del programmatore
35
Java è orientato agli oggettiJava è orientato agli oggetti
• Enfasi sui dati e sui metodi per manipolarli
• Permette produzione:– efficiente
– rapida
di codice– portabile
– riusabile
36
Java è distribuitoJava è distribuito
• Fornisce classi di supporto per– Datagram (TCP/IP)
– sockets
– URL
– oggetti remoti (Remote Method Invocation)
– CORBA
• Di utilizzo nel World Wide Web– Lato client (browser): applet
– Lato server: servlet
– “Lato” proxy: Web Based Intermediaries di IBM (Websphere)
37
Java è robustoJava è robusto
• Obiettivo: obbligare il programmatore a scrivere codice bug-free:– Fortemente tipizzato (strongly typed)
• niente casting implicito
– assenza di puntatori
– accessi ad array e stringhe controllati a run-time
– garbage collector automatico
– trattamento eccezioni interno al linguaggio
38
gcc hello.c
Java è interpretatoJava è interpretato
• La compilazione in C (o altri linguaggi compilati)
#include <stdio.h>........ file
oggetto
Libreria di Funzioni I/O standard
file eseguibile
compilatore
linker/* Prototipi funzioni */
hello.c
a.out
stdio.h
39
java Hellojavac Hello.java
Java è interpretatoJava è interpretato
• In Java….
........
compilatore Java VirtualMachine
Hello.java........
Hello.class
40
La macchina virtuale JavaLa macchina virtuale Java
Java VirtualMachine
Hello.class
Un “programma che esegue programmi”…
41
Java è indipendente dalla architetturaJava è indipendente dalla architettura
42
Java è dinamicoJava è dinamico
• Tipico ciclo di programmazione (ad esempio C)
• In Java il linking è dinamico ed effettuato dal Class Loader
• Così si evita il problema della fragilità della superclasse.
Edit Compila Link Execute
43
La fragilità della superclasseLa fragilità della superclasse
• In C++ ogni volta che si modifica una classe, si devono ricompilare le classi che ereditano
• La compilazione è– costosa (in termini di tempo di sviluppo)
– complessa (analisi delle dipendenze)
• In Java la classe viene caricata dinamicamente quando “serve”: a run-time
44
La soluzione di JavaLa soluzione di Java
Java SourceHello.java
Java BytecodesHello.class
Java Compilerjavac
Compilation-time Run-time Java ClassLibrary
JavaInterpreter
Just-in-timecompiler
Runtime System
Sistema Operativo
Hardware
JavaVirtual
Machine
Class Loader
Network
45
Java è portabileJava è portabile
• Oltre a essere indipendente dalla architettura, Java non ha altri aspetti dipendenti dalla implementazione
• Hardware: – dimensioni tipi di dato primitivi
• in C un intero può essere 16, 32, 64 bit
– memorizzazione big endian (Motorola) o little endian (Intel)
• Interfacce grafiche:– Abstract Window Tools (AWT), Swing
46
Java è sicuroJava è sicuro
• Sicurezza attraverso 4 livelli– Regole del linguaggio e compilatore
– Bytecode Verifier
– Class Loader
– Security Manager
• Dalla versione 1.1 classi firmate digitalmente
• Esempi di cose che non sono possibili/permesse– Overrun dello stack a run-time (worm di Internet)
– Accesso a memoria all’esterno di quella assegnata
– Accesso a file locali da classi caricate via Web
47
Il primo livello di sicurezzaIl primo livello di sicurezza
• La sicurezza del linguaggio:– La assenza di puntatori non permette di falsificare puntatori
– Il late binding degli oggetti in memoria non permette la conoscenza della loro allocazione in anticipo
48
49 50
52
Java è Java è multithreadmultithread
• Threads (processi concorrenti) inseriti all’interno del linguaggio
• Programmazione facilitata
• Uso dei thread in molte situazioni:– applet
– multimedia presentation (audio+video+etc.)
• Possibilità di usare macchine multiprocessore
53
Java è ad alte prestazioniJava è ad alte prestazioni
• Alcune tecniche:– il controllo del Bytecode verifier permette all’interprete di
evitare i check a run-time
– Just in Time Compiler: compilazione “on-the-fly” di metodi di classi in linguaggio macchina reale
• La realtà è che Java è un po’ lentino...– maggiori considerazioni in seguito…
54
Organizzazione della lezioneOrganizzazione della lezione
• Obiettivo:Introdurre il linguaggio Java ed esaminarne le caratteristiche
che lo rendono particolare
• La genesi di Java– Caratteristiche peculiari del linguaggio e scelte progettuali
• Le keyword di Java
• Il “dado” delle caratteristiche di Java
• Gli strumenti per Java (JDK)
• Un primo esempio
55
Il Il whitepaperwhitepaper di Java...di Java...
• Java è un linguaggio di programmazione
56
Lanciamo il dado delle caratteristiche di Java..Lanciamo il dado delle caratteristiche di Java..
• Classi Java possono essere caricate dinamicamente, anche dalla rete in maniera da garantire la sicurezza
57
Lanciamo il dado.. La ProduttivitàLanciamo il dado.. La Produttività
• Ambiente di programmazione che favorisce il riuso del software
• Semplice e familiare per facilitare startup in un nuovo linguaggio
58
Lanciamo il dado.. La AffidabilitàLanciamo il dado.. La Affidabilità
• Affidabile e sicuro in tutte le situazioni anche su piccole apparecchiature
• Progettato per poter caricare classi dalla rete
59
Lanciamo il dado.. La EterogeneitàLanciamo il dado.. La Eterogeneità
• Permette lo sviluppo di sistemi che possono essere utilizzati in ambienti diversi
60
Lanciamo il dado.. La Efficienza su reteLanciamo il dado.. La Efficienza su rete
• Il multithread permette di scaricare via rete classi (piccole) mentre altri thread “impegnano” l’utente.
61
Lanciamo il dado.. La VelocitàLanciamo il dado.. La Velocità
• Aspetti contrastanti
• Aggiungiamo anche:– Interpretato
– Object-OrientedGarbage Collection
– Portabile
• Esaminiamo le ottimizzazioni possibili
62
La velocità della JVMLa velocità della JVM
• Varie comprende – caricamento classi, – gestione eccezioni, – controllo limite array e stringhe,– conversione in metodi nativi
• Soluzioni: – migliorare il codice sorgente– migliorare la compilazione– migliorare la esecuzione– passare al C++ :-)
05
101520253035404550
Bytec
ode
Gar
bage
Threa
d Var
ie
63
1. Miglioramento del codice sorgente1. Miglioramento del codice sorgente
• La prima versione del browser HotJava richiedeva 25% del tempo per sincronizzare i thread– una semplice riscrittura ha migliorato le prestazioni del 10-
15%.
• Letteratura sul Performance tuning in Java– soluzioni per utilizzare caratteristiche più veloci per
risolvere lo stesso problema
64
2. Miglioramento del compilatore2. Miglioramento del compilatore
• Esistono 3 tipi di “strumenti”– compilatori di codice sorgente
– ottimizzatori di bytecode
– compilatori in codice nativo• Just in Time
• compilatori dinamici/autoadaptive
• compilatori nativi statici
• Un programma Java può passare attraverso alcuni di questi strumenti
65
2.a Compilatori di codice sorgente2.a Compilatori di codice sorgente
• Trasformano sorgenti Java in bytecode• Alcune esigenze contrastanti:
– ottimizzare il codice per l’esecuzione richiede tempo durante lacompilazione…
– e genera programmi più efficienti ma che (a volte) • possono usare maggiori risorse di memoria• richiedere più tempo per lo startup
• La JVM HotSpot (SUN) offre due tipi di VM:– la JVM tipo server
• esecuzione efficiente, startup lento, occupazione di memoria maggiore
– la JVM tipo client• non si effettuano troppe ottimizzazioni sul codice (minore efficienza)• compilazione veloce e veloce startup e minore uso di risorse di memoria
66
2.a Compilatori di codice sorgente (b)2.a Compilatori di codice sorgente (b)
• Alcune ottimizzazioni possibili (comuni agli ottimizzatori):– Codice più efficiente (divisioni per 2 sostituite da shift)– Bytecode ottimizzato per la traduzione in linguaggio macchina su
particolari piattaforme– Rimozione di codice/campi/metodi non utilizzati
– Eliminazione sottoespressioni comuni• x= (z/2)-( (z/2) -k)
– Desincronizzazione di metodi– Eliminazione dei controlli sul range dell’array se l’indice è “Ok”
67
2.b Ottimizzatori di 2.b Ottimizzatori di bytecodebytecode
• Prendono in input bytecode e restituiscono bytecode più veloce
• DashO (Preemptive Sol.) incrementa le prestazioni del 30%
68
2.c Compilatori Codice Nativo (statici)2.c Compilatori Codice Nativo (statici)
• Prendono in input bytecode e generano codice nativo
• Il compilatore statico restituisce, quindi codice eseguibile per la specifica piattaforma
• Un esempio: Excelsior JET
– compila in eseguibili per Microsoft Windows
– precompilando tutte le classi disponibili…
69
3. Miglioramento esecuzione 3. Miglioramento esecuzione
• Compilatori dinamici (Just-in-Time e Adaptive) – traducono (parte del) programma in bytecode in linguaggio
macchina
– vengono eseguiti a run-time dalla JVM
70
3. Miglioramento esecuzione: 3. Miglioramento esecuzione: la la GarbageGarbage CollectionCollection
Alcuni algoritmi:
• Mark and Sweep• periodico,
• elimina oggetti non referenziati
• Garbage Collector generazionali• suddivisione in 2 classi di età
• “gli oggetti migliori muoiono giovani”
• Possibile il tuning della frequenza:– fare chiamare il Garbage Collector
quando assolutamente necessario
05
101520253035404550
Bytec
ode
Gar
bage
Threa
d Var
ie
71
3. Miglioramento esecuzione: 3. Miglioramento esecuzione: la la Gestione dei Gestione dei ThreadThread
• Symantec velocizza la JVM per i thread tra 80 ed il 150%
• Sun mappa i thread Java sui thread nativi Solaris
• Microsoft mappa i thread Java sui thread nativi Windows NT 0
5101520253035404550
Bytec
ode
Gar
bage
Threa
d Var
ie
Lanciamo il dado.. Il World Lanciamo il dado.. Il World WideWide WebWeb
• Programmi Java (applet) possono girare in browser WWW
• Utile per – Internet
– Intranet
74
Organizzazione della lezioneOrganizzazione della lezione
• Obiettivo:Introdurre il linguaggio Java ed esaminarne le caratteristiche
che lo rendono particolare
• La genesi di Java– Caratteristiche peculiari del linguaggio e scelte progettuali
• Le keyword di Java
• Il “dado” delle caratteristiche di Java
• Gli strumenti per Java (JDK)
• Un primo esempio
75
Gli strumenti per JavaGli strumenti per Java
• JDK = Java Development Kit– prodotti e distribuiti gratuitamente dalla Sun Microsystem
per varie piattaforme
– Versione 1.0.x (1995)• favorisce la diffusione sui browser
– Versione 1.1.x (1997)• più efficiente, gestione eventi cambiata
• introduce RMI (Remote Method Invocation)
– Versione 1.2 (1999) = Java 2
– Versione 1.3 (2000)
–Versione 1.6 (2006)76
La piattaforma JavaLa piattaforma Java
• Piattaforme: – J2ME Micro Edition
– J2SE Standard Edition
– J2EE Enterprise Edition
77
Alcuni equivociAlcuni equivoci
• Java è facile da imparare– Vastissimo repertorio di classi
• Java è “solo un altro linguaggio”/”il linguaggio”
• Java viene eseguito sul Web– Anche….
• Java crea problemi di sicurezza– La giovane età del linguaggio ha implicato rischi
• Javascript ha a che fare con Java (No.)
78
Organizzazione della lezioneOrganizzazione della lezione
• Obiettivo:Introdurre il linguaggio Java ed esaminarne le caratteristiche
che lo rendono particolare
• La genesi di Java– Caratteristiche peculiari del linguaggio e scelte progettuali
• Le keyword di Java
• Il “dado” delle caratteristiche di Java
• Gli strumenti per Java (JDK)
• Un primo esempio
79
public class HelloWorld {public static void main(String[] args) {
System.out.println(“Ciao!”);}
}
Il primo esempio: il classico “Ciao Il primo esempio: il classico “Ciao Mondo!”Mondo!”
• Definizione di una classe
• Metodo main
• Per compilarejavac HelloWorld.java
• …che genera il fileHelloWorld.class
• …che viene eseguito dajava HelloWorld
HelloWorld.java