Un po' di storia di Java

Java: (n.) Isola dell'Indonesia (superficie 48.842 miglia quadrate)
java: (n.) caffè infuso (da Java)

Forse avrete sentito parlare di Java come linguaggio di programmazione per applicazioni su Internet oppure semplicemente come linguaggio di programmazione orientato agli oggetti e general purpose. Ma quando fu ideato doveva essere tutt'altro:

  • Nel 1991 James Gosling della Sun Microsystems guida un team per lo sviluppo di un nuovo linguaggio di programmazione per il controllo di elettrodomestici (tostapane, TV, ...)
    • programmazione di alto livello
    • capace di essere eseguito su diversi tipi di processori (indipendenza dall'architettura)
    • che non richiedesse compilatori troppo sofisticati (i produttori degli elettrodomestici non avrebbero investito risorse in quel settore)
    L'idea è di introdurre un unico, semplice linguaggio intermedio (chiamato byte-code) per il quale potessero facilmente essere scritti dei compilatori ad hoc.
  • Il progetto non ebbe fortuna presso i produttori di elettrodomestici.
  • Nel 1994, con il successo di Internet, James Gosling, assieme a Patrick Naughton e Jonathan Payne, ripresero l'idea per sviluppare un web browser (HotJava) capace di scaricare programmi (Applet) dalla rete e eseguirli.
  • Nel 1995, fu presentato alla fiera SunWorld che ne decretò il successo!
  • Dal 1996 supportato nei browser più diffusi (di malavoglia da Microsoft).
  • Nel 2006 viene rilasciata la versione 1.6.0 di Java.
  • Nel 2010 Java diviene un marchio registrato Oracle in seguito all'acquisto di Sun Microsystem da parte di Oracle.
  • Nel 2011 è attesa la versione 1.7.0 di Java.

Inizialmente avrebbe dovuto essere chiamato Oak, ma esistendo già un linguaggio con questo nome gli sviluppatori si riunirono per scegliere un altro nome e prendendo un caffè ...

Fonti scarsamente accreditate suggeriscono maliziosamente che l'idea di creare un linguaggio per programmare gli elettrodomestici nasca da un episodio della vita di Eduardo de Filippo, quando un funzionario della RAI lo chiamò al telefono e gli disse: "Qui è la televisione" e Eduardo rispose: "Aspetti che le passo il frigorifero!" e attaccò la cornetta.

Se il successo di Java come linguaggio per applet è comprensibile, per quanto riguarda il suo successo come linguaggio di programmazione general purpose ci sembra importante la decisione della Sun di rendere pubblici i sorgenti.




Filosofia di Java

Ci sono cinque principi cardine dietro la progettazione del linguaggio Java:
  1. Uso di metodologie di programmazione object-oriented
  2. Permettere allo stesso programma di essere eseguito su molteplici piattaforme (Write Once, Run Anywhere)
  3. Supporto built-in per programmazione di rete
  4. Esecuzione sicura di codice proveniente da remoto
  5. Facile da usare



 Caratteristiche principali di Java

  • Orientato a oggetti: garantisce la modularità e l'estendibilità del linguaggio
  • Progettato come estensione e semplificazione di C e C++
  • Progettato per essere utilizzato in Internet:
    • Esempio di applet [Sun];
  • Indipendente dalla piattaforma (cioè da hardware e sistema operativo), grazie alla Java Virtual Machine (JVM)



Indipendenza dalla piattaforma (1)

Questo è lo schema standard di compilazione/esecuzione che avevamo visto:
tutto dipende dalla piattaforma




Indipendenza dalla piattaforma (2)

Schema misto di compilazione e interpretazione.
  • Il sorgente del programma (uno o più file .java) vengono compilati in bytecode (codice di byte) (producendo file .class)
  • Esecuzione (interpretazione) con la Java Virtual Machine (JVM - Macchina Virtuale di Java).
  • Ci sono JVM per praticamente tutte le piattaforme (Solaris, Windows, Linux, Macintosh,...)

  • I file  .class possono essere eseguiti su qualunque JVM. Questo permette, ad esempio, di scaricare un applet e eseguirlo direttamente senza compilarlo.
  • Per aumentare l'efficienza sono state sviluppate anche tecniche di compilazione dinamica del codice scaricato.



Java e la Didattica

Java si è imposto come uno dei principali linguaggi per la programmazione generica e per l'apprendimento dell'informatica... però è opportuno premettere che:

  • non è stato progettato esplicitamente per insegnare agli studenti a scrivere i primi programmi e quindi richiede alcuni tecnicismi anche per programmi molto semplici;
  • non è ancora del tutto stabile: ha subito molte revisioni e estensioni (1996 v1.0, 1997 v1.1, 1998 v1.2, 2000 v1.3, 2002 v1.4, 2004 v5.0, 2006 v6.0);
  • comprende una vastissima raccolta di pacchetti di libreria: non si può imparare tutto Java in pochi mesi.

Comunque vedrete che Java è semplice, elegante e, dal punto di vista didattico, preferibile ad altri linguaggi.

Per esempio, Java in molti casi vi impedirà di eseguire programmi insensati, segnalando opportuni errori in fase di compilazione che vi aiuteranno a ragionare sul codice che state scrivendo.




Primitive o estensioni per ...

  • Definire e manipolare Collezioni [Java Collection Framework]
  • Concorrenza [multi-threading]: esempio di algoritmi di ordinamento [Sun]

    Esempio: eseguire il seguente comando usando come current directory "/":

    appletviewer /<path-di-java>/demo/applets/SortDemo/example1.html

  • Programmazione di rete: manipolazione di socket, connessione a URL, Remote Method Invocation [RMI]
  • Progettare interfacce grafiche, con le Java Foundation Classes [JFC], che comprendono l'Abstract Windowing Toolkit [AWT] e Swing.

    Esempio: eseguire il seguente comando usando come current directory "/":

    appletviewer /<path-di-java>/demo/jfc/SwingSet2/SwingSet2.html

  • e ancora: persistenza dei dati [serializable], meccanismi per la sicurezza, connettività con basi di dati, reflection, programmazione per componenti (beans)...