Sunteți pe pagina 1din 19

CAP 1.

Prezentarea limbajului Java


Reeaua Internet este locul n care s-a dezlnuit pt. prima dat mica fiar numit Java. Acum, mii de programatori, dezvoltatori de Internet, editori de Web i firme productoare de software se ntrec n a nva totul despre acest instrument de lucru, pt. a revoluiona reeaua Internet i modul de scriere a programelor. Cei care nu sunt conectai la Internet ar putea s se ntrebe de ce atta agitaie. n definitiv, i despre C++ s-a spus c va revoluiona industria software; dar, aa cum vei vedea n curnd, diferena ntre C++ i Java const n faptul c Java i ine promisiunile. Java promite s aduc modificri revoluionare n software i n Internet; acest capitol v va arta cum. Pentru dezvoltatorii de Internet, programatorii i editorii Web, este momentul unei retrospective a evoluiei 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 rspndit cu viteza vntului. n ianuarie 1996, Sun Microsystems a lansat oficial versiunea Java 1. 0, iar n acest moment, putei obine 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 prea ceva de domeniul imposibilului, dar nimic nu este mai departe de adevr. Dac tii s creai documente HTML, SGML sau VRML, atunci vei putea crea i aplicaii sau documente mbuntite cu ajutorul programelor Java vei descoperi c limbajul Java este uor de invat 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 civa ani la dezvoltarea unui limbaj puternic pentru anii 90 i pentru mai departe. Java corespunde acestor promisiuni, fiind cel mai robust, mai uor 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 aplicaii puternice, conine componente avansate, cum ar fi posibilitile de lucru cu informaiile multimedia, care fac prezentrile multimedia s poat fi create mai uor ca niciodat, i elimin toate acele lucruri pe care le-am detestat cu toii n C i C++, precum motenirea multipl, supraincrcarea 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 fcuta la apariia programrii orientate pe obiecte (OOP- Object Oriented Programming) este posibilitatea se refolosire a codului. Dar, aa cum v pot spune programatorii C++ (daca suntei programator C++, probabil tii deja acest lucru), inteniile bune nu nseamn mare lucru atunci cnd este vorba de refolosirea codului C++. Prin contrast, n Java vei vedea imediat avantajele refolosirii codului. Nu mai este nevoie s dezvoltai aplicaii diferite pentru platforme diferite. n Java, putei s dezvoltai o singur aplicaie care s fie folosit imediat pe mai multe platforme. Imaginati-v nenumratele ore de munc pe care le putei economisi dac dezvoltai o singur aplicaie pentru sistemele Windows, UNIX i Macintosh. Lund n considerare faptul c marile firme pot economisi milioane de dolari la un singur proiect folosind independena de platform a limbajului Java, nu este de mirare c Java a devenit un cuvnt cheie n tehnologiile software i Internet. Java a depit imaginaia celor pasionai de tehnic. Companii din toate sectoarele de activitate, de la finane la desfacere, examineaz modaliti de folosire a limbajului. Oamenilor de afaceri din domeniul software i programatorilor individuali, independena de platform a limbajului Java le permite dezvoltarea unor aplicaii puternice pentru sistemele de operare cu care nu au mai lucrat niciodat. Dac rulai o afacere legat de dezvoltarea software sau de Internet, indiferent dac aceast
1

afacere implic o singur persoan sau un conglomerat de firme, vei putea avea acces la noi clieni i la noi piee de desfacere. ntr-o epoc n care toat lumea este interesat de profit, o tehnologie care v permite s vindei mai mult, s producei mai mult i s avei acces la o pia mai larg (teoretic, la toi cei care dein un calculator) este cu siguran ceva ce merit studiat. n plus, permind folosirea mediului de programare convenabil, Java ofer mai mult putere, ceea ce reprezint un avantaj pentru cei cu aptitudini tehnice limitate, dar i pentru experii n calculatoare. n cazul n care avei experient de lucru cu un alt limbaj de programare, vei descoperi c Java este surprinztor de uor de invat. Dezvoltatorii limbajului Java au proiectat cu mare grij structura noului limbaj i nu este intmpltor 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 cteva ori mai rspndite dect cele din limbajele de programare aflate cel mai aproape n competiie i, de fapt, se poate spune c sunt singurii competitori adevrai. Aadar, pentru a se asigura c Java este uor de folosit i de ineles, dezvoltatorii au modelat limbajul dup C i C++. De asemenea, Java mprumut extensii din Objective C. Aceste extensii permit o rezoluie dinamic a metodelor. n felul acesta, trecerea de la C, Objective C i C++ la Java se face foarte uor. Orice programator care a avut vreodat probleme cu pointerii sau cu gestionarea memoriei ar trebui s alerge ctre Java cu braele deschise. Java elimin pointerii, administreaz automat memoria i conine o procedur de colectare a gunoiului (eliminrea fisurilor de memorie) care ruleaz n fundal. n mediile de lucru distribuite, cum ar fi World Wide Web, mecanismele stricte de securitate sunt esenialefirmele 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++. Sprgtorii pot folosi programe aparent nevinovate, care foreaz pointeri n memorie, fur informaii din sistem i l blocheaz. n Java nu putei s forati 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 secvene de cod periculoase. n plus, mediul de execuie Java impune reguli stricte pentru rularea programelor lansate de pe calculatoare aflate la distan. Aceste programe nu au acces la reeaua local, la fiierele stocate n sistemul local i nu pot lansa n execuie programe locale.

Evoluia limbajului Java


Ca multe alte apariii revoluionare n tiin i tehnologie, limbajul Java este rezultatul eforturilor concertate ale unor grupuri de vizionari. Totui, ceea ce se poate prea surprinztor chiar ocant n privina limbajului Java este faptul c aceast ingenioas dezvoltare tehnologic este rezultatul unui proiect care nu a mers perfect de la inceput. Dac proiectul care a luat fiin cu numele de cod Green n primvara anuui 1991 ar fi decurs conform planurilor, domeniul firmei Sun Microsystems ar fi fost produsele electronice comerciale i lumea ar fi fost astzi lipsit de frumuseea limbajului Java. Pentru a inelege evoluia i noutatea reprezentat de limbajul Java, trebuie s ne intoarcem la anul 1991. n 1991, firma Sun Microsystems i incepea evoluia n topul productorilor de staii de lucru UNIX. n anul precedent, compania avusese o cifr de afaceri de 2, 5 miliarde $, fa de numai 210 milioane $ n anul 1986, i ascensiunea firmei prea a fi de nestvilit. Notorietatea firmei Sun s datora n mare masur eforturilor de pionierat n domeniul sistemelor deschise, care permit construirea i ntreinerea unor medii deschise de calcul n reea. Multe corporatii au mbriat ideea sistemelor deschise, promovate de Sun Microsystems, deoarece costurile de achiziionare i de ntreinere ale sistemelor inchise deveniser greu de suportat. Sun i incepuse ascensiunea, i conducerea firmei tia acest lucru. Compania a lansat un proces de dezvoltare a noilor tehnologii, cu scopul de a menine pe termen indelungat fenomenalul ritm de cretere. Unul dintre domeniile cheie asupra crora s-a concentrat atenia firmei a fost piaa
2

produselor electronice comerciale; proiectul Green s-a nscut 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 piaa 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 att fiabile ct i portabile. Elementul cheie al succesului firmei Sun pe aceast pia era posibilitatea de portare a sistemului pe mai multe platforme. Planul iniial prevedea dezvoltarea proiectului n C++, dar dezvoltatorii au avut foarte multe probleme n incercarea de dezvoltare a compilatorului C++. Curnd, acetia i-au dat seama c, dac vor s reueasc, trebuie s incerce o soluie nou i indraznea; ca urmare, James Gosling a inceput s lucreze la dezvoltarea unui nou limbaj, numit Oak. Mai trziu, 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. Dei 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 acelai 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 licitaie 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 muli au prsit grupul Green. Acestea se intmplau la inceputul anului 1994 i programatorii firmei Sun au inceput s caute noi domenii de activitate. n aceast perioad a inceput migraia n mas a celor de la National Center for Supercomputing Applications ( NCSA) ctre Silicon Valley. Unii dinte ei au infiinat compania intitulat n prezent Netscape Communications Corporation. Silicon Valley era locul potrivit pentru idei legate de spaiul cibernetic i chestia numit World Wide Web incepuse s se extind aa c nu intmpltor cei din grupul Green s-au orientat ctre Internet i Web, n care au vazut o soluie a problemelor lor. Mediul multiplatform distribuit al reelei Internet era perfect pentru testarea proiectului. Restul, aa cum se spune, este istorie. Patru ani dup lansarea proiectului, cei care au perseverat n dezvoltarea lui au reuit. Astzi, 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 imbunatite cu animaie i multimedia. Milioane de utilizatori Web vor s afle unde pot gasi ultimile pagini Web care conin programe Java. Sun Microsystems a reuit cu succes s in pasul cu aceste solicitri. Licena 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 astzi, Java i setul de dezvoltare Java ( JDK ) sunt oferite gratuit dezvoltatorilor.

Un scurt istoric al reelei Internet i al sistemului Word Wide Web


Privind evoluia n timp a limbajului Java i a sistemului WWW, se pare c acestea au urmat un curs de dezvoltare similar. n definitiv, limbajul Java a fost dezvoltat pentru a fi folosit n medii distribuite i n sisteme deschise. WWW este un sistem informaic deschis, creat pentru a fi folosit n mediul distribuit al reelei Internet. Att Java ct i WWW au fost proiectate pentru a fi portabile, robuste i uor de folosit. De asemenea, Java asigura rezolvarea unor importante probleme de securitate n Web. Cum se mbin aceste elemente i de ce este Java att de important pentru dezvoltarea reelei Internet? Pentru a inelege mai bine legtura dintre Java, Internet i WWW, s aruncm o privire asupra istoricului reelei Internet i a sistemului WWW.

Inceputurile reelei Internet


3

Dei astzi 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. Reeaua format a fost numit ARPANET ( Advanced Research Project Agency Network ). Reeaua ARPANET s-a extins; n 1972 erau conectate 50 de universiti i uniti de cercetare implicate n proiecte militare. La sfritul anilor 80 mai mult de 80. 000 de calculatoare erau conectate ntr-o serie de reele. n final, suma acestor reele a devenit ceea ce se numete Internet. Din 1969 pn n 1991, reeaua Internet a fost, n linii mari, un domeniu privat rezervat cercetatorilor, invamantului i armatei. Dei firmele comerciale se puteau conecta la Internet, politica reelei interzicea conducerea afacerilor prin intermediul acesteia. Situaia s-a schimbat n 1991, cnd interdicia privind activitile comerciale a fost ridicat. Aceasta s-a intmplat n primul rnd datorit formrii unei reele paralele care permitea separarea fluxului de informaii comerciale de cel al informaiilor necomerciale. n acest mod, a aprut posibilitatea conducerii unor activitati comerciale fr folosirea zonelor rezervate cercetarii i educaiei. Din acel moment, Creterea reelei Internet s-a facut intr-un ritm accelerat. Astzi, la Internet ca reea global, sunt conectate mai multe milioane de calculatoare i peste 50 de milioane de utilizatori.

Inceputurile sistemului Web


Privind inapoi, este greu de crezut c sistemul Web nu are dect civa ani vechime. Dezvoltarea sistemului WWW a inceput n 1989 la laboratorul european pentru fizica particulelor (European Laboratory for Particle Physics CERN). Web este creaia lui Tim Berners-Lee, care a propus acest sistem ca o modalitate de colaborare a fizicienilor din ntreaga lume prin intermediul informaiilor stocate n reea ca documente hipertext. Structura documentelor hipertext a fost definit cu ajutorul unui nou limbaj, numit HTML ( Hipertext Markup Language). Tim Berners-Lee a creeat acest limbaj ca subset al limbajului SGML (Standard Generalized Markup Language). Pentru transferarea documentelor HTML la distan, oriunde n lume, a fost creeat un nou protocol de transfer. Acest protocol, numit HTTP (Hypertext Transfer Protocol), ofer mijloace rapide pentru cutarea, preluarea i afiarea documentelor. Hipertextul v permite s navigai prin resursele de reea prin simpla apsare a unor butoane. Folosind o aplicaie client numita browser, putei s selectai anumite cuvinte cheie evideniate sau anumite zone dintr-un document pentru a v deplasa rapid la un alt document. Primul browser era un program n mod text, cu posibilitti limitate, din care cauz nu a avut un succes imediat n cadrul comunitaii Internet. De fapt, la inceputul anului 1993 nu existau mai mult de 50 de puncte de reea (site-uri) web n ntreaga lume. Comparnd acest numr cu miile de site-uri Web disponibile astzi, se poate spune c sistemul Web a aprut peste noapte. n prezent, exist aproximativ 100. 000 de site-uri Web. Catalizatorul acestei creteri exponeniale a fost un browser numit Mosaic. Acest browser, dezvoltat de NCSA, a permis utilizatorilor s exploateze posibilitile grafice ale sistemului Web i a corespuns asteptrilor. Astzi, sistemul Web este segmentul cu cea mai rapid cretere din Internet, iar Mosaic, browserul aflat n originea acestei dezvoltari, este doar unul dintre zecile de browsere disponibile. Succesul browserului Mosaic a fost elementul care a declanat, n 1994, migraia dezvoltatorilor de la NCSA ctre Silicon Valley. O parte dintre ei au format o companie cunoscut astzi sub numele Netscape Communications Co. Primul browser scos pe piaa de Netscape, Netscape Navigator, accepta multe dintre extensiile propuse pentru standardul HTML. Noile componente ale browserului au adus sistemul Web cu un pas mai aproape de interactivitatea completa multimedia i au ajutat firma Netscape s declaneze o noua perioada de cretere exploziv a sistemului Web. 1995 a fost anul multor inceputuri n Web. Microsoft a introdus primele secvene video i primele documente care conineau sunete. Netscape a lansat o nou versiune a browserului Navigator, care accepta cadrele(frames), adaugirile(plug-ins) i multe alte caracteristici speciale. Gavin Bell, Athony Parisi, Mark Pesce i altii au pus la punct specificaiile 1. 0 finale ale limbajului de modelare a realitii virtuale ( VRML-Virtual Reality Modelling Language ), iar Sun Microsystems au oferit lumii, pe o tav de argint, limbajul Java. n Java, dezvoltatorii Internet i editorii Web au gsit, n sfrit, posibilitatea de a crea prezentri multimedia complet interactive pentru Web. Acest pas important n evoluia sistemului Web a fost salutat cu surle i trmbie de comunitatea Internet i constituie inceputul unei alte perioade de expansiune n dezvoltarea Web.
4

Elementele de baza ale limbajelor de programare


Dac ai vazut limbajul Java n aciune, probabil c nu mai avei dubii privind importana 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 inelege cum pot fi programele Java compilate i interpretate, s aruncm o privire asupra elementelor de baz ale limbajelor de programare interpretate sau compilate.

Limbaje de programare interpretate.


Dei exist un numr mic de limbaje de programare interpretate, acestea sunt, n general, cel mai uor de invat i de folosit. Unul dintre limbajele de programare interpretate cunoscute de foarte mult lume, chiar i de nespecialiti, este limbajul Basic. Numele su indic faptul c este rudimentar i n acelai timp, uor de folosit. Programele Basic sunt create pe baza unei structuri simple, caracteristic limbajelor de nivel inalt. Dup ce terminai de scris un program Basic, acesta poate fi rulat imediat. Interpretorul Basic citete instruciunile codului linie cu linie i le transform n seturi de instruciuni care pot fi inelese de calculator. Deoarece transformarea are loc n timpul rulrii, programele interpretate ruleaz, n general, mai incet dect alte programe i folosesc mai mult din timpul de lucru al procesorului.

Limbaje de programare compilate.


Limbajele de programare compilate sunt, n general, mai greu de invat i de folosit dect limbajele de programare interpretate. Totui, majoritatea limbajelor de programare sunt compilate. Prntre cele mai cunoscute limbaje de programare compilate se numr COBOL, FORTRAN, C, C++ i Pascal. Programele scrise intr-un limbaj de programare compilat sunt create pe baza unei structuri caracteristice limbjelor de nivel inalt. Dup ce terminati de scris codul surs al unui program, folosii un compilator pentru a-l tranforma n cod care poate fi citit i executat de calculator. n timpul executrii programului, calculatorul poate s interpreteze direct instruciunile. Deoarece nu mai este nevoie ca liniile de cod s fie transformate n timpul rulrii, programele compilate sunt executate mai repede dect programele interpretate. Creterea vitezei de execuie are loc ins n dauna portabilitii. Codul surs este compilat intr-un format de nivel sczut, care poate fi rulat numai pe platfoma pentru care a fost compilat. Deci codurile compilate nu sunt direct portabile pe alte platforme.

Java : un limbaj compilat i interpretat


Aa cum am aratat mai devreme, programele Java pot fi att compilate, ct i interpretate. Ele sunt create pe baza unei structuri simple, caracteristic limbajelor de nivel inalt. Dup ce terminai de scris un program, compilai codul surs intr-un format de nivel mediu, numit cod de octei. Putei apoi s rulai acest cod de octei, care este interpretat de mediul de execuie Java. Codul de octei este diferit de codul main. Codul main este reprezentat prntr-o succesiune de 0 i 1. Codurile de octei sunt seturi de instruciuni care seaman mai mult cu codul scris n limbaj de asamblare. Calculatorul poate executa direct codul main, ins codurile de octei trebuie interpretate inainte de a fi rulate. Diferena dintre codul de octei i codul main este mult mai profund dect pare la prima vedere. Codul main poate fi folosit numai pe platforma pentru care a fost compilat. n schimb, codul de octei poate fi rulat pe orice platform care folosete mediul de execuie Java. Aceast posibilitate asigur neutralitatea limbajului Java din punct de vedere arhitectural. Interpretorul Java transform codul de octei intr-un set de instruciuni pe care calculatorul le poate inelege. Deoarece codul de octei este o form intermediar, intrzierea necesar pentru transformarea intr-un cod care
5

poate fi ineles de calculator este foarte mic. Dac sunteti familiarizat cu modul de folosire al limbajelor de nivel intermediar, precum assembler, vei inelege adevarata frumusee a limbajului Java. Acesta v permite compilarea codului surs ntr-o form intermediar, independent de calculator, care poate fi executat aproape la fel de repede ca i un program complet compilat. Dac v ntrebai n ce mod este obinut neutralitatea arhitectural a limbajului Java, nu sunteti singurul; toate compilatoarele, inclusiv compilatorul Java compileaz codul sursa pentru un anumit calculator. Trucul folosit pentru crearea codului de octei este compilarea codului surs pentru un calculator inexistent. Acest calculator imaginar este numit Maina Virtual Java ( Java Virtual Machine ) i exist doar n nanospaiu sau n memoria calculatorului dvs. Dei crearea unei maini virtuale n memoria sistemului pe care lucrai pare un lucru uimitor, Java constituie dovada vie a faptului c acest concept este nu numai posibil, ci i foarte puternic. Pclirea compilatorului Java, astfel inct acesta s creeze coduri de octei pentru o masin inexistent, este numai jumatate din procesul ingenios care asigur neutralitatea arhitectural a limbajului Java. La rndul su, interpretorul Java trebuie s conving fiierul care conine codul de octei i calculatorul c ruleaz pe o masin virtual Java. Interpretorul realizeaz acest lucru actionnd ca un intermediar ntre maina virtual Java i maina real pe care este rulat programul. Figura de mai jos ilustreaz modul real de lucru al limbajului Java pe un calculator obinuit. Dup cum se poate vedea, maina virtual Java ocupa un nivel intermediar ntre sistemul de operare de pe calculatorul dvs. i cadrul de dezvoltare Java. Deasupra cadrului de dezvoltare Java este situat aplicaia scris de utilizator n limbaj Java. ( a se vedea capitolul 24 Maina Virtual Java pentru mai multe detalii ) Aplicaia utilizatorului Nivelurile de interactine ale unui program Java UNIX Windows OS/2 MacIntosh Obiecte Java Maina virtual Java

Sisteme de operare

Evoluia logic de la C la C++


Limbajul de programare C a captat atenia utilizatorilor inc de la apariie, la inceputul anilor 70. Popularitatea limbajului C se bazeaz, n mare, pe relativa uurin de utilizare, prezentarea prietenoas i caracteristicile avansate, care la apariia limbajului au trezit att interesul programatorilor, ct i al celorlali utilizatori. innd seama de faptul c principalii competitori ai limbajului C din acel moment erau limbaje demodate i greu de folosit precum COBOL i FORTRAN, care erau rulate, de obicei, pe sisteme mainframe, nu este de mirare c limbajul C a fost considerat prietenos i c a atras rapid un mare numr de susintori. Programatorii de astzi nu ar considera, probabil, limbajul C ca fiind cel mai prietenos i mai avansat limbaj de programare disponibil. Aceasta deoarece chiar i cei mai experimentai programatori au uneori probleme la folosirea caracteristicilor avansate ale limbajului C. Dac ai lucrat n C i ai avt vreodat probleme cu pointerii sau cu gestionarea memoriei, tii, desigur, despre ce vorbim. Pointerii i gestionarea memoriei sunt concepte dificile att pentru inceptori, ct i pentru programatorii experimentai. O singur linie de cod care adreseaz o locaie greit de memorie poate cauza blocarea aplicaiei i chiar a calculatorului pe care ruleaz aceasta. La inceputul anilor 80, calculatoarele personale incepuser s patrund pe pia. Pentru a ine pasul cu evoluia industriei calculatoarelor personale, firmele productoare de software dezvoltau rapid programe. Principalele obstacole n calea lansrii pe pia a unor noi aplicaii erau timpul de dezvoltare i costurile legate de lungimea ciclului de dezvoltare. Pentru reducerea costurilor i a timpului de dezvoltare, programatorii au inceput s caute posibiliti de refolosire a codului existent n proiectele viitoare. Deci putei s luai secvene de cod C dintr-un proiect i s le folosii n alte proiecte, reutilizarea codului C este dificil i nu este intotdeauna posibil. Pentru a fi refolosit cu succes, secvena de cod respectiv trebuie s
6

respecte unele reguli privind o anumit funcie sau un anumit set de funcii, cum ar fi operaiile de intrare/ieire n fiiere sau de afiare pe ecran. De asemenea, seciunea de cod trebuie s fie generalizat i s nu determine conflicte de atribuire. De cele mai multe ori, n funcie de complexitatea i de tipul noului proiect pe care vrei s-l creai n C, este mai bine s luai totul de la 0. Cauza principal este faptul c rezolvarea conflictelor generate de codul pe care incercati s-l refolosii poate s v ia mai mult timp dect crearea codului. O echip de la AT&T Bell Labs a pus la punct o posibil soluie pentru refolosirea codului. Aceast soluie 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 funcii specifice. Cel care a avut ideea dezvoltrii acestei extensii a limbajului C, permind separarea unor funcii dntr-o aplicaie n module obiect generalizate i refolosibile, a fost Bjarne Stroustrup. La un deceniu de la apariia limbajului C++, putem afirma c acesta a constituit o evoluie logic a limbajului C, destinat acoperirii unor cerine ale programatorilor, este motivul pentru care C++ a devenit cel mai raspndit limbaj de programare.

Marele salt de la C / C++ la Java


Dei C++ este fr indoial, un limbaj de programare popular i puternic, el are i defecte. Acestea provin din motenirile pe care C++ le pstreaza din C. Ca i n C aspectele cele mai greoaie ale limbajului C++ sunt legate de pointeri i de gestionarea memoriei. n plus, deoarece C++ este o extensie a limbajului C, programatorii C++ pot cadea n greseala pogramrii procedurale, cu care sunt obinuii din alte limbaje, precum C. Dac scrieti o aplicaie C++ folosind metodele programrii procedurale, pierdei toate avantajele oferite de un limbaj orientat pe obiecte. Acesta este punctul la care i face apariia limbajul Java. Limbajul Java este pentru programarea anilor 90 ceea ce C++ a fost pentru programarea anilor 80 un mare salt inainte. Ca i C++, Java este urmtorul pas logic n domeniul limbajelor de programare i se bazeaz pe cel mai popular limbaj de programare al momentului. Cu ajutorul limbajului Java, putei obine programe cu aspectul i comportarea programelor C++, dar beneficiind de avantajele oferite de un limbaj proiectat special pentru programarea orientat pe obiecte. Spre deosebire de C++, Java renun complet la programarea procedural i v oblig s utilizai conceptele solide ale programrii orientate pe obiecte. Limbajul Java cuprinde componente care verific automat respectarea limitelor ( Boundary Checking ), ceea ce elimin multe dintre problemele programelor C i C++. n Java nu exista pointeri, iar gestionarea memoriei se face automat. Avantajul evident al acestui fapt este eliminrea problemelor legate de pointeri i a fisurilor de memorie ( memory leaks). Nu mai exista posibilitatea indicarii greite a unei zone de memorie care s cauzeze blocarea programului. Sunt excluse erorile aprute la eliberarea memoriei folosite, care s determine apariia unor fisuri de memorie si, n final, ocuparea ntregii memorii a sistemului. Java are multe alte caracteristici care fac ca programarea n acest limbaj s constituie un adevrat refugiu pentru programatorii care s-au sturat de dificultile asociate cu dezvoltarea n C++. n Java, matricele sunt ncapsulate ntr-o structur de clase, ceea ce faciliteaz verificarea limitelor. De asemenea, Java execut automat operaiile de recuperare a memoriei ( colectarea gunoiului), o alta caracteristic util pentru gstionarea memoriei. Procedura de colectare a gunoiului este, n acelai timp, un bun exemplu pentru posibilitile integrate de execuie multifilar ale limbajului Java. Prin rularea n fundal a unor programe care elibereaza memoria i asigur funcii generale de curenie a sistemului, programele Java se execut mai repede i mai eficient.

Java i conceptele programrii orientate pe obiecte


Multi programatori incepatori i chiar unii experimentai care folosesc limbaje de programare procedurale au dificultati n inelegerea conceptelor programrii orientate pe obiecte, deoarece acestea sunt destul de abstracte i sunt proiectate pornind de la o alt filosofie dect limbajele de programate procedurale tradiionale. Conceptele programrii orientate pe obiecte cuprind: obiectele ncapsularea i transmiterea de mesaje clasele bibliotecile ( numite pachete, n Java )
7

motenirea modificatorii de acces

Obiectele
Unitatea elementar a programelor orientate pe obiecte este obiectul. Limbajele care respect conceptele programrii orientate pe obiecte descriu relaiile dintre acestea. Toate obiectele au o stare i un comportament. Starea unui obiect se refer la elementele de date coninute de obiect i la valorile asociate acestora. Tot ceea ce cunoate 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 aciunile pe care obiectul poate s le execute asupra variabilelor de instan definite n cadrul su. n programarea procedural, o astfel de construcie se numeste funcie. n terminologia specific programrii orientate pe obiecte, aceasta construcie s numeste metod. O metod aparine clasei a crei membr este; folosii metodele atunci cnd trebuie s executai o anumit operaie de mai multe ori. Astfel, starea unui obiect depinde de lucrurile pe care le cunoate obiectul, iar comportamentul lui depinde de aciunile pe care le poate executa. n cazul n care creai 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 aciunile permise, cum ar fi pornirea i oprirea televizorului, schimbarea canalului, modificarea volumului i acceptarea comenzilor de la telecomanda Sugestie: dac nu reusii s inelegei ce nseamn un obiect, gndii-v la acesta ca la o secven de cod care execut un set de aciuni specifice i nrudite, numite metode.

ncapsularea i transmiterea de mesaje


Obiectele ncapsuleaz varibile de instan i metode nrudite ntr-o singur unitate identificabil. Ca urmare, obiectele sunt uor de refolosit, de actualizat i de ntretinut. Putei s realizati rapid urmatoarele: - s identificai intrrile necesare unui obiect i ieirile acestuia - s descoperii dependenele variabilelor - s izolai efectele unor modificri - s facei actualizrile necesare - s creai subclase bazate pe obiectul original Obiectele sunt dinamice, n msura n care dvs le creai astfel. Un obiect poate apela una sau mai multe metode pentru executarea unei operatiuni. Metodele sunt iniiate prin transmiterea unui mesaj ctre obiectul respectiv. Un mesaj trebuie s conin numele obiectului ctre care este transmis, numele metodelor care urmeaz s fie apelate i valorile necesare metodelor respective. Obiectul care recepioneaz mesajul folosete informaiile primite pentru a apela metodele corespunzatoare cu valorile specificate. Avantajul ncapsularii variabilelor de instan i a metodelor const n faptul c putei trimite mesaje unui obiect, fr s cunoateti modul de lucru al obiectului respectiv. Tot ceea ce trebuie s tii 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 tii doar pe ce buton al telecomenzii s apasati. Apasarea unui buton de telecomanda trimite un mesaj la obiectul software care reprezint televizorul, specificnd metoda care trebuie apelat i valorile care trebuie metodei respective.

Clasele
Clasele ncapsuleaz obiecte. O singur clas poate fi folosit pentru instanierea mai multor obiecte. Aceasta nseamn c putei avea mai multe obiecte active sau mai multe instane ale aceleiai clase. Obiectul care descrie funciile 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, putei s grupati seturi de obiecte dup tipul lor. In interfaa Java de programare a aplicaiilor sunt descrise mai multe clase. Fiecare clas din interfaa API specific un set de obiecte care realizeaz funcii nrudite i au caracteristici comune. Clasele pe care le creai pot servi unor scopuri asemntoare. SUGESTIE:Imaginai-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 colecie de clase sau de funcii nrudite formeaz o bibliotec. Java pune o amprent proprie asupra bibliotecilor, folosind termenul de pachet pentru descrierea unei colecii de clase nrudite. Asa cum clasele ncapsuleaz obiecte , pachetele ncapsuleaz clase. In seciunea Modificatorii de acces vei vedea c acest nivel suplimentar de ncapsulare face mai uor de controlat accesul la metode.

Motenirea
Motenirea este o caracteristic puternic a limbajelor de programare orientate pe obiecte, care v permite s refolosii codul i s extindei funcionarea claselor existente. In cazul n care creai o clas pentru trasarea pe ecran a unui dreptunghi umbrit, putei s extindei clasa astfel inct s mute dreptunghiul desenat ntr-o alt poziie pe ecran, fr s rescrieti clasa original. De asemenea, putei s extindei clasa folosit iniial pentru desenarea dreptunghiului , astfel inct s creeze un set de dreptunghiuri care pot fi selectate de utilizator. In ambele cazuri , noua clasa moteneste metodele clasei originale pentru crearea dreptunghiului umbrit i extinde metode pentru efectuarea unor operaii specifice. Folosind acest aspect al programrii orientate pe obiecte , putei s creai o nou clas care motenete funcionarea unei clase extinse . Putei apoi s extindei funciile vechii clase , astfel inct s corespund necesitilor 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 motenite.

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 definete patru niveluri de control al accesului: Metode i variabile private Metode i variabile protejate Metode i variabile prietenoase Metode i variabile publice

Metode i variabile private


Metodele i variabilele controlate de obiectul crora le sunt asociate i care nu sunt accesibile obiectele altor clase se numesc private. Avantajul acestui nivel de control este faptul c nu se permite accesul nelimitat la metode i variabile dect obiectelor unei anumite clase. Metodele i variabilele private din Java sunt accesibile numai obiectelor care aparin aceleiai clase .
9

Metode i variabile protejate


Metodele i variabilele controlate de obiectul crora le sunt asociate i care nu sunt accesibile dect 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 dect obiectelor unor anumite clase. Metodele i variabilele protejate din Java sunt accesibile numai obiectelor care aparin aceleiai clase sau subclaselor clasei respective.

Metode i variabile prietenoase


Metodele i variabilele accesibile, n majoritatea situatiilor, si altor obiecte, se numesc prietenoase. In mod prestabilit, metodele i variabilele declarate n Java sunt prietenoase, accesibile tuturor claselor i obiectelor din acelai pachet. Avantajul acestui nivel de control este c obiectele dintr-un anumit pachet (aceste obiecte fiind, n general, nrudite) au acces nelimitat ntre ele.

Metode i variabile publice


Metodele i variabilele accesibile tuturor obiectelor se numesc publice. La metodele i variabilele publice Java au acces toate obiectele i clasele, chiar dac nu fac parte din acelai pachet Asadar, accesul la metodele i variabilele publice este nelimitat. Principiul lui Peter: nelegerea diferitelor niveluri de acces este simpl dac luai n considerare domeniul:
Private-accesibile obiectelor din aceeai clas

Protejate-accesibile obiectelor din aceeai clas i din subclasele clasei respective Prietenoase-nivelul de acces prestabilit; accesibile tuturor claselor din pachetul curent Publice-accesibile tuturor claselor din orice pachet

Programarea n limbajul Java


Java ocup primul loc n lista limbajelor de programare orientate pe obiecte. Muli programatori sunt surprini atunci cnd descoper ct de uor este s respecte conceptele proiectrii orientate pe obiecte n Java. Urmtoarele seciuni v vor ajuta s nelegei ce v ofer limbajul Java.

Caracteristicile de baza n limbajul Java


Usurina cu care putei face trecerea de la C/C++ la Java i caracteristicile de orientare pe obiecte ale limbajului Java sunt doar partea vizibil a aisbergului. Java are multe caracteristici puternice unele dintre acestea fiind discutate n seciunile acestui capitol. Limbajul Java este: cu execuie multifilar dinamic distribuit interpretat i compilat neutru din punct de vedere arhitectural orientat pe obiecte portabil pregtit i compatibil cu operarea n reea robust sigur
10

Aceste caracteristici constituie fora limbajului Java i motivul popularitii acestuia. Pe masur ce vei dezvolta programe Java, vei descoperi c multe dintre acestea sunt nrudite i rezulta din dezvoltarea limbajului pentru: * Folosirea n medii de reea distribuite * Asigurarea performanei ridicate * Refolosirea codului * Asigurarea securitatii

Proiectare pentru folosire n medii de reea distribuite


Un element care contribuie la succesul unui limbaj proietat pentru un mediu complex, aa cum este reeaua Internet, este posibilitatea acestui limbaj de a rula pe platforme eterogene distribuite. Java are aceast posibilitate, deoarece: Este neutru din punct de vedere arhitectural, ceea ce nseamn c programele executabile Java pot fi rulate pe orice platform care are instalat mediul de execuie Java. Are un grad ridicat de portabilitate ceea ce nseamn c Java conine componente care pot fi uor folosite pe platforme eterogene. Pentru meninerea portabilitatii, Java respect standardele IEEE(Institute of Electrical and Electronics Engineers) pentru structurile de date, cum ar fi cele privind folosirea numerelor ntregi, a celor n virgul mobil i a irurilor de caractere . Este distribuit, ceea ce nseamn c poate folosi att obiecte memorate local, ct i obiecte stocate pe calculatoare aflate la distan. Este pregtit pentru folosirea n reea i compatibil cu mediile de lucru n reea, ceea ce nseamn c poate fi utilizat n reele complexe i c accept direct protocoalele de reea obinuite, cum ar fi FTP i HTTP.

Proiectare pentru asigurarea performantei ridicate


Un alt element care contribuie la succesul unui limbaj proiecat pentru un mediu de reea complex este performana. Java are multe caracteristici care i asigur o performan ridicat, printre care compilatorul i sistemul de execuie. Interpretorul Java poate executa codul de octei la o vitez apropiat de cea a execuiei unui cod compilat ntr-un format pentru calculator, datorit execuiei mulifilare. Spre deosebire de multe alte limbaje de programare Java are ncorporate posibilitati de execuie mulifilar. Executia multifilar reprezint posibilitatea de rulare simultana a mai multor procese. Astfel interpretorul Java poate s ruleze n fundal alte procese, cum ar fi cele pentru colectarea gunoiului (recuperarea memoriei care nu mai este folosit) sau pentru gestionarea memoriei. Procesele rulate n fundal profit de perioadele n care unitatea central de prelucrare nu este ocupat. n lumea real multe lucrri se petrec simultan: sun soneria de la us, sun i telefonul iar copiii alearga tipnd prin bucatarie. Nu putei s raspundei la telefon, s deschidei usa i s-l prindei pe Johny n acelai timp. Asa c l prindei pe Johny cu o mn ridicai receptorul cu cealalt i i spunei persoanei de la u s atepte puin. Pentru a efectua toate cele trei operaii stabilii nite prioritti. Prioritatea numrul unu este John. Apelul telefonic pe care l-ai ateptat toat dup amiaza este prioritatea numrul doi. Potaul care a venit cu scrisorile este prioritatea numrul trei. Programele cu execuie multifilar folosesc acelai sistem de stabilire a prioritilor. Atunci cnd calculatorul asteapt ca utilizatorul s introduc informaii, procesele de fundal se pot ocupa cu curairea memoriei. Cnd procesorul face o pauza dup prelucrarea unor numere, un proces de fundal poate profita de cteva cicluri de ceas pentru a pregati o zon de memorie n vederea folosirii. Posibilitatea de rulare a unor procese de fundal n timp ce procesul din prim plan ateapta preluarea unor informaii de la utilizator sau este n repaos este esenial pentru asigurarea unor performane ridicate.
11

Proiectare pentru refolosirea codului


Dei proiectarea orientat pe obiecte a limbajului Java este elementul cheie care face posibil refolosirea codului, proiectanii acestui limbaj stiau c mediul reelelor 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 ntrzierea lrgirii obiectelor prin legarea dinamic a claselor n timpul execuiei, ceea ce mpiedic apariia erorilor n cazul modificrii mediului de lucru dup compilarea programului surs. O alt cale de evitare a erorilor este verificarea structurilor de date att la compilare, ct i n timpul execuiei. ntre robustee i fiabilitate exist o strns legatur. Pentru ca Java s fie un limbaj robust trebuie s fie n acelai timp i fiabil. Asa cum am artat mai devreme, principalele probleme n programele CC++ sunt pointerii i gestionarea memoriei. Ca urmare robustetea i fiabilitatea sunt asigurate prin eliminarea pointerilor, prin folosirea verificrii dinamice a limitelor, ceea ce elimin posibilitatea violrii acestora i prin gestionarea automat a memoriei, nlaturndu-se astfel posibilitatea apariiei fisurilor i a violarilor de memorie.

Proiectarea pentru asigurarea securitatii


In mediile de reea distribuite, caracteristicile de securitate sunt esentiale, mai ales ntr-o lume informatizat n care abund viruii, caii troieni i viermii. Multe dintre caracteristicile limbajului Java asigur o securitate de nivel inalt. De exemplu, programatorii cu intenii rele nu au acces la stiva sistemului, la zona liber de memorie i la seciunile protejate de memorie, deoarece Java nu folosete pointeri, iar memoria este alocat numai n timpul execuiei. In acest fel, accesul la resursele protejate ale sistemului este mpiedicat. De asemenea Java asigur securitatea sistemului n timpul execuiei prin verificarea codului de octei de cate interpretor. nainte de executarea unui program interpretorul Java efectuiaz o examinare a codului, pentru a se asigura c acesta reprezint un cod valid de octei. Java verific validitatea codului folosind o schem care semnalizeaz urmatoarele: * Violrile de acces * Forarea pointerilor * Conversiile ilegale de date * Valori i parametri incorei * Modificarea claselor sau folosirea incorect a acestora * Depairea stivei n partea inferioar sau n partea superioar * Activitai suspecte sau neautorizate

Structura limbajului Java


Structura limbajului Java este la fel de important ca i caracteristicile sale. Seciunile urmatoare trec n revist conceptele legate de structura programelor Java.

Aplicaii i miniaplicaii
Indiferent dac ai aflat despre limbajul Java explornd spatiul cibernetic sau citind o publicaie de specialitate, ai remarcat probabil, folosirea termenilor de aplicaie i miniaplicaie. Din nefericire editorii, att n spatiul cibernetic ct i n publicaiile tiprite, presupun c dumneavoastr cunoatei diferena dintre aceti doi termeni. Termenul de miniaplicaie Java (applet) se refer n general la un mic program Java creat pentru a fi folosit n sistemul Word Wide Web. Miniaplicaiile Java necesit un program de vizualizare extern, aa nct pentru a putea folosi o miniaplicaie, avei nevoie de un browser Web sau de un program specializat de vizualizare (applet vierwer). Retinei 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 aplicaie 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. Aplicaiile Java nu necesit un program de vizualizare extern. Aceasta nseamn c putei s executai o aplicaie Java folosind direct interpretorul Java. Reinei c exist programe Java care pot fi rulate att c miniaplicatii folosind un program de vizualizare extern ct i ca aplicaii independente.

Spaii de nume
Cu ct programul pe care l creai este mai mare cu att crete posibilitatea de refolosire a numelui unei variabile sau al unui parametru. n C++, rezolvarea conflictelor legate de spaiile de nume putea necesita ore sau chiar zile de lucru, mai ales dac foloseai biblioteci mari de clase. Java are un sistem riguros de denumire, care permite evitarea conflictelor legate de spaiile de nume, prin imbricarea numelor pe mai multe niveluri. Fiecare component a unui nume este imbricat n conformitate cu unul dintre urmatoarele niveluri: * 0-Spaiul de nume al pachetului * 1-Spaiul de nume al unitii de compilare * 2-Spaiul de nume al tipului * 3-Spaiul de nume al metodei * 4-Spaiul de nume al blocului local * 5-Spaiul de nume al blocului imbricat Interpretorul Java este responsabil pentru meninerea i translatarea spaiului de nume. Interpretorul identific numele de obiecte prin verificarea succesiv a spaiilor de nume. Spaiile de nume sunt ordonate dup preceden, pornind de le spaiul de nume cu cel mai nalt nivel, spaiul de nume al pachetului, pna la nivelul cel mai sczut, cel al blocului local imbricat. n general Java folosete prima potrivire de nume descoperit. Nivelurile spaiilor de nume formeaz o ierarhie care oglindete structura real a pachetelor i a claselor Java. Numele asociate fiecarui nivel sunt separate de numele din alte niveluri prin caracterul punct. Vei nelege mai bine conceptele de spaiu de nume i de nivel n momentul n care vei vedea cum sunt folosite. Pachetele Java din biblioteca original de pachete conin n mod prestabilit numele java, urmat n general, de un nume de clas din cadrul pachetului. n exemplul de mai jos, putei vedea declaraia clasei BorderLayout din pachetul AWT (Abstract WIndowIng Toolkit):
java. awt. BorderLayout

Conveniile spaiilor de nume sunt respectate i de apelurile funciilor. n exemplul de mai jos, putei vedea modul de apelare a unei metode numit println:
System. out. println(str);

Calea complet de acces la metoda println( ) din spaiul de nume Java este:
java:lang. Sistem. out. println

Java determin locul n care se afl metodele println( ) prin cutarea apariiei unice a clasei System n spaiul de nume curent. Dup ce descoper ocurena clasei System, Java cauta apariia subclasei out, apoi a metodei println( ).

Structuri de denumire a programelor


Fiierul care conine instruciunile scrise n limbajul Java se numete surs sau cod surs. Fiierele surs au extensia . java . Aceste fiiere trebuie s fie de tip text. n urma compilrii fiierelor surs de ctre compilatorul Java, javac, rezult un cod de octei care poate fi executat.
13

n limbajele procedurale, cum ar fi Pascal, codul executabil complet al programului este stocat, in general, ntrun singur fiier. n limbajele orientate pe obiecte, precum Java, codul executabil este stocat conform structurii clasei sau a bibliotecii. Dup compilarea codului sursa Java obinei cte un fiier pentru fiecare clas declarat n codul surs. Aceste fiiere au extensia . class i se numesc unitti de compilare. Unitile de compilare Java conin instruciuni de pachet i instruciuni de import, precum i declaraii ale claselor i interfeelor. Aceste patru componente formeaz structura de baz a unui program Java.

Instruciuni de pachet
Interfa Java API include n pachetul principal Java un numr de alte pachete. Toate clasele i obiectele pe care le creai sunt grupate n mod prestabilit n acest pachet. Ca urmare, dac nu specificai altceva, Java folosete calea de acces curent i presupune c fiierele cu codul compilat se afl n directorul curent, la rularea unui program Java. Pentru a preciza poziia pachetelor, folosii instruciunile de pachet. Cei care experimenteaza limbajul Java i nu i propun dezvoltarea lui pot folosi structura de pachet prestabilit. Dar dac urmariti s creai aplicaii Java i vrei ca obiectele i clasele s respecte o structur de denumire a pachetelor diferit de cea prestabilit, trebuie s includei n codul surs o instruciune de pachet:
package NumePachet

Cnd definii noile pachete, trebuie s respectai 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 instruciuni de pachet pentru un spatiu de nume cu mai multe niveluri:
package MyPackages.NumeSubPachet;

Numele de pachete de pe fiecare nivel al spaiului de nume trebuie s respecte structura de directoare a sistemului de fiiere, deoarece Java transform numele pachetelor n ci de acces pentru localizarea claselor i metodelor asociate pachetelor. Acest lucru este realizat prin nlocuirea punctelor cu separatorii specifici sistemului de fiiere. Asadar, numele pachet MyPackages. Gizmos va fi transformat n urmatoarea cale de acces ntr-un sistem UNIX: MyPackages/Gizmos ntr-un sistemWIndows 95/NT, numele de pachet MyPackages. Gizmos va fi transformat n: MyPackages/Gizmos Java localizeaz clasele asociate unui pachet folosind calea de acces obinut aa cum am aratat mai sus. Java va cuta 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 creai 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. innd seama de ordinea de preceden folosit de Java, schimbai 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, acelai nume de pachet va fi transformat n cale de acces:
14

COM\mcp\zoom

Instruciuni de import
Ca i n alte limbaje de programare, Java include un set de funcii principale, accesibile global. Aceste funcii sunt grupate n pachetul java.land. Pentru a obine accesul la pachete, clase i obiecte care nu se afl n aceast bibliotec, folosii instruciuni de import. Acestea v ajut s definiti i s rezolvai spaiul de nume curent, permind rezolvarea unui pachet importat cu ajutorul numelor claselor componente. OBSERVATIE: dac nu folosii instruciuni de import, trebuie s specificati referina 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 instruciunilor de import. Instruciunile de impot trebuie s apar inaintea altor declaraii din codul surs si, n general, dup instruciunile de pachet, dac acestea sunt folosite. Ideea care st la baza folosirii instruciunilor de import este aceea de a ajuta compilatorul Java s gseasc metodele corespunzatoare i de a evita conflictele ntre nume. Pentru a face disponibile clasele Java de tipAWT, putei s folosii n codul surs urmatoarele instruciuni de import:
import java.awt ;

Aceast instruciune permite compilatorului Java s trimit apelul metodei awt. Button ctre java. awt. Button. De asemenea, Java v permite s importai numai tipuri de clase de care avei nevoie. Pentru aceasta, folosii urmatoarele instruciuni de import:
import java. awt. Button;

Aceast instruciune permite compilatorului Java s trimit apelul metodei Button ctre java. awt. Button. O metod mai eficient pentru importul pachetelor este importul acestora la cerere, astfel:
import java. awt. *;

Caracterul asterisc din instruciunea de import i spune compilatorului s importe numai clasele de care este nevoie. n acest fel, putei s adugati n mod dinamic noi tipuri n spaiul de nume;aceast instruciune de import permite compilatorului Java s trimit apelul metodelor de tip Button ctre java. awt. Button. SUGESTIE: Majoritatea programelor Java folosesc instruciuni de import la cerere. Dei n acest fel scriei mai puin cod, este bine s fii ct mai explicit n privina pachetelor de care avei nevoie. Mai precis, nu este indicat s folosii instruciuni de import care fac disponibile toate clasele limbajului Java. Atunci cnd dou clase din dou pachete diferite au acelai nume, va aprea 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 fr modificatori respect urmtorul format general:
15

class nume { // metode i variabile asociate clasei }

Java accept numai motenirea 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 creai poate extinde i moteni funciile unei singure clase. Dei aceasta poate prea o limitare fa de limbajele de programare care permit motenirea multipl, Java permite motenirea multipl a metodelor claselor prin intermediul interfeelor claselor. Aa cum vei vedea n seciunea urmatoare, interfaa unei clase este definit printr-o declaratie de interfa.

Declaratiile de interfa
Interfeele sunt clase abstracte. Prin intermediul unei interfee, putei s definii protocoalele pentru metode i pentru variabile finale fr s v punei problema implementarii specifice. Acest lucru v permite s creai un plan al structurii de programare pe care o vei defini mai trziu. Interfeele pot fi extensii ale uneia sau ale mai multor interfete. n mod prestabilit, toate interfeele sunt private, dac nu sunt declarate publice n mod explicit, dar toate metodele i constantele interfeei 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 punei la punct toate detaliile privind modul intern de lucru al metodelor asociate interfeelor, acestea se pot dezvolta foarte rapid. Ulterior, putei s implementati interfaa ntr-o declaratie de clas. Deoarece o singur clas poate s implementeze mai multe interfee, clasa poate s partajeze aceeai interfa cu alte clase sau instane ale unei clase. Acest lucru furnizeaz o mai mare flexibilitate i permite unei clase s moteneasca toate proprietatile tuturor apelurilor de metode asociate cu interfee multiple, asociate, la rndul lor, cu clase multiple. Diferena major dintre o clas i o interfa este aceea c interfeele nu pot stoca date. Mai mult, interfeele nu pot conine implementri ale metodelor, ci doar declaraii ale acestora. Declaraiile de interfa fr modificatori respect urmtorul format general:
interface nume { / / metode i variabile statice asociate interfeei }

Declaraiile de clase care folosesc interfee respect urmtorul format:


class nume_clasa implements nume_interfa / / corpul clasei } {

Un alt format poate fi:


class nume_implements nume_interfa1, . . . nume_interfaN / / corpul clasei } {

Singura deficien a interfeelor este aceea c necesit legarea dinamic (dynamic binding), ceea ce reduce performanele de execuie. Retineti, totui, c folosirea interfeelor pentru a realiza motenirea multipl reduce suprasarcina de execuie, in comparatie cu metodele de motenire multipl folosite n C++.
16

Specificaiile Java i interfaa 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 iniial. Prima versiune a limbajului Java, creat pentru a fi folosit n Internet, a fost Java Alfa. Versiunile Alfa ale aplicaiilor 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 ctre firma Sun, ca o exemplificare a posibilitilor limbajului Java, i este scris chiar n limbaj. n ciuda faptului c versiunile Alfa ale limbajului Java i ale browserului HotJava au posibiliti limitate, acestea s-au raspndit foarte rapid, chiar i dup apariia versiunilor Java 1. 0. Versiunea Alfa include browserul HotJava , punnd limbajul Java i browserul HotJava la dispoziia tuturor celor care vor s dezvolte aplicaii Java pentru Internet sau s afieze pagini Web care conin miniaplicaii Java. Pn spre sfritul anului 1995 HotJava a fost a fost singurul browser disponibil pentru afiarea paginilor Web coninnd miniaplicaii 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 aprut schimbari majore n structura limbajului Java, printre care includerea superclasei AWT. Superclasa AWT este folosit pentru afiarea obiectelor grafice, precum butoane i ferestre derulante. Aceste modificri ale structurii interfeei 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 miniaplicaiilor i depanatorului Java. La cteva luni dup apariia versiunii Java Pre-Beta 1, Sun a lansat pe pia versiunea Java Beta. n general, versiunile Beta ale aplicaiilor i limbajelor sunt accesibile unui numr mai mare de persoane i se concentreaz asupra corectarii erorilor. Dei versiunea Java Beta corecteaz unele erori i imbuntete securitatea, principalele modificri aduse limbajului sunt legate tot de superclasa AWT. Ultima versiune Beta a limbajului a fost Java Beta 2, care a adugat noi funcionaliti pachetelor Java. Dei a reprezentat o schimbare major a interfeei Java API, versiunea Java Beta 2 a modificat interfaa API astfel nct aceasta s fie compatibil cu modul n care browserul Netscape Navigator folosea miniaplicaii scrise cu versiunea Beta. n viitor: Capitolul 4. Limbajul Java:abecedar, conine o seciune referitoare la trecerea de la versiunile anterioare la Java1. 0. Programatorii care folosesc versiunile Alfa sau Beta vor gsi aceast seciune foarte util. Deoarece toate versiunile programului Netscape Navigator, ncepnd cu versiunea 2. 0 Beta 4, pot afia miniaplicaiile Java Beta, muli dezvoltatori Internet au ncercat s creeze asemenea miniaplicaii. Din acest motiv Java Beta 2 API folosete eticheta Netscape<APPLET>i nu eticheta <APP>utilizat anterior. Eticheta <APPLET> este standardul pentru versiunea 1. 0 i pentru versiunile ulterioare ale interfeei. O alt schimbare cu efecte majore adus limbajului n versiunea Beta 2 a fost posibilitatea de a ncrca clasele din fiiere arhivate(zip). nainte de aceast modificare, la instalarea n sistemul de fiiere, Java a creat directoarele subdirectoarele i structura de fiiere care respect structura interfeei Java API. Discuiile anterioare despre cautarea spatiilor de nume prin transformarea numelor n ci de acces arta clar de ce era nevoie de acest lucru. De exemplu, n versiunile anterioare pentru a gasi metoda println, Java cuta spaiile de nume de-a lungul ntregii ci de acces: java.lang.System.out.println. Calea de acces era obinut prin nlocuirea punctelor cu separatorul corespunztor sistemului. Java se baza pe structura de directoare a sistemului de fiiere, iar pe harddisk erau instalate mii de fiiere. Posibilitatea de ncrcare a claselor din fiierele arhivate a permis comprimarea ntregului coninut al interfeei API ntr-un singur fiier, economosind spaiul i evitnd aglomerarea discului. La instalarea versiunii curente a limbajului Java este copiat pe disc un singur fiier, classes.zip, n subdirectorul lib. n acest fel atunci cnd
17

programul de ncrcare a claselor i compilatorul Java efectueaz o cutare n spaiul de nume, aceasta se face mai nti n calea de acces corespunztoare. Dac fiierul clasei cutate nu este gsit, este cutat fiierul 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. Modificrile fa de versiunea Beta 2 sunt minore i se refer n principal la corectarea unor erori. Aceasta nseamn c miniaplicaiile Java Beta2 sunt compatibile cu miniaplicaiile Java1. 0. De asemenea browserul Netscape Navigator poate afia att miniapliacatiile Java Beta 2, ct i miniaplicaiile Java 1. 0. Iniial, Sun a pstrat interfaa Java API din versiunea Java 1. 0. Interfaa Java API conine surse de cod ce pot fi folosite n aplicaii. Codul organizat n biblioteci de pachete ce conin 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. Vei vedea c aceste pachete conin toate funciile de baz necesare. n acest fel, putei s economisii timp i s ncepei dezvoltarea aplicaiilor Java fr s fie nevoie s reinventai roata. Pentru a se asigura c modelul de securitate oferit de Java este optim pentru Internet, Sun a cerut programatorilor s-l testeze. La cteva luni dup apariia Java 1. 0, a fost descoperit o fisur n implementarea modelului de securitate n codul de octei. Aceast fisur, identificat de cercettorii de la Universitatea Princeton, ddea posibilitatea sprgtorilor experimentai s foloseasc o adres IP(Internet Protocol)care permitea miniaplicaiei accesul la un alt calculator dect 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 cteva erori minore din pachetul Java i introducea unele modificri ale interfeei claselor. O alt eroare de securitate, descoperit n iunie 1996, fcea 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 intenia de a folosi n continuare interfaa API actual, se poate presupune c limbajul Java a atins, n sfrsit, un nivel de standardizare. Aceasta este o veste bun pentru toi cei care vor s dezvolte aplicaiile n Java. Evoluia limbajului nu s-a oprit. Sun va continua s l dezvolte i a anunat deja o nou versiune major a limbajului. Ctre sfritul anului 1997, este ateptat o versiune complet JDK 1. 1. Din fericire, introducerea standardizrii ne asigur c programele create astzi vor putea fi folosite i mine.

Maina virtual Java


Maina virtual Java (JVM) reprezint motorul limbajului de programare Java. Datorit mainii virtuale, limbajul Java este neutru din punct de vedere arhitectural, interpretat i compilat, pregtit i compatibil cu operarea n reea, portabil, robust i sigur. JVM asigur aceste caracteristici prin furnizarea unor specificaii abstracte, pentru care dezvoltatorii pot crea interpretoare, iar programatorii pot proiecta aplicaii. Specificaiile abstracte creeaz un calculator imaginar. Deoarece maina virtual Java exist numai n memorie, dezvoltatorii Java pot folosi metodologia orientat pe obiecte pentru transmiterea informaiilor - parametri, apeluri de metode i alte tipuri de date-ntre maina reala i maina virtual. Dup ce mapeaz interaciunile dintre maina virtual i maina real pentru operaii standard de intrare/ieire, operaii de intrare/ieire pentru fiiere i operaii de gestionare a memoriei, programatorii pot crea medii adiionale de execuie Java pentru alte sisteme. Deoarece specificaiile mainii virtuale Java sunt scrise complet pentru toti utilizatorii si, prin urmare, sunt deschise pentru dezvoltare, limbajele de programare Java nu sunt restricionate de vreun proprietar.
18

Aceasta nseamn c orice dezvoltator poate crea un interpretor pentru maina virtual Java. (In capitolul24, vi se ofer o imagine detaliat a sistemului de execuie i a mainii virtuale Java)

REZUMAT
Aa cum ai vzut n acest capitol, dezvoltatorii de la JavaSoft-Sun au depus mari eforturi pentru crearea unui limbaj de programare revoluionar. Nici un alt limbaj de programare nu are fora i flexibilitatea limbajului Java. Java este limbajul de programare al anilor `90 i chiar al urmtorilor. Limbajul Java pune la dispoziie o structur uor de folosit, modelat pe baza a doua dintre cele mai populare limbaje de programare, C i C++. Proiectanii limbajului Java au eliminat ns problemele din C i C++. Dac dorii s dezvoltai aplicaii Java, vei vedea c proiectarea orientat pe obiecte a limbajului este prietenoas i familiar. De asemenea, vei vedea interfaa Java API economisete multe ore de munc i c putei crea programe mai bune, fr s fie nevoie s reinventai roata.

19