Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Erori
  • Securitatea și mașina virtuală Java. Bibliotecă de bază extinsă

Securitatea și mașina virtuală Java. Bibliotecă de bază extinsă

Deci, Java are o istorie lungă și dificilă de dezvoltare, dar este timpul să luăm în considerare ce sa întâmplat cu creatorii, ce proprietăți are această tehnologie.

Cea mai cunoscută și, în același timp, provocând cea mai aprinsă dezbatere, proprietatea este multe- sau multiplatformă... S-a spus deja că se realizează prin utilizarea mașinii virtuale JVM, care este un program obișnuit care este executat de sistemul de operare și oferă aplicațiilor Java toate capabilitățile necesare. Deoarece toți parametrii JVM sunt specificați, rămâne singura sarcină - implementarea mașinilor virtuale pe toate platformele existente și utilizate.

Prezența unei mașini virtuale determină multe proprietăți ale Java, dar acum să ne oprim la următoarea întrebare - este Java un limbaj compilat sau interpretat? De fapt, sunt folosite ambele abordări.

Codul sursă al oricărui program Java este reprezentat de fișiere text obișnuite care pot fi create în orice editor de text sau instrument specializat de dezvoltare și au extensia .java. Aceste fișiere sunt introduse în compilatorul Java, care le traduce în bytecode Java special. Acest set compact și eficient de instrucțiuni este susținut de JVM și este o parte integrantă a platformei Java.

Ieșirea compilatorului este salvată în fișiere binare cu extensia .class. O aplicație Java constând din astfel de fișiere este alimentată la intrarea mașinii virtuale, care începe să le execute sau să le interpreteze, deoarece este un program în sine.

Mulți dezvoltatori au criticat dur la început sloganul îndrăzneț al lui Sun „Scrie o dată, alergă peste tot”, dezvăluind tot mai multe inconsecvențe și inconsecvențe pe diverse platforme. Cu toate acestea, trebuie să recunoaștem că pur și simplu erau prea nerăbdători. Java tocmai s-a născut, iar primele versiuni ale specificațiilor nu erau suficient de cuprinzătoare.

Destul de curând, Sun a ajuns la concluzia că simpla publicare liberă a specificațiilor (cum se făcea cu mult înainte de Java) nu era suficientă. De asemenea, este necesar să se creeze proceduri speciale pentru verificarea noilor produse pentru conformitatea cu standardele. Primul astfel de test pentru JVM a conținut doar aproximativ 600 de verificări, un an mai târziu numărul acestora a crescut la zece mii și de atunci a crescut (acest test nu a putut trece la un moment dat MS IE 4.0). Desigur, autorii mașinilor virtuale le-au îmbunătățit tot timpul, eliminând erorile și optimizând munca lor. Cu toate acestea, orice tehnologie, chiar și una foarte bine concepută, necesită timp pentru a crea o implementare de înaltă calitate. Java 2 Micro Edition (J2ME) trece în prezent printr-o cale de dezvoltare similară, dar mai multe despre asta mai târziu.

Următoarea proprietate cea mai importantă este orientarea obiectelor Java, care este întotdeauna menționată în toate articolele și comunicatele de presă. Abordarea orientată pe obiect (OOP) în sine este discutată în prelegerea următoare, dar este important de subliniat că în Java aproape totul este implementat sub formă de obiecte - fire și fluxuri de date, rețele, lucru cu imagini, cu o interfață cu utilizatorul . , tratarea erorilor etc. La urma urmei, orice aplicație Java este o colecție de clase care descriu noi tipuri de obiecte.

O discuție detaliată a modelului de obiect Java este efectuată pe parcursul cursului, cu toate acestea, subliniem principalele caracteristici. În primul rând, creatorii au abandonat moștenirea multiplă. S-a hotărât că supracomplica și întunecă programele. Limbajul folosește o abordare alternativă - un tip special de „interfață”. Este discutat în detaliu în prelegerea corespunzătoare.

În plus, se aplică Java tastare puternică... Aceasta înseamnă că orice variabilă și orice expresie are un tip deja cunoscut în momentul compilării. Această abordare este folosită pentru a simplifica identificarea problemelor, deoarece compilatorul raportează imediat erorile și indică locația acestora în cod. Căutarea excepțiilor (excepții - deoarece situațiile incorecte sunt numite în Java) în timpul execuției programului (runtime) va necesita testare complexă, în timp ce cauza defectului poate fi găsită într-o clasă complet diferită. Astfel, trebuie să depuneți efort suplimentar în scrierea codului, dar fiabilitatea acestuia este semnificativ crescută (și acesta este unul dintre obiectivele fundamentale pentru care a fost creat noul limbaj).

Există doar 8 tipuri de date în Java care nu sunt obiecte. Au fost definite încă de la prima versiune și nu s-au schimbat niciodată. Acestea sunt cinci tipuri de numere întregi: byte, short, int, long, precum și caracterul char. Apoi două tipuri fracționale float și se dublează și, în final, tipul boolean boolean. Astfel de tipuri sunt numite simple sau primitive (din limba engleză primitivă) și sunt discutate în detaliu în prelegerea despre tipurile de date. Toate celelalte tipuri sunt obiect sau referință (ing. referinţă).

Din anumite motive, sintaxa Java i-a indus în eroare pe mulți. Se bazează într-adevăr pe sintaxa limbajelor C / C ++, așa că dacă te uiți la codul sursă al programelor scrise în aceste limbi și în Java, nu vei putea imediat să înțelegi care dintre ele este scris în ce limba. Din anumite motive, acest lucru a dat multe motive să credem că Java este un C++ simplificat cu caracteristici suplimentare, cum ar fi un colector de gunoi. Ne vom uita mai jos la colectorul automat de gunoi, dar este o mare greșeală să credem că Java este același limbaj cu C++.

Desigur, atunci când au dezvoltat o nouă tehnologie, autorii Java s-au bazat pe un limbaj de programare larg răspândit din mai multe motive. În primul rând, ei înșiși considerau C ++ principalul lor instrument la acea vreme. În al doilea rând, de ce să vină cu ceva nou când există unul vechi perfect potrivit? În cele din urmă, este evident că sintaxa necunoscută va speria dezvoltatorii și va complica semnificativ introducerea unui nou limbaj și, la urma urmei, Java ar fi trebuit să se răspândească cât mai repede posibil. Prin urmare, sintaxa a fost doar puțin simplificată pentru a evita constructele prea confuze.

Dar, așa cum am menționat deja, C++ era fundamental nepotrivit pentru noile sarcini stabilite de dezvoltatorii companiei Sun, așa că modelul Java a fost reconstruit și în conformitate cu obiective complet diferite. Prelegerile ulterioare vor dezvălui treptat diferențe specifice.

În ceea ce privește modelul obiect, acesta a fost mai degrabă modelat pe limbi precum Smalltalk de la IBM sau limbajul Simula dezvoltat în anii 60 la Centrul de calcul norvegian, la care face referire creatorul Java, James Gosling.

O altă proprietate importantă a Java - ușurința de învățare și dezvoltare - a primit, de asemenea, note controversate. Într-adevăr, autorii și-au dat osteneala să salveze programatorii de cele mai comune greșeli pe care le fac uneori chiar și dezvoltatorii experimentați C/C++. Iar primul loc aici este ocupat de lucrul cu memoria.

În Java, de la bun început, mecanism automat de colectare a gunoiului(din engleză garbage collector). Să presupunem că programul creează un obiect, lucrează cu el și apoi vine un moment când nu mai este necesar. Este necesar să eliberați memoria ocupată pentru a nu interfera cu funcționarea normală a sistemului de operare. În C/C++, acest lucru trebuie făcut în mod explicit din program. Evident, cu această abordare, există două pericole - fie să ștergeți un obiect de care altcineva are nevoie (și dacă acesta este efectiv accesat, va apărea o eroare), fie să nu ștergeți un obiect care a devenit inutil, ceea ce înseamnă o scurgere de memorie, că este că programul începe să consume din ce în ce mai multă RAM.

Când se dezvoltă în Java, programatorul nu se gândește deloc la eliberarea memoriei. Mașina virtuală în sine numără numărul de referințe la fiecare obiect, iar dacă devine zero, atunci un astfel de obiect este marcat pentru procesare de către colectorul de gunoi. Astfel, programatorul trebuie doar să se asigure că nu există referințe la obiecte inutile. Colectorul de gunoi este un fir de execuție de fundal care scanează în mod regulat obiectele existente și le elimină pe cele care nu mai sunt necesare. Nu puteți influența în niciun fel activitatea colectorului de gunoi din program, puteți iniția în mod explicit următoarea trecere numai folosind o funcție standard. Este clar că acest lucru simplifică foarte mult dezvoltarea programelor, în special pentru programatorii începători.

Cu toate acestea, dezvoltatorii experimentați au fost nemulțumiți de faptul că nu au putut controla pe deplin tot ceea ce se întâmplă cu sistemul lor. Nu există informații exacte când va fi șters exact un obiect care a devenit inutil, când firul de execuție va începe să funcționeze (și, prin urmare, va ocupa resursele sistemului), etc. Dar, cu tot respectul față de experiența unor astfel de programatori, trebuie remarcat faptul că numărul copleșitor de eșecuri ale programelor scrise în C / C ++ sunt cauzate de lucrul incorect cu memoria și, uneori, acest lucru se întâmplă chiar și cu produse foarte răspândite. firme serioase.

În plus, s-a pus un accent deosebit pe ușurința stăpânirii noii tehnologii. După cum s-a menționat deja, era de așteptat (și aceste așteptări erau justificate, în confirmarea corectitudinii căii alese!) ca Java să aibă o utilizare cât mai largă posibilă, chiar și în acele companii în care nu făcuseră niciodată programare la un asemenea nivel înainte ( aparate electrocasnice, cum ar fi prăjitoarele de pâine și aparatele de cafea, crearea de jocuri și alte aplicații pentru telefoane mobile etc.). Au existat și o serie de alte considerații. Produsele pentru utilizatorii obișnuiți, nu pentru programatori profesioniști, trebuie să fie deosebit de fiabile. Internetul a devenit World Wide Web deoarece au apărut utilizatori laici, iar capacitatea de a crea applet-uri este la fel de atrăgătoare pentru ei. Aveau nevoie de un instrument simplu pentru a construi aplicații robuste.

În cele din urmă, boom-ul internetului din anii 90 a câștigat avânt și a introdus noi termene de dezvoltare mai stricte. Proiectele pe termen lung, care erau obișnuite în trecut, au încetat să mai satisfacă nevoile clienților, trebuiau create sisteme noi în maximum un an, sau chiar în câteva luni.

Pe lângă introducerea colectorului de gunoi, au fost făcuți și alți pași pentru a facilita dezvoltarea. Unele dintre ele au fost deja menționate - respingerea moștenirii multiple, simplificarea sintaxei etc. Capacitatea de a crea aplicații multithreaded a fost implementată chiar în prima versiune de Java (studiile au arătat că acest lucru este foarte convenabil pentru utilizatori, iar standardele existente se bazează pe sisteme de teletip, care sunt depășite de mulți ani în urmă). Alte caracteristici vor fi discutate în prelegerile următoare. Cu toate acestea, de mult timp a fost general acceptat că construirea și întreținerea sistemelor este de fapt mai ușoară în Java decât în ​​C / C ++. Cu toate acestea, totuși, aceste limbi sunt create în scopuri diferite și fiecare are propriile sale avantaje incontestabile.

Următoarea proprietate importantă a Java este securitatea. Concentrarea inițială pe aplicațiile distribuite și, în special, decizia de a rula applet-uri pe computerul client, a făcut din securitate o prioritate de top. Există o întreagă gamă de măsuri la lucru în orice mașină virtuală Java. Mai jos este doar o scurtă descriere a unora dintre ele.

În primul rând, acestea sunt regulile de lucru cu memoria. S-a spus deja că ștergerea memoriei se face automat. Rezervarea acesteia este determinată și de JVM, și nu de compilator, sau explicit din program; dezvoltatorul poate indica doar că dorește să creeze un alt obiect nou. Indicatorii către adrese fizice lipsesc în principiu.

În al doilea rând, prezența unei mașini virtuale-interpret face mult mai ușoară tăierea codului periculos în fiecare etapă de lucru. Codul octet este mai întâi încărcat în sistem, de obicei sub formă de fișiere de clasă. JVM-ul verifică cu atenție dacă toate respectă regulile generale de securitate Java și că nu sunt create de atacatori prin alte mijloace (și dacă nu sunt corupte în tranzit). Apoi, în timpul execuției programului, interpretul poate verifica cu ușurință fiecare acțiune pentru validitatea. Capacitățile claselor care au fost încărcate de pe un disc local sau prin rețea diferă semnificativ (utilizatorul poate atribui sau elimina cu ușurință drepturi specifice). De exemplu, aplicațiile nu vor accesa niciodată sistemul de fișiere local în mod implicit. Astfel de restricții încorporate se găsesc în toate bibliotecile Java standard.

În cele din urmă, există un mecanism pentru semnarea applet-urilor și a altor aplicații descărcate prin rețea. Un certificat special garantează că utilizatorul a primit codul exact așa cum l-a emis producătorul. Acest lucru, desigur, nu oferă mijloace suplimentare de protecție, dar permite clientului fie să refuze să lucreze cu aplicații de la producători nesiguri, fie să vadă imediat că au fost făcute modificări neautorizate în program. În cel mai rău caz, el știe cine este responsabil pentru pagubă.

Totalitatea proprietăților Java descrise face posibilă afirmarea că limbajul este foarte potrivit pentru dezvoltarea de aplicații Internet și intranet (rețele interne corporative).

În cele din urmă, o trăsătură distinctivă importantă a Java este dinamismul său. Limbajul este foarte bine conceput, sute de mii de dezvoltatori și multe companii mari sunt implicate în dezvoltarea lui. Principalele etape ale acestei dezvoltări sunt rezumate în secțiunea următoare.

Deci, să rezumam. Platforma Java are următoarele avantaje:

  • portabilitate, sau multiplatformă ;
  • orientare obiect, a fost creat un model de obiect eficient;
  • sintaxă familiară C/C++;
  • model de securitate încorporat și transparent;
  • orientare către sarcini de Internet, aplicații distribuite în rețea;
  • dinamism, ușurință în dezvoltare și adăugarea de noi funcții;
  • ușurința de a învăța.

Dar nu trebuie să presupunem că învățarea mai ușoară înseamnă că nu trebuie să înveți deloc o limbă. Scrierea de programe foarte bune, construirea de sisteme mari și complexe necesită o înțelegere solidă a tuturor conceptelor și bibliotecilor Java de bază utilizate. Despre aceasta este acest curs.

Versiuni și produse Java majore

Să ne rezervăm imediat că produsele de aici înseamnă soluții software de la Sun, care sunt „implementare de referință”.

Deci, Java a fost anunțat pentru prima dată pe 23 mai 1995. Principalele produse disponibile la acel moment sub formă de versiuni beta au fost:

  • Specificația limbajului Java, JLS, specificarea limbajului Java (descrierea vocabularului, a tipurilor de date, a constructelor de bază etc.);
  • Specificația JVM
  • Kit de dezvoltare Java, JDK - Un instrument de dezvoltare constând în principal din utilitare, biblioteci de clase standard și demonstrații.

Specificația limbajului a fost atât de bine scrisă încât este folosită practic neschimbată până în prezent. Desigur, au fost făcute un număr mare de clarificări, descrieri mai detaliate, au fost adăugate câteva caracteristici noi (de exemplu, declararea claselor interioare), dar conceptele de bază rămân neschimbate. Acest curs se bazează în mare măsură pe specificația limbii.

Specificația JVM este destinată în primul rând creatorilor de mașini virtuale și, prin urmare, este foarte greu utilizată de programatorii Java.

JDK a fost mult timp un instrument de bază de dezvoltare a aplicațiilor. Nu conține niciun editor de text, dar funcționează numai pe fișierele Java existente. Compilatorul este reprezentat de utilitarul javac (compilator java). Mașina virtuală este implementată de java. Pentru lansările de probă de applet-uri, există un utilitar special numit appletviewer. În cele din urmă, este furnizat un instrument javadoc pentru a genera automat documentația din codul sursă.

Prima versiune conținea doar 8 biblioteci standard:

  • java.lang - clase de bază necesare pentru funcționarea oricărei aplicații (numele este o abreviere pentru limba);
  • java.util - Multe clase de ajutor utile
  • java.applet - clase pentru crearea de applet-uri;
  • java.awt, java.awt.peer - o bibliotecă pentru crearea unei interfețe grafice cu utilizatorul (GUI), numită Abstract Window Toolkit, AWT, descrisă în detaliu în Lectura 11;
  • java.awt.image - clase suplimentare pentru lucrul cu imagini;
  • java.io - lucrează cu fluxuri și fișiere;
  • java.net - rețele.

Astfel, toate bibliotecile încep cu java, sunt cele standard. Toate celelalte (începând cu com, org etc.) se pot schimba în orice versiune fără suport de compatibilitate.

Versiunea finală a JDK 1.0 a fost lansată în ianuarie 1996.

Să explicăm imediat sistemul de denumire a versiunilor. Denumirea versiunii este formată din trei cifre. Primul este întotdeauna 1. Aceasta înseamnă că se menține compatibilitatea deplină între toate versiunile de 1.x.x. Adică, un program scris într-un JDK mai vechi se va executa întotdeauna cu succes pe unul mai nou. Compatibilitatea inversă este menținută ori de câte ori este posibil - dacă programul a fost compilat cu un JDK mai nou și nu au fost utilizate biblioteci noi, atunci în majoritatea cazurilor vechile mașini virtuale vor putea executa un astfel de cod.

A doua cifră s-a schimbat de la 0 la 4 (ultima la momentul creării cursului). În fiecare versiune, a existat o extindere semnificativă a bibliotecilor standard (212, 504, 1781, 2130 și 2738 - numărul de clase și interfețe de la 1.0 la 1.4), precum și unele caracteristici noi au fost adăugate limbajului în sine. Utilitățile incluse în JDK s-au schimbat și ele.

În cele din urmă, a treia cifră indică dezvoltarea unei versiuni. Nimic nu se schimbă în limbaj sau biblioteci, doar erorile sunt eliminate, optimizarea se realizează, argumentele de utilitate pot fi modificate (adăugate). Deci, cea mai recentă versiune de JDK 1.0 este 1.0.2.

Deși odată cu dezvoltarea versiunii 1.x nimic nu este eliminat, desigur, unele funcții sau clase sunt depreciate. Sunt declarate depreciate și, deși vor fi suportate până la anunțarea versiunii 2.0 (și încă nu s-a auzit nimic despre asta), nu este recomandată utilizarea lor.

Odată cu primul succes al JDK 1.0, au sosit și criticile. Principalele dezavantaje găsite de dezvoltatori au fost următoarele. În primul rând, desigur, este performanța. Prima mașină virtuală a fost foarte lentă. Acest lucru se datorează faptului că JVM-ul, de fapt, este un interpret, care rulează întotdeauna mai lent decât execuția codului compilat. Cu toate acestea, optimizarea de succes care a eliminat acest defect era încă în față. S-au remarcat și capabilitățile destul de slabe ale AWT, lipsa de lucru cu bazele de date și altele.

În decembrie 1996, a fost anunțată o nouă versiune a JDK 1.1, iar versiunea beta a fost lansată imediat pentru acces gratuit. Versiunea finală este lansată în februarie 1997. Ce a fost adăugat în noua versiune Java?

Desigur, o atenție deosebită a fost acordată performanței. Multe părți ale mașinii virtuale au fost optimizate și rescrise folosind Assembler mai degrabă decât C ca înainte. În plus, din octombrie 1996, Sun a dezvoltat un nou produs - compilatorul Just-In-Time, JIT. Sarcina sa este să traducă bytecode Java al programului în codul „nativ” al sistemului de operare. Astfel, timpul de pornire al programului crește, dar execuția poate fi accelerată în unele cazuri de până la 50 de ori! Din iulie 1997, există o implementare pentru Windows și JIT este inclus în JDK ca standard cu posibilitatea de a dezactiva.

Au fost adăugate multe funcții noi importante. JavaBeans, o tehnologie anunțată încă din 1996, vă permite să creați componente vizuale care pot fi integrate cu ușurință în instrumentele de dezvoltare vizuală. JDBC (Java DataBase Connectivity) oferă acces la bazele de date. RMI (Remote Method Invocation) facilitează crearea de aplicații distribuite. Sprijinul și securitatea în limba națională au fost îmbunătățite.

În primele trei săptămâni, JDK 1.1 a fost descărcat de peste 220.000 de ori, iar în mai puțin de un an de peste două milioane de ori. În acest moment, versiunea 1.1 este considerată complet învechită și dezvoltarea sa s-a oprit la 1.1.8. Cu toate acestea, datorită faptului că cel mai comun browser MS IE acceptă încă doar această versiune, acesta continuă să fie folosit pentru scrierea de applet-uri mici.

În plus, Sun a început să ofere Java Runtime Environment (JRE) pe 11 martie 1997. De fapt, aceasta este implementarea minimă a unei mașini virtuale necesară pentru a rula aplicații Java, fără un compilator sau alte instrumente de dezvoltare. Dacă utilizatorul dorește doar să ruleze programe, acesta este exact ceea ce are nevoie.

După cum puteți vedea, principalul dezavantaj rămâne suportul slab pentru interfața grafică cu utilizatorul (GUI). În decembrie 1996, Sun și Netscape au anunțat o nouă bibliotecă, IFC (Internet Foundation Classes), dezvoltată în întregime în Java de Netscape, pentru a crea precis o interfață complexă cu ferestre. În aprilie 1997, a fost anunțat că companiile intenționau să combine AWT de la Sun și IFC de la Netscape pentru a crea un nou produs Java Foundation Classes, JFC, care ar include:

  • fereastra îmbunătățită

limbajul Java. Introducere.

Multă vreme, a fost greu de imaginat o revistă de computer fără un articol despre limbajul Java. Chiar și ziare și reviste populare precum The New York Times, The Washington Post și Business Week au scris despre el.

Este imposibil să ne amintim că National Public Radio a dedicat vreodată un program de zece minute unui limbaj de programare. Bun sau rău depinde de punctul de vedere. Și investiția de 100 de milioane de dolari în producția de software creat folosind un limbaj de programare specific?! Companiile de televiziune CNN, CNBC și alte mass-media au vorbit și încă vorbesc despre cum poate și va face limbajul Java.

Cu toate acestea, această carte este pentru programatori serioși și, din moment ce Java este un limbaj de programare serios, avem multe despre care să vorbim. Deci, nu ne vom scufunda în analiza promisiunilor publicitare și nu vom încerca să aflăm ce este adevărat și ce este ficțiune în ele. În schimb, vom descrie Java ca un limbaj de programare suficient de detaliat (inclusiv, bineînțeles, caracteristicile care îi permit să fie folosit pentru lucrul pe Internet, ceea ce, de fapt, a provocat atât de mult hype publicitar). După aceea, vom încerca să separăm realitatea de fantezie explicând ce poate și ce nu poate face limbajul Java.

La început, a existat o prăpastie între promisiunile publicitare și posibilitățile reale ale limbajului Java. Pe măsură ce s-a maturizat, tehnologia a devenit mai stabilă și mai fiabilă, iar așteptările au scăzut la un nivel rezonabil. Java este acum din ce în ce mai folosit pentru a crea „middleware” care menține comunicarea între clienți și resursele serverului (cum ar fi bazele de date).

Deși aceste aplicații importante nu sunt copleșitoare, limbajul Java s-a dovedit a fi cel mai util în acest domeniu datorită independenței mașinii, multithreading-ului și capabilităților de programare în rețea. În plus, Java a preluat conducerea în sistemele încorporate, devenind standardul de facto pentru dispozitive portabile, chioșcuri virtuale, computere de bord și altele asemenea. Cu toate acestea, primele încercări de a rescrie programe larg răspândite pentru computerele personale în Java au fost eșuate - aplicațiile rezultate s-au dovedit a fi cu putere redusă și lente. Odată cu apariția noii versiuni, unele dintre aceste probleme au fost rezolvate și, totuși, trebuie recunoscut că utilizatorii, în general, sunt complet indiferenți față de limba în care sunt scrise programele pe care le-au achiziționat. Credem că principalele beneficii ale limbajului Java vor veni din crearea de noi tipuri de dispozitive și aplicații, mai degrabă decât din rescrierea programelor existente.

Limbajul Java ca instrument de programare

Cum limbajul de programare Java și-a depășit promisiunile publicitare. Este, fără îndoială, unul dintre cele mai bune limbaje disponibile pentru programatorii serioși. Java are potențialul de a fi un limbaj de programare grozav, dar probabil că este prea târziu acum. Când apare un nou limbaj de programare, apare imediat problema urâtă a compatibilității cu software-ul creat anterior. Mai mult decât atât, chiar dacă modificările acestor programe pot fi făcute fără a interfera cu textul lor, este dificil pentru creatorii unui limbaj care a fost atât de călduros primit de public, precum Java, să spună direct: „Da, poate că am făcut o greșeală în dezvoltarea versiunii X, dar versiunea Y va fi mai bună.” Ca urmare, în așteptarea unor îmbunătățiri ulterioare, trebuie să precizăm că structura limbajului Java nu se va schimba semnificativ în viitorul apropiat.

Întrebarea evidentă este: „ Cum ați îmbunătățit limbajul Java?„Se pare că acest lucru s-a făcut nu prin îmbunătățirea limbajului de programare în sine, ci prin schimbarea radicală a bibliotecilor de programe scrise în limbajul Java. Sun Microsystems a schimbat totul: începând cu numele funcțiilor individuale ale bibliotecii (făcându-le mai semnificative) și metodele de lucru ale modulelor grafice (schimbarea modului în care gestionăm evenimentele și rescrierea parțială a programelor de lucru) și terminând cu crearea de noi caracteristici ale limbajului, cum ar fi instrumente de imprimare, care nu erau disponibile în Java 1.0, rezultând într-un platformă de programare mai utilă decât toate versiunile anterioare ale limbajului Java.

Microsoft și-a lansat propriul produs numit J++, care are legătură cu limbajul Java. J++ este interpretat de o mașină virtuală Java (Mașină virtuală Java) atunci când se execută bytecode, dar limbile au interfețe diferite față de codurile externe. Limbile J++ și Java au aproape aceeași sintaxă. Cu toate acestea, Microsoft a creat constructii de limbaj suplimentare. Toate au o valoare destul de dubioasă, cu excepția API-ului Windows. Pe lângă faptul că aceste limbaje au aceeași sintaxă, bibliotecile lor de bază (șiruri, utilități, instrumente de programare în rețea, instrumente multithreading, biblioteci de matematică etc.) sunt în esență aceleași.

Cu toate acestea, bibliotecile grafice, interfața cu utilizatorul și accesul la obiect la distanță sunt complet diferite între aceste limbi. În prezent, Microsoft nu mai acceptă J ++, după ce a dezvoltat un nou limbaj, C #, care are multe în comun cu Java, dar folosește o mașină virtuală diferită. Această carte nu descrie J++ sau C #.

Avantajele limbajului Java

1) Unul dintre principalele avantaje ale limbajului Java este independență față de platforma pe care rulează programele: Același cod poate fi rulat sub Windows, Solaris, Linux, Machintosh și multe altele.
Acest lucru este cu adevărat necesar atunci când programele sunt descărcate de pe Internet pentru a fi executate ulterioare în diferite sisteme de operare.

2) Un alt avantaj este că sintaxa limbajului Java este similară cu sintaxa limbajului C++ și nu este dificil pentru programatorii care cunosc limbajele C și C++ să o învețe... Adevărat, pentru programatorii care cunosc limbajul Visual Basic, această sintaxă poate fi neobișnuită.

Dacă nu ați programat niciodată în C++, este posibil ca unii dintre termenii folosiți în această secțiune să nu vă fie clari. În acest caz, îl puteți sări peste el. Până când ajungeți la sfârșitul capitolului 6, acești termeni vă vor deveni familiari.

3) De asemenea, Java - limbaj complet orientat pe obiecte, chiar mai mult decât C++... Toate entitățile din Java sunt obiecte, cu excepția câtorva tipuri primitive, cum ar fi numerele. (Deoarece este ușor să dezvoltați proiecte complexe cu programare orientată pe obiecte, aceasta înlocuiește programarea structurată mai veche. Dacă nu sunteți familiarizat cu programarea orientată pe obiecte, capitolele 3-6 vă vor oferi tot ce trebuie să știți despre aceasta.)

Cu toate acestea, nu este suficient să dezvoltați un alt dialect, ușor îmbunătățit, al limbajului C++. Este esențial important că este mai ușor să dezvoltați programe fără erori în Java decât în ​​C++. De ce? Dezvoltatorii Java s-au gândit mult timp de ce programele scrise în C++ sunt atât de predispuse la erori. Ei au oferit limbajului Java mijloacele de a elimina însăși posibilitatea de a crea programe care ar ascunde cele mai frecvente erori. Pentru a face acest lucru, limbajul Java a făcut următoarele.

4) A fost exclusă posibilitatea alocării și eliberării explicite a memoriei.
Memoria Java este recuperată automat prin colectarea gunoiului. Programatorul este garantat împotriva erorilor legate de utilizarea greșită a memoriei.

5) S-au introdus matrice adevărate și aritmetica pointerului interzisă.
Acum, programatorii, în principiu, nu pot șterge datele din memorie din cauza utilizării necorespunzătoare a pointerilor.

6) A fost eliminată posibilitatea confundării operatorului de atribuire cu operatorul de comparare a egalității.
Acum nici măcar nu puteți compila expresia if (intries = 3). ... ... (Programatorii Visual Basic s-ar putea să nu observe deloc nicio problemă aici, deoarece această eroare este sursa majorității neînțelegerilor în C și C ++).

7) Moștenirea multiplă este exclusă. Acesta a fost înlocuit cu un nou concept - o interfață împrumutată din limbajul Objective C.
Interfața oferă programatorului aproape tot ceea ce poate obține programatorul din moștenirea multiplă, evitând în același timp complexitatea gestionării ierarhiilor de clasă.

Caracteristicile limbajului Java

Simplu
Interpretat
Distribuit
De încredere
Sigur
Independent de mașină
Orientat obiect
Performanta ridicata
Multifile
Dinamic
Arhitectura computerului independent

Am atins deja câteva dintre aceste puncte în ultima secțiune. În această secțiune, vom: furniza citate din manualul limbajului Java care dezvăluie caracteristicile limbajului; Să împărtășim cititorilor gândurile noastre despre anumite proprietăți ale limbii, pe baza propriei noastre experiențe de lucru cu cea mai recentă versiune.

Simplu

Ne-am dorit să creăm un sistem ușor de programat, să nu necesite pregătire suplimentară și să țină cont de practica și standardele de programare stabilite. Prin urmare, deși am considerat limbajul C++ nepotrivit pentru aceste scopuri, limbajul Java a fost conceput să fie cât mai asemănător cu acesta, pentru a face sistemul mai accesibil. Limbajul Java îi lipsesc multe dintre caracteristicile C ++ rar utilizate, obscure și obscure care, în opinia noastră, fac mai mult rău decât bine.

Sintaxa Java este în esență o versiune curățată a sintaxei C++. Acest limbaj nu are fișiere de antet, aritmetică pointer (și pointeri înșiși), structuri, uniuni, supraîncărcare operator, clase de bază virtuale etc. (Diferențele dintre Java și C ++ sunt descrise în notele C ++ împrăștiate în toată cartea.) Cu toate acestea, dezvoltatorii nu au căutat să corecteze toate deficiențele limbajului C ++.

De exemplu, sintaxa instrucțiunii switch în limbajul Java a rămas neschimbată. Cunoscând limbajul C++, va fi ușor să treceți la sintaxa limbajului Java.
Dacă utilizați de obicei un mediu de programare vizuală (cum ar fi Visual Basic), limbajul Java vi se va părea complicat.
Sintaxa sa pare adesea destul de ciudată (deși nu este greu de înțeles sensul expresiei). Mai important, limbajul Java necesită mult mai multă programare. Frumusețea Visual Basic este că mediul său de programare vizuală vă permite să creați o infrastructură de aplicații aproape automat. Atingerea aceluiași rezultat cu Java necesită programare manuală, dar rezultă programe mult mai scurte.

Există, totuși, un al treilea tip de mediu de programare care vă permite să creați programe folosind tehnologia „drag-and-drop”.

Un alt aspect al simplității este concizia. Unul dintre scopurile limbajului Java este acela de a permite dezvoltarea de programe care pot fi executate complet independent pe mașini mici. Interpretul principal și facilitățile de suport pentru clasă au o dimensiune de aproximativ 40KB; Bibliotecile standard și instrumentele de threading (în special microkernelul autonom) iau încă 17: KB.
Acesta este un succes uriaș. Rețineți, totuși, că bibliotecile de suport pentru GUI sunt mult mai mari.

Orientat obiect

În termeni simpli, programarea orientată pe obiecte este o tehnică de programare care se concentrează pe date (adică pe obiecte) și pe mijloacele de accesare a acestora. Prin analogie cu tâmplăria, meșterul orientat pe obiect este concentrat în principal pe scaunul pe care îl realizează, și doar în al doilea rând este interesat de instrumentele necesare pentru a face acest lucru; în același timp, tâmplarul neorientat pe obiecte se gândește doar la uneltele sale. Proprietățile orientate pe obiect ale Java și C++ sunt în esență aceleași.

Orientarea obiectelor și-a dovedit valoarea în ultimii 30 de ani și fără ea este imposibil să ne imaginăm un limbaj de programare modern. Într-adevăr, caracteristicile orientate pe obiecte ale limbajului Java sunt comparabile cu limbajul C++. Principala diferență dintre ele constă în mecanismul moștenirii multiple, pentru care limbajul Java a găsit cea mai bună soluție, precum și în modelul de metaclasă al limbajului Java.

Reflection (Capitolul 5) și Serializarea obiectelor (Capitolul 12) vă permit să implementați obiecte și instrumente persistente pentru construirea de interfețe grafice cu utilizatorul din componente ieșite din cutie.

Dacă nu ați programat niciodată în limbaje orientate pe obiecte, citiți cu atenție capitolele 4-6. Aceste capitole acoperă elementele de bază ale programării orientate pe obiecte și vă arată beneficiile dezvoltării de proiecte complexe față de limbajele tradiționale, orientate către procedura, cum ar fi C sau Basic.

Distribuit

Java are o bibliotecă mare de programe de transfer de date bazate pe TCP / IP (Transmission Control Protocol / Internet Protocol), HTTP (Hypertext Transfer Protocol) sau FTP (File Transfer Protocol). protocol de transfer de fișiere). Aplicațiile scrise în limbajul Java pot deschide și accesa obiecte prin rețea folosind șiURL-urile (Locația uniformă a resurselor) sunt la fel de ușoare ca o rețea locală.

Limbajul Java oferă o experiență web puternică și ușor de utilizat. Oricine a încercat vreodată să scrie programe pentru lucrul pe Internet în alte limbi va fi plăcut surprins de cât de ușor se rezolvă cele mai dificile sarcini, de exemplu, deschiderea conexiunilor de rețea (conexiune la sockets), în Java. Un mecanism elegant de așa-numitele servlet-uri face ca funcționarea serverului să fie extrem de eficientă.

Servleturile sunt acceptate de multe servere web populare. (Rețeaua va fi acoperită în Volumul II.) Comunicarea între obiectele distribuite în Java este asigurată de mecanismul de invocare a metodei de la distanță (acest subiect este tratat și în Volumul 2).

De încredere

Limbajul Java este conceput pentru a crea programe care trebuie să funcționeze fiabil în toate situațiile. Limbajul Java se concentrează pe detectarea timpurie a erorilor, verificarea dinamică (în timpul execuției programului) și excepțiile predispuse la erori... Singura diferență semnificativă dintre Java și C++ este modelul pointerului Java, care exclude capacitatea de a suprascrie o secțiune de coruperea memoriei și a datelor.

Această proprietate este, de asemenea, foarte utilă. Compilatorul Java detectează erori pe care alte limbi le găsesc doar în timpul execuției. În plus, programatorii care au petrecut multe ore căutând o eroare care a provocat coruperea memoriei din cauza unui pointer invalid vor fi foarte bucuroși că astfel de probleme nu pot apărea în limbajul Java, în principiu.

Dacă ați programat anterior într-un limbaj Visual Basic sau COBOL care nu utilizează în mod explicit pointeri, este posibil să nu înțelegeți de ce este atât de important. Programatorii C sunt mai puțin norocoși. Au nevoie de pointeri pentru a accesa șiruri, matrice, obiecte și chiar fișiere. La programarea în limbajul Visual Basic, nimic din toate acestea nu este necesar, iar programatorul nu trebuie să-și facă griji cu privire la alocarea memoriei pentru aceste entități. Pe de altă parte, multe structuri de date într-un limbaj non-pointer sunt foarte greu de implementat. Pentru structuri obișnuite, cum ar fi șiruri de caractere și matrice, pointerii nu sunt necesari. Puterea indicatoarelor intră în joc doar acolo unde nu vă puteți lipsi de ele, cum ar fi atunci când creați liste legate. Programatorul Java scapă pentru totdeauna de pointerii invalidi, alocările greșite și scurgerile de memorie.

Sigur

Limbajul Java este destinat utilizării într-un mediu în rețea sau distribuit. Din acest motiv, s-a acordat o mare atenție siguranței. Limbajul Java vă permite să creați sisteme care sunt protejate de viruși și falsificări.

În prima ediție, am scris: „Niciodată să nu spui niciodată”, și am avut dreptate. Un grup de experți în securitate de la Universitatea Princeton a descoperit primele erori de securitate în Java 1.0 la scurt timp după ce prima versiune a JDK a fost pusă în vânzare. Mai mult, atât ei, cât și alți specialiști au continuat și ulterior au găsit tot mai multe bug-uri în mecanismele de securitate ale tuturor versiunilor ulterioare ale limbajului Java.

Pe partea pozitivă a acestei situații, echipa de dezvoltare a limbajului Java și-a declarat toleranța zero pentru orice erori de securitate și a început imediat să remedieze orice probleme găsite în mecanismul de securitate a applet-ului. În special, publicând specificațiile interne ale interpretului Java, Sun a făcut mult mai ușor găsirea erorilor de securitate ascunse și a adus experți independenți pentru a le găsi.

Acest lucru a crescut probabilitatea ca orice erori în sistemul de securitate să fie descoperite în curând. În orice caz, este extrem de dificil să păcăliți sistemul de securitate în limbajul Java. Bug-urile găsite până acum au fost aproape subtile și (relativ) puține la număr.

Pagina Web de securitate a Sun se află la următoarea adresă URL: http://java.sun.com/sfaq/.

Iată câteva dintre situațiile pe care sistemul de securitate Java le previne.

1) Depășirea stivă a unui program executabil, care a fost cauzată de un „vierme” notoriu răspândit pe Internet.

2) Deteriorarea zonelor de memorie din afara spațiului alocat procesului.

3) Citirea și scrierea fișierelor locale utilizând un classloader securizat, cum ar fi un browser web, care nu permite accesul la astfel de fișiere.

Toate aceste măsuri de securitate sunt adecvate și de obicei funcționează impecabil, dar discreția nu strica niciodată. Deși bug-urile găsite până acum au fost departe de a fi banale, iar detaliile căutării lor sunt adesea ținute secrete, trebuie să recunoaștem că probabil că este încă imposibil să se dovedească siguranța limbajului Java.

De-a lungul timpului, limbii au fost adăugate noi protecții. Începând cu versiunea 1.1, în limbajul Java a apărut conceptul de clase semnate digital. Când utilizați o clasă semnată digital, puteți fi sigur de autor. Dacă aveți încredere în ea, puteți acorda acestei clase toate privilegiile disponibile pe mașina dvs.

Mecanismul alternativ de livrare a codului Microsoft se bazează pe tehnologia ActiveX și folosește doar semnături digitale pentru securitate. Evident, acest lucru nu este suficient - orice utilizator de software Microsoft poate atesta că programele de la producători cunoscuți se blochează adesea, creând astfel riscul coruperii datelor. Securitatea Java este mult mai fiabilă decât tehnologia ActiveX, deoarece controlează aplicația din momentul în care pornește și previne daune.

Arhitectură independentă

Compilatorul generează un fișier obiect, al cărui format nu depinde de arhitectura computerului - programul compilat poate rula pe orice procesor sub controlul sistemului de execuție a programului Java. Pentru a face acest lucru, compilatorul Java generează comenzi de cod octet care nu depind de arhitectura specifică a computerului. Codul de octet este conceput astfel încât să poată fi interpretat cu ușurință pe orice mașină sau tradus din mers în cod dependent de mașină.

Aceasta nu este o idee nouă. Cu mai bine de 20 de ani în urmă, atât sistemul de implementare Pascal al lui Niclaus Wirth, cât și UCSD Pascal au folosit aceeași tehnologie. Utilizarea codurilor de octet oferă un mare beneficiu în timpul execuției programului (deși compilarea sincronă o compensează în multe cazuri). Dezvoltatorii limbajului Java au făcut o treabă excelentă de a dezvolta un set de instrucțiuni bytecode care funcționează bine pe majoritatea computerelor moderne, traducându-se cu ușurință în instrucțiuni de mașină reale.

Independent de mașină

Spre deosebire de limbajele C și C++, specificația Java nu are aspecte specifice implementării. Atât dimensiunea tipurilor de date de bază, cât și operațiile aritmetice asupra acestora sunt bine definite.

De exemplu, int în Java înseamnă întotdeauna un număr întreg de 32 de biți. În C și C ++, tipul int poate însemna fie un întreg pe 16 biți, fie pe 32 de biți, precum și un număr întreg de dimensiune arbitrară, așa cum este ales de dezvoltatorul unui anumit compilator. Singura limitare este că dimensiunea tipului int nu poate fi mai mică decât dimensiunea int scurt și dimensiunea int lung. Dimensiunea fixă ​​a tipurilor numerice evită multe dintre problemele asociate cu rularea programelor pe diferite computere. Datele binare sunt stocate și transmise într-un format fix, ceea ce evită, de asemenea, neînțelegerile asociate cu diferite ordine de octeți pe diferite platforme (conflict ("big endian / little endian"). Șirurile sunt salvate în format standard Unicode.

Bibliotecile, care fac parte din sistem, definesc o interfață independentă de mașină. De exemplu, limbajul oferă o clasă abstractă Window și implementările sale pentru sistemele de operare Unix, Windows și Macintosh.

Oricine a încercat vreodată să scrie un program care funcționează la fel de bine pe Windows, Macintosh și zece versiuni de Unix știe că aceasta este o sarcină foarte dificilă. Versiunea Java a făcut o încercare eroică de a rezolva această problemă, oferind un set de instrumente simplu care adaptează elementele comune ale interfeței cu utilizatorul la o mare varietate de platforme software. Din păcate, biblioteca, care a luat multă muncă, nu ne-a permis să obținem rezultate acceptabile pe diferite platforme. (În același timp, au apărut diferite erori în programele de grafică de pe platforme diferite.)

Totuși, acesta a fost doar începutul. În multe aplicații, independența mașinii este mult mai importantă decât sofisticarea unei interfețe grafice cu utilizatorul. Acestea sunt aplicațiile care au beneficiat de Java 1.0. Cu toate acestea, setul de instrumente pentru interfața grafică cu utilizatorul a fost acum complet reproiectat și nu mai depinde de interfața cu utilizatorul de pe computerul gazdă. Noua versiune este mai semnificativă și, în opinia noastră, mai atractivă pentru utilizator decât cele anterioare.

Interpretat

Interpretul Java poate fi trimis la orice mașină și poate executa bytecode direct pe ea. Deoarece editarea linkurilor este un proces mai ușor, dezvoltarea software-ului poate deveni mult mai rapidă și mai eficientă.

Acesta poate fi un avantaj la dezvoltarea aplicațiilor, dar citatul este o exagerare clară. În orice caz, compilatorul Java din Java Software Development Kit (JSDK) este destul de lent. (Unele compilatoare de al treilea fel, cum ar fi cele de la IBM, sunt mult mai rapide.) Viteza de recompilare este doar un factor care caracterizează eficiența unui mediu de programare. Când compari viteza Java cu Visual Basic, s-ar putea să fii dezamăgit.

Performanta ridicata

În timp ce codurile de octet interpretate sunt în general mai mult decât adecvate în performanță, există situații în care este necesară o performanță și mai mare. Codurile byte pot fi traduse din mers (în timpul rulării) în coduri de mașină pentru un anumit procesor pe care rulează aplicația.

Dacă se folosește un interpret pentru a executa bytecodes, expresia „performanță înaltă” nu trebuie folosită. Cu toate acestea, pe multe platforme este posibil un alt tip de compilare, furnizat de compilatoare just-in-time-JIT. Ei traduc bytecode în cod dependent de mașină, stochează rezultatul în memorie și apoi îl apelează după cum este necesar. Deoarece interpretarea este efectuată o singură dată, această abordare crește viteza de lucru de multe ori.

În ciuda faptului că compilatoarele sincrone sunt încă mai lente decât compilatoarele dependente de mașină, ele sunt în orice caz mult mai rapide decât interpreții, oferind o accelerare de 10 sau chiar 20 de ori pentru unele programe. Această tehnologie se îmbunătățește constant și în cele din urmă poate atinge viteze pe care compilatoarele tradiționale nu le pot depăși niciodată. De exemplu, un compilator sincron poate determina ce bucată de cod este executată mai des și o poate optimiza pentru viteza de execuție.

MULTI-FILET

Oferă o mai bună interactivitate și execuție a programului.

Dacă ați încercat vreodată să faceți calcule multithreaded în orice alt limbaj de programare, veți fi plăcut surprins de cât de ușor este să faceți acest lucru în Java. Firele Java pot profita de sistemele de multiprocesare dacă sistemul de operare permite acest lucru. Din păcate, implementările fluxurilor pe majoritatea platformelor sunt foarte diferite unele de altele, iar dezvoltatorii limbajului Java nu fac nicio încercare de a obține uniformitate. Numai codul pentru apelarea thread-urilor rămâne același pentru toate mașinile; limbajul Java schimbă implementarea multithreading-ului către sistemul de operare de bază sau biblioteca de threading. (Firele sunt acoperite în Volumul II.) În ciuda acestui fapt, ușurința multithreading-ului face ca Java să fie atât de atractiv pentru dezvoltarea software-ului pentru server.

Dinamic

În multe privințe, Java este mai dinamic decât C sau C++. A fost conceput pentru a se adapta cu ușurință la un mediu în continuă schimbare. Noi metode și obiecte pot fi adăugate în mod liber bibliotecilor fără a provoca niciun rău. Limbajul Java facilitează obținerea de informații despre progresul unui program.

Acest lucru este foarte important atunci când trebuie să adăugați cod la un program care rulează deja. Un prim exemplu în acest sens este codul care este descărcat de pe Internet pentru a fi executat de către un browser. În Java 1.0, nu a fost ușor să obțineți informații despre progresul unui program în curs de execuție, dar versiunea actuală a limbajului Java expune programatorului atât structura, cât și comportamentul obiectelor programului executat.
Acest lucru este foarte valoros pentru sistemele care trebuie să analizeze obiecte în timpul execuției programului. Astfel de sisteme includ constructori GUI, depanatoare inteligente, plug-in-uri și baze de date cu obiecte.

Java și Internetul

Ideea este simplă - utilizatorii descarcă bytecodes Java de pe Internet și le execută pe mașinile lor. Programele Java care rulează pe browsere web se numesc applet-uri. Pentru a utiliza applet-ul, aveți nevoie de un browser Web activat pentru Java, care poate interpreta bytecodes. Sursa limbajului Java este licențiată de Sun, care insistă că atât limbajul în sine, cât și structura bibliotecilor sale de bază rămân neschimbate. Din păcate, acesta nu este cazul în realitate. Diferitele versiuni ale browserelor Netscape și Internet Explorer acceptă versiuni diferite ale limbajului Java, dintre care unele sunt semnificativ depășite. Această situație nefericită creează din ce în ce mai multe obstacole în dezvoltarea applet-urilor care profită de cea mai recentă versiune a limbajului Java. Pentru a rezolva această problemă, Sun a dezvoltat Java Plug-in, care oferă cel mai modern mediu pentru rularea programelor Java bazate pe browserele Netscape și Internet Explorer.

Încărcarea unui applet este ca și încorporarea unei imagini într-o pagină Web. Appletul devine parte a paginii, iar textul se înfășoară în jurul spațiului pe care îl ocupă. Cu toate acestea, diferența este că imaginea este acum vie. Răspunde la comenzile utilizatorului, își schimbă aspectul și oferă transfer de date între computerul pe care este vizualizat appletul și computerul care rulează appletul.

Încărcarea unui applet este ca și cum inserați o imagine într-o pagină Web. Appletul devine parte a paginii, iar textul se înfășoară în jurul spațiului pe care îl ocupă. Ideea este că imaginea este „în direct”. Răspunde la intrarea utilizatorului, își schimbă aspectul și transferă date între computerul care rulează appletul și computerul care rulează appletul.

În fig. 1.1 prezintă un exemplu bun de pagină Web dinamică care efectuează calcule complexe și utilizează un applet pentru a afișa molecule. Pentru a înțelege mai bine structura moleculei, o puteți roti sau mări imaginea folosind mouse-ul. Astfel de manipulări nu pot fi făcute pe pagini web statice, dar aplicațiile fac posibil acest lucru. (Acest applet poate fi găsit la http://jmol.sourceforge.net.)

Orez. 1.1. applet Jmol

Appleturile pot fi folosite pentru a adăuga butoane și câmpuri de text noi la o pagină Web. Cu toate acestea, aceste aplicații se încarcă lent prin linia telefonică.

Același lucru se poate face folosind HTML dinamic, formulare HTML (Hypertext Markup Language) sau un limbaj de scripting, cum ar fi JavaScript. Desigur, primele applet-uri au fost destinate animației: globuri care se rotesc, personaje de desene animate dansante, texte fanteziste și așa mai departe. Cu toate acestea, majoritatea celor de mai sus pot face GIF-uri animate, iar HTML dinamic, combinat cu scripting, face mult mai mult decât applet-uri.

Ca urmare a incompatibilităților de browser și a încărcării inconsecvente prin conexiuni lente de rețea, aplicațiile care vizează paginile Web nu au reprezentat un progres uriaș. În rețelele locale (intranet) situația este complet diferită. De obicei, nu au probleme cu lățimea de bandă, așa că timpul de încărcare a applet-urilor este neimportant. În rețeaua locală, puteți selecta browserul dorit sau puteți utiliza programul Java Plug-In. Angajații nu pot muta un program livrat printr-o rețea într-o locație greșită sau îl pot instala incorect, iar un administrator de sistem nu trebuie să ocolească toate mașinile client și să actualizeze programele pe acestea. Un număr mare de programe concepute pentru contabilitatea stocurilor, programarea vacanțelor, rambursarea călătoriilor și altele asemenea au fost dezvoltate de multe corporații sub formă de applet-uri bazate pe browser.

Pe măsură ce am scris cartea, pendulul a trecut din nou de la programele client la programarea pe server. Mai exact, serverele de aplicații pot folosi capacitățile de monitorizare ale mașinii virtuale Java pentru a echilibra automat încărcarea, a pune în comun conexiunile la baze de date, a sincroniza obiecte, a securiza închiderile și reîncărcările și alte procese necesare pentru aplicațiile de server scalabile, care sunt aproape imposibil de implementat corect. Astfel, programatorii care creau aplicații au putut să cumpere aceste mecanisme complexe în loc să le dezvolte ei înșiși. Acest lucru a crescut productivitatea programatorilor - aceștia s-au concentrat pe logica programelor lor, fără a fi distrași de detaliile asociate cu funcționarea serverelor.

Zona developerWorks Java conține sute de articole, tutoriale, sfaturi și conținut din comunitatea Java pentru a vă ajuta să profitați la maximum de platforma Java și de tehnologiile asociate atunci când dezvoltați aplicații. Cu toate acestea, dezvoltatorilor aspiranți care abia au început să folosească Java le este dificil să navigheze în volumul imens de resurse disponibile pe Internet. Prin urmare, am creat această pagină, care oferă o imagine de ansamblu asupra tehnologiilor Java subiacente în contextul general al capabilităților acestui limbaj. Găsiți link-uri către resurse pentru învățarea ulterioară a Java, cum ar fi articole developerWorks pentru începători și alte resurse educaționale și link-uri către descărcări pentru produsele IBM.

Ești un dezvoltator Java aspirant? Această pagină oferă o privire de ansamblu asupra principalelor tehnologii Java™ și locul lor în dezvoltarea software-ului modern. Cu link-uri către articole introductive developerWorks despre acest subiect și subiecte conexe, alte materiale educaționale și descărcări și produse IBM, această pagină este un punct de plecare excelent pentru a învăța Java.

Ce sunt „tehnologiile Java”?

Java este atât un limbaj de programare, cât și o platformă.

În primul rând, Java este un nivel înalt orientat pe obiecte limbaj de programare... La compilare, care este executat o dată în timpul construirii aplicației, codul Java este convertit în cod de limbaj intermediar ( bytecode). La rândul său, bytecode este analizat și executat ( interpretat) mașina virtuală Java (JVM), care acționează ca un traducător între limbajul Java și hardware-ul sistemului de operare. Toate implementările Java trebuie să emuleze JVM-ul, astfel încât aplicațiile pe care le scrieți să poată rula pe orice sistem care include mașina virtuală Java.

În al doilea rând, Java este platforma software, ale căror versiuni sunt furnizate pentru diverse sisteme hardware. Există trei versiuni de Java (vezi mai jos secțiunea Edițiile platformei Java). Platforma include JVM și Java Application Programming Interface (API), care este un set extins de componente software gata (clase) care facilitează dezvoltarea și implementarea applet-urilor și aplicațiilor. API-ul Java acoperă multe aspecte ale dezvoltării Java, inclusiv manipularea obiectelor de bază, programarea în rețea, securitatea, generarea XML și serviciile Web. API-ul este organizat ca un set de biblioteci numite în pachete care conţin clase şi interfeţe pentru rezolvarea problemelor conexe.

Pe lângă API, fiecare implementare completă a platformei Java trebuie să includă următoarele:

  • Instrumente pentru dezvoltatori pentru compilarea, rularea, monitorizarea, depanarea și documentarea aplicațiilor.
  • Mecanisme standard pentru implementarea aplicațiilor într-un mediu de utilizator.
  • Truse de instrumente care vă permit să creați interfețe grafice complexe pentru utilizator.
  • Biblioteci de integrare pentru accesul programatic la bazele de date și manipularea obiectelor de la distanță.

JVM este, de asemenea, un cadru dovedit pentru rularea aplicațiilor scrise în alte limbi decât Java. În special, Groovy, Scala și implementările specializate ale Ruby și Python oferă dezvoltatorilor capacitatea de a executa limbaje dinamice și funcționale pe JVM (pentru mai multe informații, consultați Care este relația Java cu limbajele dinamice și programarea funcțională?) .

Limbajul Java a fost dezvoltat de Sun Microsystems. În prezent, dezvoltarea tehnologiilor Java, inclusiv lucrările la specificații, implementări de referință și teste de compatibilitate, se desfășoară sub controlul organizației non-profit deschise JCP (Java Community Process), care reunește dezvoltatorii Java și licențiații. În 2007, Sun a lansat o versiune gratuită de Java, care include componentele de bază ale platformei, sub licența GNU GPL v2 (GPLv2). Puteți citi mai multe despre această versiune în secțiunea Java și Dezvoltare software liberă.

De ce ar trebui să înveți Java?

Principalul avantaj al limbajului Java este portabilitatea aplicațiilor Java, adică. Abilitatea de a rula pe orice platformă hardware și sistem de operare, deoarece toate JVM-urile, indiferent de platforma pe care rulează, sunt capabile să execute același bytecode.

Limbajul și platforma Java sunt extrem de scalabile. Puteți crea cu ușurință aplicații pentru dispozitive cu resurse limitate adaptând software-ul scris inițial pentru desktop. Cu toate acestea, Java este, de asemenea, ideal pentru dezvoltarea aplicațiilor Web pe partea de server care permit unui utilizator să acceseze resursele de calcul de pe Web. Capacitatea de a executa în siguranță codul încărcat pe web a fost construită inițial în Java, astfel încât Java oferă un nivel ridicat de securitate atunci când lucrați pe Internet. Aplicațiile web rulează în medii de rulare numite Containere web care oferă multe servicii convenabile, inclusiv trimiterea solicitărilor, securitatea și concurența, managementul ciclului de viață și accesul la API-uri, cum ar fi denumirea, gestionarea tranzacțiilor și e-mailul. Un număr de sunt scrise în Java servere de aplicații care acționează ca containere Web pentru alte componente Java, XML și servicii Web care interacționează cu bazele de date și redă dinamic conținutul paginii Web. Aceste servere oferă, de asemenea, un mediu pentru implementarea aplicațiilor și instrumentelor de întreprindere pentru gestionarea tranzacțiilor, clustering, securitate, conectivitate și nivelurile necesare de disponibilitate, performanță și scalabilitate.

Prin sprijinirea utilizării standardelor deschise în aplicațiile de întreprindere, Java deschide oportunități excelente pentru utilizarea serviciilor Web bazate pe XML pentru a ajuta partenerii de afaceri să facă schimb de resurse și aplicații de informații. Java se află în centrul multor produse și servicii de consultanță tehnică IBM (Produse și tehnologii IBM pentru dezvoltatori Java) și joacă un rol cheie în câteva dintre activitățile de bază ale companiei.

  • Explorați abordarea IBM și aflați cum SOA vă poate ajuta să creați aplicații eterogene cu funcționalități din mai multe surse, atât în ​​interiorul, cât și în afara întreprinderii, susținând astfel procesele de afaceri orizontale. IBM oferă o gamă largă de utilizatori de afaceri și profesioniști IT pentru a vă ajuta să începeți cu această tehnologie.
  • este o abordare bazată pe componente oferită de IBM care oferă o gamă completă de oportunități pentru schimbare strategică. Soluțiile oferite se bazează pe software flexibil, extensibil, deschis, bazat pe standarde (inclusiv Java) și infrastructură hardware.

Edițiile platformei Java
Există trei ediții ale platformei Java care permit dezvoltatorilor de aplicații, furnizorilor de servicii și producătorilor de hardware să creeze soluții care să răspundă nevoilor anumitor grupuri de utilizatori.

  • Java SE (Java Platform, Standard Edition)... Folosind Java SE, puteți construi și implementa aplicații Java pentru desktop și servere și puteți dezvolta software și programe încorporate pentru sisteme în timp real. Ediția Java SE include clasele necesare pentru a crea servicii Web și componentele de bază Java EE (Java Platform, Enterprise Edition). Versiunea actuală a platformei Java SE este Java SE 6, cunoscută și sub numele de „Mustang”. Cu toate acestea, mulți dezvoltatori încă folosesc Java SE 5 (Java 5.0, sau „Tiger”).
    • Pentru o prezentare excelentă a caracteristicilor Java SE 5, consultați articolele din coloană. Majoritatea aspectelor de programare pentru platforma Java SE 5, pentru care au fost construite multe aplicații existente, sunt încă relevante pentru Java SE 6.
    • Acest articol descrie noile caracteristici din Java SE 6 pentru monitorizarea și evaluarea performanței aplicației.
    • Acest articol oferă o introducere într-un limbaj de scripting care rulează pe platforma Java SE 6 și servește la simplificarea programarii interfețelor de utilizator complexe.
    • Această serie din două părți intitulată oferă o introducere în API-ul furnizat de Java SE 6, care permite aplicațiilor Java să execute cod de scripting dinamic și invers. ...
  • Java EE (Java Platform, Enterprise Edition)... Această versiune de întreprindere a platformei îi ajută pe dezvoltatori să construiască și să implementeze aplicații Java portabile, fiabile, scalabile și securizate. Bazându-se pe capacitățile Java SE, Java EE oferă servicii Web, modele de componente, API-uri de gestionare la distanță și pentru implementarea software-ului de întreprindere în SOA și Web 2.0.
    • Citiți articole și pentru o prezentare generală introductivă a capabilităților celei mai recente versiuni a platformei Java EE.
    • Consultați seria - un cadru popular pentru construirea de aplicații Java EE ușoare și fiabile.
    • Pentru mai multe informații despre Java EE, consultați articolele din coloană.
    • Articolele din seria Noțiuni de bază: Migrarea la platforma Java au fost scrise special pentru dezvoltatorii .NET, client/server Windows și ASP pentru a-i ajuta să migreze la Java.
  • Java ME (Java Platform, Micro Edition)... Java ME oferă un mediu de rulare pentru aplicații create pentru o mare varietate de sisteme mobile și încorporate, cum ar fi telefoane mobile, PDA-uri, set-top box-uri și imprimante. Această ediție de platformă oferă interfețe flexibile pentru utilizator, un model de securitate robust, o gamă completă de protocoale de rețea încorporate și suport puternic pentru aplicații de rețea și offline încărcate dinamic. Aplicațiile bazate pe specificațiile Java ME pot rula pe o varietate de dispozitive și pot încă să-și folosească capacitățile sistemului.

Ce tehnologii sunt componentele principale ale platformei Java?

Zona developerWorks Java conține Java inclus. Mai jos sunt enumerate câteva dintre componente, posibile pachete de suplimente și extensii incluse cu fiecare ediție de platformă. Fiecare tehnologie are o scurtă descriere și un link către resurse care descriu locul ei în lumea Java. Rețineți că multe dintre componente sunt incluse în toate cele trei ediții ale platformei Java.

Tehnologii incluse în Java SE:

  • Clasuri Java Foundation (Swing)(JFC) este o colecție de biblioteci de clase Java utilizate pentru a crea interfețe grafice cu utilizatorul și alte funcții grafice în aplicațiile client Java. Management .
  • JavaAjutor este un sistem de ajutor extensibil independent de platformă, care permite dezvoltatorilor și scriitorilor tehnici să încorporeze pagini de ajutor în applet-uri, componente software, aplicații, sisteme de operare și dispozitive și să creeze sisteme de ajutor web. Consultați articolul.
  • Mulțumită Interfață nativă Java(JNI) Aplicațiile Java care rulează în JVM pot interacționa cu programe și biblioteci scrise în alte limbaje de programare.
  • Tehnologie Java Web Start Simplifică implementarea aplicațiilor Java, permițând utilizatorilor să descarce și să ruleze software bogat, cum ar fi foi de calcul, cu un clic pe un buton al mouse-ului, fără instalare (vezi articolul).
  • Conectivitate la baza de date Java(JDBC) este un API care oferă mijloacele de a accesa majoritatea surselor de date relaționale din aplicațiile Java. Se poate conecta la multe baze de date SQL, precum și la alte surse de date tabulare, cum ar fi foi de calcul și fișiere plate.
  • Imagini avansate Java(JAI) este un API orientat pe obiecte care oferă un model de programare simplu, la nivel înalt, pentru a simplifica manipularea imaginilor.
  • Serviciul de autentificare și autorizare Java(JAAS) este o tehnologie care oferă servicii cu un mijloc de a autentifica utilizatorii și de a le verifica drepturile de acces. Include o implementare Java a cadrului standard PAM (Pluggable Authentication Module) și acceptă autorizarea la nivel de utilizator.
  • Extensie Java Criptografie(JCE) este un set de pachete care oferă infrastructură și implementări pentru criptare, generare și schimb de chei și algoritmi de cod de autentificare a mesajelor (MAC). Această tehnologie include, de asemenea, suport pentru cifruri simetrice, asimetrice, bloc și flux, precum și obiecte sigure pentru flux și sigilate. Mai multe detalii pot fi găsite în manual.
  • Obiecte de date Java(JDO) este un model standard de persistență abstractă pentru obiectele Java bazate pe interfețe. Permite dezvoltatorilor să stocheze direct instanțe ale claselor Java de domeniu în stocare persistentă (cum ar fi o bază de date). În unele cazuri, acest model poate înlocui scrierea directă într-un fișier, serializarea, JDBC, precum și utilizarea componentelor EJB de pe partea serverului, atât gestionate de containere (Container Managed Persistence - CMP), cât și starea de stocare independentă (Bean Managed Persistence - BMP).
  • Punga de plastic Extensii de management Java(JMX) oferă instrumente pentru construirea de aplicații distribuite, modulare, dinamice și accesibile pe Web pentru gestionarea și monitorizarea dispozitivelor, software-ului și rețelelor bazate pe furnizarea de servicii (vezi articolul).
  • Java Media Framework(JMF) vă permite să adăugați informații audio, video și alte informații media în aplicațiile și applet-urile Java (consultați manualul).
  • Interfață Java de denumire și director(JNDI) este o interfață unificată pentru accesarea diferitelor servicii de nume și director într-o rețea corporativă. Permite aplicațiilor să se conecteze eficient la o varietate de servicii de denumire și director într-un mediu de întreprindere eterogen.
  • Extensii Java Secure Socket(JSSE) este o colecție de pachete pentru schimbul securizat de informații pe Internet. Ei implementează versiunea Java a protocoalelor Secure Sockets Layer (SSL) și Transport Layer Security (TLS) și oferă mijloacele de a cripta datele, de a verifica integritatea mesajelor și de a se autentifica pe server și client (cel din urmă este opțional).
  • Java Speech API(JSAPI) include specificațiile JSGF (Java Speech Grammar Format) și JSML (Java Speech Markup Language). Acest pachet oferă capabilități pentru utilizarea tehnologiilor de vorbire în interfața cu utilizatorul. JSAPI este un API multiplatformă pentru sprijinirea recunoașterii comenzilor vocale, a sistemelor de introducere a vorbirii și a sintezei vorbirii. Consultați următoarea secțiune a articolului pentru mai multe detalii.
  • Java 3D este un API care oferă capabilități multiplatforme și scalabile pentru lucrul cu grafica 3D în aplicații Java. API-ul este organizat ca un set de interfețe orientate pe obiecte care se pliază într-un singur model de programare simplu, de nivel înalt.
  • Mecanism Facilitatea de metadate Permite dezvoltatorilor să definească atribute pentru clase, interfețe, câmpuri și metode, astfel încât să poată fi supuși unei manipulări speciale de către instrumente de dezvoltare, instrumente de implementare și biblioteci terțe în timpul execuției (vezi articolul).
  • API-ul Java Content Repository este un API pentru accesarea depozitelor de conținut în Java SE, indiferent de implementarea acestora. Astfel de depozite sunt sisteme de management al informațiilor la nivel înalt și sunt versiuni extinse ale depozitelor de date clasice.
  • Enumerări(enumerarea) este un tip de date care vă permite să descrieți diferite elemente de date ca un set tipizat de constante.
  • generice(tipuri generice) vă permit să creați clase cu parametri (tipuri abstracte) care sunt specificați în etapa de instanțiere. Consultați articolul pentru detalii și, de asemenea, consultați articolul despre modul în care tipurile generice facilitează lucrul cu colecțiile în Java SE 6.0.
  • Utilități Concurență este un set de clase care oferă funcționalitatea de nivel mediu cerută de obicei de aplicațiile de procesare paralelă.
  • API Java pentru procesarea XML(JAXP) este un API pe care aplicațiile Java îl pot folosi pentru a analiza și transforma documente XML, indiferent de procesorul XML utilizat. Acest lucru permite aplicațiilor să comute cu ușurință între diferite procesoare fără a schimba codul aplicației. La rândul său, tehnologia JAXB ( API Java pentru legarea XML) oferă capabilități pentru automatizarea maparii documentelor XML și a obiectelor Java.
  • API SOAP cu atașamente pentru Java(SAAJ) oferă dezvoltatorilor funcții pentru generarea și procesarea mesajelor în conformitate cu specificația SOAP 1.1, specificând SOAP cu atașamente. Vezi articolul pentru mai multe detalii).

Tehnologii J2EE:

  • Enterprise JavaBeans(EJB) este un model de componentă care simplifică dezvoltarea middleware prin furnizarea de servicii precum gestionarea tranzacțiilor, securitatea și conectivitate la baze de date.
  • Specificația portlet-ului definește un set de API-uri pentru construirea de portaluri în Java, acoperind aspecte precum agregarea și prezentarea informațiilor, personalizarea și securitatea (vezi articolul).
  • JavaMail este un API care oferă un set de clase abstracte care modelează sistemul de e-mail.
  • Serviciul de mesaje Java(JMS) este un API care acceptă crearea de aplicații portabile de mesagerie Java. Acesta definește un set comun de concepte de bază și strategii de programare pentru toate sistemele de mesagerie compatibile cu JMS.
  • JavaServer Faces(JSF) oferă un model de programare care vă ajută să construiți aplicații Web prin asamblarea paginilor din componente reutilizabile ale interfeței cu utilizatorul, legând acele componente la sursele de date și evenimentele generate de client la handlere de server. Pentru mai multe informații, consultați tutorialul în două părți și seria de articole din seria de coloane.
  • Pagini JavaServer(JSP) oferă dezvoltatorilor web mijloacele de a crea rapid și de a menține cu ușurință pagini web dinamice, multiplatforme, care separă interfața cu utilizatorul și generarea de conținut, astfel încât designerii să poată schimba marcajul fără a atinge conținutul generat dinamic (vezi tutorialul.
  • Biblioteca standard de etichete pentru paginile JavaServer(JSTL) este o colecție de etichete specializate care oferă un format standard pentru efectuarea acțiunilor cerute de multe aplicații Web. Consultați Actualizează-ți paginile JSP cu JSTL și seria din patru părți intitulată.
  • Servlet-uri Java extinde funcționalitatea serverelor Web prin furnizarea unei abordări multiplatformă, bazată pe componente, pentru construirea de aplicații Web, fără limitările de performanță ale CGI.
  • Arhitectura conectorului J2EE(JCA) oferă o arhitectură standard pentru conectarea aplicațiilor J2EE la sisteme de informație ale întreprinderii eterogene (EIS). Această arhitectură definește un set de mecanisme scalabile și securizate bazate pe tranzacții prin care furnizorii EIS pot furniza adaptoare de resurse standard pentru includerea într-un server de aplicații. Pentru mai multe informații, consultați articolele și manualul.
  • Specificația de management J2EE(JMX) definește un model de management al informațiilor pentru platforma J2EE. Acest model a fost special conceput pentru a interopera cu multe sisteme și protocoale de control. Conține instrumente standard pentru maparea la Common Information Model (CIM), la SNMP Management Information Base (MIB) și la modelul obiect Java folosind serverul rezident EJB J2EE Management EJB Component (MEJB).
  • Java Transaction API(JTA) este o implementare de nivel înalt și API independentă de protocol, care oferă programelor și serverelor de aplicații mijloacele de acces la tranzacții. Serviciul de tranzacții Java(JTS) definește o implementare a unui manager de tranzacții care acceptă JTA și implementează, la un nivel de bază, maparea la Serviciul de tranzacții cu obiecte (OTS 1.1) al OMG. Propagarea tranzacțiilor în JTS este implementată folosind protocolul Inter-ORB (IIOP). Vezi articolul pentru mai multe detalii.

Tehnologii care fac parte din J2ME:

  • Profilul dispozitivului de informații mobile(MIDP) este una dintre cele două configurații care alcătuiesc mediul de rulare Java pentru dispozitivele mobile cu resurse limitate. MIDP oferă funcționalități de bază pentru aplicații, inclusiv instrumente pentru crearea de interfețe cu utilizatorul, conectarea la resursele de rețea, stocarea locală a datelor și managementul ciclului de viață.
  • Configurarea dispozitivului conectat(CDC) este o infrastructură standardizată pentru construirea și implementarea aplicațiilor care pot fi accesate de pe multe dispozitive în rețea și încorporate.
  • Mobile 3D Graphics API pentru J2ME(M3G) este un API 3D interactiv ușor, care este un supliment pentru J2ME. Puteți citi mai multe despre el în seria în două părți.

Tehnologii Java și dezvoltare de aplicații web

Java a fost limbajul principal pentru dezvoltarea aplicațiilor web de mulți ani. În ultimii ani, au apărut multe cadre și biblioteci pentru a facilita crearea de aplicații Web Java, inclusiv aplicații interactive Web 2.0 bogate.

Consultați următoarele resurse pentru Java Web Development.

  • Această coloană prezintă Grails, un cadru modern pentru construirea de aplicații Web scrise în Groovy. Grails vă permite să combinați fără probleme codul Java scris anterior cu capacitatea de a utiliza un limbaj de scripting flexibil și dinamic. Pentru mai multe informații despre Groovy, consultați mai jos Care este relația Java cu limbajele dinamice și programarea funcțională?.
  • Ajax este o metodologie de programare care utilizează limbaje de scriptare la nivelul clientului pentru a comunica cu un server Web, astfel încât paginile să poată fi reîmprospătate rapid fără a fi nevoie să le reîncărcați complet. În această serie de articole, veți afla cum vă poate ajuta Ajax ca dezvoltator Java. Consultați developerWorks pentru mai multe informații.
  • JavaServer Faces (JSF) oferă un model de programare care vă ajută să construiți aplicații Web prin asamblarea paginilor din componente reutilizabile ale interfeței utilizator, asociind acele componente cu surse de date și evenimente generate de client cu handlere de server. Pentru mai multe informații, consultați tutorialul în două părți și seria de articole din seria de coloane.
  • Platforma Eclipse Web Tools (WTP) extinde popularul mediu de dezvoltare Eclipse prin adăugarea de instrumente pentru construirea de aplicații Web bazate pe tehnologii Java EE (vezi tutorialul).
  • Consultați developerWorks pentru multe alte materiale excelente pe aceste subiecte.

Tehnologii Java, SOA și servicii web

Arhitectura orientată pe servicii (SOA) este un model de componentă care leagă modulele funcționale ale unei aplicații (cunoscute ca Servicii de unde provine termenul Servicii web) prin interfețe și contracte strict descrise. Definițiile interfeței sunt independente de hardware-ul, sistemul de operare și limbajul de programare în care este implementat serviciul, menținând astfel o comunicare unificată între serviciile care sunt componente ale diferitelor sisteme. SOA este un exemplu de model de programare slab cuplat care oferă o alternativă la modelele clasice orientate pe obiecte strâns cuplate.

Create pe acest principiu, serviciile Web vă permit să descrieți regulile și procesele de afaceri în XML, astfel încât interacțiunea aplicațiilor să poată fi realizată indiferent de platformele și limbajele de programare utilizate. Tehnologiile XML promovează portabilitatea datelor și simplifică crearea mesajelor, în timp ce tehnologiile Java vă permit să scrieți cod portabil. XML și Java funcționează bine împreună, făcându-le combinația perfectă de tehnologii pentru construirea și implementarea serviciilor Web.

Pentru mai multe informații, citiți următoarele materiale:

  • Paginile și paginile DeveloperWorks vă pot ajuta să navigați în aceste tehnologii provocatoare.
  • În această serie, veți afla despre infrastructurile de servicii web Java și noile straturi funcționale construite pe deasupra acelor servicii.
  • Acest articol prezintă un stil elegant de proiectare a serviciilor web numit Representational State Transfer (REST) ​​și explică cum să utilizați Java pentru a construi servicii web RESTful.
  • Înțelegerea tehnologiei JAX-RPC (Java API-based RPC for Working with XML) este esențială pentru crearea de servicii web Java eficiente.
  • JAX-WS este următorul pas evident în evoluția JAX-RPC. O introducere practică a acestui nou API este oferită în tutorial.
  • Această serie este un ghid pentru arhitectura componentelor de serviciu (SCA), o specificație care descrie un model SOA pentru dezvoltarea de aplicații și sisteme.
  • Acest articol oferă o introducere în cadrul Service Data Objects, care simplifică modelul de date Java EE pentru construirea de aplicații SOA.

Ce legătură are Java cu limbajele dinamice și cu programarea funcțională?

Mulți dezvoltatori care încep cu Java au o experiență vastă cu alte limbaje de programare. În același timp, chiar și cei mai venerabili programatori admit că Java nu este limbajul ideal pentru rezolvare dintre toate problemele întâlnite în practică. Din fericire, cu suportul JVM, puteți profita din plin de scripturile dinamice și limbajele funcționale de astăzi atunci când dezvoltați aplicații pentru platforma Java. Flexibilitatea și dinamismul acestor limbaje se dovedesc a fi foarte utile la prototiparea și implementarea anumitor tipuri de aplicații.

Puteți citi mai multe despre posibilitățile de utilizare a limbajelor dinamice și funcționale în platforma Java în materialele, link-uri către care sunt prezentate mai jos.

  • Limbajul de scripting Groovy permite dezvoltatorilor Java să folosească cele mai familiare constructii de limbaj și biblioteci, oferind în același timp un mediu de dezvoltare flexibil și dinamic, care nu necesită compilare, simplifică sintaxa și acceptă scripting în cadrul aplicațiilor Java comune. O prezentare detaliată a capacităţilor acestui limbaj este oferită în articolele din serie.
  • Noul API de scripting din Java SE 6, care este compatibil cu Java SE 5 și conține un set mic de interfețe și clase, oferă o modalitate ușoară de a invoca scripturi scrise în zeci de limbi din codul Java. Cu acesta, puteți încărca și apela scripturi externe în timpul execuției, schimbând dinamic comportamentul aplicației dvs. Puteți citi mai multe despre acest API în seria din două părți intitulată.
  • Sunteți un susținător înfocat al programării funcționale? Apoi ar trebui să acordați atenție rubricii care vorbește despre Scala, un limbaj de programare pentru JVM care combină o abordare funcțională și orientată pe obiecte a dezvoltării.
  • VM-urile au suportat limbaje de programare alternative de mult timp. În articolele din coloană, puteți citi despre implementările JVM ale limbilor precum Rexx, Ruby, JavaScript, Python și altele.

Java și dezvoltare software liberă

Există nenumărate modalități de a construi biblioteci Java, seturi de instrumente, cadre, programe și servere de aplicații care deschid oportunități suplimentare pentru dezvoltatori de a folosi această platformă puternică. O serie de tehnologii gratuite au fost încorporate de-a lungul timpului în platforma Java, în timp ce altele au rămas populare în rândul dezvoltatorilor Java de-a lungul anilor, în unele cazuri acționând ca standarde de facto.

  • Apache Software Foundation (EN) reunește multe proiecte open source, majoritatea fiind dezvoltate cu tehnologia Java. Unii dintre membrii acestei familii de proiecte sunt enumerați mai jos.
    • Apache Struts este un cadru pentru construirea de aplicații Web care urmează arhitectura Model-View-Controller.
    • Apache Shale este un alt cadru modern pentru construirea de aplicații Web care moștenește de la Struts și se bazează pe tehnologia JSP (JavaServer Pages). Pentru o introducere în Shale, consultați articolele din serie.
    • Apache Ant este standardul de facto pentru automatizarea procesului de construire al aplicațiilor Java.
    • Apache Maven Build Tool a fost proiectat având în vedere cerințele proiectelor software moderne, cu interacțiuni dinamice între echipele de dezvoltare și dependență de multe componente susținute independent (vezi ghidul).
    • Apache Tomcat este un container web popular care acceptă servlet-uri și pagini server Java (JSP).
    • Proiectul Apache Geronimo se referă la crearea unui server de aplicații Java EE complet compatibil cu specificațiile, bazat pe tehnologie pur gratuită. Puteți citi mai multe despre Geronimo în acest articol și pe site-ul developerWorks pentru o mulțime de conținut util.
    • Apache Derby este un server de baze de date relaționale implementat complet în Java. O introducere în Derby este oferită în articol.
  • Eclipse (EN) este o platformă de dezvoltare deschisă și independentă și un set de instrumente de bază pentru construirea de software. Este scris în Java și oferă o infrastructură de plug-in pentru a facilita dezvoltarea, integrarea și utilizarea instrumentelor software. IBM este membru fondator al Eclipse.org și participă activ la consiliul de conducere și subcomitetele proiectului. Puteți citi despre unele dintre tehnologiile componente ale platformei Eclipse care vizează crearea de aplicații Java în următoarele materiale:
    • AspectJ este o extensie orientată pe aspecte a limbajului Java care poate fi utilizată pentru a implementa modular funcționalități transversale, cum ar fi înregistrarea în jurnal sau gestionarea excepțiilor.
    • Standard Widget Toolkit (EN) (SWT) este un set de instrumente care vă permite să valorificați puterea sistemului de operare pentru a crea elemente de interfață cu utilizatorul într-un mod eficient și portabil.
    • Mylyn este un sistem puternic de gestionare a locurilor de muncă pentru utilizatorii Eclipse. Pentru îndrumări detaliate, consultați articolele și, cunoscută anterior sub numele de „Acegi Security for Spring”, este o soluție de securitate puternică și flexibilă pentru aplicațiile de întreprindere construite pe baza cadrului Spring. Este tratat în detaliu în patru articole din serie.
  • Sun Microsystems a lansat, de asemenea, următoarele proiecte comunitare pe java.net:
    • Openjdk

Cum să dezvolți abilitățile de programare Java?

Există două moduri principale în care vă puteți dezvolta abilitățile de programare Java: urmați un curs de formare dedicat (cu opțiuni de certificare) sau învățați Java pe cont propriu, exersând codificare. Cursurile de formare nu numai că vă permit să învățați din experiența unor dezvoltatori calificați, ci oferă și posibilitatea de a obține un certificat care poate convinge un potențial angajator că aveți abilitățile necesare pentru a face față provocărilor tehnice cu care ne confruntăm. Procedând astfel, vă puteți aprofunda cunoștințele în diverse domenii ale Java, experimentând pe cont propriu și folosind toate resursele disponibile. Indiferent de calea pe care o alegeți, următoarele resurse vă vor ajuta.

  • Ghiduri și articole
    • DeveloperWorks are o colecție extinsă care este a doua după codificarea dvs. în ceea ce privește utilitatea în învățarea Java.
    • Articolele sunt în serie și sunt excelente pentru a vă îmbunătăți abilitățile de limbaj Java.
    • Utilizarea teoriei designului pentru a crea aplicații în lumea reală este discutată în articolele din serie.
    • Dezvoltatorii Java cu experiență pre-construiesc instrumente în aplicațiile lor pentru a le depana și a le testa. DeveloperWorks are mai multe articole din serie - Jocuri în timp real bazate pe Eclipse pentru învățarea programarii Java. Pentru o introducere în CodeRuler, consultați Cucerirea regatelor medievale cu CodeRuler.
  • Cursuri de pregătire tehnică IBM
    • Bucurați-vă de o mare varietate de cursuri Java online, față în față și multimedia de la IBM Global Services.
  • Certificare
    • Puteți susține mai multe examene pentru a obține certificări care vă demonstrează abilitățile de programare Java. Pentru cursuri de certificare, consultați site-ul web de certificare Java.
    • IBM vă împuternicește abilitățile în tehnologiile legate de Java, cum ar fi construirea de aplicații de întreprindere pentru WebSphere, software Rational, DB2, XML și SOA.
  • Forumuri
    • Moderat de experți cu ani de experiență în tehnologia Java, acesta este cel mai interactiv mod de a învăța limbajul Java.

Produse și tehnologii IBM pentru dezvoltatorii Java

IBM este unul dintre liderii în aplicarea practică a tehnologiilor Java. Următoarele sunt link-uri către unele dintre produsele și tehnologiile IBM disponibile pentru dezvoltatori pentru platforma Java.

  • Produse descărcabile gratuit:
    • (Java Developer Kit) este o colecție de instrumente pentru construirea și testarea applet-urilor și aplicațiilor pentru Java SE și Java ME pe o varietate de sisteme de operare populare, inclusiv Windows, Linux și AIX.
    • (IBM Development Package for Eclipse) este un set de instrumente de dezvoltare neacceptat bazat pe Eclipse, care vă permite să construiți și să rulați aplicații în propriul mediu de dezvoltare standard.
    • : Puteți descărca pachete software gratuite Eclipse de la developerWorks, inclusiv produsele paralele Calisto și Europa.
    • este un depozit virtual de tehnologii Java promițătoare dezvoltate la IBM. Acestea includ API-uri, IDE-uri, kituri de dezvoltare, implementări de referință și utilitare. Mai jos sunt link-uri către unele dintre tehnologiile prezentate în alphaWorks.
    • ... Acest utilitar vă ajută să analizați și să generați scripturi Ant testabile pentru proiecte de construcție dezvoltate cu Eclipse, Rational și WebSphere IDE pentru platformele Java EE și SCA.
    • (IBM Pattern Modeling and Analysis Tool for Java Garbage Collector). Acest utilitar analizează fișierele de urmărire GC detaliate, analizează utilizarea memoriei heap (heap) și recomandă reglarea aplicației pe baza rezultatelor simulării memoriei. (Secure Shell Library pentru Java) este o implementare ușoară a protocolului SSH-2 dezvoltat de Internet Engineering Task Force (IETF). Oferă instrumente de autentificare sigure și alte servicii securizate care operează într-o rețea nesecurizată. vă permite să consolidați și să transformați datele, crescând astfel productivitatea, agilitatea și productivitatea afacerii dvs., oferind acces rapid la informațiile de care aveți nevoie.

Ce este securitatea informațiilor? Aceasta este o stare de securitate a informațiilor, care asigură confidențialitatea, disponibilitatea și integritatea acesteia.

De obicei, pentru a evalua starea securității informațiilor, este necesar să înțelegem și să analizăm amenințările și sursele acestora, să evaluăm nivelul de deteriorare, probabilitatea implementării și relevanța amenințărilor, riscurilor (opționale) care ne pot afecta sistemul/ informație.

În opinia mea, este imposibil să se evalueze securitatea unei anumite tehnologii sau limbaj de programare fără a fi legat de o anumită metodă de implementare, adică fără un anumit produs software finit într-un limbaj care are o specificație tehnică detaliată cu o descriere a arhitectura si functionalitatea. Dar nici acest lucru nu va fi suficient, deoarece este necesar să se evalueze starea de securitate a sistemului informațional finit cu arhitectura sa specifică, setul de componente, procesele de afaceri, informațiile și, în sfârșit, oamenii. Permiteți-mi să vă dau un exemplu de construcție a unei case. Dispunem de materiale (nisip, ciment, piatra sparta, caramida etc.) si unelte (galeata, lopata, mistria etc.). Nu vom putea evalua calitatea și fiabilitatea casei finite doar după materialele/uneltele folosite: cât va rezista, dacă va fi crăpată, dacă va fi rece sau liniștită. Trebuie să alegeți un proiect de casă, tehnologie de construcție și o echipă de meșteri. Și numai după finalizarea construcției, vom putea măsura conformitatea cu proiectul, GOST, SNiP-uri, vom verifica măsurătorile protecției termice, zgomot, sarcini, vom analiza calitatea cimentului și vom răspunde la majoritatea întrebărilor. Dar întrebarea principală „cât timp va rămâne?” nu vom avea un răspuns exact, deoarece nu cunoaștem toate condițiile de funcționare ale casei și toți factorii care vor afecta pe tot parcursul timpului.

Cum să păstrați Java în siguranță

Luați Java de exemplu . Este un limbaj de programare orientat pe obiecte; Programele Java sunt traduse în bytecode Java, care este executat de mașina virtuală Java (JVM), un program care procesează cod de octet și transmite instrucțiuni hardware-ului ca interpret. Avantajul acestei metode de executare a programelor este independența completă a bytecode-ului față de sistemul de operare și hardware, ceea ce vă permite să rulați aplicații Java pe orice dispozitiv pentru care există o mașină virtuală corespunzătoare.

« Un limbaj universal „suna bine, dar cea mai comună problemă este și reversul monedei - o scurgere de memorie în JVM, care duce la depășiri și blocări de memorie. În legătură cu această problemă, vulnerabilitățile nu sunt excluse, deoarece postulatul de bază al fiabilității este că cu cât este mai simplu, cu atât mai bine. În acest caz, o plăcintă atât de complexă este asamblată din asigurarea compatibilității unui număr mare de platforme și sisteme de operare, încât este aproape imposibil să urmăriți și să închideți toate vulnerabilitățile găsite în ele și să le eliminați rapid. Pentru același Microsoft, vulnerabilitățile pot fi găsite și remediate după 4-8 ani, și asta dacă nu țineți cont de caracteristicile nedeclarate lăsate intenționat sau din greșeală.

Din practica mea: atunci când programatorii adaugă o nouă funcționalitate care este asociată cu una deja implementată sau repară funcționalitatea veche, atunci în 15% din cazuri sparg un produs care funcționează anterior. Și dacă în același timp nu efectuează testarea completă, la ieșire avem un produs cu funcționalitate nouă, dar cu vechiul parțial nefuncționând. Există, de asemenea, diferențe în codificare pentru diferite platforme, versiuni ale sistemului de operare, software. În acest sens, ne putem imagina cât de dificil este să menții limbajul de programare Java și JVM-ul, ca să nu mai vorbim de problemele de securitate.

În acest moment, a fost lansat Java Development Kit 10, care ne oferă mecanisme de securitate standard, lansate pentru Java SE 8 și descrise în Documentația de securitate. Nu a fost adăugat nimic nou în a zecea versiune.

Rețineți că Oracle are un Centru de resurse de securitate Java. În general, compania împarte securitatea Java în patru secțiuni principale:

A) dezvoltatorii ar trebui:

Urmăriți și utilizați toate cele mai recente actualizări de mediu de dezvoltare și de securitate;

Utilizați programe pentru verificarea corectitudinii codului (de exemplu, Checker Framework);

B) administratorii de sistem ar trebui:

Urmăriți și utilizați toate cele mai recente actualizări pentru Java și componentele necesare pentru ca produsul să funcționeze (inclusiv OS, biblioteci, cadre etc.);

Utilizați regulile de implementare Java descrise de și;

Utilizați un marcaj temporal de încredere.

C) utilizatorii finali ar trebui:

Utilizați întotdeauna cea mai recentă versiune Java originală;

D) profesioniștii în securitate au nevoie de:

Utilizați instrumente avansate de management și îmbunătățiți securitatea (de exemplu, Advanced Management Console);

Monitorizați instalarea la timp a tuturor actualizărilor de securitate;

Este important ca toată lumea să respecte și să respecte regulile și reglementările de siguranță. Atingerea unei stări de securitate la un nivel adecvat se poate face doar împreună și folosind toate măsurile disponibile (tehnice, organizatorice). După cum arată practica mea, în 60% dintre organizații, serviciile IT și de securitate a informațiilor se descurcă bine cu securitatea, precum și cu utilizatorii care folosesc dispozitive corporative și sunt conectați la un singur domeniu. Dar cei mai de necontrolat în acest domeniu sunt dezvoltatorii, liderii de echipă, arhitecții.

Dezvoltare software și probleme de securitate

Mai larg, principalele motive pentru problemele de securitate în aplicații în timpul dezvoltării software sunt următoarele:

A) Lipsa de înțelegere a terminologiei de securitate în general, ca să nu mai vorbim de cunoștințe specifice și soluții aplicate.

De regulă, dezvoltatorii asociază cel mai bine securitatea cu următoarele lucruri: controlul accesului și înregistrarea în jurnal și protecția prin parolă, mai rar - protecția conexiunii la nivel https (folosind mecanisme de criptare care sunt disponibile în mod implicit din cutie). Adică, formal vor folosi metode de securitate, care de fapt vor rămâne formale, „pentru spectacol”, fără a ține cont de cerințele și nuanțe:

Pentru parole: valorile implicite sunt de obicei utilizate și nu sunt configurate suplimentar pentru lungime, putere, frecvență de modificare, nerepetabilitate, număr de încercări. Destul de des, acești parametri nu pot fi modificați, deoarece nu au fost incluși în sarcina de aplicare pentru dezvoltarea software, ceea ce duce la necesitatea de a adăuga cod.

Pentru gestionarea și înregistrarea accesului: în cel mai bun caz, dezvoltatorii au descris grupurile sau rolurile utilizatorilor și obiectele de acces care ar trebui să fie disponibile în software. În cel mai rău caz, dezvoltatorii înșiși au „împărțit” secțiunile și obiectele în cele necesare utilizatorilor și administratorilor. În primul caz, obținem un sistem care poate fi configurat flexibil, dar este nevoie de o perioadă semnificativă de timp pentru a configura și a negocia drepturile. În al doilea - un sistem formal de control al accesului. În plus, dezvoltatorii trebuie să înțeleagă ce fel de informații și în ce volum trebuie înregistrate. Cu toate acestea, adesea nu li se furnizează aceste informații, ceea ce duce la detalii insuficiente în jurnalele pentru a analiza incidentele sau a înțelege ce se întâmplă în software. Sau la stocarea excesivă a jurnalelor și a unei cantități mari de informații, ceea ce impune restricții semnificative asupra capacității de a stoca informații pentru o perioadă de timp necesară (de exemplu, unul până la trei ani) sau este nevoie de achiziționarea de depozite de informații suplimentare. Odată cu înregistrarea redundantă a informațiilor, apar probleme suplimentare cu viteza de analiză și analiză a incidentelor și viteza de găsire a informațiilor necesare. Redundanța poate necesita, de asemenea, finanțare suplimentară pentru extinderea personalului, achiziționarea de sisteme SIEM cu reguli unice pentru procesarea informațiilor sau poate duce la riscuri asociate cu informațiile învechite. În același timp, se alocă prea mult timp analizării și procesării informațiilor.

Protecția canalelor de comunicare nu este mai puțin importantă, în special pentru sistemele de plată și bancare, unde, pe lângă dezvăluirea datelor personale și personale, sunt posibile pierderi financiare. Cel mai adesea se întâmplă să nu se gândească la protecția canalelor și a mijloacelor de transmitere a informațiilor, iar dacă o fac, folosesc setările „implicite”, de exemplu, TLS / SSL. Dar are și propriile particularități în alegerea versiunii de protocol (TLS 1.1, 1.2, 1.3 sau SSL v1-3), algoritm de criptare (RC4, IDEA, Triple DES, SEED, Camellia sau AES), lungimea cheii. Uneori, de exemplu, se alege protocolul corect TLS 1.2, cu criptare AES, o lungime a cheii de 256 de biți, dar uiți de posibilitatea de a alege o adresă pe portul 443 pentru HTTPS și sau portul 80 pentru HTTP, în loc de blocarea portului 80, în urma căruia devine posibil să se obțină acces printr-un canal nesecurizat. Sau, de exemplu, ridică infrastructura pe mașinile virtuale și nu se gândesc deloc la necesitatea închiderii accesului la rețea între mașinile virtuale.

B) A doua problemă este legată de afacere, deoarece investește bani în funcționalități speciale specifice care nu țin cont de blocurile de securitate.

Din păcate, o afacere nu înțelege întotdeauna de ce ar trebui să cheltuiască resurse pe blocuri de securitate, dacă nu există un beneficiu funcțional din acestea, produsul nu va aduce mai mulți bani, dar există doar riscuri probabile care s-ar putea să nu funcționeze. Afacerile înțeleg mai des nevoia de a investi în securitate atunci când a avut loc deja un incident de securitate a informațiilor.

Din păcate, nu numai afacerile sunt de vină pentru acest lucru, ci și mediul său, care:

De asemenea, nu înțelege securitatea;

S-au scutit de buget pentru specialiști în securitatea informațiilor (nu sunt angajați deloc sau sunt angajați specialiști de înaltă specializare, sau este angajată o singură persoană care să fie responsabilă de toate);

Nu am putut să transmit în mod rezonabil nevoia de securitate și să justific corect riscurile actuale (reputaționale, financiare, temporare).

C) Problema cu comunicarea în companie sau lipsa acesteia.

Acesta este cazul când afacerea și mediul său înțeleg nevoia și importanța securității informațiilor. Au alocat bugete, au angajat specialiști corespunzători, dar există dificultăți în comunicarea între unitățile de afaceri și securitatea informațiilor/servicii IT, dezvoltatori.

D) Lipsa de conștientizare a utilizatorilor obișnuiți ai companiei în problemele de securitate a informațiilor.

Să presupunem că aveți toate departamentele necesare, specialiști, măsuri tehnice și organizatorice. Dar utilizatorii rezistă și nu vor să respecte regulile. Aceasta este o situație foarte comună și este, de asemenea, necesar să o rezolvăm în mod cuprinzător, deoarece oamenii nu înțeleg de ce au nevoie de muncă suplimentară pentru a se conforma cu problemele de securitate a informațiilor (verificați fișierele cu antivirus, amintiți-vă parolele complexe, cunoașteți și respectați politicile și afacerile). procese etc.). Este necesar să se organizeze periodic cursuri de master, să se spună la nivel de gospodărie ce este securitatea informațiilor, ce probleme și soluții există, să se comunice obiectivele și obiectivele globale ale securității informațiilor și să le motiveze și impactul lor asupra afacerii.

E) Lipsa arhitecților în securitatea informațiilor - specialiștii în securitatea informațiilor nu sunt întotdeauna implicați în dezvoltarea software-ului, iar programatorii înșiși se gândesc la securitatea arhitecturii și la utilizarea modelelor de securitate scrise și gata făcute (Security patterns).

Dezvoltatorii nu cunosc toate nuanțele și nu pot ști, deoarece sarcina lor este să finalizeze dezvoltarea și să treacă la următoarea. Dacă te aprofundezi în dezvoltarea în sine, procesul este mult mai complicat decât pare. Prin urmare, este necesar să obțineți în mod clar sarcina de la afacere, să o descompuneți în mini-sarcini ușor de înțeles pentru dezvoltatori, să desfășurați dezvoltarea, să efectuați teste alfa și beta, încărcarea, teste funcționale, remedierea erorilor, revenirea la teste - acest proces este ciclic și lung. Prin urmare, nu este de mirare că nu au suficiente resurse pentru a gândi siguranța produsului până la cel mai mic detaliu.

Pentru a vorbi despre securitate, trebuie să rezolvați problemele descrise mai sus. Nu descriu în mod specific opțiunile pentru soluții, deoarece totul depinde de probleme specifice, mediu, condiții. Nu există o pilulă unică și trebuie luate toate măsurile de precauție posibile. Sarcina principală este ca toți angajații companiei să pătrundă, să înțeleagă și să respecte cerințele de securitate a informațiilor și să fie interesați să le respecte. Și abia atunci se va putea vorbi despre eficacitatea și un bun nivel de maturitate al securității informațiilor în companie.

Top articole similare