Come configurare smartphone e PC. Portale informativo
  • casa
  • Errori
  • Sicurezza e Java Virtual Machine. Ampia libreria di base

Sicurezza e Java Virtual Machine. Ampia libreria di base

Quindi, Java ha una storia di sviluppo lunga e difficile, ma è tempo di considerare cosa è successo ai creatori, quali proprietà ha questa tecnologia.

La proprietà più conosciuta e allo stesso tempo la più controversa è molto o multipiattaforma. Si è già detto che si ottiene attraverso l'uso della macchina virtuale JVM, che è un programma regolare che viene eseguito dal sistema operativo e fornisce alle applicazioni Java tutte le capacità necessarie. Poiché tutti i parametri JVM sono specificati, l'unica attività rimasta è implementare macchine virtuali su tutte le piattaforme esistenti e utilizzate.

La presenza di una macchina virtuale definisce molte proprietà di Java, ma per ora concentriamoci sulla prossima domanda: Java è un linguaggio compilato o interpretato? In effetti, vengono utilizzati entrambi gli approcci.

Il codice sorgente di qualsiasi programma Java è rappresentato da normali file di testo che possono essere creati in qualsiasi editor di testo o strumento di sviluppo specializzato e hanno l'estensione .java. Questi file vengono inseriti nel compilatore Java, che li traduce in uno speciale bytecode Java. È questo set di istruzioni compatto ed efficiente che è supportato dalla JVM ed è parte integrante della piattaforma Java.

Il risultato del lavoro del compilatore viene archiviato in file binari con estensione .class. Un'applicazione Java composta da tali file viene inserita nella macchina virtuale, che inizia a eseguirli o interpretarli, poiché è essa stessa un programma.

Molti sviluppatori inizialmente hanno criticato l'audace slogan di Sun "Scrivi una volta, corri ovunque", trovando sempre più incongruenze e incongruenze su varie piattaforme. Tuttavia, bisogna ammettere che erano semplicemente troppo impazienti. Java era appena nato e le prime versioni delle specifiche non erano abbastanza complete.

Non ci volle molto perché Sun giungesse alla conclusione che non era sufficiente pubblicare semplicemente le specifiche liberamente (cosa che era stata fatta molto prima di Java). È inoltre necessario creare procedure speciali per testare nuovi prodotti per la conformità agli standard. Il primo test di questo tipo per la JVM conteneva solo circa 600 controlli, un anno dopo il loro numero è cresciuto fino a diecimila e da allora è in aumento (era proprio questo test che MS IE 4.0 non poteva superare in una sola volta). Naturalmente, gli autori delle macchine virtuali le hanno costantemente migliorate, eliminando gli errori e ottimizzando il lavoro. Tuttavia, qualsiasi tecnologia, anche molto ben concepita, richiede tempo per creare un'implementazione di alta qualità. Java 2 Micro Edition (J2ME) sta attualmente seguendo un percorso di sviluppo simile, ma ne parleremo più avanti.

La successiva proprietà più importante è l'orientamento agli oggetti Java, che è sempre menzionato in tutti gli articoli e nei comunicati stampa. Lo stesso approccio orientato agli oggetti (OOP) sarà discusso nella prossima lezione, ma è importante sottolineare che in Java quasi tutto è implementato sotto forma di oggetti: thread di esecuzione (thread) e flussi di dati (stream), networking, lavorare con le immagini, con un'interfaccia utente, gestione degli errori, ecc. Dopotutto, qualsiasi applicazione Java è un insieme di classi che descrivono nuovi tipi di oggetti.

Durante il corso viene svolta una discussione dettagliata del modello a oggetti Java, ma ne illustreremo le caratteristiche principali. Prima di tutto, i creatori hanno abbandonato l'eredità multipla. È stato deciso che rendeva i programmi troppo complicati e confusi. Il linguaggio adotta un approccio alternativo, il tipo speciale 'interfaccia'. Se ne parlerà in dettaglio nella lezione corrispondente.

Inoltre, utilizza Java digitazione forte. Ciò significa che qualsiasi variabile e qualsiasi espressione ha un tipo già noto al momento della compilazione. Questo approccio viene utilizzato per semplificare l'identificazione dei problemi, poiché il compilatore segnala immediatamente gli errori e indica la loro posizione nel codice. Cerca lo stesso situazioni eccezionali(eccezioni - questo è il modo in cui le situazioni errate vengono richiamate in Java) durante l'esecuzione del programma (runtime). test complessi, mentre la causa del difetto può essere trovata in una classe completamente diversa. Pertanto, è necessario fare ulteriori sforzi durante la scrittura del codice, ma la sua affidabilità è notevolmente aumentata (e questo è uno degli obiettivi fondamentali per cui è stato creato il nuovo linguaggio).

Ci sono solo 8 tipi di dati in Java che non sono oggetti. Sono stati definiti sin dalla prima versione e non sono mai cambiati. Questi sono cinque tipi interi: byte, short, int, long e includono anche il carattere char. Poi due frazionari tipo galleggiante e double, e infine il tipo booleano booleano. Tali tipi sono detti semplici o primitivi (dal primitivo inglese) e sono discussi in dettaglio nella lezione sui tipi di dati. Tutti gli altri tipi sono oggetti o tipi di riferimento. riferimento).

Per qualche ragione, la sintassi di Java ha fuorviato molti. In realtà è creato sulla base della sintassi dei linguaggi C/C++, quindi se si guarda il codice sorgente dei programmi scritti in questi linguaggi e in Java, non è subito possibile capire quale sia scritto in quale linguaggio. Questo ha in qualche modo portato molti a pensare che Java sia un C++ semplificato con funzionalità aggiuntive come il Garbage Collector. Considereremo il Garbage Collector automatico (Garbage Collector) un po' più basso, ma è un grande malinteso che Java sia lo stesso linguaggio di C++.

Naturalmente, durante lo sviluppo di una nuova tecnologia, gli autori di Java si sono affidati a un linguaggio di programmazione ampiamente utilizzato per una serie di motivi. In primo luogo, a quel tempo essi stessi consideravano il C++ il loro strumento principale. In secondo luogo, perché inventare qualcosa di nuovo quando ce n'è uno vecchio perfettamente adatto? Infine, è ovvio che una sintassi sconosciuta spaventerà gli sviluppatori e complicherà notevolmente l'introduzione di un nuovo linguaggio e Java dovrebbe essersi diffuso il più rapidamente possibile. Pertanto, la sintassi è stata solo leggermente semplificata per evitare costruzioni eccessivamente complicate.

Ma, come già accennato, il C++ era fondamentalmente inadatto per i nuovi compiti che gli sviluppatori di Sun si erano prefissati, quindi il modello Java è stato ricostruito e in accordo con obiettivi completamente diversi. Ulteriori lezioni riveleranno gradualmente differenze specifiche.

Per quanto riguarda il modello a oggetti, è stato piuttosto modellato su linguaggi come Smalltalk di IBM, o il linguaggio Simula sviluppato negli anni '60 presso il Norwegian Computing Center, a cui fa riferimento lo stesso creatore di Java James Gosling.

Anche un'altra importante proprietà di Java, la facilità di apprendimento e sviluppo, ha ricevuto recensioni contrastanti. In effetti, gli autori si sono presi la briga di salvare i programmatori dagli errori più comuni che a volte commettono anche sviluppatori esperti di C/C++. E il primo posto qui è occupato dal lavoro con la memoria.

In Java è stato introdotto fin dall'inizio meccanismo di raccolta automatica dei rifiuti(dal garbage collector inglese). Supponiamo che un programma crei un oggetto, ci lavori e poi arrivi un momento in cui non è più necessario. È necessario liberare la memoria occupata per non interferire con il normale funzionamento del sistema operativo. In C/C++, questo deve essere fatto esplicitamente dal programma. Ovviamente, con questo approccio, ci sono due pericoli: o eliminare un oggetto di cui qualcun altro ha bisogno (e se si accede effettivamente, si verificherà un errore) o non eliminare un oggetto che è diventato non necessario, il che significa una memoria leak, ovvero Il programma inizia a consumare sempre più RAM.

Durante lo sviluppo in Java, il programmatore non pensa affatto a liberare memoria. La macchina virtuale stessa conta il numero di riferimenti a ciascun oggetto e, se diventa uguale a zero, tale oggetto viene contrassegnato per l'elaborazione dal Garbage Collector . Pertanto, il programmatore deve solo assicurarsi che non ci siano riferimenti a oggetti non necessari. Il Garbage Collector è un thread di esecuzione in background che scansiona regolarmente gli oggetti esistenti e rimuove quelli che non sono più necessari. Il programma non può influenzare in alcun modo il lavoro del Garbage Collector, puoi solo avviare esplicitamente il suo passaggio successivo utilizzando una funzione standard. È chiaro che questo semplifica enormemente lo sviluppo dei programmi, soprattutto per i programmatori alle prime armi.

Tuttavia, gli sviluppatori esperti non erano contenti di non poter controllare completamente tutto ciò che accadeva al loro sistema. Non ci sono informazioni esatte quando esattamente un oggetto che è diventato non necessario verrà eliminato, quando il thread del Garbage Collector inizierà a funzionare (e quindi occuperà risorse di sistema), ecc. Ma, con buona pace dell'esperienza di tali programmatori, va notato che il numero schiacciante di fallimenti dei programmi scritti in C/C++ ricade proprio su lavoro scorretto con la memoria, e a volte questo accade anche con prodotti diffusi di aziende molto serie.

Inoltre, è stata posta particolare enfasi sulla facilità di padroneggiare la nuova tecnologia. Come già accennato, ci si aspettava (e queste aspettative erano giustificate, confermando la correttezza del percorso scelto!) che Java venisse utilizzato il più ampiamente possibile, anche in quelle aziende che non avevano mai programmato prima a questo livello (elettrodomestici come come tostapane e caffettiere, creando giochi e altre applicazioni per telefono cellulare eccetera.). C'erano anche una serie di altre considerazioni. I prodotti per utenti generici, non per programmatori professionisti, devono essere particolarmente affidabili. Internet è diventato World Wide Web, poiché sono comparsi utenti non professionisti e la possibilità di creare applet per loro non è meno interessante. Avevano bisogno di uno strumento semplice per creare applicazioni robuste.

Infine, il boom di Internet degli anni '90 ha preso slancio e ha proposto nuovi requisiti più severi per i tempi di sviluppo. I progetti pluriennali che in passato erano all'ordine del giorno non rispondevano più alle esigenze dei clienti, i nuovi impianti dovevano essere realizzati al massimo in un anno, o addirittura in pochi mesi.

Oltre all'introduzione del Garbage Collector, sono state adottate altre misure per semplificare lo sviluppo. Alcuni di essi sono già stati menzionati: rifiuto dell'ereditarietà multipla, semplificazione della sintassi, ecc. Nella prima versione di Java è stata implementata la possibilità di creare applicazioni multithread (la ricerca ha dimostrato che questo è molto conveniente per gli utenti e gli standard esistenti si basano sulla telescrivente sistemi obsoleti da molti anni). Altre caratteristiche saranno discusse nelle lezioni successive. Tuttavia, il fatto che sia effettivamente più facile creare e mantenere sistemi in Java che in C/C++ è stato a lungo un fatto generalmente accettato. Tuttavia, tutti uguali, questi linguaggi sono creati per scopi diversi e ognuno ha i suoi innegabili vantaggi.

La prossima importante proprietà di Java è la sicurezza. L'attenzione iniziale sulle applicazioni distribuite, e in particolare la decisione di eseguire le applet sulla macchina client, ha reso la sicurezza una priorità assoluta. Quando si esegue qualsiasi macchina virtuale Java, si applica un'intera gamma di misure. Quella che segue è solo una breve descrizione di alcuni di essi.

Innanzitutto, queste sono le regole per lavorare con la memoria. È già stato detto che la memoria viene cancellata automaticamente. La sua prenotazione è determinata anche dalla JVM, non dal compilatore, o esplicitamente dal programma, lo sviluppatore può solo indicare che vuole creare un altro nuovo oggetto. In linea di principio, non ci sono puntatori a indirizzi fisici.

In secondo luogo, la presenza di un interprete di macchina virtuale rende molto più facile tagliare il codice pericoloso in ogni fase del lavoro. Innanzitutto, il bytecode viene caricato nel sistema, di solito sotto forma di file di classe. La JVM controlla attentamente che tutte rispettino le regole di sicurezza Java generali e che non siano create da aggressori che utilizzano altri mezzi (e non siano corrotte durante il transito). Quindi, durante l'esecuzione del programma, l'interprete può facilmente verificare la validità di ogni azione. Le capacità delle classi che sono state caricate da un disco locale o in rete differiscono notevolmente (l'utente può facilmente assegnare o rimuovere diritti specifici). Ad esempio, le applet per impostazione predefinita non avranno mai accesso al locale file system. Tali restrizioni integrate si trovano in tutte le librerie standard Java.

Infine, esiste un meccanismo per la firma di applet e altre applicazioni scaricate dalla rete. Uno speciale certificato garantisce che l'utente ha ricevuto il codice esattamente nella forma in cui è stato rilasciato dal produttore. Questo, ovviamente, non fornisce ulteriori mezzi di protezione, ma consente al cliente di rifiutarsi di lavorare con applicazioni di produttori inaffidabili o di vedere immediatamente che sono state apportate modifiche non autorizzate al programma. Nel peggiore dei casi, sa chi è il responsabile del danno.

La combinazione delle proprietà descritte di Java ci permette di affermare che il linguaggio è molto adatto per lo sviluppo di applicazioni Internet e intranet (reti interne di aziende).

Infine, un importante caratteristica distintiva Java è il suo dinamismo. Il linguaggio è molto ben concepito, centinaia di migliaia di sviluppatori e molte grandi aziende sono coinvolte nel suo sviluppo. Le fasi principali di questo sviluppo sono brevemente descritte nella sezione successiva.

Quindi, riassumiamo. La piattaforma Java presenta i seguenti vantaggi:

  • portabilità, o multipiattaforma ;
  • orientamento agli oggetti, è stato creato un modello a oggetti efficace;
  • sintassi C/C++ familiare;
  • modello di sicurezza integrato e trasparente;
  • orientamento alle attività Internet, applicazioni distribuite in rete;
  • dinamismo, facilità di sviluppo e aggiunta di nuove funzionalità;
  • facilità di apprendimento.

Ma non dovresti presumere che un apprendimento più semplice significhi che non hai affatto bisogno di imparare una lingua. Per scrivere programmi veramente buoni, per creare grandi sistemi complessi, è necessaria una solida conoscenza di tutti i concetti base di Java e delle librerie utilizzate. Ecco di cosa tratta questo corso.

Principali versioni e prodotti di Java

Premettiamo subito che prodotti qui significano soluzioni software di Sun, che sono "implementazioni di riferimento".

Quindi Java è stato annunciato per la prima volta il 23 maggio 1995. I principali prodotti disponibili come versioni beta in quel momento erano:

  • Specifica del linguaggio Java, JLS , specifica linguaggio Java(descrive il vocabolario, i tipi di dati, le costruzioni di base, ecc.);
  • specifica JVM;
  • Java Development Kit, JDK - Uno strumento per sviluppatori composto principalmente da utilità, librerie di classi standard e demo.

La specifica del linguaggio è stata compilata così bene che è usata quasi invariata fino ad oggi. Naturalmente sono stati fatti un gran numero di chiarimenti, descrizioni più dettagliate e sono state aggiunte alcune novità (ad esempio, la dichiarazione di classi interne), ma i concetti di base rimangono invariati. Questo corso in in larga misura in base alla specifica della lingua.

La specifica JVM è destinata principalmente ai creatori di macchine virtuali e quindi non è praticamente utilizzata dai programmatori Java.

JDK per molto tempo era lo strumento di sviluppo dell'applicazione di base. Non contiene editor di testo, ma opera solo su file Java preesistenti. Il compilatore è rappresentato dall'utilità javac (compilatore java). La macchina virtuale è implementata dal programma java. Per i lanci di prova delle applet, è disponibile un'appletviewer di utilità speciale. Infine, è incluso uno strumento javadoc per generare automaticamente la documentazione in base al codice sorgente.

La prima versione conteneva solo 8 librerie standard:

  • java.lang - classi base necessarie per il funzionamento di qualsiasi applicazione (il nome è un'abbreviazione di lingua);
  • java.util - molte classi di supporto utili;
  • java.applet - classi per la creazione di applet;
  • java.awt, java.awt.peer - una libreria per la creazione di un'interfaccia utente grafica (GUI), chiamata Abstract Window Toolkit, AWT, descritta in dettaglio nella Lezione 11;
  • java.awt.image - classi aggiuntive per lavorare con le immagini;
  • java.io - lavora con flussi di dati (stream) e file;
  • java.net - rete.

Pertanto, tutte le librerie iniziano con java , sono quelle standard. Tutti gli altri (a cominciare da com, org, ecc.) sono soggetti a modifiche in qualsiasi versione senza supporto per la compatibilità.

La versione finale di JDK 1.0 è stata rilasciata nel gennaio 1996.

Spiegare immediatamente il sistema di denominazione della versione. La designazione della versione è composta da tre cifre. Il primo è sempre 1. Ciò significa che viene mantenuta la piena compatibilità tra tutte le versioni di 1.x.x. Cioè, un programma scritto su un JDK precedente verrà sempre eseguito correttamente su uno più recente. Laddove possibile, viene rispettata anche la compatibilità con le versioni precedenti: se il programma è compilato con un JDK più recente e non sono state utilizzate nuove librerie, nella maggior parte dei casi le vecchie macchine virtuali saranno in grado di eseguire tale codice.

La seconda cifra è cambiata da 0 a 4 (l'ultima al momento della creazione del corso). In ogni versione c'è stata una significativa espansione delle librerie standard (212, 504, 1781, 2130 e 2738 - il numero di classi e interfacce da 1.0 a 1.4) e alcune nuove funzionalità sono state aggiunte al linguaggio stesso. Anche le utilità incluse nel JDK sono cambiate.

Infine, la terza cifra indica lo sviluppo di una versione. Non cambia nulla nella lingua o nelle librerie, vengono eliminati solo gli errori, viene eseguita l'ottimizzazione, gli argomenti di utilità possono essere modificati (aggiunti). Quindi, l'ultima versione di JDK 1.0 è 1.0.2.

Sebbene nulla venga rimosso con lo sviluppo della versione 1.x, ovviamente alcune funzioni o classi diventano obsolete. Sono dichiarati deprecati e, sebbene saranno supportati fino all'annuncio della 2.0 (di cui non si è ancora sentito parlare), il loro utilizzo è deprecato.

Insieme al successo iniziale di JDK 1.0, sono arrivate anche le critiche. Le principali carenze riscontrate dagli sviluppatori sono state le seguenti. In primo luogo, ovviamente, le prestazioni. La prima macchina virtuale era molto lenta. Questo perché la JVM è essenzialmente un interprete che è sempre più lento del codice compilato. Tuttavia, un'ottimizzazione di successo che eliminasse questa carenza doveva ancora arrivare. Sono state inoltre notate capacità AWT piuttosto scarse, mancanza di lavoro con i database e altro.

Nel dicembre 1996 viene annunciata una nuova versione di JDK 1.1, pronta immediatamente accesso libero beta. Nel febbraio 1997 viene rilasciata la versione finale. Cosa è stato aggiunto nella nuova versione di Java?

Naturalmente, è stata prestata particolare attenzione alle prestazioni. Molte parti della macchina virtuale sono state ottimizzate e riscritte utilizzando Assembler anziché C come prima. Inoltre, dall'ottobre 1996, Sun ha sviluppato un nuovo prodotto: il compilatore Just-In-Time, JIT. Il suo compito è tradurre il bytecode Java del programma nel codice "nativo" del sistema operativo. Pertanto, il tempo di avvio del programma aumenta, ma l'esecuzione può essere accelerata in alcuni casi fino a 50 volte! Dal luglio 1997 è apparsa un'implementazione di Windows e JIT è standard nel JDK con la possibilità di disabilitarlo.

Sono state aggiunte molte importanti novità. JavaBeans, una tecnologia annunciata nel 1996, consente di creare componenti visivi facilmente integrabili negli strumenti di sviluppo visivo. JDBC (Java DataBase Connectivity) fornisce l'accesso ai database. RMI (Remote Method Invocation) semplifica la creazione di applicazioni distribuite. Il supporto per le lingue nazionali e il sistema di sicurezza sono stati migliorati.

Nelle prime tre settimane, JDK 1.1 è stato scaricato più di 220.000 volte, in meno di un anno, più di due milioni di volte. Al momento, la versione 1.1 è considerata completamente obsoleta e il suo sviluppo si è fermato alla 1.1.8. Tuttavia, poiché il browser più comune MS IE supporta ancora solo questa versione, continua ad essere utilizzato per scrivere piccole applet.

Inoltre, l'11 marzo 1997, Sun ha iniziato a offrire Java Runtime Environment, JRE (Java Runtime Environment). In effetti, questa è l'implementazione minima della macchina virtuale richiesta per eseguire applicazioni Java senza un compilatore o altri strumenti di sviluppo. Se l'utente vuole solo eseguire programmi, questo è esattamente ciò di cui ha bisogno.

Come puoi vedere, lo svantaggio principale era il debole supporto per l'interfaccia utente grafica (GUI). Nel dicembre 1996, Sun e Netscape hanno annunciato una nuova libreria, IFC (Internet Foundation Classes), sviluppata da Netscape interamente in Java e progettata specificamente per creare una complessa interfaccia a finestra. Nell'aprile 1997, viene annunciato che le società intendono combinare le tecnologie AWT di Sun e IFC di Netscape per creare un nuovo prodotto Java Foundation Classes, JFC, che dovrebbe includere:

  • finestra migliorata

linguaggio Java. Introduzione.

Per molto tempo è stato difficile immaginare una rivista di informatica senza un articolo sul linguaggio Java. Anche giornali e riviste popolari come The New York Times, The Washington Post e Business Week hanno scritto di lui.

È impossibile ricordare che la National Public Radio abbia mai dedicato un programma di dieci minuti a un linguaggio di programmazione. Se questo è buono o cattivo dipende dal punto di vista. Che dire dell'investimento di 100 milioni di dollari nella produzione di software creato utilizzando un particolare linguaggio di programmazione?! CNN, CNBC e altri media mass media hanno solo parlato, e parlano ancora adesso, di come il linguaggio Java può farlo e lo farà.

Tuttavia, questo libro è per programmatori seri e, poiché Java è un linguaggio di programmazione serio, abbiamo molto di cui occuparci. Quindi, non ci addentreremo nell'analisi delle promesse pubblicitarie e cercheremo di scoprire cosa è vero e cosa è finzione in esse. Descriveremo invece il linguaggio Java in modo sufficientemente dettagliato come un linguaggio di programmazione (comprese, ovviamente, le funzionalità che ne consentono l'utilizzo per lavorare su Internet, che, di fatto, ha causato tanto clamore pubblicitario). Successivamente, cercheremo di separare la realtà dalla fantasia spiegando cosa può e non può fare il linguaggio Java.

All'inizio c'era un abisso tra le promesse pubblicitarie e le reali possibilità del linguaggio Java. Man mano che maturava, la tecnologia è diventata più stabile e affidabile e le aspettative sono scese a un livello ragionevole. Il linguaggio Java è ora sempre più utilizzato per creare "middleware" che comunicano tra client e risorse del server (come i database).

Sebbene queste importanti applicazioni non siano sorprendenti, è in quest'area che il linguaggio Java si è dimostrato più utile grazie alla sua indipendenza dalla macchina, multithreading e capacità di programmazione di rete. Inoltre, il linguaggio Java ha preso il comando nei sistemi embedded, diventando lo standard de facto per dispositivi portatili, chioschi virtuali, computer di bordo e simili. Tuttavia, i primi tentativi di riscrivere programmi diffusi per personal computer in Java non hanno avuto successo: le applicazioni risultanti si sono rivelate lente e a bassa potenza. Con l'avvento della nuova versione, alcuni di questi problemi sono stati risolti, ma bisogna ammettere che agli utenti, in generale, non interessa affatto in quale lingua sono scritti i programmi che acquistano. Riteniamo che i principali vantaggi del linguaggio Java appariranno nella creazione di nuovi tipi di dispositivi e applicazioni e non nella riscrittura di programmi esistenti.

Il linguaggio Java come strumento di programmazione

Come il linguaggio di programmazione Java ha superato le sue promesse pubblicitarie. Indubbiamente, è uno dei migliori linguaggi disponibili per i programmatori seri. Java ha il potenziale per essere un ottimo linguaggio di programmazione, ma probabilmente è troppo tardi adesso. Quando compare un nuovo linguaggio di programmazione, sorge immediatamente il fastidioso problema della sua compatibilità con il software precedentemente creato. Inoltre, anche se è possibile apportare modifiche a questi programmi senza alterarne il testo, è difficile per i creatori di un linguaggio così calorosamente accolto dal pubblico, come il linguaggio Java, dire direttamente: "Sì, possiamo ho commesso un errore durante lo sviluppo della versione X, ma la versione Y sarà migliore." Di conseguenza, in attesa che appaiano ulteriori miglioramenti, dobbiamo affermare che la struttura del linguaggio Java non cambierà in modo significativo nel prossimo futuro.

La domanda ovvia è: Come è stato migliorato il linguaggio Java?". Si scopre che ciò è stato fatto non migliorando il linguaggio di programmazione stesso, ma modificando radicalmente le librerie di programmi scritti in linguaggio Java. Sun Microsystems ha cambiato tutto: dai nomi delle singole funzioni di libreria (rendendole più significative) e le modalità di funzionamento dei moduli grafici (cambiando la modalità di gestione degli eventi e in parte riscrivendo i programmi di lavoro), alla creazione di nuove funzionalità del linguaggio, come le funzionalità di stampa, che non erano disponibili in Java 1.0.Il risultato è un piattaforma di programmazione molto più utile di tutte le versioni precedenti del linguaggio Java.

Microsoft ha rilasciato il proprio prodotto chiamato J++, correlato al linguaggio Java. Il linguaggio J++ viene interpretato da una macchina virtuale compatibile con Java Virtual Machine durante l'esecuzione di bytecode, ma le interfacce con codici esterni differiscono significativamente tra questi linguaggi. I linguaggi J++ e Java hanno quasi la stessa sintassi. Tuttavia, Microsoft ha creato costrutti di linguaggio aggiuntivi. Tutti hanno un valore piuttosto dubbio, ad eccezione dell'API di Windows. Oltre al fatto che questi linguaggi hanno la stessa sintassi, le loro principali librerie (stringhe, utilità, strumenti di programmazione di rete, supporto multithreading, biblioteche di matematica ecc.) sono anch'essi essenzialmente gli stessi.

Tuttavia, le librerie grafiche, l'interfaccia utente e l'accesso a oggetti remoti queste lingue sono completamente diverse. Attualmente, Microsoft non supporta più il linguaggio J++, avendo sviluppato un nuovo linguaggio C# che presenta molte somiglianze con Java, ma utilizza una macchina virtuale diversa. Questo libro non copre J++ o C#.

Vantaggi del linguaggio Java

1) Uno dei principali vantaggi del linguaggio Java è indipendenza dalla piattaforma su cui vengono eseguiti i programmi: Lo stesso codice può essere eseguito con i sistemi operativi Windows, Solaris, Linux, Machintosh, ecc.
Ciò è davvero necessario quando i programmi vengono scaricati da Internet per la successiva esecuzione con diversi sistemi operativi.

2) Un altro vantaggio è quello la sintassi del linguaggio Java è simile alla sintassi del linguaggio C++, e per i programmatori che conoscono i linguaggi C e C++ non è difficile impararlo. È vero, per i programmatori che conoscono il linguaggio Visual Basic, questa sintassi potrebbe essere insolita.

Se non hai mai programmato in C++, alcuni dei termini usati in questa sezione potrebbero non esserti chiari. In questo caso, puoi saltarlo. Quando arriverai alla fine del Capitolo 6, questi termini ti diventeranno familiari.

3) Inoltre, Java - un linguaggio completamente orientato agli oggetti, ancor più del C++. Tutte le entità nel linguaggio Java sono oggetti, ad eccezione di alcuni tipi primitivi, come i numeri. (Poiché è facile sviluppare progetti complessi utilizzando la programmazione orientata agli oggetti, ha sostituito la precedente programmazione strutturata. Se non hai familiarità con la programmazione orientata agli oggetti, i capitoli 3-6 ti daranno tutto informazione necessaria su di lui.)

Tuttavia, non è sufficiente sviluppare un altro dialetto, leggermente migliorato, del linguaggio C++. È di fondamentale importanza che sia più facile sviluppare programmi privi di bug in Java che in C++. Come mai? I progettisti del linguaggio Java hanno riflettuto a lungo sul motivo per cui i programmi scritti in C++ sono così soggetti a errori. Fornirono al linguaggio Java strumenti per eliminare la possibilità stessa di creare programmi che nascondessero gli errori più comuni. Per fare ciò, quanto segue viene eseguito nel linguaggio Java.

4) È esclusa la possibilità di allocazione esplicita e rilascio di memoria.
La memoria nel linguaggio Java viene liberata automaticamente dal meccanismo di Garbage Collection. Il programmatore è garantito contro gli errori legati all'utilizzo errato della memoria.

5) Vengono introdotti i veri array e l'aritmetica dei puntatori è vietata.
Ora i programmatori sostanzialmente non possono cancellare i dati dalla memoria a causa dell'uso errato dei puntatori.

6) È esclusa la possibilità di confondere l'operatore di assegnazione con l'operatore di confronto di uguaglianza.
Ora non puoi nemmeno compilare if(ntries = 3) . . . (programmatori per Linguaggio visivo Le basi potrebbero non notare alcun problema qui, poiché questo errore è la fonte della maggior parte delle incomprensioni nei linguaggi C e C++).

7) L'ereditarietà multipla è esclusa. È stato sostituito da un nuovo concetto: un'interfaccia, presa in prestito dal linguaggio Objective C.
Un'interfaccia offre al programmatore quasi tutto ciò che un programmatore può ottenere dall'ereditarietà multipla, evitando le complessità della gestione delle gerarchie di classi.

Caratteristiche caratteristiche del linguaggio Java

Semplice
Interpretato
Distribuito
Affidabile
Sicuro
macchina indipendente
Orientato agli oggetti
alte prestazioni
multithread
dinamico
Architettura del computer indipendente

Abbiamo già toccato alcuni di questi punti nell'ultima sezione. In questa sezione: forniremo citazioni dal manuale del linguaggio Java, rivelando le caratteristiche del linguaggio; Condividiamo con i lettori alcune riflessioni su alcune proprietà della lingua, sulla base della nostra esperienza con la sua ultima versione.

Semplice

Volevamo creare un sistema che fosse facile da programmare, non richiedesse formazione aggiuntiva e tenesse conto della pratica prevalente e degli standard di programmazione. Pertanto, sebbene considerassimo il C++ inadatto a questo scopo, Java è stato progettato per essere il più simile possibile per rendere il sistema più accessibile. Il linguaggio Java non contiene molte delle funzionalità C++ sottoutilizzate, oscure e oscure che riteniamo facciano più male che bene.

La sintassi del linguaggio Java è essenzialmente una versione raffinata della sintassi del linguaggio C++. Questa lingua no file di intestazione, aritmetica del puntatore (e puntatori stessi), strutture, unioni, sovraccarico degli operatori, classi di base virtuali e così via. (Le differenze tra i linguaggi Java e C++ sono descritte nelle note sul linguaggio C++ sparse nel libro.) Tuttavia, gli sviluppatori non hanno cercato di correggere tutte le carenze del linguaggio C++.

Ad esempio, la sintassi dell'istruzione switch nel linguaggio Java è rimasta invariata. Conoscendo il linguaggio C++, sarà facile passare alla sintassi del linguaggio Java.
Se di solito usi un ambiente di programmazione visuale (come Visual Basic), troverai difficile il linguaggio Java.
La sua sintassi sembra spesso piuttosto strana (sebbene non sia difficile capire il significato dell'espressione). Ancora più importante, quando si lavora in linguaggio Java, è necessario programmare molto di più. Il bello del linguaggio Visual Basic è che il suo ambiente di programmazione visuale consente di creare quasi automaticamente l'infrastruttura dell'applicazione. Per ottenere lo stesso risultato utilizzando il linguaggio Java, è necessario programmare a mano, ma questo si traduce in programmi molto più brevi.

Esiste, tuttavia, un terzo tipo di ambiente di programmazione che consente di creare programmi utilizzando la tecnologia "drag-and-drop".

Un altro aspetto della semplicità è la brevità. Uno degli obiettivi del linguaggio Java è quello di consentire lo sviluppo di programmi che possono essere eseguiti in modo completamente indipendente su macchine di piccole dimensioni. La dimensione dell'interprete principale e del supporto di classe è di circa 40 KB; le librerie standard e gli strumenti di threading (in particolare il microkernel autonomo) richiedono altri 17:Kb.
Questo è un enorme successo. Si noti, tuttavia, che le librerie di supporto della GUI sono molto più grandi.

Orientato agli oggetti

In poche parole, la programmazione orientata agli oggetti è una tecnica di programmazione che si concentra sui dati (cioè gli oggetti) e sui mezzi per accedervi. Disegnando un'analogia con la falegnameria, l'artigiano orientato agli oggetti è principalmente concentrato sulla sedia che sta realizzando e solo secondariamente interessato agli strumenti necessari per farlo; allo stesso tempo, il falegname non orientato all'oggetto pensa solo ai suoi strumenti. Le proprietà orientate agli oggetti di Java e C++ sono essenzialmente le stesse.

L'orientamento agli oggetti ha già dimostrato il suo valore negli ultimi 30 anni e senza di esso è impossibile immaginare un moderno linguaggio di programmazione. In effetti, le caratteristiche orientate agli oggetti del linguaggio Java sono paragonabili a quelle del C++. La principale differenza tra loro risiede nel meccanismo dell'ereditarietà multipla, per il quale il linguaggio Java ha trovato una soluzione migliore, nonché nel modello di metaclasse del linguaggio Java.

I meccanismi di riflessione (Capitolo 5) e di serializzazione degli oggetti (Capitolo 12) consentono di implementare oggetti persistenti e strumenti per la creazione grafica interfacce utente basato su componenti prefabbricati.

Se non hai mai programmato in un linguaggio orientato agli oggetti, dai un'occhiata da vicino ai capitoli 4-6. Questi capitoli introducono le basi della programmazione orientata agli oggetti e mostrano come può essere utilizzata per sviluppare progetti complessi su linguaggi procedurali tradizionali come C o Basic.

Distribuito

Java ha una vasta libreria di programmi per il trasferimento di dati basati sui protocolli TCP/IP (Transmission Control Protocol/Internet Protocol) come HTTP (Hypertext Transfer Protocol) o FTP (File Protocollo di trasferimento trasferimento di file). Le applicazioni scritte in linguaggio Java possono aprire e accedere a oggetti sulla rete utilizzando eGli URL (Uniform Resource Location - Uniform Resource Location) sono facili come una rete locale.

Il linguaggio Java fornisce strumenti potenti e convenienti per lavorare in rete. Chiunque abbia mai provato a scrivere programmi per Internet in altre lingue sarà piacevolmente sorpreso dalla facilità con cui le attività più difficili, come l'apertura di connessioni di rete (connessione socket), vengono risolte in Java. L'elegante meccanismo, costituito dai cosiddetti servlet (servlet), rende il lavoro sul server estremamente efficiente.

I servlet sono supportati da molti server Web popolari. (La rete sarà descritta nel secondo volume.) La comunicazione tra oggetti distribuiti nel linguaggio Java è fornita dal meccanismo di chiamata metodi remoti(questo argomento è trattato anche nel secondo volume).

Affidabile

Il linguaggio Java è progettato per creare programmi che devono funzionare in modo affidabile in tutte le situazioni. L'obiettivo del linguaggio Java è il rilevamento precoce degli errori, il controllo dinamico (in fase di esecuzione) e l'evitare situazioni soggette a errori... L'unica differenza significativa tra Java e C++ è il modello del puntatore del linguaggio Java, che elimina la possibilità di sovrascrivere un sezione di memoria e danneggiamento dei dati.

Anche questa proprietà è molto utile. Il compilatore del linguaggio Java rileva gli errori che in altri linguaggi vengono rilevati solo in fase di esecuzione. Inoltre, i programmatori che hanno trascorso molte ore alla ricerca di un bug di danneggiamento della memoria a causa di un puntatore errato saranno molto felici che tali problemi in linea di principio non possano sorgere nel linguaggio Java.

Se hai mai programmato in linguaggi Visual Basic o COBOL che non usano esplicitamente i puntatori, potresti non capire perché questo è così importante. I programmatori C sono molto meno fortunati. Hanno bisogno di puntatori per accedere a stringhe, array, oggetti e persino file. Quando si programma in Visual Basic, nulla di tutto ciò è richiesto e il programmatore non deve preoccuparsi di allocare memoria per queste entità. D'altra parte, molte strutture di dati in un linguaggio che non dispone di puntatori sono molto difficili da implementare. Strutture ordinarie come stringhe e array non hanno bisogno di puntatori. La piena potenza dei puntatori viene mostrata solo dove non è possibile farne a meno, ad esempio durante la creazione di elenchi collegati. Al programmatore Java vengono risparmiati per sempre puntatori errati, allocazioni errate e perdite di memoria.

Sicuro

Il linguaggio Java è progettato per essere utilizzato in un ambiente di rete o distribuito. Per questo motivo è stata prestata molta attenzione alla sicurezza. Il linguaggio Java consente di creare sistemi protetti da virus e manomissioni.

Nella prima edizione scrivevamo "Mai dire mai" e avevamo ragione. Un gruppo di esperti di sicurezza dell'Università di Princeton ha scoperto i primi bug nel sistema di sicurezza Java 1.0 poco dopo la messa in vendita della prima versione della suite. Strumenti JDK Inoltre, sia loro che altri specialisti hanno continuato a trovare sempre più bug nei meccanismi di sicurezza di tutte le successive versioni del linguaggio Java.

Sul lato positivo di questa situazione, il Java Language Development Group ha dichiarato tolleranza zero per eventuali bug nel sistema di sicurezza e si è immediatamente attivato per correggere eventuali problemi riscontrati nel meccanismo di sicurezza dell'applet. In particolare, pubblicando le specifiche interne per l'interprete del linguaggio Java, Sun ha semplificato notevolmente l'individuazione delle vulnerabilità nascoste della sicurezza e le ha affidate a esperti indipendenti.

Ciò ha aumentato la probabilità che tutte le vulnerabilità della sicurezza venissero presto scoperte. In ogni caso, è estremamente difficile imbrogliare il sistema di sicurezza del linguaggio Java. I bug trovati finora sono stati quasi impercettibili e il loro numero è (relativamente) piccolo.

La pagina Web sulla sicurezza di Sun ha il seguente URL: http://java.sun.com/sfaq/.

Ecco alcune situazioni che il sistema di sicurezza Java impedisce che si verifichino.

1) Lo stack overflow del programma eseguibile, causato dal famigerato "worm" che si è diffuso su Internet.

2) Danni ad aree di memoria che sono al di fuori dello spazio assegnato al processo.

3) Leggere e scrivere file locali quando si utilizza un caricatore di classi sicuro, come un browser Web, che vieta l'accesso a tale file.

Tutte queste misure di sicurezza sono appropriate e di solito funzionano perfettamente, ma la discrezione non fa mai male. Mentre i bug scoperti fino ad oggi sono stati tutt'altro che banali e i dettagli per trovarli sono spesso tenuti segreti, bisogna ammettere che probabilmente non è più possibile dimostrare la sicurezza del linguaggio Java.

Nel tempo, alla lingua sono state aggiunte nuove funzionalità di sicurezza. A partire dalla versione 1.1, il linguaggio Java ha introdotto la nozione di classi con firma digitale. Utilizzando una classe con firma digitale, puoi essere sicuro del suo autore. Se ti fidi, puoi concedere a questa classe tutti i privilegi disponibili sulla tua macchina.

Un meccanismo alternativo di consegna del codice proposto da Microsoft si basa sulla tecnologia ActiveX e utilizza solo firme digitali per la sicurezza. Ovviamente questo non è abbastanza - qualsiasi utente del software Microsoft può confermare che i programmi di noti produttori spesso si bloccano, creando così il rischio di danneggiamento dei dati. Il sistema di sicurezza in linguaggio Java è molto più potente della tecnologia ActiveX, perché controlla l'applicazione dal momento in cui viene avviata e non gli consente di causare danni.

architettura indipendente

Il compilatore genera un file oggetto il cui formato non dipende dall'architettura del computer: il programma compilato può essere eseguito su qualsiasi processore sotto il controllo del sistema di esecuzione del programma Java. Per fare ciò, il compilatore del linguaggio Java genera comandi, bytecode, che non dipendono dalla specifica architettura del computer. Il bytecode è progettato in modo tale da poter essere facilmente interpretato da qualsiasi macchina o tradotto al volo in codice dipendente dalla macchina.

Questa non è un'idea nuova. Più di 20 anni fa, sia il sistema di implementazione Pascal sviluppato da Niclaus Wirth che il sistema UCSD Pascal utilizzavano la stessa tecnologia. L'uso dei bytecode offre un grande vantaggio nell'esecuzione del programma (tuttavia, la compilazione sincrona lo compensa in molti casi). Gli sviluppatori del linguaggio Java hanno svolto un ottimo lavoro sviluppando un insieme di istruzioni bytecode che funzionano alla grande sulla maggior parte dei computer moderni, traducendosi facilmente in vere istruzioni macchina.

macchina indipendente

A differenza dei linguaggi C e C++, non ci sono aspetti della specifica Java che dipendono dal sistema di implementazione. Sia la dimensione dei tipi di dati di base che le operazioni aritmetiche su di essi sono ben definite.

Ad esempio, il tipo int nel linguaggio Java significa sempre un intero a 32 bit. In C e C++, il tipo int può significare un numero intero a 16 bit, un intero a 32 bit o un numero intero di dimensioni arbitrarie, come scelto dallo sviluppatore di un particolare compilatore. L'unica restrizione è che la dimensione del tipo int non può essere inferiore alla dimensione del tipo short int e maggiore della dimensione tipo lungo int. La dimensione fissa dei tipi numerici evita molti dei fastidi associati all'esecuzione di programmi su computer diversi. I dati binari vengono archiviati e trasmessi in un formato fisso, che evita anche malintesi associati a diversi ordini di byte su piattaforme diverse (conflitto "big endian/little endian"). Le stringhe vengono archiviate nel formato Unicode standard.

Le librerie che fanno parte del sistema definiscono un'interfaccia indipendente dalla macchina. Ad esempio, il linguaggio fornisce una classe Window astratta e le sue implementazioni per i sistemi operativi Unix, Windows e Macintosh.

Chiunque abbia mai provato a scrivere un programma che funzioni ugualmente bene con i sistemi operativi Windows, Macintosh e dieci varietà Sistemi Unix, sa che si tratta di un compito molto difficile. La versione Java ha compiuto un eroico tentativo di risolvere questo problema fornendo un semplice toolkit che adatta gli elementi comuni dell'interfaccia utente a un gran numero di piattaforme software. Sfortunatamente, la libreria, su cui è stato speso molto lavoro, non ci ha permesso di ottenere risultati accettabili su piattaforme diverse. (Allo stesso tempo, sono comparsi diversi bug nei programmi di grafica su piattaforme diverse.)

Tuttavia, questo era solo l'inizio. In molte applicazioni, l'indipendenza dalla macchina è molto più importante della sofisticatezza di un'interfaccia utente grafica. Sono queste applicazioni che hanno beneficiato dell'introduzione di Java 1.0. Tuttavia, il toolkit GUI è stato ora completamente riprogettato e non dipende più dall'interfaccia utente del computer host. La nuova versione è più significativa e, a nostro avviso, più attraente per l'utente rispetto alle precedenti.

Interpretato

L'interprete in linguaggio Java può essere inviato a qualsiasi macchina ed eseguire bytecode direttamente su di essa. Poiché la modifica dei collegamenti è un processo più semplice, la programmazione può diventare molto più veloce ed efficiente.

Forse questo è un vantaggio nello sviluppo di applicazioni, ma la citazione è una chiara esagerazione. In ogni caso, il compilatore del linguaggio Java incluso nel JSDK (Java Software Development Kit) è piuttosto lento. (Alcuni compilatori del terzo tipo, come quelli di IBM, sono molto più veloci.) La velocità di ricompilazione è solo uno dei fattori dell'efficienza di un ambiente di programmazione. Confrontando la velocità degli ambienti di programmazione Java e Visual Basic, potresti rimanere deluso.

alte prestazioni

Sebbene i bytecode generalmente interpretati abbiano prestazioni più che sufficienti, ci sono situazioni in cui sono richieste prestazioni ancora migliori. I bytecode possono essere tradotti al volo (in fase di esecuzione) in codici macchina per il particolare processore su cui è in esecuzione l'applicazione.

Se usi un interprete per eseguire bytecode, non usare la frase "prestazioni elevate". Tuttavia, su molte piattaforme è possibile un altro tipo di compilazione, fornita da compilatori sincroni (just-in-time compilers-JIT). Traducono il bytecode in codice specifico della macchina, memorizzano il risultato in memoria e quindi lo chiamano quando necessario. Poiché l'interpretazione viene eseguita solo una volta, questo approccio aumenta notevolmente la velocità di lavoro.

Sebbene i compilatori sincroni siano ancora più lenti dei compilatori specifici della macchina, sono almeno molto più veloci degli interpreti, fornendo velocità 10x o addirittura 20x per alcuni programmi. Questa tecnologia è in costante miglioramento e alla fine può raggiungere velocità che i compilatori tradizionali non potranno mai superare. Ad esempio, un compilatore sincrono può determinare quale parte di codice viene eseguita più spesso e ottimizzarla per la velocità di esecuzione.

MULTIFILETTATURA

Fornisce una migliore interattività ed esecuzione del programma.

Se hai mai provato il multithreading in qualsiasi altro linguaggio di programmazione, rimarrai piacevolmente sorpreso di quanto sia facile farlo in Java. I thread nel linguaggio Java possono sfruttare i sistemi multiprocessore se il sistema operativo lo consente. Sfortunatamente, le implementazioni dei flussi sulla maggior parte delle piattaforme variano ampiamente e i progettisti del linguaggio Java non tentano di raggiungere l'uniformità. Solo il codice per chiamare i thread rimane lo stesso per tutte le macchine; Il linguaggio Java lascia l'implementazione del multithreading al sistema operativo sottostante o alla libreria di threading. (I thread sono trattati nel volume 2.) Nonostante ciò, è la facilità del multithreading che rende Java così attraente per lo sviluppo di software server.

dinamico

In molti modi, Java è più dinamico di C o C++. È stato progettato per adattarsi facilmente a un ambiente in continua evoluzione. Puoi aggiungere liberamente nuovi metodi e oggetti alle librerie senza causare alcun danno. Il linguaggio Java rende facile ottenere informazioni sullo stato di avanzamento di un programma.

Questo è molto importante quando si desidera aggiungere codice a un programma già in esecuzione. Un ottimo esempio di questo è il codice che viene scaricato da Internet per essere eseguito da un browser. In Java 1.0, ottenere informazioni sull'andamento di un programma in esecuzione non era affatto facile, ma l'attuale versione del linguaggio Java espone al programmatore sia la struttura che il comportamento degli oggetti nel programma in esecuzione.
Questo è molto utile per i sistemi che devono analizzare gli oggetti durante l'esecuzione del programma. Questi sistemi includono strumenti GUI, debugger intelligenti, plug-in e database di oggetti.

Linguaggio Java e Internet

L'idea è semplice: gli utenti scaricano i bytecode Java da Internet e li eseguono sulle loro macchine. I programmi Java eseguiti sui browser Web sono chiamati applet. Per utilizzare l'applet è necessario un browser Web che supporti il ​​linguaggio Java e sia in grado di interpretare i bytecode. Il codice sorgente Java è concesso in licenza da Sun, che insiste sull'immutabilità sia del linguaggio stesso che della struttura delle sue librerie principali. Purtroppo la realtà non è così. Diverse versioni dei browser Netscape e Internet Explorer supportano diverse versioni del linguaggio Java, alcune delle quali sono notevolmente obsolete. Questa sfortunata situazione sta creando sempre più barriere allo sviluppo di applet per sfruttare l'ultima versione del linguaggio Java. Per risolvere questo problema, Sun ha sviluppato un plug-in Java che fornisce l'ambiente più avanzato per l'esecuzione di programmi Java basati sui browser Netscape e Internet Explorer.

Caricare un'applet è come incorporare un'immagine in una pagina Web. L'applet diventa parte della pagina e il testo avvolge lo spazio che occupa. Tuttavia, la differenza è che l'immagine è ora viva. Risponde ai comandi dell'utente, cambia aspetto e fornisce il trasferimento di dati tra il computer su cui viene visualizzata l'applet e il computer che controlla l'applet.

Caricare un'applet è come inserire un'immagine in una pagina Web. L'applet diventa parte della pagina e il testo avvolge lo spazio che occupa. Il fatto è che l'immagine è "dal vivo". Risponde ai comandi dell'utente, cambia aspetto e trasferisce i dati tra il computer che esegue l'applet e il computer che esegue l'applet.

Sulla fig. La Figura 1.1 mostra un buon esempio di una pagina Web dinamica che esegue calcoli complessi e utilizza un'applet per disegnare molecole. Per comprendere meglio la struttura della molecola, puoi ruotarla o ingrandire usando il mouse. Tali manipolazioni non possono essere implementate su pagine Web statiche, ma le applet lo rendono possibile. (Questa applet può essere trovata su http://jmol.sourceforge.net.)

Riso. 1.1. Applet Jmol

Le applet possono essere utilizzate per aggiungere nuovi pulsanti e campi di testo a una pagina Web. Tuttavia, tali applet sono lente da caricare sulla linea telefonica.

Più o meno lo stesso può essere fatto con Dynamic HTML, forme di HTML (Hypertext Markup Language) o un linguaggio di scripting come JavaScript. Naturalmente, le prime applet sono state progettate per l'animazione: globi rotanti, personaggi dei cartoni animati danzanti, testi di fantasia e così via. Tuttavia, la maggior parte di quanto sopra può anche creare GIF animate e l'HTML dinamico combinato con lo scripting fa molto di più delle applet.

A causa dell'incompatibilità del browser e dell'incoerenza nel processo di download lento le connessioni di rete Le applet progettate per le pagine Web non sono state un grande risultato. Nelle reti locali (intranet) la situazione è completamente diversa. Di solito non hanno problemi di larghezza di banda, quindi il tempo di caricamento dell'applet non è significativo. Sulla rete locale è possibile selezionare il browser desiderato o utilizzare il plug-in Java. I dipendenti non possono spostare il software consegnato sulla rete nella posizione sbagliata o installarlo in modo errato e l'amministratore di sistema non deve andare in giro e aggiornare il software su tutti i computer client. Un gran numero di programmi per la gestione dell'inventario, la pianificazione delle vacanze, il rimborso dei viaggi e simili sono stati sviluppati da molte aziende sotto forma di applet che utilizzano browser.

Mentre stavamo scrivendo questo libro, il pendolo è passato dalla programmazione lato client alla programmazione lato server. In particolare, i server delle applicazioni possono utilizzare le capacità di monitoraggio della Java Virtual Machine per bilanciare automaticamente il carico, raggruppare i collegamenti al database, sincronizzare gli oggetti, spegnere e ricaricare in sicurezza ed eseguire altri processi necessari per applicazioni server scalabili, quasi impossibili da implementare correttamente. Pertanto, i programmatori che creano applicazioni hanno l'opportunità di acquistare questi meccanismi complessi, invece di svilupparli da soli. Ciò ha aumentato la produttività dei programmatori: si sono concentrati sulla logica dei loro programmi, senza essere distratti dai dettagli associati al funzionamento dei server.

La sezione Java di developerWorks contiene centinaia di articoli, tutorial, suggerimenti e contenuti scritti dalla comunità Java per aiutarti a ottenere il massimo dalla piattaforma Java e dalle tecnologie correlate nello sviluppo delle tue applicazioni. Tuttavia, per gli sviluppatori inesperti che hanno appena iniziato con Java, può essere difficile navigare nell'enorme volume di risorse disponibili online. Pertanto, abbiamo creato questa pagina, che fornisce una panoramica delle principali tecnologie Java nel contesto generale delle capacità di questo linguaggio. Qui troverai collegamenti ad altre risorse di apprendimento Java, come articoli developerWorks per principianti e altre risorse educative, nonché collegamenti per il download di prodotti IBM.

Sei uno sviluppatore Java principiante? In questa pagina troverai una panoramica delle principali tecnologie Java™ e del loro ruolo nello sviluppo di software moderno. Con collegamenti ad articoli introduttivi di developerWorks su questo e argomenti correlati, altre risorse educative, nonché download e prodotti IBM, questa pagina è un ottimo punto di partenza per l'apprendimento di Java.

Che cosa sono le "tecnologie Java"?

Java è sia un linguaggio di programmazione che una piattaforma.

Innanzitutto, Java è un orientato agli oggetti di alto livello linguaggio di programmazione. In compilazione, che viene eseguito una volta durante la compilazione dell'applicazione, il codice Java viene convertito in un codice di linguaggio intermedio ( bytecode). A sua volta, il bytecode viene analizzato ed eseguito ( interpretato) la Java Virtual Machine (JVM), che funge da traduttore tra il linguaggio Java e l'hardware del sistema operativo. Tutte le implementazioni Java devono emulare la JVM in modo che le applicazioni create possano essere eseguite su qualsiasi sistema che includa Java Virtual Machine.

In secondo luogo, Java lo è piattaforma software, le cui versioni sono fornite per vari sistemi hardware. Esistono tre versioni di Java (consultare la sezione Edizioni della piattaforma Java di seguito). La piattaforma include una JVM e un'API (Application Programming Interface) Java, che è un set completo di componenti software (classi) già pronti che facilitano lo sviluppo e la distribuzione di applet e applicazioni. L'API Java copre molti aspetti dello sviluppo Java, inclusa la manipolazione di oggetti di base, la programmazione di rete, la sicurezza, la generazione di XML e i servizi Web. L'API è organizzata come un insieme di librerie chiamate pacchi, che contengono classi e interfacce per la risoluzione di attività correlate.

Oltre all'API, ogni implementazione completa della piattaforma Java deve includere quanto segue:

  • Un toolkit per sviluppatori per la compilazione, l'esecuzione, il monitoraggio, il debug e la documentazione delle applicazioni.
  • Meccanismi standard per la distribuzione di applicazioni in un ambiente utente.
  • Strumenti che consentono di creare complesse interfacce utente grafiche.
  • Librerie di integrazione per l'accesso programmatico ai database e la manipolazione remota degli oggetti.

La JVM è anche un ambiente collaudato per l'esecuzione di applicazioni scritte in linguaggi non Java. In particolare, Groovy, Scala e le implementazioni specializzate di Ruby e Python forniscono agli sviluppatori la possibilità di eseguire linguaggi dinamici e funzionali sulla JVM (per ulteriori informazioni, vedere How Does Java Relate to Dynamic Languages ​​and Functional Programming?) .

Il linguaggio Java è stato sviluppato da Sun Microsystems. Attualmente, lo sviluppo delle tecnologie Java, compreso il lavoro su specifiche, implementazioni di riferimento e test di compatibilità, è svolto sotto il controllo del JCP (Java Community Process), un'organizzazione aperta senza scopo di lucro che riunisce sviluppatori Java e titolari di licenza. Nel 2007, Sun ha rilasciato un free Versione Java, che include i componenti principali della piattaforma, con licenza GNU GPL v2 (GPLv2). Puoi leggere di più su questa versione in Java e Sviluppo di software libero.

Perché dovresti imparare Java?

Il principale vantaggio del linguaggio Java si esprime nella portabilità delle applicazioni Java, ad es. la possibilità di funzionare su qualsiasi piattaforma hardware e sistema operativo, poiché tutte le JVM, indipendentemente dalla piattaforma su cui vengono eseguite, sono in grado di eseguire lo stesso bytecode.

Il linguaggio e la piattaforma Java sono altamente scalabili. Puoi creare facilmente applicazioni per dispositivi con risorse limitate adattando il software originariamente scritto per computer desktop. Allo stesso tempo, il linguaggio Java è ideale anche per lo sviluppo di applicazioni Web lato server, con l'aiuto delle quali l'utente può accedere alle risorse informatiche sul Web. La capacità di eseguire in sicurezza il codice caricato sul Web è stata integrata in Java sin dall'inizio, quindi il linguaggio fornisce alto livello sicurezza durante l'utilizzo di Internet. Le applicazioni Web vengono eseguite in ambienti di runtime chiamati Contenitori Web, che forniscono molti servizi convenienti, inclusi l'invio delle richieste, la sicurezza e la concorrenza, la gestione del ciclo di vita e l'accesso alle API come la gestione dei nomi, le transazioni e E-mail. La serie è scritta in Java server delle applicazioni, che fungono da contenitori Web per altri componenti di servizi Java, XML e Web che interagiscono con i database e generano dinamicamente il contenuto delle pagine Web. Questi server forniscono anche un ambiente per la distribuzione di applicazioni e strumenti aziendali per la gestione delle transazioni, il clustering, la sicurezza, la connettività e livello richiesto disponibilità, prestazioni e scalabilità.

Supportando l'uso di standard aperti nelle applicazioni aziendali, Java apre le porte ai servizi Web basati su XML per aiutare i partner commerciali a condividere contenuti e applicazioni. Java è al centro di molti dei prodotti e servizi di consulenza tecnica IBM (Prodotti e tecnologie IBM per sviluppatori Java) e svolge un ruolo chiave in una serie di aree chiave dell'attività dell'azienda.

  • Esplora l'approccio IBM a e scopri come SOA ti aiuta a creare applicazioni eterogenee basate su tecnologia fonti diverse sia all'interno che all'esterno dell'impresa, supportando così i processi aziendali orizzontali. IBM fornisce una serie di strumenti incentrati sul business e sull'IT per aiutarti a iniziare a utilizzare questa tecnologia.
  • è un approccio per componenti offerto da IBM, che offre una gamma completa di opportunità di cambiamento strategico. Le soluzioni fornite si basano su un'infrastruttura hardware e software flessibile, estensibile e basata su standard aperti (incluso Java).

Edizioni della piattaforma Java
Esistono tre edizioni della piattaforma Java che consentono agli sviluppatori di applicazioni, ai fornitori di servizi e ai produttori di hardware di creare soluzioni che soddisfano le esigenze di gruppi di utenti specifici.

  • Java SE (Java Platform Standard Edition). Utilizzando Java SE, puoi creare e distribuire applicazioni Java per computer desktop e server, oltre a sviluppare software e programmi incorporati per sistemi in tempo reale. L'edizione Java SE include le classi necessarie per creare servizi Web e i componenti principali di Java EE (Java Platform, Enterprise Edition). L'attuale versione della piattaforma Java SE è Java SE 6, nota anche come Mustang. Tuttavia, molti sviluppatori utilizzano ancora Java SE 5 (Java 5.0 o "Tiger").
    • Per un'eccellente panoramica delle funzionalità di Java SE 5, vedere gli articoli in . La maggior parte degli aspetti della programmazione per la piattaforma Java SE 5, di cui molti applicazioni esistenti, sono ancora rilevanti per Java SE 6.
    • Questo articolo descrive le nuove funzionalità di Java SE 6 per il monitoraggio e la valutazione delle prestazioni delle applicazioni.
    • Questo articolo fornisce un'introduzione a un linguaggio di scripting che viene eseguito sulla piattaforma Java SE 6 per semplificare la programmazione di interfacce utente complesse.
    • Una serie in due parti intitolata fornisce un'introduzione all'API fornita da Java SE 6, che consente alle applicazioni Java di eseguire codice di script dinamico e viceversa. .
  • Java EE (Piattaforma Java, Edizione Enterprise). Questo versione aziendale La piattaforma aiuta gli sviluppatori a creare e distribuire applicazioni Java lato server portatili, affidabili, scalabili e sicure. Basandosi sulle capacità di Java SE, Java EE fornisce servizi Web, modelli di componenti, remoting e API di gestione per l'implementazione di software aziendali SOA e Web 2.0.
    • Leggi gli articoli e per una panoramica introduttiva delle funzionalità dell'ultima versione della piattaforma Java EE.
    • Dai un'occhiata alla serie, un framework popolare per la creazione di applicazioni Java EE leggere e robuste.
    • Per ulteriori informazioni su Java EE, vedere gli articoli in .
    • Gli articoli della serie Guida introduttiva: Migrazione alla piattaforma Java sono stati scritti specificamente per gli sviluppatori di .NET, applicazioni client/server Windows e applicazioni ASP per aiutarli a migrare a Java.
  • Java ME (Piattaforma Java, Edizione Micro). Java ME fornisce un ambiente per eseguire applicazioni create per un'ampia gamma di sistemi mobili ed embedded come telefoni cellulari, PDA, decoder e stampanti. Questa edizione della piattaforma fornisce interfacce utente flessibili, un solido modello di sicurezza, una gamma completa di protocolli di rete integrati e un potente supporto per applicazioni caricate dinamicamente online e offline. Le applicazioni basate sulle specifiche Java ME possono essere eseguite su più dispositivi ed essere comunque in grado di utilizzare efficacemente le loro capacità di sistema.

Quali tecnologie sono i componenti principali della piattaforma Java?

La sezione Java di developerWorks contiene il file . Di seguito sono elencati alcuni dei componenti, dei possibili pacchetti aggiuntivi e delle estensioni incluse in ciascuna edizione della piattaforma. Ogni tecnologia ha una breve descrizione, nonché un collegamento a risorse che descrivono il suo posto nel mondo Java. Si noti che molti dei componenti sono inclusi in tutte e tre le edizioni della piattaforma Java.

Tecnologie incluse in Java SE:

  • Classi Java Foundation (Swing)(JFC) è un insieme di librerie di classi Java per la creazione di interfacce utente grafiche e altre funzionalità grafiche nelle applicazioni client Java. Gestione .
  • JavaAiutoè un sistema di guida estensibile ed indipendente dalla piattaforma che consente a sviluppatori e scrittori tecnici di incorporare pagine di guida in applet, componenti software, applicazioni, sistemi operativi e dispositivi e di creare sistemi di guida basati sul Web. Fare riferimento all'articolo.
  • Grazie a Interfaccia nativa Java(JNI) Le applicazioni Java in esecuzione all'interno della JVM possono interagire con programmi e librerie scritti in altri linguaggi di programmazione.
  • Tecnologia Web Java inizio semplifica la distribuzione delle applicazioni Java consentendo agli utenti di scaricare ed eseguire software avanzati, come fogli di calcolo, con un solo clic, senza installazione (vedi articolo).
  • Connettività del database Java(JDBC) è un'API che fornisce i mezzi per accedere alla maggior parte delle origini dati relazionali dalle applicazioni Java. Può essere utilizzato per connettersi a più database. Dati SQL, nonché altre origini dati tabulari come fogli di calcolo e file flat.
  • Imaging avanzato Java(JAI) è un'API orientata agli oggetti che fornisce un modello di programmazione semplice e di alto livello che semplifica la manipolazione delle immagini.
  • Servizio di autenticazione e autorizzazione Java(JAAS) è una tecnologia che fornisce servizi con i mezzi per autenticare gli utenti e verificarne i diritti di accesso. Include un'implementazione Java dell'infrastruttura standard PAM (Pluggable Authentication Module) e supporta l'autorizzazione a livello di utente.
  • Estensione per crittografia Java(JCE) è un insieme di pacchetti che forniscono infrastruttura e implementazioni di algoritmi per la crittografia, la generazione e lo scambio di chiavi e il codice di autenticazione dei messaggi (MAC). Questa tecnologia include anche il supporto per cifrature simmetriche, asimmetriche, a blocchi e a flusso, nonché flussi sicuri e oggetti sigillati. Maggiori informazioni possono essere trovate nel manuale.
  • Oggetti dati Java(JDO) è un modello astratto di persistenza degli oggetti Java standard basato su interfacce. Consente agli sviluppatori di archiviare direttamente le istanze delle classi di dominio Java in una memoria persistente (come un database). Questo modello in alcuni casi può sostituire la scrittura diretta su un file, la serializzazione, JDBC, nonché l'uso di componenti EJB lato server, sia gestiti dal contenitore (Container Managed Persistence - CMP) sia dallo stato di auto-archiviazione (Bean Managed Persistence - BMP).
  • Pacchetto Estensioni di gestione Java(JMX) fornisce strumenti per la creazione di applicazioni distribuite, modulari, dinamiche e abilitate al Web per la gestione e il monitoraggio di dispositivi, software e reti basate sulla fornitura di servizi (vedere l'articolo ).
  • Java Media Framework(JMF) consente di aggiungere audio, video e altre informazioni multimediali ad applicazioni e applet Java (consultare il manuale).
  • Denominazione Java e interfaccia di directory(JNDI) è un'interfaccia unificata per l'accesso servizi vari nomi e directory in rete aziendale. Con esso, le applicazioni possono connettersi in modo efficace servizi vari nomi e directory in un ambiente aziendale eterogeneo.
  • Estensioni Java Secure Socket(JSSE) è un insieme di pacchetti per consentire lo scambio sicuro di informazioni su Internet. Implementano la versione Java Protocolli SSL(Secure Sockets Layer) e TLS (Transport Layer Security) e forniscono mezzi per la crittografia dei dati, il controllo dell'integrità dei messaggi, l'autenticazione di server e client (quest'ultima è facoltativa).
  • API vocale Java(JSAPI) include le specifiche JSGF (Java Speech Grammar Format) e JSML (Java Speech Markup Language). Questo pacchetto fornisce funzionalità per l'utilizzo delle tecnologie vocali nell'interfaccia utente. JSAPI è un'API multipiattaforma per il supporto del riconoscimento comandi vocali, sistemi di immissione dati vocali e sintesi vocale. Vedere la sezione successiva dell'articolo per maggiori dettagli.
  • Java 3Dè un'API che fornisce funzionalità grafiche 3D scalabili e multipiattaforma nelle applicazioni Java. L'API è organizzata come un insieme di interfacce orientate agli oggetti che formano un unico, semplice modello di programmazione di alto livello.
  • Meccanismo Struttura dei metadati Consente agli sviluppatori di definire attributi per classi, interfacce, campi e metodi in modo che possano essere trattati in modo diverso da strumenti di creazione, distribuzione e librerie di terze parti in fase di esecuzione (vedere ).
  • API del repository di contenuti Javaè un'API per l'accesso ai repository di contenuti in Java SE, indipendentemente dalla loro implementazione. Tali repository sono sistemi di gestione delle informazioni di alto livello e sono versioni estese dei classici repository di dati.
  • Enumerazioni(enumerazione) è un tipo di dati che consente di descrivere vari elementi di dati come un insieme tipizzato di costanti.
  • Generici(tipi generici) consentono di creare classi con parametri ( tipi astratti) specificati durante la fase di creazione di un'istanza. Vedere l'articolo per ulteriori dettagli e vedere anche l'articolo su come i tipi generici semplificano l'utilizzo delle raccolte in Java SE 6.0.
  • Utilità Concorrenzaè un insieme di classi che forniscono funzionalità di livello medio generalmente richieste dalle applicazioni di elaborazione dati parallela.
  • API Java per l'elaborazione XML(JAXP) è un'API che consente alle applicazioni Java di analizzare e trasformare documenti XML, indipendentemente dal processore XML utilizzato. Ciò consente alle applicazioni di passare facilmente da un processore all'altro senza modificare il codice dell'applicazione. A sua volta, la tecnologia JAXB ( API Java per l'associazione XML) offre opportunità per automatizzare la corrispondenza documenti XML e oggetti Java.
  • SOAP con allegati API per Java(SAAJ) fornisce agli sviluppatori le funzioni per la formazione e l'elaborazione dei messaggi in conformità con la specifica SOAP 1.1, specificando SOAP con allegati (SOAP con allegati). Vedere l'articolo per maggiori dettagli).

Tecnologie incluse in J2EE:

  • JavaBean Enterprise(EJB) è un modello di componenti che semplifica lo sviluppo del middleware fornendo servizi come la gestione delle transazioni, la sicurezza e la connettività del database.
  • Specifica portlet definisce un insieme di API per la creazione di portali Java, coprendo aspetti quali l'aggregazione e la presentazione delle informazioni, la personalizzazione e la sicurezza (vedi articolo).
  • javamailè un'API che fornisce un insieme di classi astratte che modellano il sistema di posta.
  • Servizio messaggi Java(JMS) è un'API che supporta la creazione di applicazioni Java portatili basate sul meccanismo di messaggistica. Definisce un insieme comune di concetti e strategie di programmazione di base per tutti i sistemi di messaggistica conformi a JMS.
  • Volti JavaServer(JSF) fornisce un modello di programmazione che consente di creare applicazioni Web creando pagine da componenti dell'interfaccia utente riutilizzabili, associando tali componenti con origini dati ed eventi lato client con gestori lato server. Per ulteriori informazioni, vedere la guida in due parti e la serie di articoli in colonne.
  • Pagine del server Java(JSP) fornisce agli sviluppatori Web i mezzi per creare rapidamente e gestire facilmente pagine Web dinamiche e multipiattaforma che separano l'interfaccia utente e la generazione di contenuto in modo che i progettisti possano modificare il markup senza toccare il contenuto generato dinamicamente (vedere .
  • Libreria di tag standard per pagine JavaServer(JSTL) è un insieme di tag specializzati che forniscono un formato standard per eseguire le azioni richieste da molte applicazioni Web. Dai un'occhiata a Aggiorna le tue pagine JSP con JSTL e la serie in quattro parti chiamata .
  • Servlet Java estendere la funzionalità dei server Web fornendo un approccio multipiattaforma, basato su componenti, alla creazione di applicazioni Web, libero dai limiti prestazionali della CGI.
  • Architettura del connettore J2EE(JCA) fornisce un'architettura standard per la connessione di applicazioni J2EE a sistemi informativi aziendali eterogenei (EIS). Questa architettura definisce un insieme di meccanismi scalabili e sicuri basati su transazioni che i provider EIS possono fornire adattatori standard risorse da includere nel server delle applicazioni. Per ulteriori informazioni, consultare gli articoli e il manuale.
  • Specifiche di gestione J2EE(JMX) definisce il modello di informazioni di gestione per la piattaforma J2EE. Questo modello è stato specificamente progettato per interagire con molti sistemi e protocolli di controllo. Contiene strumenti standard per la mappatura a Common Information Model (CIM), SNMP Management Information Base (MIB) e Java Object Model utilizzando il J2EE Management EJB Component (MEJB).
  • API di transazione Java(JTA) è un'implementazione di alto livello e un'API indipendente dal protocollo che fornisce ai programmi e ai server delle applicazioni i mezzi per accedere alle transazioni. Servizio di transazione Java(JTS) definisce un'implementazione di un gestore delle transazioni che supporta JTA e implementa una mappatura sottostante all'OMG Object Transaction Service (OTS 1.1). La propagazione delle transazioni in JTS viene implementata utilizzando il protocollo Inter-ORB (IIOP). Vedere l'articolo per maggiori dettagli.

Tecnologie incluse in J2ME:

  • Profilo del dispositivo di informazioni mobili(MIDP) è una delle due configurazioni che costituiscono l'ambiente di runtime Java per dispositivi mobili con risorse limitate. MIDP fornisce funzionalità di base per le applicazioni, inclusi strumenti per la creazione di interfacce utente, la connessione alle risorse di rete, l'archiviazione dei dati in locale e la gestione del ciclo di vita.
  • Configurazione del dispositivo connesso(CDC) è un framework standardizzato per la creazione e la distribuzione di applicazioni a cui è possibile accedere da molti dispositivi in ​​rete e incorporati.
  • API di grafica 3D mobile per J2ME(M3G) è un'API grafica 3D interattiva leggera che è un componente opzionale di J2ME. Puoi leggere di più in una serie in due parti.

Tecnologie Java e sviluppo di applicazioni Web

Java è stato per molti anni il linguaggio principale per lo sviluppo di applicazioni Web. Di recente, sono emersi molti framework e librerie per facilitare la creazione di applicazioni Web Java, comprese le applicazioni Web 2.0 interattive ricche.

Dai un'occhiata agli argomenti di sviluppo Web Java di seguito.

  • Gli articoli della rubrica parlano di Grails, un framework moderno per la creazione di applicazioni Web scritte in Groovy. Grails ti consente di combinare perfettamente codice Java scritto in precedenza con la possibilità di utilizzare un linguaggio di scripting flessibile e dinamico. Per ulteriori informazioni su Groovy, vedere Cosa ha a che fare Java con i linguaggi dinamici e la programmazione funzionale? di seguito.
  • Ajax è una metodologia di programmazione che utilizza linguaggi di scripting lato client per comunicare con un server Web, consentendo di aggiornare rapidamente le informazioni sulle pagine senza doverle ricaricare completamente. Dopo aver letto la serie di articoli e , imparerai come Ajax può aiutarti come sviluppatore di applicazioni Java. Per ulteriori informazioni, vedere developerWorks.
  • JavaServer Faces (JSF) fornisce un modello di programmazione che consente di creare applicazioni Web assemblando pagine da componenti dell'interfaccia utente riutilizzabili, associando tali componenti con origini dati ed eventi lato client con gestori server. Per ulteriori informazioni, vedere la guida in due parti e la serie di articoli in colonne.
  • Eclipse Web Tools Platform (WTP) estende il popolare ambiente di sviluppo Eclipse aggiungendo strumenti per la creazione di applicazioni Web basate su tecnologie Java EE (consultare la guida).
  • DeveloperWorks ha molte altre eccellenti risorse su questi argomenti.

Tecnologie Java, SOA e servizi Web

Service Oriented Architecture (SOA) è un modello di componenti che collega i moduli funzionali di un'applicazione (noto come Servizi da dove viene il termine Servizi web) attraverso interfacce e contratti rigorosamente descritti. Le definizioni dell'interfaccia sono indipendenti dall'hardware sottostante, dal sistema operativo e dal linguaggio di programmazione in cui il servizio è implementato, supportando così l'interazione unificata tra servizi che sono componenti di sistemi diversi. SOA è un esempio di modello di programmazione ad accoppiamento libero che fornisce un'alternativa ai classici modelli orientati agli oggetti strettamente accoppiati.

Creati in questo modo, i servizi Web consentono di descrivere regole e processi aziendali in XML, in modo che le applicazioni possano interagire indipendentemente dalle piattaforme e dai linguaggi di programmazione utilizzati. Le tecnologie XML promuovono la portabilità dei dati e semplificano la creazione di messaggi, mentre le tecnologie Java consentono di scrivere codice portabile. XML e Java vanno di pari passo, rendendolo il perfetto abbinamento tecnologico per la creazione e la distribuzione di servizi Web.

Informazioni più dettagliate possono essere ottenute leggendo i seguenti materiali:

  • Le pagine e il sito Web di developerWorks ti aiuteranno a navigare in queste tecnologie impegnative.
  • Gli articoli di questa serie trattano i framework dei servizi Web Java e i nuovi livelli di funzionalità basati su questi servizi.
  • Questo articolo fornisce un'introduzione allo stile elegante di progettazione dei servizi Web chiamato Representational State Transfer (REST) ​​e spiega come utilizzare Java per creare servizi Web basati su REST.
  • Una comprensione di JAX-RPC (RPC basato sull'API Java per lavorare con XML) è essenziale per creare servizi Web Java efficienti.
  • JAX-WS è l'ovvio il prossimo passo nello sviluppo di JAX-RPC. Un'introduzione pratica a questa nuova API è data nel .
  • La serie di articoli è una guida alla Service Component Architecture (SCA), una specifica che descrive un modello per lo sviluppo di applicazioni e sistemi basati sui principi SOA.
  • Questo articolo fornisce un'introduzione al framework Service Data Objects, che semplifica il modello di dati Java EE per la creazione di applicazioni SOA.

Cosa c'entra Java con i linguaggi dinamici e la programmazione funzionale?

Molti sviluppatori che iniziano a imparare Java hanno una vasta esperienza con altri linguaggi di programmazione. Allo stesso tempo, anche i programmatori più venerabili ammettono che Java non è un linguaggio ideale per la risoluzione tutto compiti incontrati nella pratica. Fortunatamente, con il supporto della JVM, durante lo sviluppo di applicazioni per la piattaforma Java, è possibile sfruttare appieno i moderni script dinamici e linguaggi funzionali. La flessibilità e il dinamismo di questi linguaggi si rivelano molto utili nella prototipazione e nell'implementazione. alcuni tipi applicazioni.

Puoi leggere di più sulle possibilità di utilizzare linguaggi dinamici e funzionali sulla piattaforma Java nei materiali, i cui collegamenti sono riportati di seguito.

  • Il linguaggio di scripting Groovy consente agli sviluppatori Java di utilizzare i costrutti e le librerie del linguaggio più familiari, fornendo al contempo un ambiente di sviluppo dinamico e flessibile che non richiede compilazione, semplifica la sintassi e supporta lo scripting all'interno delle normali applicazioni Java. Una panoramica dettagliata delle possibilità di questo linguaggio è fornita negli articoli della serie.
  • La nuova API di scripting in Java SE 6, che è retrocompatibile con Java SE 5 e contiene un piccolo insieme di interfacce e classi, fornisce un modo semplice per richiamare script scritti in dozzine di linguaggi dal codice Java. Con esso, puoi caricare e chiamare script esterni in fase di esecuzione, modificando dinamicamente il comportamento dell'applicazione. Puoi leggere di più su questa API in una serie in due parti chiamata .
  • Sei un fervente sostenitore della programmazione funzionale? Quindi dovresti prestare attenzione alla colonna, che parla di Scala, un linguaggio di programmazione per JVM che combina un approccio di sviluppo funzionale e orientato agli oggetti.
  • Le VM supportano da molto tempo linguaggi di programmazione alternativi. Negli articoli della colonna, puoi leggere le implementazioni per la JVM in linguaggi come Rexx, Ruby, JavaScript, Python e alcuni altri.

Java e creazione di software libero

Esistono innumerevoli librerie Java, toolkit, framework, programmi e server di applicazioni che aprono ulteriori possibilità agli sviluppatori di utilizzare questa potente piattaforma. Diverse tecnologie gratuite sono state incorporate nella piattaforma Java nel corso del tempo e altre sono rimaste popolari tra gli sviluppatori Java nel corso degli anni, in alcuni casi fungendo da standard de facto.

  • L'Apache Software Foundation(EN) riunisce molti progetti open source, la maggior parte dei quali basati su tecnologie Java. Alcuni membri di questa famiglia di progetti sono elencati di seguito.
    • Apache Struts(EN) è un framework per la creazione di applicazioni Web che seguono l'architettura Model-View-Controller.
    • Apache Shale(IT) - un altro infrastrutture moderne per la creazione di applicazioni Web, successore di Struts e basato sulla tecnologia JSP (JavaServer Pages). Un'introduzione a Shale può essere trovata nel .
    • Apache Ant è lo standard de facto per automatizzare il processo di compilazione delle applicazioni Java.
    • Lo strumento di compilazione Apache Maven(EN) è stato progettato per soddisfare le esigenze dei progetti software odierni, caratterizzati dalla collaborazione dinamica tra i team di sviluppo e dalla dipendenza da molti componenti gestiti in modo indipendente (consultare la guida).
    • Apache Tomcat è un popolare contenitore Web che supporta servlet e Java Server Pages (JSP).
    • Il progetto Apache Geronimo(EN) riguarda la creazione di un server di applicazioni Java EE completamente conforme alle specifiche basato su pura tecnologia libera. Puoi leggere di più su Geronimo in questo articolo, così come su developerWorks, che ha molti ottimi contenuti.
    • Apache Derby(EN) è un server di database relazionale implementato interamente in Java. Un'introduzione al Derby è fornita nell'articolo.
  • Eclipse(EN) è una piattaforma di sviluppo aperta e indipendente e un insieme di strumenti di base per la creazione di software. È scritto in Java e fornisce un framework plug-in che semplifica lo sviluppo, l'integrazione e l'utilizzo di strumenti software. IBM è un membro fondatore di Eclipse.org ed è un membro attivo del consiglio di amministrazione e dei sottocomitati del progetto. Puoi leggere alcune tecnologie dei componenti della piattaforma Eclipse finalizzate alla creazione di applicazioni Java nei seguenti materiali:
    • AspectJ(EN) è un'estensione del linguaggio Java orientata agli aspetti che può essere utilizzata per modularizzare funzionalità end-to-end come la registrazione o la gestione delle eccezioni.
    • Lo Standard Widget Toolkit(EN) (SWT) è un toolkit che consente di utilizzare le capacità del sistema operativo per creare elementi dell'interfaccia utente in modo efficiente e portatile.
    • Mylyn(IT) è sistema potente gestione dei lavori per gli utenti di Eclipse. Una guida dettagliata è fornita negli articoli e precedentemente nota come "Acegi Security for Spring" è una soluzione di sicurezza potente e flessibile per applicazioni aziendali basata sul framework Spring. È trattato in dettaglio in quattro articoli della serie.
  • Sun Microsystems ha anche iniziato a lavorare su , lanciando i seguenti progetti comunitari su java.net(EN) :
    • OpenJDK

Come sviluppare abilità di programmazione Java?

Ci sono due modi principali per sviluppare le tue capacità di programmazione Java: seguire un corso di formazione speciale (con possibilità di certificazione) o imparare Java da solo praticando il coding. I corsi di formazione non solo ti consentono di acquisire esperienza da sviluppatori qualificati, ma ti danno anche l'opportunità di ottenere una certificazione in grado di convincere un potenziale datore di lavoro che hai le competenze necessarie per risolvere le sfide tecniche che dobbiamo affrontare. Così facendo, potrai approfondire le tue conoscenze in varie aree di Java sperimentando da solo e utilizzando tutte le risorse disponibili. Qualunque sia il percorso che scegli, le seguenti risorse ti aiuteranno.

  • Guide e articoli
    • developerWorks ha una vasta collezione di .
    • Articoli della serie e sono ottimi per migliorare le tue abilità Java.
    • L'applicazione della teoria del design alla creazione di applicazioni del mondo reale è trattata negli articoli del .
    • Esperto sviluppatori Java mettono in anticipo strumenti per il debug e il test nelle loro applicazioni. DeveloperWorks ha diversi articoli in questa serie di giochi in tempo reale basati sulla piattaforma Eclipse per l'apprendimento della programmazione Java. Per un'introduzione a CodeRuler, vedere Conquering Medieval Kingdoms with CodeRuler (EN).
  • Corsi di formazione tecnica IBM
    • La tua attenzione è invitata grande scelta corsi Java online, faccia a faccia e multimediali sviluppati da IBM Global Services.
  • Certificazione
    • Puoi sostenere diversi esami per ottenere certificazioni che dimostrino le tue capacità di programmazione Java. I materiali per i corsi di certificazione possono essere trovati sul sito Java Certification(EN).
    • IBM offre opportunità per le tue competenze in tecnologie correlate a Java, come la creazione di applicazioni aziendali per WebSphere, software Rational, DB2, XML e SOA.
  • Forum
    • Moderato da esperti con decenni di esperienza nella tecnologia Java, questo è il modo più interattivo per imparare il linguaggio Java.

Prodotti e tecnologie IBM per sviluppatori Java

IBM è uno dei leader nell'applicazione pratica delle tecnologie Java. Di seguito sono riportati i collegamenti ad alcuni dei prodotti e delle tecnologie IBM disponibili per gli sviluppatori di applicazioni per la piattaforma Java.

  • Prodotti scaricabili gratuitamente:
    • (Java Developer Kit) è un insieme di strumenti per la creazione e il test di applet e applicazioni per Java SE e Java ME su una varietà di sistemi operativi diffusi, inclusi Windows, Linux e AIX.
    • (IBM Development Package for Eclipse) è un toolkit per sviluppatori non supportato basato su Eclipse che consente di creare ed eseguire applicazioni nel proprio ambiente di sviluppo pronto all'uso.
    • : Puoi scaricare i pacchetti software gratuiti Eclipse da developerWorks, inclusi i prodotti Calisto ed Europa simultanei.
    • è un repository virtuale di promettenti tecnologie Java sviluppate da IBM. Questi includono API, IDE, kit di sviluppo, implementazioni di riferimento e utilità. Di seguito sono riportati i collegamenti ad alcune delle tecnologie presenti in alphaWorks.
    • . Questa utility aiuta ad analizzare e generare script Ant testabili per la creazione di progetti sviluppati con Eclipse, Rational e WebSphere IDE per piattaforme Java EE e SCA.
    • (Strumento di analisi e modellazione di modelli IBM per Java Garbage Collector). Questa utility analizza i file di traccia GC dettagliati, analizza l'utilizzo della memoria dinamica (heap) e consiglia le impostazioni dell'applicazione in base ai risultati della simulazione della memoria. (Secure Shell Library for Java) è un'implementazione leggera del protocollo SSH-2 sviluppato da IETF (Internet Engineering Task Force). Fornisce l'autenticazione sicura e altri servizi sicuri che operano sotto rete insicura. ti consente di consolidare e trasformare i dati, aumentando così la produttività, la flessibilità e la produttività della tua azienda accedendo rapidamente alle informazioni di cui hai bisogno.

Che cos'è la sicurezza delle informazioni? Questo è lo stato della sicurezza delle informazioni, che ne garantisce la riservatezza, la disponibilità e l'integrità.

Solitamente, al fine di valutare lo stato della sicurezza delle informazioni, è necessario comprendere e analizzare le minacce e le loro fonti, valutare il livello del danno, la probabilità di attuazione e la rilevanza delle minacce, i rischi (facoltativamente) che possono interessare il nostro sistema/ informazione.

A mio avviso, è impossibile valutare la sicurezza di una singola tecnologia o linguaggio di programmazione senza essere legati a una specifica modalità di implementazione, cioè senza uno specifico ready-made prodotto software in un linguaggio che ha un TOR dettagliato con una descrizione dell'architettura e della funzionalità. Ma anche questo non sarà sufficiente, poiché è necessario valutare lo stato di sicurezza di un sistema informativo finito con la sua specifica architettura, insieme di componenti, processi aziendali, informazioni e, infine, persone. Lascia che ti faccia un esempio di costruzione di una casa. Disponiamo di materiali (sabbia, cemento, ghiaia, mattoni, ecc.) e strumenti (secchio, pala, spatola, ecc.). Non saremo in grado di valutare la qualità e l'affidabilità della casa finita esclusivamente sulla base dei materiali/strumenti utilizzati: quanto durerà, se ci saranno delle crepe, se farà freddo o sarà tranquillo. Devi scegliere un progetto di casa, una tecnologia di costruzione e un team di artigiani. E solo dopo il completamento della costruzione, saremo in grado di misurare la conformità al progetto, GOST, SNiP, controllare le misurazioni per protezione termica, rumore, carichi, analizzare la qualità del cemento e rispondere alla maggior parte delle domande. Ma su domanda principale"Per quanto tempo resterà?" non avremo una risposta precisa, poiché non conosciamo tutte le condizioni di funzionamento della casa e tutti i fattori che andranno ad incidere nel tempo.

Come garantire la sicurezza in Java

Prendiamo Java come esempio. . È un linguaggio di programmazione orientato agli oggetti; i programmi scritti in Java vengono tradotti in bytecode Java, che viene eseguito dalla Java Virtual Machine (JVM), un programma che elabora byte code e trasmette istruzioni all'hardware come interprete. Il vantaggio di questa modalità di esecuzione dei programmi è la completa indipendenza del bytecode dal sistema operativo e dall'hardware, che consente di eseguire applicazioni Java su qualsiasi dispositivo per il quale esiste una macchina virtuale corrispondente.

« Universal Language suona bene, ma il problema più comune è anche l'altro lato della medaglia: una perdita di memoria nella JVM, che porta a overflow di memoria e arresti anomali. In relazione a questo problema, le vulnerabilità non sono escluse, perché il principale postulato dell'affidabilità è più semplice è, meglio è. In questo caso, una torta così complessa viene assemblata garantendo la compatibilità di un gran numero di piattaforme e sistemi operativi che è quasi impossibile tracciare e chiudere tutte le vulnerabilità riscontrate in esse ed eliminarle rapidamente. Per la stessa Microsoft, le vulnerabilità possono essere trovate e risolte dopo 4-8 anni, e questo se non prendiamo in considerazione le funzionalità non dichiarate lasciate intenzionalmente o erroneamente.

Dalla mia pratica: quando i programmatori aggiungono nuove funzionalità correlate a quella già implementata o risolvono vecchie funzionalità, nel 15% dei casi rompono il prodotto precedentemente funzionante. E se allo stesso tempo non viene eseguito il test completo, ci ritroviamo con un prodotto con nuove funzionalità, ma con il vecchio parzialmente non funzionante. Ci sono anche differenze nella scrittura del codice per diverse piattaforme, versioni del sistema operativo e software. A questo proposito, si può immaginare quanto sia difficile mantenere il linguaggio di programmazione Java e la JVM, per non parlare dei problemi di sicurezza.

Al momento è stato rilasciato Java Development Kit 10, che ci offre meccanismi di sicurezza standard rilasciati per Java SE 8 e descritti nella Documentazione sulla sicurezza. Nella decima versione non è stato aggiunto nulla di nuovo.

Si noti che Oracle dispone di un Java Security Resource Center. In generale, l'azienda divide la sicurezza Java in quattro sezioni principali:

A) Gli sviluppatori devono:

segui e usa tutto Ultimi aggiornamenti ambienti di sviluppo e sicurezza;

Utilizzare programmi di controllo della correttezza del codice (ad esempio Checker Framework);

B) gli amministratori di sistema dovrebbero:

Seguire e utilizzare tutti gli ultimi aggiornamenti per Java e i componenti necessari al funzionamento del prodotto (inclusi OS, librerie, framework, ecc.);

Utilizzare le regole di distribuzione Java descritte da e ;

Usa un timestamp affidabile.

C) gli utenti finali dovrebbero:

Utilizzare sempre l'ultima versione originale di Java;

D) i professionisti della sicurezza devono:

Utilizzare strumenti avanzati di gestione e sicurezza (ad esempio, Advanced Management Console);

Monitorare l'installazione tempestiva di tutti gli aggiornamenti di sicurezza;

È importante che tutti seguano e rispettino le regole e i requisiti di sicurezza. È possibile raggiungere uno stato di sicurezza ad un livello adeguato solo lavorando insieme e applicando tutte le misure disponibili (tecniche, organizzative). Come mostra la mia pratica, nel 60% delle organizzazioni, i servizi di sicurezza IT e delle informazioni vanno bene con la sicurezza, così come con gli utenti che utilizzano dispositivi aziendali e sono connessi a un unico dominio. Ma i più incontrollati in quest'area sono gli sviluppatori, i team leader, gli architetti.

Sviluppo software e problemi di sicurezza

Più in generale, le principali cause dei problemi di sicurezza nelle applicazioni durante lo sviluppo del software sono le seguenti:

A) Mancanza di comprensione della terminologia della sicurezza in generale, per non parlare delle conoscenze specifiche e delle soluzioni applicate.

Di norma, gli sviluppatori associano la sicurezza nel migliore dei casi alle seguenti cose: controllo degli accessi e registrazione e protezione con password, meno spesso - protezione della connessione a livello https (utilizzando meccanismi di crittografia disponibili per impostazione predefinita). Cioè, formalmente utilizzeranno metodi di sicurezza, che di fatto rimarranno formali, "per spettacolo", senza tener conto dei requisiti e delle sfumature:

Per le password: vengono solitamente utilizzati valori di default e non vengono effettuate impostazioni aggiuntive per lunghezza, intensità, frequenza di cambio, non ripetibilità, numero di tentativi. Molto spesso, questi parametri non possono essere regolati, poiché non sono stati inclusi nell'attività dell'ambito di sviluppo del software, il che porta alla necessità di aggiungere codice.

Sulla gestione e la registrazione degli accessi: nella migliore delle ipotesi, gli sviluppatori hanno descritto i gruppi oi ruoli utente e gli oggetti di accesso che dovrebbero essere disponibili nel software. Nel peggiore dei casi, gli stessi sviluppatori hanno "diviso" le sezioni e gli oggetti in quelli necessari per utenti e amministratori. Nel primo caso, otteniamo un sistema che può essere configurato in modo flessibile, ma la configurazione e l'accordo sui diritti richiedono una notevole quantità di tempo. Nel secondo - un sistema formale di controllo degli accessi. Inoltre, gli sviluppatori devono capire che tipo di informazioni e in che misura è necessario registrarsi. Tuttavia, spesso non vengono fornite loro queste informazioni, il che porta a dettagli insufficienti nei registri per analizzare gli incidenti o capire cosa sta succedendo nel software. Oppure all'eccessiva conservazione dei registri e di una grande quantità di informazioni, che impone restrizioni significative alla capacità di memorizzare le informazioni per il periodo di tempo richiesto (ad esempio, da uno a tre anni) o diventa necessario acquistare ulteriori archivi di informazioni. Con un'eccessiva registrazione delle informazioni, sorgono ulteriori problemi con la velocità di analisi e analisi degli incidenti e la velocità di trovare le informazioni necessarie. La ridondanza può anche richiedere finanziamenti aggiuntivi per l'ampliamento del personale, l'acquisto di sistemi SIEM con personalizzazione di regole di elaborazione delle informazioni univoche o comportare rischi associati a informazioni obsolete. Allo stesso tempo, si dedica troppo tempo all'analisi e all'elaborazione delle informazioni.

Non meno significativa la protezione dei canali di comunicazione, soprattutto per i sistemi di pagamento e bancari, dove, oltre alla divulgazione di dati personali e anagrafici, sono possibili perdite finanziarie. Molto spesso accade che non pensino a proteggere i canali e il mezzo di trasmissione delle informazioni e, in tal caso, utilizzano le impostazioni "predefinite", ad esempio TLS / SSL. Ma ha anche le sue peculiarità nella scelta della versione del protocollo (TLS 1.1, 1.2, 1.3 o SSL v1-3), dell'algoritmo di crittografia (RC4, IDEA, Triple DES, SEED, Camellia o AES), della lunghezza della chiave. A volte, ad esempio, viene selezionato il protocollo TLS 1.2 corretto, con crittografia AES, una lunghezza della chiave di 256 bit, ma viene dimenticata la possibilità di selezionare un indirizzo sulla porta 443 per HTTPS e/o sulla porta 80 per HTTP, invece di bloccare la porta 80 , per cui diventa possibile accedere attraverso un canale non sicuro. Oppure, ad esempio, elevano l'infrastruttura sulle macchine virtuali e non pensano affatto alla necessità di chiudere l'accesso alla rete tra macchine virtuali.

B) Il secondo problema è legato al business, in quanto investe in funzionalità speciali specifiche che non tengono conto dei blocchi di sicurezza.

Sfortunatamente, l'azienda non sempre capisce perché ha bisogno di spendere risorse per blocchi di sicurezza, se non ci sono vantaggi funzionali da essi, il prodotto non porterà più soldi e ci sono solo probabili rischi che potrebbero non funzionare. Le aziende capiscono più spesso la necessità di investire nella sicurezza quando si è già verificato un incidente di sicurezza delle informazioni.

Sfortunatamente, non solo il business è responsabile di questo, ma anche il suo ambiente, che:

Inoltre non capisce in sicurezza;

Il budget per gli specialisti della sicurezza delle informazioni è stato risparmiato (non vengono assunti affatto, oppure vengono assunti specialisti altamente specializzati, oppure viene assunta una persona che è responsabile di tutto);

Non è riuscito a veicolare ragionevolmente il bisogno di sicurezza ea motivare correttamente i rischi attuali (reputazionali, finanziari, temporanei).

C) Problema di comunicazione in azienda o sua mancanza.

Questo è il caso quando l'azienda e il suo ambiente comprendono la necessità e l'importanza della sicurezza delle informazioni. Hanno stanziato budget, assunto specialisti appropriati, ma ci sono difficoltà nella comunicazione tra unità aziendali e sicurezza delle informazioni / servizi IT, sviluppatori.

D) Insufficiente consapevolezza degli utenti ordinari dell'azienda in materia di sicurezza delle informazioni.

Supponiamo che ci siano tutte le suddivisioni, gli specialisti, le misure tecniche e organizzative necessarie. Ma gli utenti riposano e non vogliono lavorare secondo le regole. Questa è una situazione molto comune ed è anche necessario risolverla in modo completo, perché le persone non capiscono perché hanno bisogno di lavoro extra per rispettare i problemi di sicurezza delle informazioni (scansionare file con antivirus, ricordare password complesse, conoscere e rispettare le politiche e le processi, ecc.). È necessario organizzare periodicamente master class, raccontare a livello quotidiano cos'è la sicurezza delle informazioni, quali problemi e soluzioni ci sono, portare obiettivi e obiettivi globali di sicurezza delle informazioni, motivarli e il loro impatto sul business.

E) Mancanza di architetti della sicurezza delle informazioni: gli specialisti della sicurezza delle informazioni non sempre partecipano allo sviluppo del software e gli stessi programmatori pensano alla sicurezza dell'architettura e all'uso di modelli di sicurezza scritti e già pronti (modelli di sicurezza).

Gli sviluppatori non conoscono e non possono conoscere tutte le sfumature, poiché il loro compito è completare lo sviluppo e passare a quello successivo. Se approfondisci lo sviluppo stesso, il processo è molto più complicato di quanto sembri. Pertanto, è necessario ricevere chiaramente l'attività dall'azienda, scomporla in mini-attività comprensibili per gli sviluppatori, eseguire lo sviluppo, condurre test alfa e beta, caricare, test funzionali, correggere errori, tornare ai test: questo processo è ciclico e lungo. Pertanto, non sorprende che non abbiano risorse sufficienti per pensare alla sicurezza del prodotto nei minimi dettagli.

Per poter parlare di sicurezza, è necessario risolvere i problemi sopra descritti. Non descrivo specificamente le opzioni per le soluzioni, poiché tutto dipende da problemi specifici, ambiente, condizioni. Non esiste una pillola universale e bisogna usare ogni possibile misura. Il compito principale è garantire che tutti i dipendenti dell'azienda comprendano, comprendano e rispettino i requisiti di sicurezza delle informazioni e siano interessati alla loro osservanza. E solo allora si potrà parlare dell'efficienza e del buon livello di maturità della sicurezza delle informazioni in azienda.

Articoli correlati in alto