"Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Lezione 1 Introduzione a Java Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Organizzazione della lezione Programmazione Distribuita. Vi.ttorio Scarano • Obiettivo: Introdurre il linguaggio Java ed esaminarne le caratteristiche che lo rendono particolare • La genesi di Java • Le caratteristiche peculiari del linguaggio e le scelte progettuali • Le keyword di Java 2 A.A. 2002-2003 Università di Salerno 1 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Programmazione Distribuita. Vi.ttorio Scarano Java è... • • • • • Un tipo di caffè Un linguaggio di programmazione… Una piattaforma di sviluppo… Una moda… Una storia interessante di … 3 Programmazione Distribuita. Vi.ttorio Scarano Java: la carta di identità • Genitori: Sun Microsystem • Data di nascita: 23 maggio 1995 • Segni particolari: – Utilizzato nel World Wide Web • Luoghi frequentati: Java – Sistemi di middleware – Sistemi embedded – Ambienti a componenti per il calcolo distribuito Seriamente parlando… Perché Java? 4 A.A. 2002-2003 Università di Salerno 2 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Perché Java… Programmazione Distribuita. Vi.ttorio Scarano • Frutto dalla esperienza C e C++ – Object Oriented Programming (OOP) – Linguaggio che facilita programmi bug-free • Indipendente dalla piattaforma • Ricco di Application Programming Interface (API) – Organizzate in packages • La presentazione da parte di Sun Microsystem – Un whitepaper con tante keywords 5 Il whitepaper di Java... Programmazione Distribuita. Vi.ttorio Scarano • Java è un linguaggio di programmazione 6 A.A. 2002-2003 Università di Salerno 3 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica La preistoria: Il progetto Green Programmazione Distribuita. Vi.ttorio Scarano • 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” 7 Programmazione Distribuita. Vi.ttorio Scarano Un giovane progettista della Sun.. • 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” 8 A.A. 2002-2003 Università di Salerno 4 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica La risposta: Programmazione Distribuita. Vi.ttorio Scarano • 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 9 Un meeting: “Cosa si fa?” Programmazione Distribuita. Vi.ttorio Scarano • 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. 10 A.A. 2002-2003 Università di Salerno 5 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Programmazione Distribuita. Vi.ttorio Scarano La missione: Produrre “qualcosa”… • 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 – le apparecchiature domestiche controllate da microprocessori – i computers propriamente detti. 11 Programmazione Distribuita. Vi.ttorio Scarano L’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! 12 A.A. 2002-2003 Università di Salerno 6 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Programmazione Distribuita. Vi.ttorio Scarano L’idea: • Un telecomando – – – – universale di immediato utilizzo multimediale per tutte le apparecchiature domestiche! 13 Il Green Team al lavoro: Programmazione Distribuita. Vi.ttorio Scarano • 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! 14 A.A. 2002-2003 Università di Salerno 7 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Il ragionamento di Gosling Programmazione Distribuita. Vi.ttorio Scarano • 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! 15 Nel 1992….(3 settembre) Programmazione Distribuita. Vi.ttorio Scarano • “Cokes and Dove Bars” + $1,000,000 = 16 A.A. 2002-2003 Università di Salerno 8 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Programmazione Distribuita. Vi.ttorio Scarano E funziona anche! 17 Programmazione Distribuita. Vi.ttorio Scarano Cosa c’è “sotto 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..) 18 A.A. 2002-2003 Università di Salerno 9 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Cosa c’è “sotto il cofano”? (2) Programmazione Distribuita. Vi.ttorio Scarano – 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..) 19 Programmazione Distribuita. Vi.ttorio Scarano Cosa c’è “sotto il cofano”? (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! 20 A.A. 2002-2003 Università di Salerno 10 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica L’entusiasmo per *7…. Programmazione Distribuita. Vi.ttorio Scarano • 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…. 21 Programmazione Distribuita. Vi.ttorio Scarano E le “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.? 22 A.A. 2002-2003 Università di Salerno 11 "Programmazione Distribuita" - Prof. Scarano Programmazione Distribuita. Vi.ttorio Scarano “Contrordine! Laurea in Informatica TV-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. 23 Programmazione Distribuita. Vi.ttorio Scarano La “Doccia gelata”... • L’appalto viene dato alla Silicon Graphics • Chairman della SG è Jim Clark • Il tentativo di TV interattiva con la Time Warner fallisce 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.? 24 A.A. 2002-2003 Università di Salerno 12 "Programmazione Distribuita" - Prof. Scarano Programmazione Distribuita. Vi.ttorio Scarano “Contrordine! Laurea in Informatica Videogiochi con CD-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.? 25 Programmazione Distribuita. Vi.ttorio Scarano 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.? 26 A.A. 2002-2003 Università di Salerno 13 "Programmazione Distribuita" - Prof. Scarano Programmazione Distribuita. Vi.ttorio Scarano “Contrordine! Laurea in Informatica CD-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”! 27 Programmazione Distribuita. Vi.ttorio Scarano 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! 28 A.A. 2002-2003 Università di Salerno 14 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Programmazione Distribuita. Vi.ttorio Scarano 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 SunWorld insieme all’accordo con Netscape per inserire Java nei suoi browser 29 Cosa rimane di questo fallimento? Programmazione Distribuita. Vi.ttorio Scarano • Java: un linguaggio di programmazione 30 A.A. 2002-2003 Università di Salerno 15 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Programmazione Distribuita. Vi.ttorio Scarano Java è 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) 31 Programmazione Distribuita. Vi.ttorio Scarano 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 32 A.A. 2002-2003 Università di Salerno 16 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Programmazione Distribuita. Vi.ttorio Scarano Java è orientato agli oggetti • Enfasi sui dati e sui metodi per manipolarli • Permette produzione: – efficiente – rapida di codice – portabile – riusabile 33 Java è distribuito Programmazione Distribuita. Vi.ttorio Scarano • 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) A.A. 2002-2003 Università di Salerno 34 17 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Programmazione Distribuita. Vi.ttorio Scarano Java è 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 35 Java è interpretato Programmazione Distribuita. Vi.ttorio Scarano • La compilazione in C (o altri linguaggi compilati) hello.c #include <stdio.h> ........ compilatore /* Prototipi funzioni */ file oggetto Libreria di Funzioni I/O standard a.out linker file eseguibile stdio.h gcc hello.c 36 A.A. 2002-2003 Università di Salerno 18 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Java è interpretato Programmazione Distribuita. Vi.ttorio Scarano • In Java…. Hello.java Hello.class ........ ........ compilatore javac Hello.java Java Virtual Machine java Hello 37 Programmazione Distribuita. Vi.ttorio Scarano La macchina virtuale Java Un “programma che esegue programmi”… Java Virtual Machine Hello.class 38 A.A. 2002-2003 Università di Salerno 19 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Programmazione Distribuita. Vi.ttorio Scarano Java è indipendente dalla architettura 39 Java è dinamico Programmazione Distribuita. Vi.ttorio Scarano • Tipico ciclo di programmazione (ad esempio C) Edit Compila Link Execute • In Java il linking è dinamico ed effettuato dal Class Loader • Così si evita il problema della fragilità della superclasse. 40 A.A. 2002-2003 Università di Salerno 20 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Programmazione Distribuita. Vi.ttorio Scarano La 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 41 La soluzione di Java Programmazione Distribuita. Vi.ttorio Scarano Compilation-time Run-time Java Class Library Java Source Hello.java Java Compiler javac Class Loader Network Java Interpreter Just-in-time compiler Java Virtual Machine Runtime System Java Bytecodes Hello.class Sistema Operativo Hardware 42 A.A. 2002-2003 Università di Salerno 21 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Programmazione Distribuita. Vi.ttorio Scarano Java è 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 43 Java è sicuro Programmazione Distribuita. Vi.ttorio Scarano • 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 A.A. 2002-2003 Università di Salerno 44 22 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Il primo livello di sicurezza Programmazione Distribuita. Vi.ttorio Scarano • 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 45 Programmazione Distribuita. Vi.ttorio Scarano I restanti 3 livelli di sicurezza 46 A.A. 2002-2003 Università di Salerno 23 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Programmazione Distribuita. Vi.ttorio Scarano Il Bytecode Verifier controlla che: • Non ci siano stack under/overflow • Operandi corretti per opcodes • Niente casting illegali • Vengano seguite le regole di accesso a membri degli oggetti 47 Programmazione Distribuita. Vi.ttorio Scarano Il Class Loader… • Carica la classe in un unico namespace che corrisponde alla provenienza • Quindi le classi built-in non possono essere rimpiazzate da altre (come il Security Manager) 48 A.A. 2002-2003 Università di Salerno 24 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Il Security Manager Programmazione Distribuita. Vi.ttorio Scarano • Implementa una politica di sicurezza. • Esempio: la delete di un file può essere illegale • Il Security Manager viene interpellato dall’interprete per ogni azione potenzialmente pericolosa. 49 Programmazione Distribuita. Vi.ttorio Scarano Java è multithread • Threads (processi concorrenti) inseriti all’interno del linguaggio • Programmazione facilitata • Uso dei thread in molte situazioni: – applet – multimedia presentation (audio+video+etc.) – Java non supporta I/O non bloccante con notifica: si crea un thread per ogni canale! • Possibilità di usare macchine multiprocessore 50 A.A. 2002-2003 Università di Salerno 25 "Programmazione Distribuita" - Prof. Scarano Laurea in Informatica Java è ad alte prestazioni Programmazione Distribuita. Vi.ttorio Scarano • 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… 51 A.A. 2002-2003 Università di Salerno 26