Documente Academic
Documente Profesional
Documente Cultură
Reţeaua Internet este locul în care s-a dezlănţuit pt. prima dată mica fiară numită Java. Acum, mii de
programatori, dezvoltatori de Internet, editori de Web şi firme producătoare de software se întrec în a învăţa totul
despre acest instrument de lucru, pt. a revoluţiona reţeaua Internet şi modul de scriere a programelor. Cei care
nu sunt conectaţi la Internet ar putea să se întrebe de ce atâta agitaţie. În definitiv, şi despre C++ s-a spus că va
revoluţiona industria software; dar, aşa cum veţi vedea în curând, diferenţa între C++ şi Java constă în faptul că
Java îşi ţine promisiunile. Java promite să aducă modificări revoluţionare în software şi în Internet; acest capitol
vă va arăta cum.
Pentru dezvoltatorii de Internet, programatorii şi editorii Web, este momentul unei retrospective a evoluţiei
limbajului Java. În cea mai mare parte a anului 1995, Java a fost în stadiul de testare Alfa şi Beta. În tot acest
timp, dezvoltarea programelor Java s-a limitat la mediile Solaris şi Windows NT. În scurt timp, dezvoltarea
programelor Java s-a răspândit cu viteza vântului. în ianuarie 1996, Sun Microsystems a lansat oficial versiunea
Java 1. 0, iar în acest moment, puteţi obţine gratuit seturi de dezvoltare pentru toate sistemele de operare
importante, printre care Solaris, AIX, Windows 95, Windows NT, OS/2 şi Macintosh.
Pentru cei care nu au experienţă în programare, folosirea unui limbaj precum Java poate părea ceva de domeniul
imposibilului, dar nimic nu este mai departe de adevăr. Dacă ştiţi să creaţi documente HTML, SGML sau
VRML, atunci veţi putea crea şi aplicaţii sau documente îmbunătăţite cu ajutorul programelor Java veţi descoperi
că limbajul Java este uşor de invăţat şi de folosit, deoarece elimină sau automatizează multe dintre problemele
limbajelor de programare anterioare.
Ce este Java ?
JavaSoft, o companie din cadrul firmei Sun Microsystems, a lucrat câţiva ani la dezvoltarea unui limbaj puternic
pentru anii ’90 şi pentru mai departe. Java corespunde acestor promisiuni, fiind cel mai robust, mai uşor de
folosit şi mai flexibil limbaj de programare disponibil în acest moment. Java include cele mai bune aspecte ale
limbajelor de programare anterioare, precum C şi C++, permite crearea unor aplicaţii puternice, conţine
componente avansate, cum ar fi posibilităţile de lucru cu informaţiile multimedia, care fac prezentările
multimedia să poată fi create mai uşor ca niciodată, şi elimină toate acele lucruri pe care le-am detestat cu toţii în
C şi C++, precum moştenirea multiplă, supraincărcarea operatorilor şi pointerii.
Lucrul cel mai interesant la Java este faptul că acest limbaj este complet orientat pe obiecte şi neutru din punct
de vedere arhitectural. Promisiunea făcuta la apariţia programării orientate pe obiecte (OOP- Object Oriented
Programming) este posibilitatea se refolosire a codului. Dar, aşa cum vă pot spune programatorii C++ (daca
sunteţi programator C++, probabil ştiţi deja acest lucru), intenţiile bune nu înseamnă mare lucru atunci când este
vorba de refolosirea codului C++. Prin contrast, în Java veţi vedea imediat avantajele refolosirii codului. Nu
mai este nevoie să dezvoltaţi aplicaţii diferite pentru platforme diferite. în Java, puteţi să dezvoltaţi o singură
aplicaţie care să fie folosită imediat pe mai multe platforme. Imaginati-vă nenumăratele ore de muncă pe care le
puteţi economisi dacă dezvoltaţi o singură aplicaţie pentru sistemele Windows, UNIX şi Macintosh.
Luând în considerare faptul că marile firme pot economisi milioane de dolari la un singur proiect folosind
independenţa de platformă a limbajului Java, nu este de mirare că Java a devenit un cuvânt cheie în tehnologiile
software şi Internet. Java a depăşit imaginaţia celor pasionaţi de tehnică. Companii din toate sectoarele de
activitate, de la finanţe la desfacere, examinează modalităţi de folosire a limbajului.
Oamenilor de afaceri din domeniul software şi programatorilor individuali, independenţa de platformă a
limbajului Java le permite dezvoltarea unor aplicaţii puternice pentru sistemele de operare cu care nu au mai
lucrat niciodată. Dacă rulaţi o afacere legată de dezvoltarea software sau de Internet, indiferent dacă această
1
afacere implică o singură persoană sau un conglomerat de firme, veţi putea avea acces la noi clienţi şi la noi pieţe
de desfacere. Într-o epocă în care toată lumea este interesată de profit, o tehnologie care vă permite să vindeţi
mai mult, să produceţi mai mult şi să aveţi acces la o piaţă mai largă (teoretic, la toţi cei care deţin un calculator)
este cu siguranţă ceva ce merită studiat.
în plus, permiţând folosirea mediului de programare convenabil, Java oferă mai multă putere, ceea ce reprezintă
un avantaj pentru cei cu aptitudini tehnice limitate, dar şi pentru experţii în calculatoare. în cazul în care aveţi
experientă de lucru cu un alt limbaj de programare, veţi descoperi că Java este surprinzător de uşor de invăţat.
Dezvoltatorii limbajului Java au proiectat cu mare grijă structura noului limbaj şi nu este intâmplător faptul că
acesta a fost modelat după C şi C++. C este limbajul favorit al celor care scriu programe procedurale. C++ este
limbajul preferat de cei care scriu programe orientate pe obiecte. Elementele pentru utilizare şi dezvoltare din C
şi C++ sunt de câteva ori mai răspândite decât cele din limbajele de programare aflate cel mai aproape în
competiţie şi, de fapt, se poate spune că sunt singurii competitori adevăraţi.
Aşadar, pentru a se asigura că Java este uşor de folosit şi de inţeles, dezvoltatorii au modelat limbajul după C şi
C++. De asemenea, Java împrumută extensii din Objective C. Aceste extensii permit o rezoluţie dinamică a
metodelor. în felul acesta, trecerea de la C, Objective C şi C++ la Java se face foarte uşor.
Orice programator care a avut vreodată probleme cu pointerii sau cu gestionarea memoriei ar trebui să alerge
către Java cu braţele deschise. Java elimină pointerii, administrează automat memoria şi conţine o procedură de
colectare a gunoiului (eliminărea fisurilor de memorie) care rulează în fundal.
în mediile de lucru distribuite, cum ar fi World Wide Web, mecanismele stricte de securitate sunt esenţiale-
firmele conectate la aceste medii de lucru nu pot risca să îşi compromită sistemele proprii. Dezvoltatorii
limbajului de programare Java ştiu acest lucru. Java este cel mai sigur mediu de programare disponibil în acest
mod. Java nu incearcă să rezolve problemele de securitate, ci le elimină, fiind astfel limbajul perfect pentru
programarea în Web.
Pointerii sunt cea mai mare problema de securitate a programelor C şi C++. “Spărgătorii” pot folosi programe
aparent nevinovate, care forţează pointeri în memorie, fură informaţii din sistem şi îl blochează. în Java nu puteţi
să forţati pointeri, pentru simplul motiv că ei nu există. De asemenea, Java elimină şi alte probleme de
securitate. De exemplu, la compilarea şi rularea programelor Java, acestea sunt supuse unei proceduri de
verificare dinamică a codului, care se asigură că nu există secvenţe de cod periculoase. în plus, mediul de
execuţie Java impune reguli stricte pentru rularea programelor lansate de pe calculatoare aflate la distanţă.
Aceste programe nu au acces la reţeaua locală, la fişierele stocate în sistemul local şi nu pot lansa în execuţie
programe locale.
2
produselor electronice comerciale; proiectul Green s-a născut ca parte a unui proiect mai mare de dezvoltare a
programelor avansate pentru această piaţă. Scopul grupului de lucru Green a fost să introducă firma Sun
Microsystems pe piaţa produselor electronice comerciale. Pentru atingerea acestui scop, inginerii de la Sun
aveau nevoie de microprocesoare care să poată rula pe diferite tipuri de aparate, în special în sisteme inglobate
distribuite în timp real care să fie atât fiabile cât şi portabile.
Elementul cheie al succesului firmei Sun pe această piaţă era posibilitatea de portare a sistemului pe mai multe
platforme. Planul iniţial prevedea dezvoltarea proiectului în C++, dar dezvoltatorii au avut foarte multe
probleme în incercarea de dezvoltare a compilatorului C++. Curând, aceştia şi-au dat seama că, dacă vor să
reuşească, trebuie să incerce o soluţie nouă şi indrazneaţă; ca urmare, James Gosling a inceput să lucreze la
dezvoltarea unui nou limbaj, numit Oak. Mai târziu, noul limbaj avea să fie numit Java, deoarece, ca o ironie a
soartei, Oak nu a putut să fie inregistrat ca marcă.
în final, dezvoltatorii au creeat un dispozitiv de prezentare a rezultatului eforturilor depuse. Deşi folosea o formă
mai veche a limbajului Java, precum şi un sistem de operare şi o interfaţă cu utilizatorul elementare, acest
dispozitiv i-a uimit pe cei din conducerea firmei Sun. Cam în acelaşi timp, grupul Green a fost incorporat sub
numele First Person, nume ce ve fi schimbat ulterior în JavaSoft. A urmat o perioadă mai grea pemtru cei de la
firma JavaSoft. Au pierdut o licitaţie cu firma Time-Warner pentru realizarea unor echipamente pentru
televizune interactivă şi programe TV la cerere. Au pierdut un contract de creare a unui sistem de operare pentru
3DO. Lansarea publică a proiectului a fost anulată şi mulţi au părăsit grupul Green. Acestea se intâmplau la
inceputul anului 1994 şi programatorii firmei Sun au inceput să caute noi domenii de activitate.
în această perioadă a inceput migraţia în masă a celor de la National Center for Supercomputing Applications
( NCSA) către Silicon Valley. Unii dinte ei au infiinţat compania intitulată în prezent Netscape Communications
Corporation. Silicon Valley era locul potrivit pentru idei legate de spaţiul cibernetic şi chestia numită World
Wide Web incepuse să se extindă aşa că nu intâmplător cei din grupul Green s-au orientat către Internet şi Web,
în care au vazut o soluţie a problemelor lor. Mediul multiplatformă distribuit al reţelei Internet era perfect pentru
testarea proiectului.
Restul, aşa cum se spune, este istorie. Patru ani după lansarea proiectului, cei care au perseverat în dezvoltarea
lui au reuşit. Astăzi, Java este subiectul la ordinea zilei din Internet. Mii de editori Web şi de dezvoltatori
Internet vor să afle cum pot să creeze documente Web imbunatăţite cu animaţie şi multimedia. Milioane de
utilizatori Web vor să afle unde pot gasi ultimile pagini Web care conţin programe Java.
Sun Microsystems a reuşit cu succes să ţină pasul cu aceste solicitări. Licenţa pentru tehnologia Java a fost
acordată unor firme precum IBM, Microsoft, Silicon Graphics, Adobe şi Netscape. Limbajul a fost actualizat în
continuu. în conformitate cu idealurile care au facut din Sun Microsystems ceea ce este astăzi, Java şi setul de
dezvoltare Java ( JDK ) sunt oferite gratuit dezvoltatorilor.
3
Deşi astăzi pare greu de crezut, Internet a fost la inceput un proiect al guvernului SUA. în 1969, 4 calculatoare
aflate la distanţă au fost conectate pentru a dovedi că un astfel de proiect este viabil. Reţeaua formată a fost
numită ARPANET ( Advanced Research Project Agency Network ). Reţeaua ARPANET s-a extins; în 1972
erau conectate 50 de universităţi şi unităţi de cercetare implicate în proiecte militare. La sfârşitul anilor ’80 mai
mult de 80. 000 de calculatoare erau conectate într-o serie de reţele. în final, suma acestor reţele a devenit ceea
ce se numeşte Internet.
Din 1969 până în 1991, reţeaua Internet a fost, în linii mari, un domeniu privat – rezervat cercetatorilor,
invăţamantului şi armatei. Deşi firmele comerciale se puteau conecta la Internet, politica reţelei interzicea
conducerea afacerilor prin intermediul acesteia. Situaţia s-a schimbat în 1991, când interdicţia privind activităţile
comerciale a fost ridicată. Aceasta s-a intâmplat în primul rând datorită formării unei reţele paralele care
permitea separarea fluxului de informaţii comerciale de cel al informaţiilor necomerciale. în acest mod, a apărut
posibilitatea conducerii unor activitati comerciale fără folosirea zonelor rezervate cercetarii şi educaţiei.
Din acel moment, Creşterea reţelei Internet s-a facut intr-un ritm accelerat. Astăzi, la Internet ca reţea globală,
sunt conectate mai multe milioane de calculatoare şi peste 50 de milioane de utilizatori.
4
Elementele de baza ale limbajelor de programare
Dacă aţi vazut limbajul Java în acţiune, probabil că nu mai aveţi dubii privind importanţa să în dezvoltarea
sistemului Web. Java este la fel de important şi pentru industria software. Acest limbaj de programare are multe
caracteristici care îl fac unic, puternic şi flexibil. De exemplu, majoritatea limbajelor de programare sunt fie
compilate, fie interpretate. Java poate fi folosit în ambele moduri, ceea ce îi conferă flexibilitate. Pentru a
inţelege cum pot fi programele Java compilate şi interpretate, să aruncăm o privire asupra elementelor de bază
ale limbajelor de programare interpretate sau compilate.
Aplicaţia utilizatorului
Sisteme de operare
6
respecte unele reguli privind o anumită funcţie sau un anumit set de funcţii, cum ar fi operaţiile de intrare/ieşire
în fişiere sau de afişare pe ecran. De asemenea, secţiunea de cod trebuie să fie generalizată şi să nu determine
conflicte de atribuire. De cele mai multe ori, în funcţie de complexitatea şi de tipul noului proiect pe care vreţi
să-l creaţi în C, este mai bine să luaţi totul de la 0. Cauza principală este faptul că rezolvarea conflictelor
generate de codul pe care incercati să-l refolosiţi poate să vă ia mai mult timp decât crearea codului.
O echipă de la AT&T Bell Labs a pus la punct o posibilă soluţie pentru refolosirea codului. Această soluţie a
fost numită C++. C++ este o extensie a limbajului C, care permite crearea obiectelor. Obiectele sunt module de
cod definite separat, folosite pentru executarea unor funcţii specifice. Cel care a avut ideea dezvoltării acestei
extensii a limbajului C, permiţând separarea unor funcţii dîntr-o aplicaţie în module obiect generalizate şi
refolosibile, a fost Bjarne Stroustrup. La un deceniu de la apariţia limbajului C++, putem afirma că acesta a
constituit o evoluţie logică a limbajului C, destinată acoperirii unor cerinţe ale programatorilor, este motivul
pentru care C++ a devenit cel mai raspândit limbaj de programare.
Obiectele
Unitatea elementară a programelor orientate pe obiecte este obiectul. Limbajele care respectă conceptele
programării orientate pe obiecte descriu relaţiile dintre acestea. Toate obiectele au o stare şi un comportament.
Starea unui obiect se referă la elementele de date conţinute de obiect şi la valorile asociate acestora. Tot ceea ce
cunoaşte obiectul despre aceste elemente şi despre valorile lor formează starea obiectului. Elementele de date
asociate obiectelor se numesc variabile de instanţă.
Comportamentul unui obiect depinde de acţiunile pe care obiectul poate să le execute asupra variabilelor de
instanţă definite în cadrul său. în programarea procedurală, o astfel de construcţie se numeste funcţie. în
terminologia specifică programării orientate pe obiecte, aceasta construcţie să numeste metodă. O metodă
aparţine clasei a cărei membră este; folosiţi metodele atunci când trebuie să executaţi o anumită operaţie de mai
multe ori.
Astfel, starea unui obiect depinde de lucrurile pe care le cunoaşte obiectul, iar comportamentul lui depinde de
acţiunile pe care le poate executa. în cazul în care creaţi un obiect software care reprezintă modelul unui
televizor, obiectul va avea variabile care descriu starea curentă a televizorului, cum ar fi o variabilă care specifică
dacă televizorul este pornit, precum şi alte variabile care stochează canalul selectat, nivelul de volum şi faptul că
telecomanda nu transmite nimic pentru moment. De asemenea, obiectul va poseda metode care descriu acţiunile
permise, cum ar fi pornirea şi oprirea televizorului, schimbarea canalului, modificarea volumului şi acceptarea
comenzilor de la telecomanda
Sugestie: dacă nu reusiţi să inţelegeţi ce înseamnă un obiect, gândiţi-vă la acesta ca la o secvenţă de cod care
execută un set de acţiuni specifice şi înrudite, numite metode.
Obiectele sunt dinamice, în măsura în care dvs le creaţi astfel. Un obiect poate apela una sau mai multe metode
pentru executarea unei operatiuni. Metodele sunt iniţiate prin transmiterea unui mesaj către obiectul respectiv.
Un mesaj trebuie să conţină numele obiectului către care este transmis, numele metodelor care urmează să fie
apelate şi valorile necesare metodelor respective. Obiectul care recepţionează mesajul foloseşte informaţiile
primite pentru a apela metodele corespunzatoare cu valorile specificate.
Avantajul încapsularii variabilelor de instanţă şi a metodelor constă în faptul că puteţi trimite mesaje unui obiect,
fără să cunoaşteti modul de lucru al obiectului respectiv. Tot ceea ce trebuie să ştiţi este tipul valorilor acceptate
de o anumită metodă. Ca urmare, obiectul care modelează televizorul poate fi extrem de complex dar dvs sau
utilizatorul final trb să ştiţi doar pe ce buton al telecomenzii să apasati. Apasarea unui buton de telecomanda
trimite un mesaj la obiectul software care reprezintă televizorul, specificând metoda care trebuie apelată şi
valorile care trebuie metodei respective.
8
Clasele
Clasele încapsulează obiecte. O singură clasă poate fi folosită pentru instanţierea mai multor obiecte. Aceasta
înseamnă că puteţi avea mai multe obiecte active sau mai multe instanţe ale aceleiaşi clase.
Obiectul care descrie funcţiile unui televizor este o instanţă a unei clase numită television.
Retineti faptul că fiecare obiect al unei clase are propria stare şi propriul comportament. Prin încapsularea
obiectelor într-o structură de clasă, puteţi să grupati seturi de obiecte după tipul lor. In interfaţa Java de
programare a aplicaţiilor sunt descrise mai multe clase. Fiecare clasă din interfaţa API specifică un set de obiecte
care realizează funcţii înrudite şi au caracteristici comune. Clasele pe care le creaţi pot servi unor scopuri
asemănătoare.
SUGESTIE:Imaginaţi-vă o clasă ca pe o unitate de cod care ţine un set de module de cod specifice şi, in general,
înrudite, numite obiecte.
Bibliotecile
In C++ şi în alte limbaje de programare o colecţie de clase sau de funcţii înrudite formează o bibliotecă. Java
pune o amprentă proprie asupra bibliotecilor, folosind termenul de pachet pentru descrierea unei colecţii de clase
înrudite. Asa cum clasele încapsulează obiecte , pachetele încapsulează clase. In secţiunea “Modificatorii de
acces “ veţi vedea că acest nivel suplimentar de încapsulare face mai uşor de controlat accesul la metode.
Moştenirea
Moştenirea este o caracteristică puternică a limbajelor de programare orientate pe obiecte, care vă permite să
refolosiţi codul şi să extindeţi funcţionarea claselor existente. In cazul în care creaţi o clasă pentru trasarea pe
ecran a unui dreptunghi umbrit, puteţi să extindeţi clasa astfel incât să mute dreptunghiul desenat într-o altă
poziţie pe ecran, fără să rescrieti clasa originală. De asemenea, puteţi să extindeţi clasa folosită iniţial pentru
desenarea dreptunghiului , astfel incât să creeze un set de dreptunghiuri care pot fi selectate de utilizator. In
ambele cazuri , noua clasa moşteneste metodele clasei originale pentru crearea dreptunghiului umbrit şi extinde
metode pentru efectuarea unor operaţii specifice.
Folosind acest aspect al programării orientate pe obiecte , puteţi să creaţi o nouă clasă care moşteneşte
funcţionarea unei clase extinse . Puteţi apoi să extindeţi funcţiile vechii clase , astfel incât să corespundă
necesităţilor curente. Clasa television poate avea subclase pentru televizoarele alb-negru , pentru televizoarele
color sau pentru televizoare de dimensiuni mari. Noua subclasă television nu este limitată de variabile de instanţă
sau de metodele clasei superioare (superclasa):ea poate include variabile de instanţă şi metode care nu sunt
definite în superclasă. De asemenea, noua subclasă poate redefini metodele moştenite.
Modificatorii de acces
În programarea orientată pe obiecte, accesul la metodele şi variabilele obiectelor este controlat prin intermediul
modificatorilor de acces. Limbajul de programare Java defineşte patru niveluri de control al accesului:
• Metode şi variabile private
• Metode şi variabile protejate
• Metode şi variabile prietenoase
• Metode şi variabile publice
9
Metode şi variabile protejate
Metodele şi variabilele controlate de obiectul cărora le sunt asociate şi care nu sunt accesibile decât obiectelor
din clasa respectivă sau din subclasele clasei respective se numesc protejate. Avantajul acestui nivel de control
este că nu se permite accesul nelimitat la metode şi variabile decât obiectelor unor anumite clase. Metodele şi
variabilele protejate din Java sunt accesibile numai obiectelor care aparţin aceleiaşi clase sau subclaselor clasei
respective.
Principiul lui Peter: înţelegerea diferitelor niveluri de acces este simplă dacă luaţi în
considerare domeniul:
10
Aceste caracteristici constituie forţa limbajului Java şi motivul popularităţii acestuia. Pe masură ce veţi dezvolta
programe Java, veţi descoperi că multe dintre acestea sunt înrudite şi rezulta din dezvoltarea limbajului pentru:
* Folosirea în medii de reţea distribuite
* Asigurarea performanţei ridicate
* Refolosirea codului
* Asigurarea securitatii
11
Proiectare pentru refolosirea codului
Deşi proiectarea orientată pe obiecte a limbajului Java este elementul cheie care face posibilă refolosirea codului,
proiectanţii acestui limbaj stiau că mediul reţelelor este într-o schimbare rapidă şi permanentă. Ca urmare pentru
a se asigura că dezvoltatorii Java vor putea refolosi codul existent, chiar daca mediul se schimbă, Java a fost
proiectat ca un limbaj dinamic şi robust.
Aceste obiective se realizează prin întârzierea lărgirii obiectelor prin legarea dinamică a claselor în timpul
execuţiei, ceea ce împiedică apariţia erorilor în cazul modificării mediului de lucru după compilarea programului
sursă. O altă cale de evitare a erorilor este verificarea structurilor de date atât la compilare, cât şi în timpul
execuţiei.
Între robusteţe şi fiabilitate există o strânsă legatură. Pentru ca Java să fie un limbaj robust trebuie să fie în
acelaşi timp şi fiabil. Asa cum am arătat mai devreme, principalele probleme în programele CC++ sunt pointerii
şi gestionarea memoriei. Ca urmare robustetea şi fiabilitatea sunt asigurate prin eliminarea pointerilor, prin
folosirea verificării dinamice a limitelor, ceea ce elimină posibilitatea violării acestora şi prin gestionarea
automată a memoriei, înlaturîndu-se astfel posibilitatea apariţiei fisurilor şi a violarilor de memorie.
Aplicaţii şi miniaplicaţii
Indiferent dacă aţi aflat despre limbajul Java explorând spatiul cibernetic sau citind o publicaţie de specialitate,
aţi remarcat probabil, folosirea termenilor de aplicaţie şi miniaplicaţie. Din nefericire editorii, atât în spatiul
cibernetic cât şi în publicaţiile tipărite, presupun că dumneavoastră cunoaşteţi diferenţa dintre aceşti doi termeni.
Termenul de miniaplicaţie Java (applet) se referă în general la un mic program Java creat pentru a fi folosit în
sistemul Word Wide Web. Miniaplicaţiile Java necesită un program de vizualizare extern, aşa încât pentru a
putea folosi o miniaplicaţie, aveţi nevoie de un browser Web sau de un program specializat de vizualizare (applet
vierwer). Retineţi faptul că dimensiunea mică a unui applet este ceva relativ şi că elementul definitoriu este
faptul că are nevoie de un program de vizualizare extern.
12
Termenul de aplicaţie Java se referă la un program care poate fi folosit în mod independent. În argoul
informaticienilor, termenul folosit pentru acest tip de programe este app. Aplicaţiile Java nu necesită un program
de vizualizare extern. Aceasta înseamnă că puteţi să executaţi o aplicaţie Java folosind direct interpretorul Java.
Reţineţi că există programe Java care pot fi rulate atât că miniaplicatii folosind un program de vizualizare extern
cât şi ca aplicaţii independente.
Spaţii de nume
Cu cât programul pe care îl creaţi este mai mare cu atât creşte posibilitatea de refolosire a numelui unei variabile
sau al unui parametru. În C++, rezolvarea conflictelor legate de spaţiile de nume putea necesita ore sau chiar zile
de lucru, mai ales dacă foloseaţi biblioteci mari de clase. Java are un sistem riguros de denumire, care permite
evitarea conflictelor legate de spaţiile de nume, prin imbricarea numelor pe mai multe niveluri.
Fiecare componentă a unui nume este imbricată în conformitate cu unul dintre urmatoarele niveluri:
* 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 Java este responsabil pentru menţinerea şi translatarea spaţiului de nume. Interpretorul identifică
numele de obiecte prin verificarea succesivă a spaţiilor de nume. Spaţiile de nume sunt ordonate după
precedenţă, pornind de le spaţiul de nume cu cel mai înalt nivel, spaţiul de nume al pachetului, pâna la nivelul cel
mai scăzut, cel al blocului local imbricat. În general Java foloseşte prima potrivire de nume descoperită.
Nivelurile spaţiilor de nume formează o ierarhie care oglindeşte structura reală a pachetelor şi a claselor Java.
Numele asociate fiecarui nivel sunt separate de numele din alte niveluri prin caracterul punct. Veţi înţelege mai
bine conceptele de spaţiu de nume şi de nivel în momentul în care veţi vedea cum sunt folosite. Pachetele Java
din biblioteca originală de pachete conţin în mod prestabilit numele java, urmat în general, de un nume de clasă
din cadrul pachetului. În exemplul de mai jos, puteţi vedea declaraţia clasei BorderLayout din pachetul AWT
(Abstract WIndowIng Toolkit):
java. awt. BorderLayout
Convenţiile spaţiilor de nume sunt respectate şi de apelurile funcţiilor. În exemplul de mai jos, puteţi vedea
modul de apelare a unei metode numită println:
Calea completă de acces la metoda println( ) din spaţiul de nume Java este:
Java determină locul în care se află metodele println( ) prin căutarea apariţiei unice a clasei System în
spaţiul de nume curent. După ce descoperă ocurenţa clasei System, Java cauta apariţia subclasei out, apoi a
metodei println( ).
Fişierul care conţine instrucţiunile scrise în limbajul Java se numeşte sursă sau cod sursă. Fişierele sursă au
extensia . java . Aceste fişiere trebuie să fie de tip text. În urma compilării fişierelor sursă de către
compilatorul Java, javac, rezultă un cod de octeţi care poate fi executat.
13
În limbajele procedurale, cum ar fi Pascal, codul executabil complet al programului este stocat, in general, într-
un singur fişier. În limbajele orientate pe obiecte, precum Java, codul executabil este stocat conform structurii
clasei sau a bibliotecii. După compilarea codului sursa Java obţineţi câte un fişier pentru fiecare clasă declarată
în codul sursă. Aceste fişiere au extensia . class şi se numesc unităti de compilare.
Unităţile de compilare Java conţin instrucţiuni de pachet şi instrucţiuni de import, precum şi declaraţii ale
claselor şi interfeţelor. Aceste patru componente formează structura de bază a unui program Java.
Instrucţiuni de pachet
Interfaţă Java API include în pachetul principal Java un număr de alte pachete. Toate clasele şi obiectele pe care
le creaţi sunt grupate în mod prestabilit în acest pachet. Ca urmare, dacă nu specificaţi altceva, Java foloseşte
calea de acces curentă şi presupune că fişierele cu codul compilat se află în directorul curent, la rularea unui
program Java. Pentru a preciza poziţia pachetelor, folosiţi instrucţiunile de pachet.
Cei care experimenteaza limbajul Java şi nu îşi propun dezvoltarea lui pot folosi structura de pachet prestabilită.
Dar dacă urmariti să creaţi aplicaţii Java şi vreţi ca obiectele şi clasele să respecte o structură de denumire a
pachetelor diferită de cea prestabilită, trebuie să includeţi în codul sursă o instrucţiune de pachet:
package NumePachet
Când definiţi noile pachete, trebuie să respectaţi structura ierarhică de denumire a limbajului Java. Acesta
înseamnă că nivelurile din structura de denumire a pachetelor trebuie să fie separate de numele de pachete din
celelalte niveluri prin caractere punct. Iată un exemplu de instrucţiuni de pachet pentru un spatiu de nume cu mai
multe niveluri:
package MyPackages.NumeSubPachet;
Numele de pachete de pe fiecare nivel al spaţiului de nume trebuie să respecte structura de directoare a
sistemului de fişiere, deoarece Java transformă numele pachetelor în căi de acces pentru localizarea claselor şi
metodelor asociate pachetelor. Acest lucru este realizat prin înlocuirea punctelor cu separatorii specifici
sistemului de fişiere. Asadar, numele pachet MyPackages. Gizmos va fi transformat în urmatoarea cale de
acces într-un sistem UNIX:
MyPackages/Gizmos
MyPackages/Gizmos
Java localizează clasele asociate unui pachet folosind calea de acces obţinută aşa cum am aratat mai sus. Java va
căuta pachetul MyPackages.Gizmos, precum şi clasele şi metodele asociate acestuia, în
directorul \MyPackages\Gizmos.
Specificatiile limbajului Java recomandă folosirea numelor unice de pachete, legate de domeniul Internet în care
pachetele pe care le creaţi vor fi disponibile pentru utilizatorii aflati la distanţă. În plus, se recomandă ca numele
domeniului principal să fie scris cu litere mari - de exemplu, COM, EDU sau GOV.
Ţinând seama de ordinea de precedenţă folosită de Java, schimbaţi ordinea care identifică domeniul, componentă
cu componentă. Astfel, un pachet disponibil global, numit zoom şi asociat cu mcp. com, se va numi COM.
mcp. zoom. Numele este tranformat în urmatoarea cale de acces pentru un sistem UNIX:
COM/mcp/zoom
Pentru un sistem WIndows 95/NT, acelaşi nume de pachet va fi transformat în cale de acces:
14
COM\mcp\zoom
Instrucţiuni de import
Ca şi în alte limbaje de programare, Java include un set de funcţii principale, accesibile global. Aceste funcţii
sunt grupate în pachetul java.land. Pentru a obţine accesul la pachete, clase şi obiecte care nu se află în
această bibliotecă, folosiţi instrucţiuni de import. Acestea vă ajută să definiti şi să rezolvaţi spaţiul de nume
curent, permiţând rezolvarea unui pachet importat cu ajutorul numelor claselor componente.
OBSERVATIE: dacă nu folosiţi instrucţiuni de import, trebuie să specificati referinţa completă a pachetului
inaintea numelui fiecarei clase din codul sursă. Această procedură poate deveni foarte repede obositoare, mai
ales în programele mari.
Asadar, este recomandată folosirea instrucţiunilor de import.
Instrucţiunile de impot trebuie să apară inaintea altor declaraţii din codul sursă si, în general, după instrucţiunile
de pachet, dacă acestea sunt folosite. Ideea care stă la baza folosirii instrucţiunilor de import este aceea de a
ajuta compilatorul Java să găsească metodele corespunzatoare şi de a
evita conflictele între nume. Pentru a face disponibile clasele Java de tipAWT, puteţi să folosiţi în codul sursă
urmatoarele instrucţiuni de import:
import java.awt ;
Această instrucţiune permite compilatorului Java să trimită apelul metodei awt. Button către java. awt.
Button. De asemenea, Java vă permite să importaţi numai tipuri de clase de care aveţi nevoie. Pentru aceasta,
folosiţi urmatoarele instrucţiuni de import:
Această instrucţiune permite compilatorului Java să trimită apelul metodei Button către java. awt. Button.
O metodă mai eficientă pentru importul pachetelor este importul acestora la cerere, astfel:
Caracterul asterisc din instrucţiunea de import îi spune compilatorului să importe numai clasele de care este
nevoie. În acest fel, puteţi să adăugati în mod dinamic noi tipuri în spaţiul de nume;această instrucţiune de
import permite compilatorului Java să trimită apelul metodelor de tip Button către java. awt. Button.
SUGESTIE: Majoritatea programelor Java folosesc instrucţiuni de import la cerere. Deşi în acest fel scrieţi mai
puţin cod, este bine să fiţi cât mai explicit în privinţa pachetelor de care aveţi nevoie. Mai precis, nu este indicat
să folosiţi instrucţiuni de import care fac disponibile toate clasele limbajului Java. Atunci când două clase din
două pachete diferite au acelaşi nume, va apărea un conflict de nume dacă nu precedati numele clasei cu numele
pachetului.
Declaratiile de clasă
În Java toate clasele sunt derivate dintr-o clasă sistem numita Object. Object este radacina ierarhiei de clase,
ceea ce înseamnă că toate metodele variabilele clasei Object sunt disponibile tuturor celorlalte clase. Aceasta
structură face posibilă refolosirea codului Java. În mod prestabilit, toate clasele sunt private, dacă nu sunt
declarate publice în mod explicit.
Declaratiile de clasă fără modificatori respectă următorul format general:
15
class nume {
Java acceptă numai moştenirea simplă a claselor. Ca urmare, toate clasele, cu exceptia claselor Object au o
singură clasă parinte, numită superclasă. Aceasta înseamnă că orice clasă pe care o creaţi poate extinde şi
moşteni funcţiile unei singure clase. Deşi aceasta poate părea o limitare faţă de limbajele de programare care
permit moştenirea multiplă, Java permite moştenirea multiplă a metodelor claselor prin intermediul interfeţelor
claselor. Aşa cum veţi vedea în secţiunea urmatoare, interfaţa unei clase este definită printr-o declaratie de
interfaţă.
Declaratiile de interfaţă
Interfeţele sunt clase abstracte. Prin intermediul unei interfeţe, puteţi să definiţi protocoalele pentru metode şi
pentru variabile finale fără să vă puneţi problema implementarii specifice. Acest lucru vă permite să creaţi un
plan al structurii de programare pe care o veţi defini mai târziu. Interfeţele pot fi extensii ale uneia sau ale mai
multor interfete. În mod prestabilit, toate interfeţele sunt private, dacă nu sunt declarate publice în mod explicit,
dar toate metodele şi constantele interfeţei sunt în mod prestabilit publice.
OBSERVATII: Variabilele finale sunt asemanatoare cu constantele denumite folosite în alte limbaje de
programare. Valorile asociate constantelor şi variabilelor finale nu pot fi modificate.
Deoarece nu trebuie să puneţi la punct toate detaliile privind modul intern de lucru al metodelor asociate
interfeţelor, acestea se pot dezvolta foarte rapid. Ulterior, puteţi să implementati interfaţa într-o declaratie de
clasă. Deoarece o singură clasă poate să implementeze mai multe interfeţe, clasa poate să partajeze aceeaşi
interfaţă cu alte clase sau instanţe ale unei clase. Acest lucru furnizează o mai mare flexibilitate şi permite unei
clase să moşteneasca toate proprietatile tuturor apelurilor de metode asociate cu interfeţe multiple, asociate, la
rândul lor, cu clase multiple.
Diferenţa majoră dintre o clasă şi o interfaţă este aceea că interfeţele nu pot stoca date. Mai mult, interfeţele nu
pot conţine implementări ale metodelor, ci doar declaraţii ale acestora. Declaraţiile de interfaţă fără modificatori
respectă următorul format general:
interface nume {
/ / metode şi variabile statice asociate interfeţei
}
Singura deficienţă a interfeţelor este aceea că necesită legarea dinamică (dynamic binding), ceea ce reduce
performanţele de execuţie. Retineti, totuşi, că folosirea interfeţelor pentru a realiza moştenirea multiplă reduce
suprasarcina de execuţie, in comparatie cu metodele de moştenire multiplă folosite în C++.
16
Specificaţiile Java şi interfaţa API
Java a fost lansat oficial în luna mai a anului 1995, la SunWorld`95. De atunci , limbajul a evoluat şi, ca urmare,
specificatiile curente ale limbajului de programare Java sunt foarte diferite de cele prezentate iniţial.
Prima versiune a limbajului Java, creată pentru a fi folosită în Internet, a fost Java Alfa. Versiunile Alfa ale
aplicaţiilor şi limbajelor de programare sunt, în general, livrate dezvoltatorilor pentru revizuire, comentarii şi
corectarea erorilor. Ultima versiune Alfa a limbajului Java este Java Alfa3, folosită de versiunea Alfa a
browserului WebHotJava.
HotJava a fost dezvoltat de către firma Sun, ca o exemplificare a posibilităţilor limbajului Java, şi este scris
chiar în limbaj. În ciuda faptului că versiunile Alfa ale limbajului Java şi ale browserului HotJava au
posibilităţi limitate, acestea s-au raspândit foarte rapid, chiar şi după apariţia versiunilor Java 1. 0. Versiunea
Alfa include browserul HotJava , punând limbajul Java şi browserul HotJava la dispoziţia tuturor celor care
vor să dezvolte aplicaţii Java pentru Internet sau să afişeze pagini Web care conţin miniaplicaţii Java. Până spre
sfârşitul anului 1995 HotJava a fost a fost singurul browser disponibil pentru afişarea paginilor Web conţinând
miniaplicaţii Java.
Dezvoltarea limbajului era în plină desfasurare în momentul în care Sun a scos pe piaţă versiunea Java Pre-Beta
1. Odată cu această versiune, au apărut schimbari majore în structura limbajului Java, printre care includerea
superclasei AWT. Superclasa AWT este folosită pentru afişarea obiectelor grafice, precum butoane şi ferestre
derulante. Aceste modificări ale structurii interfeţei Java API fac ca versiunile de după Pre-Beta 1 să nu fie
compatibile cu versiunea Alfa. De asemenea, versiunea Pre-beta 1 a introdus noi instrumente de lucru Java,
precum programul de vizualizare a miniaplicaţiilor şi depanatorului Java.
La câteva luni după apariţia versiunii Java Pre-Beta 1, Sun a lansat pe piaţă versiunea Java Beta. În general,
versiunile Beta ale aplicaţiilor şi limbajelor sunt accesibile unui număr mai mare de persoane şi se concentrează
asupra corectarii erorilor. Deşi versiunea Java Beta corectează unele erori şi imbunătăţeşte securitatea,
principalele modificări aduse limbajului sunt legate tot de superclasa AWT.
Ultima versiune Beta a limbajului a fost Java Beta 2, care a adăugat noi funcţionalităţi pachetelor Java. Deşi a
reprezentat o schimbare majoră a interfeţei Java API, versiunea Java Beta 2 a modificat interfaţa API astfel încât
aceasta să fie compatibilă cu modul în care browserul Netscape Navigator folosea miniaplicaţii scrise cu
versiunea Beta.
Deoarece toate versiunile programului Netscape Navigator, începând cu versiunea 2. 0 Beta 4, pot afişa
miniaplicaţiile Java Beta, mulţi dezvoltatori Internet au încercat să creeze asemenea miniaplicaţii. Din acest
motiv Java Beta 2 API foloseşte eticheta Netscape<APPLET>şi nu eticheta <APP>utilizată anterior. Eticheta
<APPLET> este standardul pentru versiunea 1. 0 şi pentru versiunile ulterioare ale interfeţei.
O altă schimbare cu efecte majore adusă limbajului în versiunea Beta 2 a fost posibilitatea de a încărca clasele
din fişiere arhivate(zip). Înainte de această modificare, la instalarea în sistemul de fişiere, Java a creat
directoarele subdirectoarele şi structura de fişiere care respectă structura interfeţei Java API. Discuţiile anterioare
despre cautarea spatiilor de nume prin transformarea numelor în căi de acces arăta clar de ce era nevoie de acest
lucru. De exemplu, în versiunile anterioare pentru a gasi metoda println, Java căuta spaţiile de nume de-a
lungul întregii căi de acces: java.lang.System.out.println. Calea de acces era obţinută prin înlocuirea
punctelor cu separatorul corespunzător sistemului. Java se baza pe structura de directoare a sistemului de fişiere,
iar pe harddisk erau instalate mii de fişiere.
Posibilitatea de încărcare a claselor din fişierele arhivate a permis comprimarea întregului conţinut al interfeţei
API într-un singur fişier, economosind spaţiul şi evitând aglomerarea discului. La instalarea versiunii curente a
limbajului Java este copiat pe disc un singur fişier, classes.zip, în subdirectorul lib. În acest fel atunci când
17
programul de încărcare a claselor şi compilatorul Java efectuează o căutare în spaţiul de nume, aceasta se face
mai întâi în calea de acces corespunzătoare.
Dacă fişierul clasei căutate nu este găsit, este căutat fişierul arhivat în classes.zip.
În viitor: Java va permite să arhivati şi pachetele sau clasele creeate de dumneavoastră. Stabilirea mediului de
lucru Java şi creearea pachetelor arhivate sunt discutate în capitolul 2. ”Prezentarea setului de dezvoltare
Java(JDK)”.
În ianuarie 1996, firma Sun a lansat pe piaţă versiunea Java 1. 0. Modificările faţă de versiunea Beta 2 sunt
minore şi se referă în principal la corectarea unor erori. Aceasta înseamnă că miniaplicaţiile Java Beta2 sunt
compatibile cu miniaplicaţiile Java1. 0. De asemenea browserul Netscape Navigator poate afişa atât
miniapliacatiile Java Beta 2, cât şi miniaplicaţiile Java 1. 0.
Iniţial, Sun a păstrat interfaţa Java API din versiunea Java 1. 0. Interfaţa Java API conţine surse de cod ce pot fi
folosite în aplicaţii. Codul organizat în biblioteci de pachete ce conţin clase şi metode proiectate pentru a
simplifica programarea în limbajul Java. Cel mai important lucru legat de pachetele API este că acestea au fost
foarte bine testate. Veţi vedea că aceste pachete conţin toate funcţiile de bază necesare. În acest fel, puteţi să
economisiţi timp şi să începeţi dezvoltarea aplicaţiilor Java fără să fie nevoie să reinventaţi roata.
Pentru a se asigura că modelul de securitate oferit de Java este optim pentru Internet, Sun a cerut programatorilor
să-l testeze. La câteva luni după apariţia Java 1. 0, a fost descoperită o fisură în implementarea modelului de
securitate în codul de octeţi. Această fisură, identificată de cercetătorii de la Universitatea Princeton, dădea
posibilitatea “spărgătorilor” experimentaţi să folosească o adresă IP(Internet Protocol)care permitea
miniaplicaţiei accesul la un alt calculator decât cel pe care era executată. Sun a rezolvat problema şi a lansat
imediat versiunea 1. 0. 1
La scurt timp, au fost descoperite şi alte probleme de securitate. În mai 1996, Sun a lansat versiunea 1. 0. 2.
Această versiune rezolva problemele de securitate descoperite, corecta câteva erori minore din pachetul Java şi
introducea unele modificări ale interfeţei claselor. O altă eroare de securitate, descoperită în iunie 1996, făcea
posibilă manipularea modului în care sunt atribuite obiectele şi a modului în care acesta lucrează împreună,
pentru a submina sistemul de tipuri Java. După ce un cercetator din Marea Britanie a descoperit această
deficienţă, Sun a revizuit complet sistemul de securitate şi a scos o nouă versiune actualizată a setului JDK.
Deoarece firma Sun şi partenerii acesteia pentru dezvoltarea limbajului Java şi-au declarat intenţia de a folosi în
continuare interfaţa API actuală, se poate presupune că limbajul Java a atins, în sfârsit, un nivel de standardizare.
Aceasta este o veste bună pentru toţi cei care vor să dezvolte aplicaţiile în Java.
Evoluţia limbajului nu s-a oprit. Sun va continua să îl dezvolte şi a anunţat deja o nouă versiune majoră a
limbajului. Către sfârşitul anului 1997, este aşteptată o versiune completă JDK 1. 1. Din fericire, introducerea
standardizării ne asigură că programele create astăzi vor putea fi folosite şi mâine.
18
Aceasta înseamnă că orice dezvoltator poate crea un interpretor pentru maşina virtuală Java. (In capitolul24, vi se
oferă o imagine detaliată a sistemului de execuţie şi a maşinii virtuale Java)
REZUMAT
Aşa cum aţi văzut în acest capitol, dezvoltatorii de la JavaSoft-Sun au depus mari eforturi pentru crearea unui
limbaj de programare revoluţionar. Nici un alt limbaj de programare nu are forţa şi flexibilitatea limbajului Java.
Java este limbajul de programare al anilor `90 şi chiar al următorilor. Limbajul Java pune la dispoziţie o
structură uşor de folosit, modelată pe baza a doua dintre cele mai populare limbaje de programare, C şi C++.
Proiectanţii limbajului Java au eliminat însă problemele din C şi C++. Dacă doriţi să dezvoltaţi aplicaţii Java,
veţi vedea că proiectarea orientată pe obiecte a limbajului este prietenoasă şi familiară. De asemenea, veţi vedea
interfaţa Java API economiseşte multe ore de muncă şi că puteţi crea programe mai bune, fără să fie nevoie să
reinventaţi roata.
19