JAVA



  1. 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

  1. 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.

  1. 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
UNIX
Windows
Macintosh
Sisteme de operare
  1. 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

  • Incapsularea [i transmiterea de mesaje

  • Clasele

  • Bibliotecile (numite pachete, in Java)

  • Mo[tenirea

  • Modificatorii de acces

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 :

  1. Private - accesibile doar obiectelor din aceea[i clas\

  2. Protejate - accesibile obiectelor din aceea[i clas\ [i din subclasele clasei respective

  3. Prietenosase - (nivelul de accesibilitate prestabilit) accesibile tuturor claselor din pachetul curent

  4. Publice - accesibile tuturor claselor din orice pachet

Programarea in limbajul Java

5. Caracteristicile de baz\ al limbajului Java

  1. 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

  1. 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.

  1. 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.

  1. 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

  1. 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 :

  • instruc]iuni de pachet

  • instruc]iuni de import

  • declara]ii ale claselor [i interfe]elor

(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.