CATEGORII DOCUMENTE |
Prezentarea limbajului Java
Reteaua Internet este locul in care s-a dezlantuit pt. prima data mica fiara numita Java.Acum,mii de programatori, dezvoltatori de Internet, editori de Web si firme producatoare de software se intrec in a invata totul despre acest instrument de lucru, pt. a revolutiona reteaua Internet si modul de scriere a programelor. Cei care nu sunt conectati la Internet ar putea sa se intrebe de ce atata agitatie. In definitiv, si despre C++ s-a spus ca va revolutiona industria software; dar, asa cum veti vedea in curand, diferenta intre C++ si Java consta in faptul ca Java isi tine promisiunile. Java promite sa aduca modificari revolutionare in software si in Internet; acest capitol va va arata cum.
Pentru dezvoltatorii de Internet, programatorii si editorii Web, este momentul unei retrospective a evolutiei limbajului Java. In cea mai mare parte a anului 1995, Java a fost in stadiul de testare Alfa si Beta. In tot acest timp, dezvoltarea programelor Java s-a limitat la mediile Solaris si Windows NT. In scurt timp, dezvoltarea programelor Java s-a raspandit cu viteza vantului. in ianuarie 1996, Sun Microsystems a lansat oficial versiunea Java 1.0, iar in acest moment, puteti obtine gratuit seturi de dezvoltare pentru toate sistemele de operare importante, printre care Solaris, AIX, Windows 95, Windows NT, OS/2 si Macintosh.
Pentru cei care nu au experienta in programare, folosirea unui limbaj precum Java poate parea ceva de domeniul imposibilului, dar nimic nu este mai departe de adevar. Daca stiti sa creati documente HTML,SGML sau VRML, atunci veti putea crea si aplicatii sau documente imbunatatite cu ajutorul programelor Java veti descoperi ca limbajul Java este usor de invatat si de folosit,deoarece elimina sau automatizeaza multe dintre problemele limbajelor de programare anterioare.
Ce este Java ?
JavaSoft, o companie din cadrul firmei Sun Microsystems, a lucrat cativa ani la dezvoltarea unui limbaj puternic pentru anii '90 si pentru mai departe. Java corespunde acestor promisiuni, fiind cel mai robust, mai usor de folosit si mai flexibil limbaj de programare disponibil in acest moment. Java include cele mai bune aspecte ale limbajelor de programare anterioare, precum C si C++, permite crearea unor aplicatii puternice, contine componente avansate, cum ar fi posibilitatile de lucru cu informatiile multimedia,care fac prezentarile multimedia sa poata fi create mai usor ca niciodata, si elimina toate acele lucruri pe care le-am detestat cu totii in C si C++, precum mostenirea multipla, supraincarcarea operatorilor si pointerii.
Lucrul cel mai interesant la Java este faptul ca acest limbaj este complet orientat pe obiecte si neutru din punct de vedere arhitectural. Promisiunea facuta la aparitia programarii orientate pe obiecte (OOP- Object Oriented Programming) este posibilitatea se refolosire a codului. Dar, asa cum va pot spune programatorii C++ (daca sunteti programator C++, probabil stiti deja acest lucru), intentiile bune nu inseamna mare lucru atunci cand este vorba de refolosirea codului C++. Prin contrast, in Java veti vedea imediat avantajele refolosirii codului. Nu mai este nevoie sa dezvoltati aplicatii diferite pentru platforme diferite. in Java, puteti sa dezvoltati o singura aplicatie care sa fie folosita imediat pe mai multe platforme. Imaginati-va nenumaratele ore de munca pe care le puteti economisi daca dezvoltati o singura aplicatie pentru sistemele Windows, UNIX si Macintosh.
Luand in considerare faptul ca marile firme pot economisi milioane de dolari la un singur proiect folosind independenta de platforma a limbajului Java, nu este de mirare ca Java a devenit un cuvant cheie in tehnologiile software si Internet. Java a depasit imaginatia celor pasionati de tehnica. Companii din toate sectoarele de activitate, de la finante la desfacere, examineaza modalitati de folosire a limbajului.
Oamenilor de afaceri din domeniul software si programatorilor individuali, independenta de platforma a limbajului Java le permite dezvoltarea unor aplicatii puternice pentru sistemele de operare cu care nu au mai lucrat niciodata. Daca rulati o afacere legata de dezvoltarea software sau de Internet, indiferent daca aceasta afacere implica o singura persoana sau un conglomerat de firme,veti putea avea acces la noi clienti si la noi piete de desfacere. Intr-o epoca in care toata lumea este interesata de profit, o tehnologie care va permite sa vindeti mai mult, sa produceti mai mult si sa aveti acces la o piata mai larga (teoretic, la toti cei care detin un calculator) este cu siguranta ceva ce merita studiat.
in plus, permitand folosirea mediului de programare convenabil, Java ofera mai multa putere, ceea ce reprezinta un avantaj pentru cei cu aptitudini tehnice limitate, dar si pentru expertii in calculatoare. in cazul in care aveti experienta de lucru cu un alt limbaj de programare, veti descoperi ca Java este surprinzator de usor de invatat.
Dezvoltatorii limbajului Java au proiectat cu mare grija structura noului limbaj si nu este intamplator faptul ca acesta a fost modelat dupa C si 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 si dezvoltare din C si C++ sunt de cateva ori mai raspandite decat cele din limbajele de programare aflate cel mai aproape in competitie si, de fapt, se poate spune ca sunt singurii competitori adevarati.
Asadar, pentru a se asigura ca Java este usor de folosit si de inteles, dezvoltatorii au modelat limbajul dupa C si C++. De asemenea, Java imprumuta extensii din Objective C. Aceste extensii permit o rezolutie dinamica a metodelor. in felul acesta, trecerea de la C, Objective C si C++ la Java se face foarte usor.
Orice programator care a avut vreodata probleme cu pointerii sau cu gestionarea memoriei ar trebui sa alerge catre Java cu bratele deschise. Java elimina pointerii, administreaza automat memoria si contine o procedura de colectare a gunoiului (eliminarea fisurilor de memorie) care ruleaza in fundal.
in mediile de lucru distribuite, cum ar fi World Wide Web, mecanismele stricte de securitate sunt esentiale-firmele conectate la aceste medii de lucru nu pot risca sa isi compromita sistemele proprii. Dezvoltatorii limbajului de programare Java stiu acest lucru. Java este cel mai sigur mediu de programare disponibil in acest mod. Java nu incearca sa rezolve problemele de securitate, ci le elimina, fiind astfel limbajul perfect pentru programarea in Web.
Pointerii sunt cea mai mare problema de securitate a programelor C si C++. "Spargatorii" pot folosi programe aparent nevinovate, care forteaza pointeri in memorie, fura informatii din sistem si il blocheaza. in Java nu puteti sa fortati pointeri, pentru simplul motiv ca ei nu exista. De asemenea, Java elimina si alte probleme de securitate. De exemplu, la compilarea si rularea programelor Java, acestea sunt supuse unei proceduri de verificare dinamica a codului, care se asigura ca nu exista secvente de cod periculoase. in plus, mediul de executie Java impune reguli stricte pentru rularea programelor lansate de pe calculatoare aflate la distanta. Aceste programe nu au acces la reteaua locala, la fisierele stocate in sistemul local si nu pot lansa in executie programe locale.
Ca multe alte aparitii revolutionare in stiinta si tehnologie, limbajul Java este rezultatul eforturilor concertate ale unor grupuri de vizionari. Totusi, ceea ce se poate parea surprinzator - chiar socant - in privinta limbajului Java este faptul ca aceasta ingenioasa dezvoltare tehnologica este rezultatul unui proiect care nu a mers perfect de la inceput. Daca proiectul care a luat fiinta cu numele de cod Green in primavara anuui 1991 ar fi decurs conform planurilor, domeniul firmei Sun Microsystems ar fi fost produsele electronice comerciale si lumea ar fi fost astazi lipsita de frumusetea limbajului Java. Pentru a intelege evolutia si noutatea reprezentata de limbajul Java, trebuie sa ne intoarcem la anul 1991.
in 1991, firma Sun Microsystems isi incepea evolutia in topul producatorilor de statii de lucru UNIX. in anul precedent, compania avusese o cifra de afaceri de 2,5 miliarde $, fata de numai 210 milioane $ in anul 1986, si ascensiunea firmei parea a fi de nestavilit.
Notorietatea firmei Sun sa datora in mare masura eforturilor de pionierat in domeniul sistemelor deschise, care permit construirea si intretinerea unor medii deschise de calcul in retea. Multe corporatii au imbratisat ideea sistemelor deschise, promovate de Sun Microsystems, deoarece costurile de achizitionare si de intretinere ale sistemelor inchise devenisera greu de suportat. Sun isi incepuse ascensiunea, si conducerea firmei stia acest lucru.
Compania a lansat un proces de dezvoltare a noilor tehnologii, cu scopul de a mentine pe termen indelungat fenomenalul ritm de crestere. Unul dintre domeniile cheie asupra carora s-a concentrat atentia firmei a fost piata produselor electronice comerciale; proiectul Green s-a nascut ca parte a unui proiect mai mare de dezvoltare a programelor avansate pentru aceasta piata. Scopul grupului de lucru Green a fost sa introduca firma Sun Microsystems pe piata produselor electronice comerciale. Pentru atingerea acestui scop, inginerii de la Sun aveau nevoie de microprocesoare care sa poata rula pe diferite tipuri de aparate, in special in sisteme inglobate distribuite in timp real care sa fie atat fiabile cat si portabile.
Elementul cheie al succesului firmei Sun pe aceasta piata era posibilitatea de portare a sistemului pe mai multe platforme. Planul initial prevedea dezvoltarea proiectului in C++, dar dezvoltatorii au avut foarte multe probleme in incercarea de dezvoltare a compilatorului C++. Curand, acestia si-au dat seama ca, daca vor sa reuseasca, trebuie sa incerce o solutie noua si indrazneata; ca urmare, James Gosling a inceput sa lucreze la dezvoltarea unui nou limbaj, numit Oak. Mai tarziu, noul limbaj avea sa fie numit Java, deoarece, ca o ironie a soartei, Oak nu a putut sa fie inregistrat ca marca.
in final, dezvoltatorii au creeat un dispozitiv de prezentare a rezultatului eforturilor depuse. Desi folosea o forma mai veche a limbajului Java, precum si un sistem de operare si o interfata cu utilizatorul elementare, acest dispozitiv i-a uimit pe cei din conducerea firmei Sun. Cam in acelasi timp, grupul Green a fost incorporat sub numele First Person, nume ce ve fi schimbat ulterior in JavaSoft. A urmat o perioada mai grea pemtru cei de la firma JavaSoft. Au pierdut o licitatie cu firma Time-Warner pentru realizarea unor echipamente pentru televizune interactiva si programe TV la cerere. Au pierdut un contract de creare a unui sistem de operare pentru 3DO. Lansarea publica a proiectului a fost anulata si multi au parasit grupul Green. Acestea se intamplau la inceputul anului 1994 si programatorii firmei Sun au inceput sa caute noi domenii de activitate.
in aceasta perioada a inceput
migratia in masa a celor de la National Center for Supercomputing
Applications ( NCSA) catre
Restul, asa cum se spune, este istorie. Patru ani dupa lansarea proiectului, cei care au perseverat in dezvoltarea lui au reusit. Astazi, Java este subiectul la ordinea zilei din Internet. Mii de editori Web si de dezvoltatori Internet vor sa afle cum pot sa creeze documente Web imbunatatite cu animatie si multimedia. Milioane de utilizatori Web vor sa afle unde pot gasi ultimile pagini Web care contin programe Java.
Sun Microsystems a reusit cu succes sa tina pasul cu aceste solicitari. Licenta pentru tehnologia Java a fost acordata unor firme precum IBM, Microsoft, Silicon Graphics, Adobe si Netscape. Limbajul a fost actualizat in continuu. in conformitate cu idealurile care au facut din Sun Microsystems ceea ce este astazi, Java si setul de dezvoltare Java ( JDK ) sunt oferite gratuit dezvoltatorilor.
Word Wide Web
Privind evolutia in timp a limbajului Java si a sistemului WWW, se pare ca acestea au urmat un curs de dezvoltare similar. in definitiv, limbajul Java a fost dezvoltat pentru a fi folosit in medii distribuite si in sisteme deschise. WWW este un sistem informatic deschis, creat pentru a fi folosit in mediul distribuit al retelei Internet. Atat Java cat si WWW au fost proiectate pentru a fi portabile, robuste si usor de folosit. De asemenea, Java asigura rezolvarea unor importante probleme de securitate in Web.
Cum se imbina aceste elemente si de ce este Java atat de important pentru dezvoltarea retelei Internet? Pentru a intelege mai bine legatura dintre Java, Internet si WWW, sa aruncam o privire asupra istoricului retelei Internet si a sistemului WWW.
Desi astazi pare greu de crezut, Internet a fost la inceput un proiect al guvernului SUA. in 1969, 4 calculatoare aflate la distanta au fost conectate pentru a dovedi ca un astfel de proiect este viabil. Reteaua formata a fost numita ARPANET ( Advanced Research Project Agency Network ). Reteaua ARPANET s-a extins; in 1972 erau conectate 50 de universitati si unitati de cercetare implicate in proiecte militare. La sfarsitul anilor '80 mai mult de 80.000 de calculatoare erau conectate intr-o serie de retele. in final, suma acestor retele a devenit ceea ce se numeste Internet.
Din 1969 pana in 1991, reteaua Internet a fost, in linii mari, un domeniu privat - rezervat cercetatorilor, invatamantului si armatei. Desi firmele comerciale se puteau conecta la Internet, politica retelei interzicea conducerea afacerilor prin intermediul acesteia. Situatia s-a schimbat in 1991, cand interdictia privind activitatile comerciale a fost ridicata. Aceasta s-a intamplat in primul rand datorita formarii unei retele paralele care permitea separarea fluxului de informatii comerciale de cel al informatiilor necomerciale. in acest mod, a aparut posibilitatea conducerii unor activitati comerciale fara folosirea zonelor rezervate cercetarii si educatiei.
Din acel moment, Cresterea retelei Internet s-a facut intr-un ritm accelerat. Astazi, la Internet ca retea globala, sunt conectate mai multe milioane de calculatoare si peste 50 de milioane de utilizatori.
Privind inapoi, este greu de crezut ca sistemul Web nu are decat cativa ani vechime. Dezvoltarea sistemului WWW a inceput in 1989 la laboratorul european pentru fizica particulelor (European Laboratory for Particle Physics - CERN). Web este creatia lui Tim Berners-Lee, care a propus acest sistem ca o modalitate de colaborare a fizicienilor din intreaga lume prin intermediul informatiilor stocate in retea ca documente hipertext.
Structura documentelor hipertext a fost definita 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 distanta, oriunde in lume, a fost creeat un nou protocol de transfer. Acest protocol, numit HTTP (Hypertext Transfer Protocol), ofera mijloace rapide pentru cautarea, preluarea si afisarea documentelor.
Hipertextul va permite sa navigati prin resursele de retea prin simpla apasare a unor butoane. Folosind o aplicatie client numita browser, puteti sa selectati anumite cuvinte cheie evidentiate sau anumite zone dintr-un document pentru a va deplasa rapid la un alt document. Primul browser era un program in mod text, cu posibilitati limitate, din care cauza nu a avut un succes imediat in cadrul comunitatii Internet.
De fapt, la inceputul anului 1993 nu existau mai mult de 50 de puncte de retea (site-uri) web in intreaga lume.Comparand acest numar cu miile de site-uri Web disponibile astazi, se poate spune ca sistemul Web a aparut peste noapte. in prezent, exista aproximativ 100.000 de site-uri Web. Catalizatorul acestei cresteri exponentiale a fost un browser numit Mosaic. Acest browser, dezvoltat de NCSA, a permis utilizatorilor sa exploateze posibilitatile grafice ale sistemului Web si a corespuns asteptarilor. Astazi, sistemul Web este segmentul cu cea mai rapida crestere din Internet, iar Mosaic, browserul aflat in originea acestei dezvoltari, este doar unul dintre zecile de browsere disponibile.
Succesul browserului Mosaic a fost elementul
care a declansat, in 1994, migratia dezvoltatorilor de la NCSA
catre
1995 a fost anul multor inceputuri in Web. Microsoft a introdus primele secvente video si primele documente care contineau sunete.Netscape a lansat o noua versiune a browserului Navigator, care accepta cadrele(frames), adaugirile(plug-ins) si multe alte caracteristici speciale. Gavin Bell, Athony Parisi,Mark Pesce si altii au pus la punct specificatiile 1.0 finale ale limbajului de modelare a realitatii virtuale ( VRML-Virtual Reality Modelling Language ), iar Sun Microsystems au oferit lumii, pe o tava de argint, limbajul Java.
in Java, dezvoltatorii Internet si editorii Web au gasit, in sfarsit, posibilitatea de a crea prezentari multimedia complet interactive pentru Web. Acest pas important in evolutia sistemului Web a fost salutat cu surle si trambite de comunitatea Internet si constituie inceputul unei alte perioade de expansiune in dezvoltarea Web.
Daca ati vazut limbajul Java in actiune, probabil ca nu mai aveti dubii privind importanta sa in dezvoltarea sistemului Web. Java este la fel de important si pentru industria software. Acest limbaj de programare are multe caracteristici care il fac unic, puternic si flexibil. De exemplu, majoritatea limbajelor de programare sunt fie compilate, fie interpretate. Java poate fi folosit in ambele moduri, ceea ce ii confera flexibilitate. Pentru a intelege cum pot fi programele Java compilate si interpretate, sa aruncam o privire asupra elementelor de baza ale limbajelor de programare interpretate sau compilate.
Limbaje de programare interpretate.
Desi exista un numar mic de limbaje de programare interpretate, acestea sunt, in general, cel mai usor de invatat si de folosit. Unul dintre limbajele de programare interpretate cunoscute de foarte multa lume, chiar si de nespecialisti, este limbajul Basic. Numele sau indica faptul ca este rudimentar si in acelasi timp, usor de folosit.
Programele Basic sunt create pe baza unei structuri simple, caracteristica limbajelor de nivel inalt. Dupa ce terminati de scris un program Basic, acesta poate fi rulat imediat. Interpretorul Basic citeste instructiunile codului linie cu linie si le transforma in seturi de instructiuni care pot fi intelese de calculator. Deoarece transformarea are loc in timpul rularii, programele interpretate ruleaza, in general, mai incet decat alte programe si folosesc mai mult din timpul de lucru al procesorului.
Limbaje de programare compilate.
Limbajele de programare compilate sunt, in general, mai greu de invatat si de folosit decat limbajele de programare interpretate. Totusi, majoritatea limbajelor de programare sunt compilate. Printre cele mai cunoscute limbaje de programare compilate se numara Cobol, Fortran, C, C++ si Pascal.
Programele scrise intr-un limbaj de programare compilat sunt create pe baza unei structuri caracteristice limbjelor de nivel inalt. Dupa ce terminati de scris codul sursa al unui program, folositi un compilator pentru a-l tranforma in cod care poate fi citit si executat de calculator. in timpul executarii programului, calculatorul poate sa interpreteze direct instructiunile. Deoarece nu mai este nevoie ca liniile de cod sa fie transformate in timpul rularii, programele compilate sunt executate mai repede decat programele interpretate.
Cresterea vitezei de executie are loc insa in dauna portabilitatii. Codul sursa este compilat intr-un format de nivel scazut, care poate fi rulat numai pe platfoma pentru care a fost compilat. Deci codurile compilate nu sunt direct portabile pe alte platforme.
Asa cum am aratat mai devreme, programele Java pot fi atat compilate, cat si interpretate. Ele sunt create pe baza unei structuri simple, caracteristica limbajelor de nivel inalt. Dupa ce terminati de scris un program, compilati codul sursa intr-un format de nivel mediu, numit cod de octeti. Puteti apoi sa rulati acest cod de octeti, care este interpretat de mediul de executie Java.
Codul de octeti este diferit de codul masina. Codul masina este reprezentat printr-o succesiune de 0 si 1. Codurile de octeti sunt seturi de instructiuni care seamana mai mult cu codul scris in limbaj de asamblare. Calculatorul poate executa direct codul masina, insa codurile de octeti trebuie interpretate inainte de a fi rulate. Diferenta dintre codul de octeti si codul masina este mult mai profunda decat pare la prima vedere. Codul masina poate fi folosit numai pe platforma pentru care a fost compilat. in schimb, codul de octeti poate fi rulat pe orice platforma care foloseste mediul de executie Java. Aceasta posibilitate asigura neutralitatea limbajului Java din punct de vedere arhitectural.
Interpretorul Java transforma codul de octeti intr-un set de instructiuni pe care calculatorul le poate intelege. Deoarece codul de octeti este o forma intermediara, intarzierea necesara pentru transformarea intr-un cod care poate fi inteles de calculator este foarte mica. Daca sunteti familiarizat cu modul de folosire al limbajelor de nivel intermediar, precum assembler, veti intelege adevarata frumusete a limbajului Java. Acesta va permite compilarea codului sursa intr-o forma intermediara, independenta de calculator,care poate fi executata aproape la fel de repede ca si un program complet compilat.
Daca va intrebati in ce mod este obtinuta neutralitatea arhitecturala a limbajului Java, nu sunteti singurul; toate compilatoarele, inclusiv compilatorul Java compileaza codul sursa pentru un anumit calculator. Trucul folosit pentru crearea codului de octeti este compilarea codului sursa pentru un calculator inexistent. Acest calculator imaginar este numit Masina Virtuala Java ( Java Virtual Machine ) si exista doar in nanospatiu sau in memoria calculatorului dvs. Desi crearea unei masini virtuale in memoria sistemului pe care lucrati pare un lucru uimitor, Java constituie dovada vie a faptului ca acest concept este nu numai posibil, ci si foarte puternic.
"Pacalirea" compilatorului Java, astfel incat acesta sa creeze coduri de octeti pentru o masina inexistenta, este numai jumatate din procesul ingenios care asigura neutralitatea arhitecturala a limbajului Java. La randul sau, interpretorul Java trebuie sa convinga fisierul care contine codul de octeti si calculatorul ca ruleaza pe o masina virtuala Java. Interpretorul realizeaza acest lucru actionand ca un intermediar intre masina virtuala Java si masina reala pe care este rulat programul.
Figura de mai jos ilustreaza modul real de lucru al limbajului Java pe un calculator obisnuit. Dupa cum se poate vedea, masina virtuala Java ocupa un nivel intermediar intre sistemul de operare de pe calculatorul dvs. si cadrul de dezvoltare Java. Deasupra cadrului de dezvoltare Java este situata aplicatia scrisa de utilizator in limbaj Java. ( a se vedea capitolul 24 "Masina Virtuala Java" pentru mai multe detalii )
Aplicatia utilizatorului
Nivelurile de Obiecte Java
interactine ale
unui program Java Masina virtuala Java
UNIX Windows OS/2 MacIntosh
Sisteme de operare
Limbajul de programare C a captat atentia utilizatorilor inca de la aparitie, la inceputul anilor '70. Popularitatea limbajului C se bazeaza, in mare, pe relativa usurinta de utilizare, prezentarea prietenoasa si caracteristicile avansate, care la aparitia limbajului au trezit atat interesul programatorilor, cat si al celorlalti utilizatori. Tinand seama de faptul ca principalii competitori ai limbajului C din acel moment erau limbaje demodate si greu de folosit precum COBOL si FORTRAN, care erau rulate, de obicei, pe sisteme mainframe, nu este de mirare ca limbajul C a fost considerat prietenos si ca a atras rapid un mare numar de sustinatori.
Programatorii de astazi nu ar considera, probabil, limbajul C ca fiind cel mai prietenos si mai avansat limbaj de programare disponibil. Aceasta deoarece chiar si cei mai experimentati programatori au uneori probleme la folosirea caracteristicilor avansate ale limbajului C. Daca ati lucrat in C si ati avt vreodata probleme cu pointerii sau cu gestionarea memoriei, stiti, desigur, despre ce vorbim. Pointerii si gestionarea memoriei sunt concepte dificile atat pentru incepatori, cat si pentru programatorii experimentati. O singura linie de cod care adreseaza o locatie gresita de memorie poate cauza blocarea aplicatiei si chiar a calculatorului pe care ruleaza aceasta.
La inceputul anilor '80, calculatoarele personale incepusera sa patrunda pe piata. Pentru a tine pasul cu evolutia industriei calculatoarelor personale, firmele producatoare de software dezvoltau rapid programe. Principalele obstacole in calea lansarii pe piata a unor noi aplicatii erau timpul de dezvoltare si costurile legate de lungimea ciclului de dezvoltare. Pentru reducerea costurilor si a timpului de dezvoltare, programatorii au inceput sa caute posibilitati de refolosire a codului existent in proiectele viitoare.
Deci puteti sa luati secvente de cod C dintr-un proiect si sa le folositi in alte proiecte, reutilizarea codului C este dificila si nu este intotdeauna posibila. Pentru a fi refolosita cu succes, secventa de cod respectiva trebuie sa respecte unele reguli privind o anumita functie sau un anumit set de functii, cum ar fi operatiile de intrare/iesire in fisiere sau de afisare pe ecran. De asemenea, sectiunea de cod trebuie sa fie generalizata si sa nu determine conflicte de atribuire. De cele mai multe ori, in functie de complexitatea si de tipul noului proiect pe care vreti sa-l creati in C, este mai bine sa luati totul de la 0. Cauza principala este faptul ca rezolvarea conflictelor generate de codul pe care incercati sa-l refolositi poate sa va ia mai mult timp decat crearea codului.
O echipa de la AT&T Bell Labs a pus la punct o posibila solutie pentru refolosirea codului. Aceasta solutie a fost numita C++. C++ este o extensie a limbajului C, care permite crearea obiectelor. Obiectele sunt module de cod definite separat, folosite pentru executarea unor functii specifice. Cel care a avut ideea dezvoltarii acestei extensii a limbajului C, permitand separarea unor functii dintr-o aplicatie in module obiect generalizate si refolosibile, a fost Bjarne Stroustrup. La un deceniu de la aparitia limbajului C++, putem afirma ca acesta a constituit o evolutie logica a limbajului C, destinata acoperirii unor cerinte ale programatorilor, este motivul pentru care C++ a devenit cel mai raspandit limbaj de programare.
Desi C++ este fara indoiala, un limbaj de programare popular si puternic, el are si defecte. Acestea provin din mostenirile pe care C++ le pastreaza din C. Ca si in C aspectele cele mai greoaie ale limbajului C++ sunt legate de pointeri si de gestionarea memoriei. in plus, deoarece C++ este o extensie a limbajului C, programatorii C++ pot cadea in greseala pogramarii procedurale, cu care sunt obisnuiti din alte limbaje, precum C. Daca scrieti o aplicatie C++ folosind metodele programarii procedurale, pierdeti toate avantajele oferite de un limbaj orientat pe obiecte. Acesta este punctul la care isi face aparitia limbajul Java.
Limbajul Java este pentru programarea anilor '90 ceea ce C++ a fost pentru programarea anilor '80 - un mare salt inainte. Ca si C++, Java este urmatorul pas logic in domeniul limbajelor de programare si se bazeaza pe cel mai popular limbaj de programare al momentului. Cu ajutorul limbajului Java, puteti obtine programe cu aspectul si comportarea programelor C++, dar beneficiind de avantajele oferite de un limbaj proiectat special pentru programarea orientata pe obiecte. Spre deosebire de C++, Java renunta complet la programarea procedurala si va obliga sa utilizati conceptele solide ale programarii orientate pe obiecte.
Limbajul Java cuprinde componente care verifica automat respectarea limitelor ( Boundary Checking ), ceea ce elimina multe dintre problemele programelor C si C++. in Java nu exista pointeri, iar gestionarea memoriei se face automat. Avantajul evident al acestui fapt este eliminarea problemelor legate de pointeri si a fisurilor de memorie ( memory leaks). Nu mai exista posibilitatea indicarii gresite a unei zone de memorie care sa cauzeze blocarea programului. Sunt excluse erorile aparute la eliberarea memoriei folosite, care sa determine aparitia unor fisuri de memorie si, in final, ocuparea intregii memorii a sistemului.
Java are multe alte caracteristici care fac ca programarea in acest limbaj sa constituie un adevarat refugiu pentru programatorii care s-au saturat de dificultatile asociate cu dezvoltarea in C++. in Java, matricele sunt incapsulate intr-o structura de clase, ceea ce faciliteaza verificarea limitelor. De asemenea, Java executa automat operatiile de recuperare a memoriei ( "colectarea gunoiului"), o alta caracteristica utila pentru gstionarea memoriei.
Procedura de "colectare a gunoiului" este, in acelasi timp, un bun exemplu pentru posibilitatile integrate de executie multifilara ale limbajului Java. Prin rularea in fundal a unor programe care elibereazaa memoria si asigura functii generale de curatenie a sistemului, programele Java se executa mai repede si mai eficient.
Multi programatori incepatori si chiar unii experimentati care folosesc limbaje de programare procedurale au dificultati in intelegerea conceptelor programarii orientate pe obiecte, deoarece acestea sunt destul de abstracte si sunt proiectate pornind de la o alta filosofie decat limbajele de programate procedurale traditionale. Conceptele programarii orientate pe obiecte cuprind:
obiectele
incapsularea si transmiterea de mesaje
clasele
bibliotecile ( numite pachete, in Java )
mostenirea
modificatorii de acces
Unitatea elementara a programelor orientate pe obiecte este obiectul. Limbajele care respecta conceptele programarii orientate pe obiecte descriu relatiile dintre acestea. Toate obiectele au o stare si un comportament.
Starea unui obiect se refera la elementele de date continute de obiect si la valorile asociate acestora. Tot ceea ce cunoaste obiectul despre aceste elemente si despre valorile lor formeaza starea obiectului. Elementele de date asociate obiectelor se numesc variabile de instanta.
Comportamentul unui obiect depinde de actiunile pe care obiectul poate sa le execute asupra variabilelor de instanta definite in cadrul sau. in programarea procedurala, o astfel de constructie se numeste functie. in terminologia specifica programarii orientate pe obiecte, aceasta constructie sa numeste metoda. O metoda apartine clasei a carei membra este; folositi metodele atunci cand trebuie sa executati o anumita operatie de mai multe ori.
Astfel, starea unui obiect depinde de lucrurile pe care le cunoaste obiectul, iar comportamentul lui depinde de actiunile pe care le poate executa. in cazul in care creati un obiect software care reprezinta modelul unui televizor, obiectul va avea variabile care descriu starea curenta a televizorului, cum ar fi o variabila care specifica daca televizorul este pornit, precum si alte variabile care stocheaza canalul selectat, nivelul de volum si faptul ca telecomanda nu transmite nimic pentru moment. De asemenea, obiectul va poseda metode care descriu actiunile permise, cum ar fi pornirea si oprirea televizorului, schimbarea canalului, modificarea volumului si acceptarea comenzilor de la telecomanda
Sugestie: daca nu reusiti sa intelegeti ce inseamna un obiect, ganditi-va la acesta ca la o secventa de cod care executa un set de actiuni specifice si inrudite, numite metode.
Obiectele incapsuleaza varibile de instanta si metode inrudite intr-o singura unitate identificabila. Ca urmare, obiectele sunt usor de refolosit, de actualizat si de intretinut. Puteti sa realizati rapid urmatoarele:
- sa identificati intrarile necesare unui obiect si iesirile acestuia
- sa descoperiti dependentele variabilelor
- sa izolati efectele unor modificari
- sa faceti actualizarile necesare
- sa creati subclase bazate pe obiectul original
Obiectele sunt dinamice, in masura in care dvs le creati astfel. Un obiect poate apela una sau mai multe metode pentru executarea unei operatiuni. Metodele sunt initiate prin transmiterea unui mesaj catre obiectul respectiv. Un mesaj trebuie sa contina numele obiectului catre care este transmis, numele metodelor care urmeaza sa fie apelate si valorile necesare metodelor respective. Obiectul care receptioneaza mesajul foloseste informatiile primite pentru a apela metodele corespunzatoare cu valorile specificate.
Avantajul incapsularii variabilelor de instanta si a metodelor consta in faptul ca puteti trimite mesaje unui obiect, fara sa cunoasteti modul de lucru al obiectului respectiv. Tot ceea ce trebuie sa stiti este tipul valorilor acceptate de o anumita metoda.Ca urmare, obiectul care modeleaza televizorul poate fi extrem de complex dar dvs sau utilizatorul final trb sa stiti doar pe ce buton al telecomenzii sa apasati. Apasarea unui buton de telecomanda trimite un mesaj la obiectul software care reprezinta televizorul, specificand metoda care trebuie apelata si valorile care trebuie metodei respective.
Clasele incapsuleaza obiecte.O singura clasa poate fi folosita pentru instantierea mai multor obiecte.Aceasta inseamna ca puteti avea mai multe obiecte active sau mai multe instante ale aceleiasi clase.
Obiectul care descrie functiile unui televizor este o instanta a unei clase numita television.
Retineti faptul ca fiecare obiect al unei clase are propria stare si propriul comportament. Prin incapsularea obiectelor intr-o structura de clasa,puteti sa grupati seturi de obiecte dupa tipul lor.In interfata Java de programare a aplicatiilor sunt descrise mai multe clase.Fiecare clasa din interfata API specifica un set de obiecte care realizeaza functii inrudite si au caracteristici comune.Clasele pe care le creati pot servi unor scopuri asemanatoare.
SUGESTIE:Imaginati-va o clasa ca pe o unitate de cod care tine un set de module de cod specifice si,in general,inrudite,numite obiecte.
In C++ si in alte limbaje de programare o colectie de clase sau de functii inrudite formeaza o biblioteca. Java pune o amprenta proprie asupra bibliotecilor,folosind termenul de pachet pentru descrierea unei colectii de clase inrudite.Asa cum clasele incapsuleaza obiecte ,pachetele incapsuleaza clase.In sectiunea "Modificatorii de acces " veti vedea ca acest nivel suplimentar de incapsulare face mai usor de controlat accesul la metode.
Mostenirea este o caracteristica puternica a limbajelor de programare orientate pe obiecte,care va permite sa refolositi codul si sa extindeti functionarea claselor existente.In cazul in care creati o clasa pentru trasarea pe ecran a unui dreptunghi umbrit,puteti sa extindeti clasa astfel incat sa mute dreptunghiul desenat intr-o alta pozitie pe ecran,fara sa rescrieti clasa originala. De asemenea,puteti sa extindeti clasa folosita initial pentru desenarea dreptunghiului ,astfel incat sa creeze un set de dreptunghiuri care pot fi selectate de utilizator.In ambele cazuri ,noua clasa mosteneste metodele clasei originale pentru crearea dreptunghiului umbrit si extinde metode pentru efectuarea unor operatii specifice.
Folosind acest aspect al programarii orientate pe obiecte ,puteti sa creati o noua clasa care mosteneste functionarea unei clase extinse .Puteti apoi sa extindeti functiile vechii clase , astfel incat sa corespunda necesitatilor curente.Clasa television poate avea subclase pentru televizoarele alb-negru ,pentru televizoarele color sau pentru televizoare de dimensiuni mari.Noua subclasa television nu este limitata de variabile de instanta sau de metodele clasei superioare (superclasa):ea poate include variabile de instanta si metode care nu sunt definite in superclasa.De asemenea,noua subclasa poate redefini metodele mostenite.
In programarea orientata pe obiecte,accesul la metodele si variabilele obiectelor este controlat prin intermediul modificatorilor de acces.Limbajul de programare Java defineste patru niveluri de control al accesului:
Metode si variabile private
Metode si variabile protejate
Metode si variabile prietenoase
Metode si variabile publice
Metodele si variabilele controlate de obiectul carora le sunt asociate si care nu sunt accesibile obiectele altor clase se numesc private.Avantajul acestui nivel de control este faptul ca nu se permite accesul nelimitat la metode si variabile decat obiectelor unei anumite clase. Metodele si variabilele private din Java sunt accesibile numai obiectelor care apartin aceleiasi clase .
Metodele si variabilele controlate de obiectul carora le sunt asociate si care nu sunt accesibile decat obiectelor din clasa respectiva sau din subclasele clasei respective se numesc protejate.Avantajul acestui nivel de control este ca nu se permite accesul nelimitat la metode si variabile decat obiectelor unor anumite clase.Metodele si variabilele protejate din Java sunt accesibile numai obiectelor care apartin aceleiasi clase sau subclaselor clasei respective.
Metodele si variabilele accesibile , in majoritatea situatiilor,si altor obiecte,se numesc prietenoase.In mod prestabilit,metodele si variabilele declarate in Java sunt prietenoase,accesibile tuturor claselor si obiectelor din acelasi pachet.Avantajul acestui nivel de control este ca obiectele dintr-un anumit pachet(aceste obiecte fiind,in general,inrudite)au acces nelimitat intre ele.
Metodele si variabilele accesibile tuturor obiectelor se numesc publice.La metodele si variabilele publice Java au acces toate obiectele si clasele,chiar daca nu fac parte din acelasi pachet
Asadar,accesul la metodele si variabilele publice este nelimitat.
Principiul lui Peter: intelegerea diferitelor niveluri de acces este simpla daca luati in
considerare domeniul:
Protejate-accesibile obiectelor din aceeasi clasa si din subclasele clasei respective
Prietenoase-nivelul de acces prestabilit; accesibile tuturor claselor din pachetul curent
Publice-accesibile tuturor claselor din orice pachet
Java ocupa primul loc in lista limbajelor de programare orientate pe obiecte.Multi programatori sunt surprinsi atunci cand descopera cat de usor este sa respecte conceptele proiectarii orientate pe obiecte in Java.Urmatoarele sectiuni va vor ajuta sa intelegeti ce va ofera limbajul Java.
Caracteristicile de baza in limbajul Java
Usurinta cu care puteti face trecerea de la C/C++ la Java si caracteristicile de orientare pe obiecte ale limbajului Java sunt doar partea vizibila a aisbergului. Java are multe caracteristici puternice unele dintre acestea fiind discutate in sectiunile acestui capitol.Limbajul Java este:
cu executie multifilara
dinamic
distribuit
interpretat si compilat
neutru din punct de vedere arhitectural
orientat pe obiecte
portabil
pregatit si compatibil cu operarea in retea
robust
sigur
Aceste caracteristici constituie forta limbajului Java si motivul popularitatii acestuia.Pe masura ce veti dezvolta programe Java,veti descoperi ca multe dintre acestea sunt inrudite si rezulta din dezvoltarea limbajului pentru:
* Folosirea in medii de retea distribuite
* Asigurarea performantei ridicate
* Refolosirea codului
* Asigurarea securitatii
Proiectare pentru folosire in medii de retea distribuite
Un element care contribuie la succesul unui limbaj proietat pentru un mediu complex, asa cum este reteaua Internet,este posibilitatea acestui limbaj de a rula pe platforme eterogene distribuite. Java are aceasta posibilitate,deoarece:
Este neutru din punct de vedere arhitectural,ceea ce inseamna ca programele executabile Java pot fi rulate pe orice platforma care are instalat mediul de executie Java.
Are un grad ridicat de portabilitate ceea ce
inseamna ca Java contine componente care pot fi usor
folosite pe platforme eterogene.Pentru mentinerea portabilitatii,Java
respecta standardele IEEE(
Este distribuit ,ceea ce inseamna ca poate folosi atat obiecte memorate local, cat si obiecte stocate pe calculatoare aflate la distanta.
Este pregatit pentru folosirea in retea si compatibil cu mediile de lucru in retea, ceea ce inseamna ca poate fi utilizat in retele complexe si ca accepta direct protocoalele de retea obisnuite,cum ar fi FTP si HTTP.
Proiectare pentru asigurarea performantei ridicate
Un alt element care contribuie la succesul unui limbaj proiecat pentru un mediu de retea complex este performanta. Java are multe caracteristici care ii asigura o performanta ridicata, printre care compilatorul si sistemul de executie .Interpretorul Java poate executa codul de octeti la o viteza apropiata de cea a executiei unui cod compilat intr-un format pentru calculator,datorita executiei mulifilare.
Spre deosebire de multe alte limbaje de programare Java are incorporate posibilitati de executie mulifilara.Executia multifilara reprezinta posibilitatea de rulare simultana a mai multor procese. Astfel interpretorul Java poate sa ruleze in fundal alte procese,cum ar fi cele pentru "colectarea gunoiului"(recuperarea memoriei care nu mai este folosita)sau pentru gestionarea memoriei. Procesele rulate in fundal profita de perioadele in care unitatea centrala de prelucrare nu este ocupata .In lumea reala multe lucrari se petrec simultan :suna soneria de la usa ,suna si telefonul iar copiii alearga tipind prin bucatarie.Nu puteti sa raspundeti la telefon , sa deschideti usa si sa-l prindeti pe Johny in acelasi timp.Asa ca il prindeti pe Johny cu o mana ridicati receptorul cu cealalta si ii spuneti persoanei de la usa sa astepte putin. Pentru a efectua toate cele trei operatii stabiliti niste prioritati. Prioritatea numarul unu este John. Apelul telefonic pe care l-ati asteptat toata dupa amiaza este prioritatea numarul doi.Postasul care a venit cu scrisorile este prioritatea numarul trei. Programele cu executie multifilara folosesc acelasi sistem de stabilire a prioritatilor.Atunci cand calculatorul asteapta ca utilizatorul sa introduca informatii, procesele de fundal se pot ocupa cu curatirea memoriei.Cand procesorul face o pauza dupa prelucrarea unor numere,un proces de fundal poate profita de cateva cicluri de ceas pentru a pregati o zona de memorie in vederea folosirii.Posibilitatea de rulare a unor procese de fundal in timp ce procesul din prim plan asteapta preluarea unor informatii de la utilizator sau este in repaos este esentiala pentru asigurarea unor performante ridicate.
Proiectare pentru refolosirea codului
Desi proiectarea orientata pe obiecte a limbajului Java este elementul cheie care face posibila refolosirea codului, proiectantii acestui limbaj stiau ca mediul retelelor este intr-o schimbare rapida si permanenta.Ca urmare pentru a se asigura ca dezvoltatorii Java vor putea refolosi codul existent,chiar daca mediul se schimba, Java a fost proiectat ca un limbaj dinamic si robust.
Aceste obiective se realizeaza prin intarzierea largirii obiectelor prin legarea dinamica a claselor in timpul executiei,ceea ce impiedica aparitia erorilor in cazul modificarii mediului de lucru dupa compilarea programului sursa. O alta cale de evitare a erorilor este verificarea structurilor de date atat la compilare , cat si in timpul executiei.
Intre robustete si fiabilitate exista o stransa legatura. Pentru ca Java sa fie un limbaj robust trebuie sa fie in acelasi timp si fiabil. Asa cum am aratat mai devreme,principalele probleme in programele CC++ sunt pointerii si gestionarea memoriei. Ca urmare robustetea si fiabilitatea sunt asigurate prin eliminarea pointerilor,prin folosirea verificarii dinamice a limitelor, ceea ce elimina posibilitatea violarii acestora si prin gestionarea automata a memoriei, inlaturindu-se astfel posibilitatea aparitiei fisurilor si a violarilor de memorie.
In mediile de retea distribuite,caracteristicile de securitate sunt esentiale,mai ales intr-o lume informatizata in care abunda virusii, caii troieni si viermii. Multe dintre caracteristicile limbajului Java asigura o securitate de nivel inalt.De exemplu, programatorii cu intentii rele nu au acces la stiva sistemului, la zona libera de memorie si la sectiunile protejate de memorie, deoarece Java nu foloseste pointeri, iar memoria este alocata numai in timpul executiei.In acest fel ,accesul la resursele protejate ale sistemului este impiedicat.
De asemenea Java asigura securitatea sistemului in timpul executiei prin verificarea codului de octeti de cate interpretor. Inainte de executarea unui program interpretorul Java efectuiaza o examinare a codului, pentru a se asigura ca acesta reprezinta un cod valid de octeti. Java verifica validitatea codului folosind o schema care semnalizeaza urmatoarele:
* Violarile de acces
* Fortarea pointerilor
* Conversiile ilegale de date
* Valori si parametri incoreti
* Modificarea claselor sau folosirea incorecta a acestora
* Depasirea stivei in partea inferioara sau in partea superioara
* Activitati suspecte sau neautorizate
Structura limbajului Java
Structura limbajului Java este la fel de important ca si caracteristicile sale.Sectiunile urmatoare trec in revista conceptele legate de structura programelor Java.
Aplicatii si miniaplicatii
Indiferent daca ati aflat despre limbajul Java explorand spatiul cibernetic sau citind o publicatie de specialitate, ati remarcat probabil, folosirea termenilor de aplicatie si miniaplicatie. Din nefericire editorii, atat in spatiul cibernetic cat si in publicatiile tiparite, presupun ca dumneavoastra cunoasteti diferenta dintr acesti doi termeni.
Termenul de miniaplicatie Java (applet) se refera in general la un mic program Java creat pentru a fi folosit in sistemul Word Wide Web. Miniaplicatiile Java necesita un program de vizualizare extern, asa incat pentru a putea folosi o miniaplicatie, aveti nevoie de un browser Web sau de un program specializat de vizualizare (applet vierwer). Retineti faptul ca dimensiunea mica a unui applet este ceva relativ si ca elementul definitoriu este faptul ca are nevoie de un program de vizualizare extern.
Termenul de aplicatie Java se refera la un program care poate fi folosit in mod independent. In argoul informaticienilor, termenul folosit pentru acest tip de programe este app. Aplicatiile Java nu necesita un program de vizualizare extern. Aceasta inseamna ca puteti sa executati o aplicatie Java folosind direct interpretorul Java.Retineti ca exista programe Java care pot fi rulate atat ca miniaplicatii folosind un program de vizualizare extern cat si ca aplicatii independente.
Spatii de nume
Cu cat programul pe care il creati este mai mare cu atat creste posibilitatea de refolosire a numelui unei variabile sau al unui parametru. In C++, rezolvarea conflictelor legate de spatiile de nume putea necesita ore sau chiar zile de lucru,mai ales daca foloseati biblioteci mari de clase. Java are un sistem riguros de denumire ,care permite evitarea conflictelor legate de spatiile de nume, prin imbricarea numelor pe mai multe niveluri.
Fiecare componenta a unui nume este imbricata in conformitate cu unul dintre urmatoarele niveluri:
* 0-Spatiul de nume al pachetului
* 1-Spatiul de nume al unitatii de compilare
* 2-Spatiul de nume al tipului
* 3-Spatiul de nume al metodei
* 4-Spatiul de nume al blocului local
* 5-Spatiul de nume al blocului imbricat
Interpretorul Java este responsabil pentru mentinerea si translatarea spatiului de nume. Interpretorul identifica numele de obiecte prin verificarea succesiva a spatiilor de nume. Spatiile de nume sunt ordonate dupa precedenta, pornind de le spatiul de nume cu cel mai inalt nivel,spatiul de nume al pachetului, pana la nivelul cel mai scazut,cel al blocului local imbricat. In general Java foloseste prima potrivire de nume descoperita.
Nivelurile spatiilor de nume formeaza o ierarhie care oglindeste structura reala a pachetelor si a claselor Java. Numele asociate fiecarui nivel sunt separate de numele din alte niveluri prin caracterul punct.Veti intelege mai bine conceptele de spatiu de nume si de nivel in momentul in care veti vedea cum sunt folosite. Pachetele Java din biblioteca originala de pachete contin in mod prestabilit numele java, urmat in general,de un nume de clasa din cadrul pachetului.In exemplul de mai jos,puteti vedea declaratia clasei BorderLayout din pachetul AWT (Abstract WIndowIng Toolkit):
java.awt.BorderLayout
Conventiile spatiilor de nume sunt respectate si de apelurile functiilor. In exemplul de mai jos, puteti vedea modul de apelare a unei metode numita println:
System.out.println(str);
Calea completa de acces la metoda println( ) din spatiul de nume Java este:
java:lang.Sistem.out.println
Java determina locul in care se afla metodele println( ) prin cautarea aparitiei unice a clasei System in spatiul de nume curent.Dupa ce descopera ocurenta clasei System, Java cauta aparitia subclasei out,apoi a metodei println( ).
Structuri de denumire a programelor
Fisierul care contine instructiunile scrise in limbajul Java se numeste sursa sau cod sursa. Fisierele sursa au extensia .java . Aceste fisiere trebuie sa fie de tip text. In urma compilarii fisierelor sursa de catre compilatorul Java, javac, rezulta un cod de octeti care poate fi executat.
In limbajele procedurale,cum ar fi Pascal,codul executabil complet al programului este stocat,in general, intr-un singur fisier.In limbajele orientate pe obiecte, precum Java, codul executabil este stocat conform structurii clasei sau a bibliotecii. Dupa compilarea codului sursa Java obtineti cate un fisier pentru fiecare clasa declarata in codul sursa. Aceste fisiere au extensia .class si se numesc unitati de compilare.
Unitatile de compilare Java contin instructiuni de pachet si instructiuni de import,precum si declaratii ale claselor si interfetelor.Aceste patru componente formeaza structura de baza a unui program Java.
Instructiuni de pachet
Interfata Java API include in pachetul principal Java un numar de alte pachete.Toate clasele si obiectele pe care le creati sunt grupate in mod prestabilit in acest pachet.Ca urmare, daca nu specificati altceva, Java foloseste calea de acces curenta si presupune ca fisierele cu codul compilat se afla in directorul curent, la rularea unui program Java. Pentru a preciza pozitia pachetelor, folositi instructiunile de pachet.
Cei care experimenteaza limbajul Java si nu isi propun dezvoltarea lui pot folosi structura de pachet prestabilita.Dar daca urmariti sa creati aplicatii Java si vreti ca obiectele si clasele sa respecte o structura de denumire a pachetelor diferita de cea prestabilita,trebuie sa includeti in codul sursa o instructiune de pachet:
package NumePachet
Cand definiti noile pachete, trebuie sa respectati structura ierarhica de denumire a limbajului Java.Acesta inseamna ca nivelurile din structura de denumire a pachetelor trebuie sa fie separate de numele de pachete din celelalte niveluri prin caractere punct. Iata un exemplu de instructiuni de pachet pentru un spatiu de nume cu mai multe niveluri:
package MyPackages.NumeSubPachet;
Numele de pachete de pe fiecare nivel al spatiului de nume trebuie sa respecte structura de directoare a sistemului de fisiere,deoarece Java transforma numele pachetelor in cai de acces pentru localizarea claselor si metodelor asociate pachetelor.Acest lucru este realizat prin inlocuirea punctelor cu separatorii specifici sistemului de fisiere.Asadar,numele pachet MyPackages.Gizmos va fi transformat in urmatoarea cale de acces intr-un sistem UNIX:
Intr-un sistemWIndows 95/NT,numele de pachet MyPackages.Gizmos va fi transformat in:
Java localizeaza clasele asociate unui pachet folosind calea de acces obtinuta asa cum am aratat mai sus. Java va cauta pachetul MyPackages.Gizmos,precum si clasele si metodele asociate acestuia,in directorul MyPackagesGizmos.
Specificatiile limbajului Java recomanda folosirea numelor unice de pachete,legate de domeniul Internet in care pachetele pe care le creati vor fi disponibile pentru utilizatorii aflati la distanta.In plus,se recomanda ca numele domeniului principal sa fie scris cu litere mari - de exemplu,COM, EDU sau GOV.
Tinand seama de ordinea de precedenta folosita de Java, schimbati ordinea care identifica domeniul,componenta cu componenta. Astfel,un pachet disponibil global,numit zoom si asociat cu mcp.com,se va numi COM.mcp.zoom.Numele este tranformat in urmatoarea cale de acces pentru un sistem UNIX:
Pentru un sistem WIndows 95/NT,acelasi nume de pachet va fi transformat in cale de acces:
COMmcpzoom
Ca si in alte limbaje de programare, Java include un set de functii principale, accesibile global. Aceste functii sunt grupate in pachetul java.land.Pentru a obtine accesul la pachete,clase si obiecte care nu se afla in aceasta biblioteca, folositi instructiuni de import. Acestea va ajuta sa definiti si sa rezolvati spatiul de nume curent, permitand rezolvarea unui pachet importat cu ajutorul numelor claselor componente.
OBSERVATIE: daca nu folositi instructiuni de import, trebuie sa specificati referinta completa a pachetului inaintea numelui fiecarei clase din codul sursa. Aceasta procedura poate deveni foarte repede obositoare,mai ales in programele mari.
Asadar,este recomandata folosirea instructiunilor de import.
Instructiunile de impot trebuie sa apara inaintea altor declaratii din codul sursa si, in general, dupa instructiunile de pachet, daca acestea sunt folosite. Ideea care sta la baza folosirii instructiunilor de import este aceea de a ajuta compilatorul Java sa gaseasca metodele corespunzatoare si de a
evita conflictele intre nume. Pentru a face disponibile clasele Java de tipAWT,puteti sa folositi in codul sursa urmatoarele instructiuni de import:
import java.awt ;
Aceasta instructiune permite compilatorului Java sa trimita apelul metodei awt.Button catre java.awt.Button.De asemenea, Java va permite sa importati numai tipuri de clase de care aveti nevoie. Pentru aceasta,folositi urmatoarele instructiuni de import:
import java.awt.Button;
Aceasta instructiune permite compilatorului Java sa trimita apelul metodei Button catre java.awt.Button.O metoda mai eficienta pentru importul pachetelor este importul acestora la cerere,astfel:
import java.awt.*;
Caracterul asterisc din instructiunea de import ii spune compilatorului sa importe numai clasele de care este nevoie. In acest fel, puteti sa adaugati in mod dinamic noi tipuri in spatiul de nume;aceasta instructiune de import permite compilatorului Java sa trimita apelul metodelor de tip Button catre java.awt.Button.
SUGESTIE: Majoritatea programelor Java folosesc instructiuni de import la cerere.Desi in acest fel scrieti mai putin cod,este bine sa fiti cat mai explicit in privinta pachetelor de care aveti nevoie.Mai precis,nu este indicat sa folositi instructiuni de import care fac disponibile toate clasele limbajului Java. Atunci cand doua clase din doua pachete diferite au acelasi nume,va aparea un conflict de nume daca nu precedati numele clasei cu numele pachetului.
Declaratiile de clasa
In Java toate clasele sunt derivate dintr-o clasa sistem numita Object.Object este radacina ierarhiei de clase,ceea ce inseamna ca toate metodele variabilele clasei Object sunt disponibile tuturor celorlalte clase.Aceasta structura face posibila refolosirea codului Java. In mod prestabilit,toate clasele sunt private,daca nu sunt declarate publice in mod explicit.
Declaratiile de clasa fara modificatori respecta urmatorul format general:
class nume
Java accepta numai mostenirea simpla a claselor. Ca urmare,toate clasele,cu exceptia claselor Object au o singura clasa parinte,numita superclasa.Aceasta inseamna ca orice clasa pe care o creati poate extinde si mosteni functiile unei singure clase.Desi aceasta poate parea o limitare fata de limbajele de programare care permit mostenirea multipla,Java permite mostenirea multiplaa a metodelor claselor prin intermediul interfetelor claselor.Asa cum veti vedea in sectiunea urmatoare,interfata unei clase este definita printr-o declaratie de interfata.
Declaratiile de interfata
Interfetele sunt clase abstracte .Prin intermediul unei interfete,puteti sa definiti protocoalele pentru metode si pentru variabile finale fara sa va puneti problema implementarii specifice.Acest lucru va permite sa creati un plan al structurii de programare pe care o veti defini mai tarziu.Interfetele pot fi extensii ale uneia sau ale mai multor interfete.In mod prestabilit,toate interfetele sunt private,daca nu sunt declarate publice in mod explicit, dar toate metodele si constantele interfetei sunt in mod prestabilit publice.
OBSERVATII: Variabilele finale sunt asemanatoare cu constantele denumite folosite in alte limbaje de programare.Valorile asociate constantelor si variabilelor finale nu pot fi modificate.
Deoarece nu trebuie sa puneti la punct toate detaliile privind modul intern de lucru al metodelor asociate interfetelor,acestea se pot dezvolta foarte rapid.Ulterior,puteti sa implementati interfata intr-o declaratie de clasa. Deoarece o singura clasa poate sa implementeze mai multe interfete,clasa poate sa partajeze aceeasi interfata cu alte clase sau instante ale unei clase.Acest lucru furnizeaza o mai mare flexibilitate si permite unei clase sa mosteneasca toate proprietatile tuturor apelurilor de metode asociate cu interfete multiple,asociate,la randul lor,cu clase multiple.
Diferenta majora dintre o clasa si o interfata este aceea ca interfetele nu pot stoca date. Mai mult, interfetele nu pot contine implementari ale metodelor,ci doar declaratii ale acestora.Declaratiile de interfata fara modificatori respecta urmatorul format general:
interface nume
Declaratiile de clase care folosesc interfete respecta urmatorul format:
class nume_clasa implements nume_interfata
Un alt format poate fi:
class nume_implements nume_interfata1, nume_interfataN
Singura deficienta a interfetelor este aceea ca necesita legarea dinamica (dynamic binding),ceea ce reduce performantele de executie. Retineti,totusi,ca folosirea interfetelor pentru a realiza mostenirea multipla reduce suprasarcina de executie,in comparatie cu metodele de mostenire multipla folosite in C++.
Specificatiile Java si interfata API
Java a fost lansat oficial in luna mai a anului 1995,la SunWorld`95.De atunci ,limbajul a evoluat si,ca urmare,specificatiile curente ale limbajului de programare Java sunt foarte diferite de cele prezentate initial.
Prima versiune a limbajului Java,creata pentru a fi folosita in Internet, a fost Java Alfa.Versiunile Alfa ale aplicatiilor si limbajelor de programare sunt,in general,livrate dezvoltatorilor pentru revizuire,comentarii si corectarea erorilor.Ultima versiune Alfa a limbajului Java este Java Alfa3, folosita de versiunea Alfa a browserului WebHotJava.
HotJava a fost dezvoltat de catre firma Sun,ca o exemplificare a posibilitatilor limbajului Java,si este scris chiar in limbaj. In ciuda faptului ca versiunile Alfa ale limbajului Java si ale browserului HotJava au posibilitati limitate,acestea s-au raspandit foarte rapid,chiar si dupa aparitia versiunilor Java 1.0.Versiunea Alfa include browserul HotJava ,punand limbajul Java si browserul HotJava la dispozitia tuturor celor care vor sa dezvolte aplicatii Java pentru Internet sau sa afiseze pagini Web care contin miniaplicatii Java. Pana spre sfarsitul anului 1995 HotJava a fost a fost singurul browser disponibil pentru afisarea paginilor Web continand miniaplicatii Java.
Dezvoltarea limbajului era in plina desfasurare in momentul in care Sun a scos pe piata versiunea Java Pre-Beta 1.Odata cu aceasta versiune, au aparut schimbari majore in structura limbajului Java,printre care includerea superclasei AWT. Superclasa AWT este folosita pentru afisarea obiectelor grafice,precum butoane si ferestre derulante.Aceste modificari ale structurii interfetei Java API fac ca versiunile de dupa Pre-Beta 1 sa nu fie compatibile cu versiunea Alfa.De asemenea,versiunea Pre-beta 1 a introdus noi instrumente de lucru Java, precum programul de vizualizare a miniaplicatiilor si depanatorului Java.
La cateva luni dupa aparitia versiunii Java Pre-Beta 1,Sun a lansat pe piata versiunea Java Beta.In general,versiunile Beta ale aplicatiilor si limbajelor sunt accesibile unui numar mai mare de persoane si se concentreaza asupra corectarii erorilor.Desi versiunea Java Beta corecteaza unele erori si imbunatateste securitatea, principalele modificari aduse limbajului sunt legate tot de superclasa AWT.
Ultima versiune Beta a limbajului a fost Java Beta 2,care a adaugat noi functionalitati pachetelor Java.Desi a reprezentat o schimbare majora a interfetei Java API,versiunea Java Beta 2 a modificat interfata API astfel incat aceasta sa fie compatibila cu modul in care browserul Netscape Navigator folosea miniaplicatii scrise cu versiunea Beta.
In viitor: Capitolul 4."Limbajul Java:abecedar",contine o sectiune referitoare la trecerea de la versiunile anterioare la Java1.0.Programatorii care folosesc versiunile Alfa sau Beta vor gasi aceasta sectiune foarte utila.
Deoarece toate versiunile programului Netscape Navigator,incepand cu versiunea 2.0 Beta 4,pot afisa miniaplicatiile Java Beta,multi dezvoltatori Internet au incercat sa creeze asemenea miniaplicatii.Din acest motiv Java Beta 2 API foloseste eticheta Netscape<APPLET>si nu eticheta <APP>utilizata anterior.Eticheta <APPLET> este standardul pentru versiunea 1.0 si pentru versiunile ulterioare ale interfetei.
O alta schimbare cu efecte majore adusa limbajului in versiunea Beta 2 a fost posibilitatea de a incarca clasele din fisiere arhivate(zip).Inainte de aceasta modificare,la instalarea in sistemul de fisiere,Java a creat directoarele subdirectoarele si structura de fisiere care respecta structura interfetei Java API.Discutiile anterioare despre cautarea spatiilor de nume prin transformarea numelor in cai de acces arata clar de ce era nevoie de acest lucru.De exemplu,in versiunile anterioare pentru a gasi metoda println,Java cauta spatiile de nume de-a lungul intregii cai de acces: java.lang.System.out.println. Calea de acces era obtinuta prin inlocuirea punctelor cu separatorul corespunzator sistemului. Java se baza pe structura de directoare a sistemului de fisiere,iar pe harddisk erau instalate mii de fisiere.
Posibilitatea de incarcare a claselor din fisierele arhivate a permis comprimarea intregului continut al interfetei API intr-un singur fisier,economosind spatiul si evitand aglomerarea discului.La instalarea versiunii curente a limbajului Java este copiat pe disc un singur fisier, classes.zip, in subdirectorul lib. In acest fel atunci cand programul de incarcare a claselor si compilatorul Java efectueaza o cautare in spatiul de nume,aceasta se face mai intai in calea de acces corespunzatoare.
Daca fisierul clasei cautate nu este gasit,este cautat fisierul arhivat in classes.zip.
In viitor: Java va permite sa arhivati si pachetele sau clasele creeate de dumneavoastra. Stabilirea mediului de lucru Java si creearea pachetelor arhivate sunt discutate in capitolul 2."Prezentarea setului de dezvoltare Java(JDK)".
In ianuarie 1996, firma Sun a lansat pe piata versiunea Java 1.0. Modificarile fata de versiunea Beta 2 sunt minore si se refera in principal la corectarea unor erori.Aceasta inseamna ca miniaplicatiile Java Beta2 sunt compatibile cu miniaplicatiile Java1.0. De asemenea browserul Netscape Navigator poate afisa atat miniapliacatiile Java Beta 2,cat si miniaplicatiile Java 1.0.
Initial, Sun a pastrat interfata Java API din versiunea Java 1.0. Interfata Java API contine surse de cod ce pot fi folosite in aplicatii.Codul organizat in biblioteci de pachete ce contin clase si metode proiectate pentru a simplifica programarea in limbajul Java. Cel mai important lucru legat de pachetele API este ca acestea au fost foarte bine testate.Veti vedea ca aceste pachete contin toate functiile de baza necesare. In acest fel, puteti sa economisiti timp si sa incepeti dezvoltarea aplicatiilor Java fara sa fie nevoie sa reinventati roata.
Pentru a se asigura ca modelul de securitate oferit de Java este optim pentru Internet,Sun a cerut programatorilor sa-l testeze.La cateva luni dupa aparitia Java 1.0, a fost descoperita o fisura in implementarea modelului de securitate in codul de octeti. Aceasta fisura ,identificata de cercetatorii de la Universitatea Princeton,dadea posibilitatea "spargatorilor"experimentati sa foloseasca o adresa IP(Internet Protocol)care permitea miniaplicatiei accesul la un alt calculator decat cel pe care era executata. Sun a rezolvat problema si a lansat imediat versiunea 1.0.1
La scurt timp,au fost descoperite si alte probleme de securitate. In mai 1996,Sun a lansat versiunea 1.0.2. Aceasta versiune rezolva problemele de securitate descoperite,corecta cateva erori minore din pachetul Java si introducea unele modificari ale interfetei claselor.O alta eroare de securitate, descoperita in iunie 1996, facea posibila manipularea modului in care sunt atribuite obiectele si a modului in care acesta lucreaza impreuna, pentru a submina sistemul de tipuri Java. Dupa ce un cercetator din Marea Britanie a descoperit aceasta deficienta, Sun a revizuit complet sistemul de securitate si a scos o noua versiune actualizata a setului JDK. Deoarece firma Sun si partenerii acesteia pentru dezvoltarea limbajului Java si-au declarat intentia de a folosi in continuare interfata API actuala,se poate presupune ca limbajul Java a atins,in sfarsit,un nivel de standardizare. Aceasta este o veste buna pentru toti cei care vor sa dezvolte aplicatiile in Java.
Evolutia limbajului nu s-a oprit. Sun va continua sa il dezvolte si a anuntat deja o noua versiune majora a limbajului.Catre sfarsitul anului 1997,este asteptata o versiune completa JDK 1.1. Din fericire,introducerea standardizarii ne asigura ca programele create astazi vor putea fi folosite si maine.
Masina virtuala Java
Masina virtuala Java (JVM) reprezinta motorul limbajului de programare Java. Datorita masinii virtuale,limbajul Java este neutru din punct de vedere arhitectural, interpretat si compilat, pregatit si compatibil cu operarea in retea ,portabil,robust si sigur. JVM asigura aceste caracteristici prin furnizarea unor specificatii abstracte,pentru care dezvoltatorii pot crea interpretoare,iar programatorii pot proiecta aplicatii.
Specificatiile abstracte creeaza un calculator imaginar.Deoarece masina virtuala Java exista numai in memorie ,dezvoltatorii Java pot folosi metodologia orientata pe obiecte pentru transmiterea informatiilor - parametri, apeluri de metode si alte tipuri de date-intre masina reala si masina virtuala.Dupa ce mapeaza interactiunile dintre masina virtuala si masina reala pentru operatii standard de intrare/iesire,operatii de intrare/iesire pentru fisiere si operatii de gestionare a memoriei, programatorii pot crea medii aditionale de executie Java pentru alte sisteme. Deoarece specificatiile masinii virtuale Java sunt scrise complet pentru toti utilizatorii si, prin urmare ,sunt deschise pentru dezvoltare,limbajele de programare Java nu sunt restrictionate de vreun proprietar.
Aceasta inseamna ca orice dezvoltator poate crea un interpretor pentru masina virtuala Java.(In capitolul24,vi se ofera o imagine detaliata a sistemului de executie si a masinii virtuale Java)
REZUMAT
Asa cum ati vazut in acest capitol, dezvoltatorii de la JavaSoft-Sun au depus mari eforturi pentru crearea unui limbaj de programare revolutionar. Nici un alt limbaj de programare nu are forta si flexibilitatea limbajului Java. Java este limbajul de programare al anilor `90 si chiar al urmatorilor. Limbajul Java pune la dispozitie o structura usor de folosit, modelata pe baza a doua dintre cele mai populare limbaje de programare, C si C++. Proiectantii limbajului Java au eliminat insa problemele din C si C++. Daca doriti sa dezvoltati aplicatii Java,veti vedea ca proiectarea orientata pe obiecte a limbajului este prietenoasa si familiara.De asemenea,veti vedea interfata Java API economiseste multe ore de munca si ca puteti crea programe mai bune, fara sa fie nevoie sa reinventati roata.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2451
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved