ELEMENTE GENERALE
1. Ce este JAVA ?
este un limbaj de programare dezvoltat de JavaSoft, companie in cadrul firmei Sun Microsystems.
este complet orientat pe obiecte si ofera posibilitatea real\ de refolosire a codului (care este de fapt promisiunea f\cut\ la apari]ia program\rii orientate pe obiecte).
este neutru din punct de vedere arhitectural, cu alte cuvinte Java este un limbaj independent de platforma de lucru, aceeas[i aplica]ie ruland, f\r\ nici o modificare, pe sisteme diferite cum ar fi Windows, UNIX sau Macintosh, lucru care aduce economii substan]iale firmelor care dezvolt\ aplica]ii pentru Internet.
limbajul Java este modelat dup\ C [i C++, trecerea de la C, C++ la Java f\candu-se foarte u[or. 24231crq74elp3n
elimin\ sursele frecvente de erori ce apar in programare prin eliminarea pointerilor, administrarea automat\ a memoriei [i eliminarea fisurilor de memorie printr-o procedur\ de colectare a “gunoiului” care ruleaz\ in fundal;
este cel mai sigur limbaj de programare disponibil in acest moment, asigurand mecanisme stricte de securitate a programelor concretizate prin: verificarea dinamic\ a codului pentru detectarea secven]elor periculoase, impunerea unor reguli stricte pentru rularea programelor lansate pe calculatoare aflate la distan]\ (acestea nu au acces la re]eaua local\, la fi[ierele stocate in sistemul local [i nu pot lansa in execu]ie programe locale), etc.
permite creearea unor documente Web imbun\t\]ite cu anima]ie [i multimedia.
a fost proiectat pentru a fi folosit in medii distribuite [i sisteme deschise. rl231c4274ellp
Evolu]ia limbajului JAVA
In 1991, firma SUN, mergand pe direc]ia dezvolt\rii sistemelor deschise de lucru in re]ea, a creat un proiect de lucru numit Green, care avea drept scop punerea la punct a unor procesoare care s\ poat\ rula pe diferite tipuri de aparate [i punerea la punc a unui sistem care s\ poat\ rula pe platforme diferite. Planul ini]ial prevedea dezvoltarea proiectului in C++, dar au ap\rut foarte multe probleme in incercarea de dezvoltare acompilatorului de C++. Ca urmare, James Gosling, membru al grupului Green, a inceput s\ lucreze la dezvoltarea unui nou limbaj, numit Oak, care, mai tarziu, avea s\ se numeasc\ Java. De asemenea grupul Green avea s\-[i schimbe numele intai in FirstPerson, apoi in JavaSoft.
Abia dup\ ce a fost infiin]at\ compania Netscape Communications Corporation, cei de la JavaSoft s-au orientat c\tre Internet [i Web, mediul multiplatform\ distribuit al re]elei Internet fiind perfect pentru testarea proiectului.
In prezent licen]a pentru tehnologia Java a fost acordat\ unor firme precum IBM, Microsoft, Sillicon Graphics, Adobe [i Netscape.
Java : un limbaj compilat [i interpretat
In functie de modul de execu]ie al programelor, limbajele de programare se impart in dou\ categorii :
interpretate : instruc]iunile sunt citite linie cu linie de un program numit interpretor [i traduse in instruc]iuni ma[in\; avantaj : simplitate; dezavantaje : vitez\ de execu]ie redus\
compilate : codul surs\ al programelor este transformat de compilator intr-un cod ce poate fi executat direct de procesor; avantaj : execu]ie rapid\; dezavantaj : lipsa portabilit\]ii, codul compilat intr-un format de nivel sc\zut nu poate fi rulat decat pe platforma pe care a fost compilat.
Programele Java pot fi atat interpretate cat [i compilate.
Cod surs\ Java ®(compilare)® Cod de octe]i
Codul de octe]i este diferit de codul ma[in\. Codul ma[in\ este reprezentat de o succesiune de 0 [i 1; codurile de octe]i sunt seturi de instruc]iuni care seam\n\ cu codul scris in limbaj de asamblare.
Codul ma[in\ este executat direct de c\tre procesor [i poate fi folosit numai pe platforma pe care a fost creat; codul de octe]i este interpretat de mediul Java [i de aceea poate fi rulat pe orice platform\ care folose[te mediul de execu]ie Java ® neutralitatea limbajului Java din punc de vedere arhitectural.
Cum este rulat un program Java ? Interpretorul Java transform\ codul de octe]i intr-un set de instruc]iuni ma[in\, intarzierea interpret\rii fiind ins\ foarte mic\ datorit\ asem\n\rii dintre codul de octe]i [i limbajul de asamblare [i din acest motiv execu]ia se face aproape la fel de repede ca in cazul programelor compilate.
Cum este ob]inut\ neutralitatea arhitectural\ a limbajului Java ? Cu alte cuvinte, cum este posibil\ portarea codului de octe]i pe calculatoare diferite? Truc : codul surs\ este compilat nu pentru calculatorul pe care se lucreaz\ ci pentru un calculator inexistent, acest calculator imaginar fiind numit Ma[ina virtual\ Java (Java Virtual Machine). Interpretorul ac]ioneaz\ apoi ca un intermediar intre Ma[ina virtual\ Java [i ma[ina real\ pe care este rulat programul.
Aplica]ia utilizatorului |
Obiecte Java |
Ma[ina virtual\ Java |
Java [i conceptele program\rii orientate pe obiecte
Limbajul Java este urm\torul pas logic in domeniul limbajelor de programare [i se bazeaz\ pe cel mai popular limbaj de programare al momentului C++. In Java se pot ob]ine programe cu aspectul [i comportarea programelor C++, dar beneficiind de avantajele oferite de un limbaj proiectat special pentru POO. Java rebun]\ complet la programarea procedural\ specific\ C-ului [i v\ oblig\ s\ folosi]i conceptele solide ale POO.
Conceptele program\rii orientate pe obiecte cuprind :
Obiectele :
unitatea elementara a POO
starea obiectului este dat\ de variabile de instan]\
comportamentul obiectului este dat metode
u[or de refolosit, actualizat, intre]inut
Incapsularea [i transmiterea de mesaje :
Clasele :
incapsuleaz\ obiecte
o singur\ clas\ poate fi folosit\ pentru instan]ierea mai multor obiecte
Pachetele: colec]ie de clase inrudite
Mo[tenirea : permite
extinderea func]ionalit\]ii unor clase existente
refolosirea codului
Modificatorii de acces : controleaz\ accesul la metodele [i variabilele obiectelor. Acestea pot fi :
Private - accesibile doar obiectelor din aceea[i clas\
Protejate - accesibile obiectelor din aceea[i clas\ [i din subclasele clasei respective
Prietenosase - (nivelul de accesibilitate prestabilit) accesibile tuturor claselor din pachetul curent
Publice - accesibile tuturor claselor din orice pachet
Programarea in limbajul Java
5. Caracteristicile de baz\ al limbajului Java
Folosirea in medii de re]ea distribuite
Java a fost proiectat pentru un mediu complex cum este Internetul [i de aceea trebuie s\ poat\ rula pe platforme eterogene distribuite. Acest lucru este posibil deoarece :
este neutru din punct de vedere arhiectural = programele pot fi rulate pe orice platform\ care are instalat mediul Java
are un grad ridicat de portabilitate = con]ine obictecte care pot fi folosite pe platforme eterogene [i respect\ standardele IEEE (Institue of Electrical and Electronics Engineers) pentru structurile de date (folosirea intregilor, a numerelor in virgul\ mobil\, a [irurilor, etc)
este distribuit = poate folosi atat obiecte memorate local cat [i obiecte stocate pe calculatoare aflate la distan]\
este compatibil cu mediile de lucru in re]ea (poate fi utilizat in re]ele complexe) [i accept\ direct protocoalele de re]ea obi[nuite cum ar fi FTP [i HTTP
Asigurarea performan]ei ridicate
compilatorul [i sistemul de execu]ie ofer\ o vitez\ ridicat\ rul\rii programelor
are incorporate posibilit\]i de execu]ie multifilar\ (rularea simultan\ a mai multor procese) folosind un sistem de acordare de priorit\]i proceselor ce trebuie executate. Printre procesele care ruleaz\ in fundal sunt cele de “colectare a gunoiului” [i de gestionare a memoriei.
Refolosirea codului [i fiabilitatea
Java este un limbaj dinamic, lucru asigurat prin intarzierea leg\rii obiectelor [i legarea dinamic\ a claselor in timpul execu]iei, ceea ce impiedic\ apari]ia erorilor in cazul schimb\rii mediului de lucru dup\ compilarea programului surs\.
Fiabilitatea este asigurat\ prin eliminarea pointerilor, prin folosirea verific\rii dinamice a limitelor [i prin gestionarea automat\ a memoriei, inl\turandu-se posibilitatea fisurilor [i viol\rilor de memorie. O alt\ cale de evitare a erorilor este verificarea structurilor de date atat la compilare cat [i in timpul execu]iei.
Asigurarea securit\]ii
Interzice accesul la stiva sistemului, la zona liber\ de memorie [i la sec]iunile protejate de memorie
Verific\ validitatea codului semnaland urm\toarele:
Viol\rile de acces
Conversiile ilegale de date
Valori [i parametri incorec]i
Modificarea claselor sau folosirea incorect\ a acestora
Dep\[irea stivei in partea superioar\ sau inferioar\
Activit\]i suspecte sau neautorizate
Structura limbajului Java
Aplica]ii [i miniaplica]ii
miniaplica]ie (applet) = program Java creat pentru a fi folosit in sitemul WWW. Applet-urile necesit\ un program de vizualizare extern : browser Web sau un program specializat de vizualizare (applet viewer).
aplica]ie (app) = program Java care poate fi rulat independent
Spa]ii de nume
Pentru evitarea conflictelor legate de spa]iile de nume, fiecare component\ a unui nume este imbricat\ in conformitate cu unul din urm\toarele niveluiri:
0 - spa]iul de nume al pachetului
1 - spa]iul de nume al unit\]ii de compilare
2 - spa]iul de nume al tipului
3 - spa]iul de nume al metodei
4 - spa]iul de nume al blocului local
5 - spa]iul de nume al blocului imbricat
Interpretorul este responsabil pentru men]inerea [i translatarea spa]iului de nume. Spa]iile de nume sunt separate prin punct.
Ex. java.lang.System.out.println() - calea complet\
Pachetele Java din biblioteca original\ de pachete sunt referite prin java uramt de numele pachetului (java.lang).
In cazul in care nu exist\ confuzii poate fi folosit\ o variant\ prescurtat\ a apelului (interpretorul folose[te prima potrivire de nume descoperit\); apelul la println() se putea face [i prin System.out.println()
Structuri de denumire a programelor
Fi[iere surs\ .java ®(compilare)® cod de octe]i format din unit\]i de compilare;
Pentru fiecare clas\ declarat\ in codul surs\ este generat\ o unitate de compilare stocat\ intr-un fi[ier separat cu extensia .class
Unit\]ile de compilare Java con]in :
(structura de baz\ a unui program Java)
Instruc]iuni de pachet
Sunt folosite pentru a preciza pozi]ia pachetelor folosite intr-o aplica]ie. In mod implicit Java folose[te calea de acces curent\ [i presupune c\ fi[ierele cu cod compilat se afl\ in directorul curent la rularea programului.
Pentru ca obiectele [i clasele s\ respecte o structur\ ierarhic\ diferit\ de cea prestabilit\ trebuie inclus\ in codul surs\ o instruc]iune de pachet :
package NumePachet
In cazul cand se folosesc mai multe niveluri instruc]iunea va avea forma:
package MyPackages.NumeSubPachet
Numele de pachete de pe fiecare nivel al spa]iului de nume trebuie s\ reflecte structura de directoare a sistemului de fi[iere, deoarece Java transform\ numele pachetelor in c\i de acces pentru localizarea claselor [i a metodelor asociate pachetelor. De exemplu intr-un sistem Windows 95/NT numele de pachet MyPackages.Pachetel va fi transformat in directorul
\MyPackages\Pachetel unde Java va c\uta pachetul respectiv.
Instruc]iuni de import
Java con]ine un set de func]ii principale, accesibile global, [i care sunt localizate in pachetul java.lang. Pentru a ob]ine accesul la alte pachete, clase [i obiecte care nu se afl\ in aceast\ bibliotec\ se folosesc instruc]iuni de import, care ajut\ compilatorul Java s\ reg\seasc\ metodele corespunz\toare [i s\ evite conflictele de nume.
De exemplu, pentru a apela metoda Button din pachetul java.awt (awt = Abstract Window Toolkit) se folose[te instruc]iunea java.awt.Button. O metod\ mai eficient\ este de a importa metoda import java.awt.Button [i de a apela metoda doar prin instruc]iunea Button.
Cea mai uzual\ metod\ de import este importul la cerere, care spune compilatorului s\ importe numai clasele de care este nevoie in program : import java.awt.* pentru a nu face disponibile toate clasele din java.awt.
Declara]iile de clas\
In Java toate clasele sunt derivate dintr-o clas\ sistem numit\ Object. Object este r\d\cina ierarhiei de clase, toate metodele [i variabilele clasei fiind disponibile celorlalte clase. In mod implicit toate clasele sunt private. Declara]iile de clas\, f\r\ modificatori de acces, au aceea[i sintax\ ca in C++ :
class nume_clasa
{
//metode si variabile asociate clasei
}
Java accept\ numai mo[tenirea simpl\ a claselor, fiecare clas\ avand a[adar un singur p\rinte, numit superclas\. In scimb, Java permite mo[tenirea multipl\ a metodelor claselor, prin intermediul interfe]elor claselor.
Declara]iile de interfa]\
Interfe]ele sunt clase abstracte. Diferen]a major\ fa]\ de o clas\ este aceea c\ interfe]ele nu pot stoca date. De asemenea, nu pot con]ine implement\ri ale metodelor ci doar declara]ii ale acestora.
O clas\ poate s\ implementeze una sau mai multe interfe]e [i poate s\ partajeze aceaa[i interfa]\ cu alte clase sau instan]e ale unei clase.
Declara]iile de interfa]\ f\r\ modificatori au urm\torul format:
interface nume_interfata {
//metode si variabile statice asociate interfetei
}
Declara]iile de clase care folosesc interfe]e au urm\torul format:
class nume_clasa implements nume_interfata {
//corpul clasei
}
Un alt format poate fi:
class nume_clasa implements nume_interfata1,...,nume_interfataN {
//corpul clasei
}
Singura deficien]\ a folosirii interfe]elor este aceea c\ necesit\ legare dinamic\, ceea ce reduce performan]ele execu]iei. Sunt ins\ mai eficiente decat mo[tenirea multipl\ din C++, deoarece reduc suprasarcina de execu]ie.