+ All Categories
Home > Documents > 47078123 Limbajul Java Carte in Limba Romana

47078123 Limbajul Java Carte in Limba Romana

Date post: 12-Oct-2015
Category:
Upload: oprisan-cristi
View: 91 times
Download: 8 times
Share this document with a friend

of 154

Transcript
  • Limbajul JAVA -- Cuprins

    Cuprins

    Cuvnt nainte

    Introducere

    PARTEA I-A: Fundamentele programrii

    Calculatorul este agenda, telefonul i televizorul secolului urmtor. tii s-l folosii?

    Capitolul I: Arhitectura calculatoarelor

    Modul n care programm un calculator depinde direct de modul n care acesta este construit. Nu putem gndi reprezentarea i prelucrarea informaiilor fr s tim care sunt principiile constructive de baz ale calculatorului pentru care gndim. De aceea, nainte de toate, s ncercm s aflm cum funcioneaz un calculator modern.

    Capitolul II: Limbaje de programare

    Pentru a putea programa, este necesar s avem cu calculatorul un limbaj comun, numit limbaj de programare, cu ajutorul cruia s descriem informaiile pe care dorim s le prelucrm i modul n care acestea trebuiesc prelucrate. Limbajele de programare actuale, dei foarte diferite ntre ele, ofer n principiu aceleai tipuri de informaie primitiv i aceleai tipuri de operaii.

    Capitolul III: Reprezentarea informaiilor cu obiecte

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...%20in%20romana/Carte%20JAVA%20in%20romana/index.html (1 of 3)12.01.2006 23:07:41

    LuminitaOval

    LuminitaUnderline

    LuminitaInformation Only

  • Limbajul JAVA -- Cuprins

    Programarea orientat pe obiecte este cea mai nou tehnologie de proiectare a programelor de calculator. Aceasta ne permite, n esen, s modelm informaiile cu care lucreaz calculatorul ntr-un mod similar cu acela n care percepem obiectele reale: fiecare obiect este un uniune ntre proprieti i comportament.

    PARTEA A II-A: Descrierea limbajului JavaDespre un om care tie dou limbi se spune c este de dou ori mai detept. Dar ce spunei despre un programator care tie dou limbaje?

    Capitolul IV: Structura lexical Java

    La nceputul prezentrii fiecrui limbaj de programare trebuie s definim exact setul de caractere cu care lucreaz limbajul, modul de construcie a identificatorilor, comentariilor i literalilor specifici, care sunt operatorii i separatorii limbajului. n plus, trebuie s avem o list complet a cuvintelor rezervate Java.

    Capitolul V: Componente de baz ale programelor Java

    Componentele de baz ale oricrui limbaj de programare sunt variabilele, expresiile i instruciunile. Ca orice alt limbaj de programare, Java i definete propriile tipuri de date, implementeaz principalele instruciuni ale programrii structurate i i definete propriii operatori i modul n care pot fi folosii acetia la construcia expresiilor.

    Capitolul VI: Obiecte Java

    Pentru a fi un limbaj orientat obiect, Java trebuie s defineasc o cale de a crea noi clase de obiecte i de a le instania. n plus, limbajul trebuie s ofere suport pentru principalele trsturi ale limbajelor orientate obiect: ncapsulare i derivare.

    PARTEA A III-A: Tehnici de programare n Java

    A cunoate o limb nu este totul. Mai trebuie s ai i ceva de spus.

    Capitolul VII: Modele de programare

    Modul n care este lansat un program i modul n care evolueaz execuia

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...%20in%20romana/Carte%20JAVA%20in%20romana/index.html (2 of 3)12.01.2006 23:07:41

  • Limbajul JAVA -- Cuprins

    sa ulterioar depinde de limbajul n care a fost scris programul i de mediul hardware i software n care ruleaz programul. Limbajul Java definete dou moduri diferite pentru execuia programelor: aplicaiile Java i apleturile Java.

    Capitolul VIII: Structura programelor

    n mod normal, sursele unui program complex sunt mprite n mai multe fiiere pentru o administrare mai uoar. n Java, exist n mod normal cte un fiier surs pentru fiecare clas de obiecte n parte. Limbajul Java definete o serie de structuri sintactice care permit conectarea codului rezultat n urma compilrii diferitelor clase precum i organizarea acestor clase ntr-o structur ierarhic de pachete.

    Capitolul IX: Fire de execuie i sincronizare

    n contextul sistemelor de operare moderne, lucrul cu fire multiple de execuie este n acelai timp o necesitate i o mod. Din pcate, fiecare sistem de operare i definete propria sa bibliotec de funcii pentru a suporta aceast facilitate. Limbajul Java, pentru a fi portabil cu adevrat, este obligat s-i defineasc propriul su suport pentru firele multiple de execuie.

    Bibliografie

    JavaRo

    (C) IntegraSoft 1996-1998

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...%20in%20romana/Carte%20JAVA%20in%20romana/index.html (3 of 3)12.01.2006 23:07:41

  • Limbajul JAVA -- IntegraSoft

    Cuvnt nainteDei trim ntr-o societate n care rata de schimb a tehnologiei a ajuns s ne depeasc, exist domenii care se schimb mult prea lent fa de ateptrile noastre. S lum de exemplu calculatoarele. Nu exist zi n care s nu auzim de nouti n ceea ce privete viteza, numrul de culori sau miniaturizarea. Nu exist zi n care s nu auzim de noi aplicaii i de noi domenii n care a fost introdus informatica. i totui, nimic esenial nu s-a schimbat n partea de fundamente. Aceeai arhitectur numeric guverneaz ntreg spectrul de calculatoare aflate azi pe pia ca i acum jumtate de secol.

    n ceea ce privete comunicaia om-calculator, lucrurile nu stau cu mult mai bine. Dei nu mai comunicm folosindu-ne de cifre binare i nici n limbaje apropriate de main, comunicm n continuare folosindu-ne de cteva primitive structurale de tip bucle sau condiii plus directive de calcul i transfer al informaiilor. Abstracii precum programarea logic, funcional sau orientat obiect nu extind blocurile de baz cu care acionm asupra mainii, le fac doar mai accesibile pentru modul nostru de a gndi.

    ntr-un fel, programarea face exact aceeai greeal pe care a fcut-o i logica clasic statund c orice enun nu poate fi dect adevrat sau fals, fr nici o alt nuanare. n pasul imediat urmtor s-au stabilit cteva enunuri adevrate fr demonstraie i s-a considerat c toate celelalte enunuri trebuie deduse din ele. Programarea a fcut aceleai presupuneri n ceea ce privete comunicaia om-calculator: exist cteva primitive funcionale de baz i toat comunicaia trebuie s poat fi exprimat cu ajutorul acestora.

    n aceste condiii, este normal ca apariia fiecrui nou limbaj de programare s trezeasc un interes major n lumea informatic. De fiecare dat, sperm c noul limbaj ne va permite o exprimare mai uoar, mai flexibil, mai bogat. De aceea, la apariia fiecrui limbaj de programare care promite s ias din anonimat, ne grbim s aflm care sunt principalele faciliti care ni se ofer.

    Apariia limbajului Java a fost nsoit de mult publicitate i de mult scepticism. Prerile au variat de la a spune c Java este o revoluie n programarea calculatoarelor i, mai ales, a reelelor de calculatoare pn la afirmaii care neag orice caracter novator al noului limbaj i care pun succesul Java n exclusivitate pe seama renumelui de care se bucur firma Sun i a campaniei publicitare inteligent condus de marketingul acestei firme.

    Indiferent ns de motivul pentru care limbajul Java a ajuns la cota extraordinar de popularitate pe care o simim cu toii, sentimentul general este acela c Java a devenit deja o realitate i va rmne aa pentru suficient de mult timp. Suficient de mult pentru a fi interesai s apreciem n cunotin de cauz care este adevrul despre acest nou limbaj. Oricum, de la apariia limbajului C++, acum mai bine de un deceniu n urm, nici un alt limbaj nu a nnegrit atta hrtie i nu a adus attea beneficii vnztorilor de servicii Internet.

    Sper ca aceast carte s ofere suportul de care avei nevoie pentru a v putea forma propria prere: avem

    file:///C|/Documents%20and%20Settings/Luminita/Desktop...20romana/Carte%20JAVA%20in%20romana/cuvantinainte.html (1 of 2)12.01.2006 23:07:42

  • Limbajul JAVA -- IntegraSoft

    n fa o revoluie sau un alt fapt comun?

    Trgu Mure, 24 aprilie 1996

    [cuprins]

    (C) IntegraSoft 1996-1998

    file:///C|/Documents%20and%20Settings/Luminita/Desktop...20romana/Carte%20JAVA%20in%20romana/cuvantinainte.html (2 of 2)12.01.2006 23:07:42

  • Limbajul JAVA -- IntegraSoft

    IntroducereScurt istoric Ce este Java? Despre aceast carte Convenii utilizate n aceast carte Sugestii i reclamaii Alte surse de informaii Mulumiri

    Scurt istoric

    Limbajul Java mpreun cu mediul su de dezvoltare i execuie au fost proiectate pentru a rezolva o parte dintre problemele actuale ale programrii. Proiectul Java a pornit cu scopul declarat de a dezvolta un software performant pentru aparatele electronice de larg consum. Aceste echipamente se definesc ca: mici, portabile, distribuite i lucrnd n timp real. De la aceste aparate, ne-am obinuit s cerem fiabilitate i uurin n exploatare.

    Limbajul luat iniial n considerare a fost C++. Din pcate, atunci cnd s-a ncercat crearea unui mediu de execuie care s respecte toate aceste condiii s-a observat c o serie de trsturi ale C++ sunt incompatibile cu necesitile declarate. n principal, problema vine din faptul c C++ este prea complicat, folosete mult prea multe convenii i are nc prea multe elemente de definiie lsate la latitudinea celor care scriu compilatoare pentru o platform sau alta.

    n aceste condiii, firma Sun a pornit proiectarea unui nou limbaj de programare asemntor cu C++ dar mult mai flexibil, mai simplu i mai portabil. Aa s-a nscut Java. Printele noului limbaj a fost James Gostling care v este poate cunoscut ca autor al editorului emacs i al sistemului de ferestre grafice NeWS. Proiectul a nceput nc din 1990 dar Sun a fcut public specificaia noului limbaj abia n 1995 la SunWorld n San Francisco.

    Numele iniial al limbajului a fost Oak, numele unui copac care crete n faa biroului lui James Gostling. Ulterior, s-a descoperit c numele fusese deja folosit n trecut pentru un alt limbaj de programare aa c a fost abandonat i nlocuit cu Java, spre deliciul programatorilor care iubesc cafenelele i aromele exotice.

    Ce este Java?

    n primul rnd, Java ncearc s rmn un limbaj simplu de folosit chiar i de ctre programatorii neprofesioniti, programatori care doresc s se concentreze asupra aplicaiilor n principal i abia apoi asupra tehnicilor de implementare a acestora. Aceast trstur poate fi considerat ca o reacie direct

    file:///C|/Documents%20and%20Settings/Luminita/Deskto...%20romana/Carte%20JAVA%20in%20romana/introducere.html (1 of 7)12.01.2006 23:07:42

  • Limbajul JAVA -- IntegraSoft

    la complexitatea considerabil a limbajului C++.

    Au fost ndeprtate din Java aspectele cele mai derutante din C++ precum suprancrcarea operatorilor i motenirea multipl. A fost introdus un colector automat de gunoaie care s rezolve problema dealocrii memoriei n mod uniform, fr intervenia programatorului. Colectorul de gunoaie nu este o trstur nou, dar implementarea acestuia n Java este fcut inteligent i eficient folosind un fir separat de execuie, pentru c Java are ncorporate faciliti de execuie pe mai multe fire de execuie. Astfel, colectarea gunoaielor se face de obicei n timp ce un alt fir ateapt o operaie de intrare-ieire sau pe un semafor.

    Limbajul Java este independent de arhitectura calculatorului pe care lucreaz i foarte portabil. n loc s genereze cod nativ pentru o platform sau alta, compilatorul Java genereaz o secven de instruciuni ale unei maini virtuale Java. Execuia aplicaiilor Java este interpretat. Singura parte din mediul de execuie Java care trebuie portat de pe o arhitectur pe alta este mediul de execuie cuprinznd interpretorul i o parte din bibliotecile standard care depind de sistem. n acest fel, aplicaii Java compilate pe o arhitectur SPARC de exemplu, pot fi rulate fr recompilare pe un sistem bazat pe procesoare Intel.

    Una dintre principalele probleme ale limbajelor interpretate este viteza de execuie, considerabil sczut fa de cea a limbajelor compilate. Dac nu v mulumete viteza de execuie a unei astfel de aplicaii, putei cere mediului de execuie Java s genereze automat, plecnd de la codul mainii virtuale, codul specific mainii pe care lucrai, obinndu-se astfel un executabil nativ care poate rula la vitez maxim. De obicei ns, n Java se compileaz doar acele pri ale programului mari consumatoare de timp, restul rmnnd interpretate pentru a nu se pierde flexibilitatea. Mediul de execuie nsui este scris n C respectnd standardele POSIX, ceea ce l face extrem de portabil.

    Interpretorul Java este gndit s lucreze pe maini mici, precum ar fi procesoarele cu care sunt dotate aparatele casnice. Interpretorul plus bibliotecile standard cu legare dinamic nu depesc 300 Koctei. Chiar mpreun cu interfaa grafic totul rmne mult sub 1 Moctet, exact ca-n vremurile bune.

    Limbajul Java este orientat obiect. Cu el se pot crea clase de obiecte i instane ale acestora, se pot ncapsula informaiile, se pot moteni variabilele i metodele de la o clas la alta, etc. Singura trstur specific limbajelor orientate obiect care lipsete este motenirea multipl, dar pentru a suplini aceast lips, Java ofer o facilitate mai simpl, numit interfa, care permite definirea unui anumit comportament pentru o clas de obiecte, altul dect cel definit de clasa de baz. n Java orice element este un obiect, n afar de datele primare. Din Java lipsesc funciile i variabilele globale. Ne rmn desigur metodele i variabilele statice ale claselor.

    Java este distribuit, avnd implementate biblioteci pentru lucrul n reea care ne ofer TCP/IP, URL i ncrcarea resurselor din reea. Aplicaiile Java pot accesa foarte uor reeaua, folosindu-se de apelurile ctre un set standard de clase.

    Java este robust. n Java legarea funciilor se face n timpul execuiei i informaiile de compilare sunt

    file:///C|/Documents%20and%20Settings/Luminita/Deskto...%20romana/Carte%20JAVA%20in%20romana/introducere.html (2 of 7)12.01.2006 23:07:42

  • Limbajul JAVA -- IntegraSoft

    disponibile pn n momentul rulrii aplicaiei. Acest mod de lucru face ca sistemul s poat determina n orice moment neconcordana dintre tipul referit la compilare i cel referit n timpul execuiei evitndu-se astfel posibile intruziuni ruvoitoare n sistem prin intermediul unor referine falsificate. n acelai timp, Java detecteaz referinele nule dac acestea sunt folosite n operaii de acces. Indicii n tablourile Java sunt verificai permanent n timpul execuiei i tablourile nu se pot parcurge prin intermediul unor pointeri aa cum se ntmpl n C/C++. De altfel, pointerii lipsesc complet din limbajul Java, mpreun cu ntreaga lor aritmetic, eliminndu-se astfel una din principalele surse de erori. n plus, eliberarea memoriei ocupate de obiecte i tablouri se face automat, prin mecanismul de colectare de gunoaie, evitndu-se astfel ncercrile de eliberare multipl a unei zone de memorie.

    Java este un limbaj cu securitate ridicat. El verific la fiecare ncrcare codul prin mecanisme de CRC i prin verificarea operaiilor disponibile pentru fiecare set de obiecte. Robusteea este i ea o trstur de securitate. La un al doilea nivel, Java are incorporate faciliti de protecie a obiectelor din sistem la scriere i/sau citire. Variabilele protejate ntr-un obiect Java nu pot fi accesate fr a avea drepturile necesare, verificarea fiind fcut n timpul execuiei. n plus, mediul de execuie Java poate fi configurat pentru a proteja reeaua local, fiierele i celelalte resurse ale calculatorului pe care ruleaz o aplicaie Java.

    Limbajul Java are inclus suportul nativ pentru aplicaii care lucreaz cu mai multe fire de execuie, inclusiv primitive de sincronizare ntre firele de execuie. Acest suport este independent de sistemul de operare, dar poate fi conectat, pentru o performan mai bun, la facilitile sistemului dac acestea exist.

    Java este dinamic. Bibliotecile de clase n Java pot fi reutilizate cu foarte mare uurin. Cunoscuta problem a fragilitii superclasei este rezolvat mai bine dect n C++. Acolo, dac o superclas este modificat, trebuie recompilate toate subclasele acesteia pentru c obiectele au o alt structur n memorie. n Java aceast problem este rezolvat prin legarea trzie variabilelor, doar la execuie. Regsirea variabilelor se face prin nume i nu printr-un deplasament fix. Dac superclasa nu a ters o parte dintre vechile variabile i metode, ea va putea fi refolosit fr s fie necesar recompilarea subclaselor acesteia. Se elimin astfel necesitatea actualizrii aplicaiilor, generat de apariia unei noi versiuni de bibliotec aa cum se ntmpl, de exemplu, cu MFC-ul Microsoft (i toate celelalte ierarhii C++).

    Despre aceast carte

    Aceast carte a fost scris pentru a veni n sprijinul acelora care doresc s programeze n limbajul Java. Spre deosebire de majoritatea crilor existente la ora actual pe piaa internaional, nu prea multe de altfel, cartea de fa se focalizeaz asupra facilitilor pe care le ofer noul limbaj, lsnd pe planul al doilea descrierea bibliotecilor standard, impresionante de altfel, definite de ctre Sun i colaboratorii acestuia. Alegerea a fost fcut din convingerea c bibliotecile vin i trec, se dezvolt, n timp ce limbajul rmne.

    file:///C|/Documents%20and%20Settings/Luminita/Deskto...%20romana/Carte%20JAVA%20in%20romana/introducere.html (3 of 7)12.01.2006 23:07:42

  • Limbajul JAVA -- IntegraSoft

    Cartea se adreseaz n acelai timp nceptorilor i programatorilor profesioniti. nceptorii vor gsi n prima parte noiuni fundamentale necesare oricrui programator. Profesionitii, n schimb, vor gsi o referin complet a limbajului Java.

    Prima parte a crii i introduce cititorul pas cu pas n fundamentele funcionrii i programrii calculatoarelor tratnd la un nivel accesibil noiuni precum memoria i procesorul, datele i instruciunile, clasele de obiecte mpreun cu trsturile fundamentale ale programrii orientate obiect.

    Partea a doua a crii prezint limbajul Java n detaliu mpreun cu o serie de exemple simple. Aceast parte este conceput pentru a fi n acelai timp o introducere n sintaxa Java pentru cei care au programat deja i o introducere n constrngerile sintactice i semantica unui limbaj de programare pentru nceptori.

    Partea a treia a crii prezint cteva dintre aspectele fundamentale ale programrii n Java precum aplicaiile, apleturile, pachetele de clase, firele de execuie i tratarea excepiilor. Aceast parte este conceput de sine stttoare i poate servi ca exemplu de programare n Java. Fiecare seciune din aceast parte conine exemple extinse de aplicaii scrise n Java, comentate n surs i n afara acesteia.

    Cititorul nceptor n ale programrii trebuie s parcurg cartea de la nceput pn la sfrit pentru a putea intra treptat n tainele programrii n general i ale limbajului Java.

    Pentru cititorii avansai, prima parte nu constituie un interes major i poate fi srit fr implicaii majore n nelegerea materialului din prile urmtoare. Aceti cititori pot s treac direct la partea a treia pentru a urmri exemplele i abia dup aceea s revin la partea a doua pentru informaii detaliate asupra sintaxei i facilitilor Java. Partea a doua poate fi folosit i pe post de referin.

    O singur excepie: ultima seciune din prima parte introduce noiunea de interfa, puin cunoscut programatorilor n alte limbaje dect Java. Este util ca aceast seciune s fie consultat de ctre toi cititorii, indiferent de nivelul de pregtire n care se afl.

    Convenii utilizate n aceast cartePentru descrierea sintacticii limbajului Java, am apelat la urmtoarele convenii obinuite de reprezentare a regulilor gramaticale:

    l Cuvintele rezervate ale limbajului Java sunt scrise n caractere ngroate, ca: while, do, final.l Cuvintele care in locul construciilor reale ale programului sunt scrise cu caractere oblice, ca n:

    if(Condiie) Instruciune1 else Instruciune2

    Condiie, Instruciune1 i Instruciune2, care apar n descriere, trebuiesc nlocuite cu condiiile adevrate, respectiv cu instruciunile adevrate care trebuiesc executate n funcie de condiie. De exemplu, o construcie real, care respect descrierea de mai sus ar putea fi:

    file:///C|/Documents%20and%20Settings/Luminita/Deskto...%20romana/Carte%20JAVA%20in%20romana/introducere.html (4 of 7)12.01.2006 23:07:42

  • Limbajul JAVA -- IntegraSoft

    if( i < j )min = i; elsemin = j;

    l O list de termeni separai prin caractere |, se poate nlocui cu oricare dintre termenii listei.

    De exemplu:

    public | private | protected

    nseamn c n locul acestui termen poate s apar oricare dintre cuvintele rezervate specificate n list, public, private sau protected.

    l Un termen pus ntre paranteze ptrate este opional. De exemplu, n descrierea:

    Tip NumeVariabil [Iniializator] ;

    Partea de Iniializator poate s lipseasc.

    l Dac, dup un termen apare caracterul *, acesta reprezint faptul c termenul se poate repeta de un numr arbitrar de ori, eventual niciodat. De exemplu, n:

    class NumeClas ClauzImplements*

    caracterul * reprezint faptul c termenul notat prin ClauzImplements se poate repeta de un numr arbitrar de ori, eventual niciodat.

    Pe marginea din stnga a paginii, vei ntlni o serie de simboluri grafice, cu specificaie precis, care v vor permite s navigai mai uor n interiorul crii. Iat semnificaia acestora:

    Semnul din stnga reprezint faptul c n paragraful marcat introduce definiia unui nou termen. Termenul nou introdus este reprezentat n interiorul semnului i este scris cu caractere oblice n textul paragrafului. n cazul de fa cuvntul nou introdus este cuvntul definiia. Atunci cnd gsii o trimitere la un paragraf pentru explicaii, cutai acest semn pe margine pentru a gsi mai repede definiia noiunii dorite.

    Semnul din stnga reprezint o trimitere napoi ctre o noiune deja prezentat n partea de fundamente. Aceast trimitere conine deasupra simbolului grafic numele noiunii pe care trebuie s l cutai ntr-un simbol de definiie, i sub simbolul grafic numrul paragrafului unde se afl definiia. Cititorul

    file:///C|/Documents%20and%20Settings/Luminita/Deskto...%20romana/Carte%20JAVA%20in%20romana/introducere.html (5 of 7)12.01.2006 23:07:42

  • Limbajul JAVA -- IntegraSoft

    nceptor ca i cel avansat poate urma aceste trimiteri pentru a-i mprospta cunotinele sau pentru a se familiariza cu cuvintele sau expresiile folosite pentru a desemna noiuni greu traductibile.

    Semnul din stnga reprezint o referire n avans a unei noiuni care va fi introdus mai trziu. Acest semn este destul de rar n interiorul crii, dar este totui nevoie de el pentru a face referire la anumite faciliti care i gsesc cel mai bine locul n paragraful n care apare semnul. Putei sri fr probleme aceste precizri la prima citire a capitolului i s le luai n seam doar atunci cnd folosii cartea pe post de referin pentru limbajul Java.

    Semnul din stnga reprezint referirea unei noiuni care nu este descris n carte. Acest semn apare atunci cnd se face o referin la una din clasele standard ale mediului Java. Putei gsi informaii exacte despre clasa respectiv la adresa www.javasoft.com, sau putei ncrca din Internet o documentaie complet prin ftp de la adresa ftp.javasoft.com, directorul /docs.

    Semnul din stnga reprezint o trimitere ctre alt carte, n care noiunile din paragraf sunt prezentate mai pe larg. Am folosit acest semn doar de dou ori, pentru a trimite ctre o carte disponibil la aceeai editur cu cartea prezent, despre HTML, scris de Dumitru Rdoiu. O putei gsi pe prima poziie n bibliografie.

    Sugestii i reclamaiiPosibilele erori care s-au strecurat n aceast carte cad n sarcina exclusiv a autorului ei care i cere pe aceast cale scuze n avans. Orice astfel de eroare sau neclaritate cu privire la coninutul crii poate fi comunicat direct autorului pe adresa [email protected] sau:

    Eugen Rotariu Computer Press Agora Str. Tudor Vladimirescu, Nr. 63/1, Cod. 4300, Trgu Mure Romnia

    n Internet, putei s contactai editura Computer Press Agora la adresa www.agora.ro. Pe server exist o pagin separat dedicat acestei cri. Putei verifica periodic aceast pagin pentru eventuale corecturi, exemple suplimentare sau adugiri la coninutul crii.

    Alte surse de informaiiSubiectul Java este departe de a fi ncheiat n aceast carte aa c, dac reacia dumneavoastr este pozitiv, voi ncerca s construiesc o a doua carte dedicat claselor standard Java, mediilor de dezvoltare, din ce n ce mai numeroase, ierarhiilor de baz de date, obiecte distribuite i aa mai departe care i-au fcut apariia de la Sun sau din alt parte n ultimul timp. Nu ezitai s-mi dai de tire dac vei considera util o asemenea continuare.

    file:///C|/Documents%20and%20Settings/Luminita/Deskto...%20romana/Carte%20JAVA%20in%20romana/introducere.html (6 of 7)12.01.2006 23:07:42

  • Limbajul JAVA -- IntegraSoft

    Pn atunci ns, putei consulta crile listate n seciunea de bibliografie de la sfritul acestei cri. Numai cri n limba englez n acest domeniu deocamdat, dar m atept ca situaia s se schimbe dramatic n perioada imediat urmtoare. Noi cri de Java dedicate cititorilor romni nu vor ntrzia s apar.

    Internet-ul este de asemenea o surs interminabil de informaii, situri Java exist i vor continua s apar n ntreaga lume. Adresa de baz este probabil www.javasoft.com, adres care v pune n legtur direct cu firma care a creat i ntreine n continuare dezvoltarea Java. n plus, putei consulta revista electronic JavaWorld de la adresa www.javaworld.com care conine ntotdeauna informaii fierbini, cursuri, apleturi i legturi ctre alte adrese unde v putei mbogi cunotinele despre Java. Pentru documentaii, exemple i nouti n lumea Java putei consulta i www.gamelan.com sau www.blackdown.org.

    Pentru cei care doresc s dezvolte apleturi pe care s le insereze n propriile pagini HTML, recomand n plus citirea crii lui Dumitru Rdoiu, HTML - Publicaii Web, editat de asemenea la Computer Press Agora.

    n fine, nu ncetai s cumprai revistele PC Report i Byte Romnia ale aceleiai edituri, pentru c ele vor conine ca de obicei informaii de ultim or, cursuri i reportaje de la cele mai noi evenimente din lumea calculatoarelor.

    MulumiriMulumesc tuturor celor care, voit sau nu, au fcut posibil aceast carte. Mulumesc celor de la editura Computer Press Agora i managerului ei Romulus Maier pentru c mi-au facilitat publicarea acestei cri. Fr munca lor, cartea s-ar fi aflat n continuare n vitrina proprie cu visuri nerealizate. Mulumesc celor care mi-au druit o parte din timpul lor preios pentru a citi i comenta primele versiuni ale crii: Iosif Fettich, Mircea i Monica Cioat, Alexandru Horvath. Mulumesc celor cu care am discutat de attea ori despre soarta calculatoarelor, programelor, Romniei i lumii n general. Ei au fcut din mine omul care sunt acum: Mircea Srbu, Dumitru Rdoiu, Szabo Laszlo, Mircea Pantea. Mulumesc celor care s-au ocupat de designul i tehnoredactarea acestei cri n frunte cu Adrian Pop i Octav Lipovan. Cel dinti lucru care v-a atras la aceast carte este munca lor. Carmen, i mulumesc c nu te-ai dat btut. Va veni i vremea n care srbtorim cu calculatoarele oprite.

    [cuprins]

    (C) IntegraSoft 1996-1998

    file:///C|/Documents%20and%20Settings/Luminita/Deskto...%20romana/Carte%20JAVA%20in%20romana/introducere.html (7 of 7)12.01.2006 23:07:42

  • Capitolul I -- Arhitectura calculatoarelor

    Capitolul I Arhitectura calculatoarelor

    1.1 Modelul Von Neumann de arhitectur a calculatoarelor 1.2 Organizarea memoriei interne 1.3 Reprezentarea informaiilor n memoria intern 1.4 Modelul funcional al calculatoarelor

    1.1 Modelul Von Neumann de arhitectur a calculatoarelor

    Descrierea care urmeaz este o descriere a modelului Von Neumann de construcie a calculatoarelor. Se pot aduce destule critici acestui model care domin sever nc de la nceputurile mainilor de calcul electronic, dar el continu s fie singurul model funcional.

    Modelul Von Neumann definete calculatorul ca pe un ansamblu format dintr-o unitate central i o memorie intern. Unitatea central sau procesorul este responsabil cu administrarea i prelucrarea informaiilor n timp ce memoria intern servete la depozitarea acestora. n terminologia calculatoarelor, depozitarea informaiilor n memoria intern a calculatorului se numete memorare.

    Acest ansamblu unitate central plus memorie intern comunic cu exteriorul prin intermediul unor dispozitive periferice. Dispozitivele periferice pot fi de intrare sau de ieire n funcie de direcia n care se mic datele. Dac datele sunt furnizate de dispozitivul periferic i transferate spre unitatea central, atunci dispozitivul este de intrare precum sunt tastatura sau mausul. Dac datele sunt generate de unitatea central i transmise spre dispozitivul periferic atunci dispozitivul este de ieire precum sunt ecranul sau imprimanta. Exist i dispozitive mixte de intrare/ieire precum sunt discurile pentru memorarea extern a informaiilor.

    Tastatura calculatorului reprezint un set de butoane (taste) inscripionate care ne permite transmiterea ctre unitatea central a unor litere, cifre, semne de punctuaie, simboluri grafice sau comenzi funcionale. Mausul reprezint un dispozitiv simplu, mobil, care ne permite indicarea unor regiuni ale ecranului cu ajutorul unui cursor.

    n plus, mausul ne permite activarea regiunilor respective cu ajutorul celor 1-2-3 butoane ale sale.

    Ecranul este un dispozitiv cu ajutorul cruia calculatorul comunic informaii spre exterior. Aceste informaii apar sub form de litere, cifre, semne de punctuaie, simboluri grafice sau desene oarecare ntr-o varietate mai mare sau mai mic de culori. Informaia de pe ecran se pierde odat cu redesenarea acestuia. Pentru transferul acestor informaii pe hrtie i ndosarierea lor s-au creat alte dispozitive periferice, numite imprimante.

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...A%20in%20romana/Carte%20JAVA%20in%20romana/cap1.html (1 of 5)12.01.2006 23:07:43

  • Capitolul I -- Arhitectura calculatoarelor

    Memoria intern pierde informaiile odat cu oprirea alimentrii calculatorului. Pentru a salva informaiile utile, precum i programele de prelucrare ale acestora este nevoie de dispozitive de memorare permanente. Din aceast categorie fac parte discurile calculatorului. Exist mai multe modele de discuri precum discurile fixe, discurile flexibile sau compact-discurile, fiecare dintre acestea avnd caracteristici, viteze de acces i capaciti de memorare diferite. Informaiile salvate pe discuri pot fi ncrcate din nou n memoria intern la o pornire ulterioar a calculatorului. V vei ntreba desigur de ce este nevoie de dou tipuri distincte de memorie: pentru c discurile au viteze de acces mult prea mici pentru a putea fi folosite direct de ctre unitatea central.

    Figura 1.1 Modelul constructiv al calculatoarelor Von Neuman.

    Dei modelul constructiv de baz al calculatoarelor nu a evoluat prea mult, componenta tehnologic a acestora s-a aflat ntr-o permanent evoluie. Transformarea vizeaz la ora actual viteza de lucru i setul de instruciuni ale unitii centrale, capacitatea i viteza de stocare a memoriei interne precum i tipurile i calitatea dispozitivelor periferice.

    1.2 Organizarea memoriei interne

    Memoria calculatoarelor actuale este, din punct de vedere logic, o niruire de cifre binare, 0 sau 1. Alegerea bazei 2 de numeraie are n principal raiuni constructive: este mult mai uor i mult mai fiabil

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...A%20in%20romana/Carte%20JAVA%20in%20romana/cap1.html (2 of 5)12.01.2006 23:07:43

  • Capitolul I -- Arhitectura calculatoarelor

    s reprezini un principiu binar ca absena/prezena sau plus/minus dect unul nuanat. O cifr binar este numit, n termeni de calculatoare, bit.

    Biii sunt grupai, opt cte opt, n uniti de memorare numite octei.

    Iari, alegerea cifrei opt are raiuni istorice: era nevoie de o putere a lui doi care s fie ct mai mare, pentru a putea permite transferuri rapide ntre diversele componente ale calculatorului (unitate central, memorie, dispozitive periferice), dar totodat suficient de mic pentru ca realizarea dispozitivelor implicate, cu tehnologia existent, s fie posibil. Cifra opt avea n plus avantajul c permitea reprezentarea tuturor caracterelor tipribile necesare la ora respectiv precum: literele, cifrele sau semnele de punctuaie. ntr-un octet se pot reprezenta pn la 256 (28) astfel de caractere. n prezent octetul este depit datorit necesitii de reprezentare a caracterelor tuturor limbilor scrise din lume.

    Pentru a accesa o informaie n memorie este nevoie de un mod de a referi poziia acesteia. Din acest motiv, octeii memoriei au fost numerotai unul cte unul ncepnd de la 0 pn la numrul maxim de octei n memorie. Numrul de ordine al unui octet l vom numi pentru moment adres. Noiunea de adres i-a extins semnificaia n ultimul timp dar, pentru nelegerea acestui capitol, explicaia de mai sus este suficient.

    Zona fizic de memorie rezervat unei anumite informaii se numete locaia informaiei respective n memorie. n unele dintre locaiile din memorie putem pstra chiar adresa unor alte locaii din memorie. Informaia memorat n aceste locaii se numete referin. Cu alte cuvinte, o referin este o informaie memorat ntr-o locaie de memorie care ne trimite spre (se refer la) o alt locaie de memorie. O locaie de memorie se poate ntinde pe mai mult dect un octet.

    1.3 Reprezentarea informaiilor n memoria internDup cum ai putut observa din cele prezentate pn acum, n memoria calculatorului nu se pot nscrie dect numere naturale. Mai precis, fiecare octet de memorie poate memora un numr de la 0 la 28-1, adic 255. Orice alt informaie pe care dorim s o reprezentm n memoria calculatorului trebuie redus la unul sau mai multe numere naturale mici.

    Aceast trstur a modelului actual de memorare introduce un pas suplimentar de abstractizare n procesul de proiectare de aplicaii, i anume pasul n care se construiete un model de reprezentare n memorie a datelor, necesar aplicaiei.

    S presupunem, de exemplu, c o aplicaie necesit reprezentarea n memoria calculatorului a unui set de culori. Pentru memorarea acestor culori este nevoie de o convenie care s stabileasc o coresponden biunivoc ntre setul de culori i setul de numere naturale folosite la reprezentarea acestora. Corespondena este biunivoc pentru c ea trebuie s ofere posibilitatea de a regsi n mod unic o culoare plecnd de la un numr i, n acelai timp, s ofere o reprezentare unic, sub form de numr, pentru fiecare culoare. De exemplu, putem pune n coresponden culoarea neagr cu numrul 0, culoarea roie

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...A%20in%20romana/Carte%20JAVA%20in%20romana/cap1.html (3 of 5)12.01.2006 23:07:43

  • Capitolul I -- Arhitectura calculatoarelor

    cu numrul 1, culoarea albastr cu numrul 2 i aa mai departe. Ori de cte ori vom memora 2 vom memora albastru i ori de cte ori vom dori s memorm rou, vom memora 1.

    Ca rezultat al folosirii acestei abstractizri, datele aplicaiei devin dependente de convenia de reprezentare utilizat. Presupunnd c o aplicaie construiete n memorie o imagine grafic folosindu-se de o anumit coresponden dintre culori i numere, oricare alt aplicaie care vrea s utilizeze imaginea respectiv trebuie s foloseasc aceeai convenie.

    O cale similar de rezolvare vom ntlni i la reprezentarea caracterelor. Caracterele sunt denumirea ntr-un singur cuvnt a literelor, cifrelor, semnelor de punctuaie sau simbolurilor grafice reprezentate n memorie. Este nevoie de o convenie prin care atam fiecrui caracter cte un numr natural memorabil ntr-un octet.

    n cazul reprezentrii caracterelor, exist chiar un standard internaional care definete numerele, reprezentabile pe un octet, corespunztoare fiecrui caracter n parte, numit standardul ASCII. Alte standarde, cum ar fi standardul Unicode, reprezint caracterele pe doi octei, ceea ce le d posibilitatea s ia n considerare o gam mult mai larg de caractere.

    Caracter Reprezentare pe un octet (ASCII) A-Z 65-90 a-z 97-122 0-9 48-57 , 195,227 , 206,238

    , 194,226 , 170,186 , 222,254

    Tabelul 1.1 Un fragment din codurile ASCII i Unicode de reprezentare a caracterelor grafice n memoria calculatoarelor.

    Desigur, este greu s inem minte codul numeric asociat fiecrui caracter sau fiecrei culori. Este nevoie de pai suplimentari de codificare, care s pun informaia n legtur cu simboluri mai uor de inut minte dect numerele. De exemplu, este mult mai uor pentru noi s inem minte cuvinte sau imagini. Dar s nu uitm niciodat c, pentru calculator, cel mai uor este s memoreze i s lucreze cu numere.

    1.4 Modelul funcional al calculatoarelor

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...A%20in%20romana/Carte%20JAVA%20in%20romana/cap1.html (4 of 5)12.01.2006 23:07:43

  • Capitolul I -- Arhitectura calculatoarelor

    Fiecare calculator definete un numr de operaii care pot fi executate de unitatea sa central. Aceste operaii sunt n principal destinate memorrii sau recuperrii informaiilor din memoria intern, calculelor aritmetice sau logice i controlului dispozitivelor periferice. n plus, exist un numr de instruciuni pentru controlul ordinii n care sunt executate operaiile.

    O instruciune este o operaie elementar executabil de ctre unitatea central a unui calculator. O secven de mai multe instruciuni executate una dup cealalt o vom numi program.

    Instruciunile care compun un program trebuiesc i ele reprezentate n memorie, la fel ca orice alt informaie, din cauza faptului c unitatea central nu are posibilitatea s-i pstreze programele n interior. Pentru memorarea acestor instruciuni este nevoie de o nou convenie de reprezentare care s asocieze un numr sau o secven de numere naturale fiecrei instruciuni a unitii centrale.

    Execuia unui program de ctre calculator presupune ncrcarea instruciunilor n memoria intern i execuia acestora una cte una n unitatea central. Unitatea central citete din memorie cte o instruciune, o execut, dup care trece la urmtoarea instruciune. Pentru pstrarea secvenei, unitatea central memoreaz n permanen o referin ctre urmtoarea instruciune ntr-o locaie intern numit indicator de instruciuni.

    Modelul de execuie liniar a instruciunilor, n ordinea n care acestea sunt aezate n memorie, este departe de a fi acceptabil. Pentru a fi util, un program trebuie s poat s ia decizii de schimbare a instruciunii urmtoare n funcie de informaiile pe care le prelucreaz. Aceste decizii pot nsemna uneori comutarea execuiei de la o secven de instruciuni la alta. Alteori, este necesar s putem executa o secven de instruciuni n mod repetat pn cnd este ndeplinit o anumit condiie exprimabil cu ajutorul informaiilor din memorie. Numrul de repetri ale secvenei de instruciuni nu poate fi hotrt dect n momentul execuiei. Aceste ramificri ale execuiei se pot simula destul de uor prin schimbarea valorii referinei memorate n indicatorul de instruciuni.

    [cuprins]

    (C) IntegraSoft 1996-1998

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...A%20in%20romana/Carte%20JAVA%20in%20romana/cap1.html (5 of 5)12.01.2006 23:07:43

  • Capitolul II -- Limbaje de programare

    Capitolul II Limbaje de programare

    2.1 Comunicaia om-main 2.2 Tipuri de numere reprezentabile n calculator 2.3 Valori de adevr 2.4 iruri de caractere 2.5 Tipuri primitive de valori ale unui limbaj de programare 2.6 Tablouri de elemente 2.7 Expresii de calcul 2.8 Variabile 2.9 Instruciuni

    2.1 Comunicaia om-mainPentru a executa un program de calculator este necesar s putem comunica cu unitatea central pentru a-i furniza instruciunile necesare. Cel mai simplu mod de a le comunica este nscrierea codului instruciunilor direct n memoria calculatorului de unde pot fi citite de ctre unitatea central. Aceast cale este ns extrem de anevoioas pentru programator pentru c el trebuie s nvee s se exprime coerent ntr-un limbaj ale crui componente de baz sunt coduri numerice.

    O alternativ mai bun este folosirea unui limbaj de comunicaie format dintr-un numr foarte mic de cuvinte i caractere speciale mpreun cu un set de convenii care s ajute la descrierea numerelor i a operaiilor care trebuiesc executate cu aceste numere. Limbajul trebuie s fie att de simplu nct calculatorul s poat traduce singur, prin intermediul unui program numit compilator, frazele acestui limbaj n instruciuni ale unitii centrale. Ori de cte ori vom imagina un nou limbaj de comunicaie cu calculatorul va trebui s crem un nou program compilator care s traduc acest limbaj n instruciuni ale unitii centrale, numite uneori i instruciuni main.

    n realitate folosirea termenului de limbaj de comunicaie nu este extrem de fericit pentru c de obicei noi doar instruim calculatorul ce are de fcut i cum trebuie s fac acel lucru, fr s-i dm vreo ans acestuia s comenteze sarcinile primite. n continuare vom numi aceste limbaje simplificate limbaje de programare pentru a le deosebi de limbajele pe care le folosim pentru a comunica cu ali oameni i pe care le vom numi limbaje naturale.

    Limbajele de programare trebuie s ne ofere o cale de descriere a modulului n care dorim s reprezentm informaiile cu care lucreaz programul, o cale de a specifica operaiile care trebuiesc executate cu aceste informaii i o cale de a controla ordinea n care sunt executate aceste operaii.

    n plus, limbajele de programare trebuie s respecte urmtorul principiu fundamental: rezultatul

    file:///C|/Documents%20and%20Settings/Luminita/Desk...%20in%20romana/Carte%20JAVA%20in%20romana/cap2.html (1 of 13)12.01.2006 23:07:45

  • Capitolul II -- Limbaje de programare

    execuiei unei comenzi dintr-un limbaj de programare trebuie s fie complet determinat. Asta nseamn c n limbajele de programare nu este permis nici o form de ambiguitate a exprimrii.

    Informaiile reprezentate n memoria calculatorului i prelucrate de ctre un program scris ntr-un limbaj de programare se numesc date. Tipurile de date care se pot descrie direct cu un anumit limbaj de programare se numesc tipurile de date elementare ale limbajului. Operaiile elementare posibil de exprimat ntr-un limbaj de programare se numesc instruciuni ale limbajului.

    Limbajele de programare au evoluat foarte mult de la nceputurile calculatoarelor. Tendina general este aceea de apropiere treptat de limbajele naturale i de modul n care acestea descriu i utilizeaz informaiile. Abstraciile exprimabile cu ajutorul limbajelor de programare sunt din ce n ce mai multe i cuprind o gam din ce n ce mai larg a noiunilor fundamentale cu care opereaz mintea uman.

    Un alt aspect n care se reflect evoluia limbajelor de programare este reprezentat de creterea profunzimii i calitii controlului pe care compilatoarele l fac n momentul traducerii din limbaj de programare n limbaj main, astfel nct ansa de a grei la descrierea programului s fie ct mai mic.

    Cu toate c limbajele de programare au fcut pai eseniali n ultimul timp, ele au rmas totui foarte departe de limbajele naturale. Pentru a programa un calculator, trebuie s poi gndi i s poi descrie problemele ntr-unul dintre limbajele pe care acesta le nelege. Din acest motiv, scrierea programelor continu s rmn o activitate rezervat unui grup de iniiai, chiar dac acest grup este n continu cretere.

    2.2 Tipuri de numere reprezentabile n calculator

    Dei toate informaiile reprezentabile direct n memoria calculatorului sunt doar numere naturale, constructorii calculatoarelor de astzi au diversificat tipurile acestora prin stabilirea unor convenii de reprezentare pentru numerele negative, reale i pentru caractere. Aceste convenii folosesc numerele naturale pentru reprezentarea celorlalte tipuri de numere. Uneori, reprezentrile ocup mai mult de un octet n memoria calculatorului, dimensiunile obinuite fiind 1, 2, 4 sau 8 octei. Sau, echivalent, 8, 16, 32 sau 64 de bii.

    Numerele naturale sunt ntotdeauna pozitive. Pentru reprezentarea unui numr ntreg cu semn pot fi folosite dou numere naturale. Primul dintre acestea, avnd doar dou valori posibile, reprezint semnul numrului i se poate reprezenta folosind o singur cifr binar. Dac valoarea acestei cifre binare este 0, numrul final este pozitiv, iar dac valoarea cifrei este 1, numrul final este negativ. Al doilea numr natural folosit n reprezentarea numerelor ntregi cu semn conine valoarea absolut a numrului final. Aceast convenie, dei are dezavantajul c ofer dou reprezentri pentru numrul zero, un zero pozitiv i altul negativ, este foarte aproape de reprezentarea numerelor cu semn folosit de calculatoarele moderne.

    n realitate, convenia care se folosete pentru reprezentarea numerelor ntregi cu semn este aa numita

    file:///C|/Documents%20and%20Settings/Luminita/Desk...%20in%20romana/Carte%20JAVA%20in%20romana/cap2.html (2 of 13)12.01.2006 23:07:45

  • Capitolul II -- Limbaje de programare

    reprezentare n complement fa de doi. Aceasta reprezint numerele negative prin complementarea valorii lor absolute bit cu bit i apoi adunarea valorii 1 la numrul rezultat. Complementarea valorii unui bit se face nlocuind valoarea 1 cu 0 i valoarea 0 cu 1. Dac avem de exemplu numrul 1, reprezentat pe un octet ca un ir de opt cifre binare 00000001, complementarea bitcu bit a acestui numr este numrul reprezentat pe un octet prin11111110.

    Pentru a reprezenta valoarea -1 nu ne mai rmne altceva de fcut dect s adunm la numrul rezultat n urma complementrii un 1 i reprezentarea final a numrului ntreg negativ -1 pe un octet este 11111111.

    n aceast reprezentare, numrul 00000000 binar reprezint numrul 0 iar numrul 10000000, care mai nainte reprezenta numrul 0 negativ, acum reprezint numrul -128. ntr-adevr, numrul 128 se poate reprezenta n binar prin 10000000. Complementat, acest numr devine 01111111 i dup adunarea cu 1, 10000000. Observai c numerele 128 i -128 au aceeai reprezentare. Convenia este aceea c se pstreaz reprezentarea pentru -128 i se elimin cea pentru 128. Alegerea este datorat faptului c toate numerele pozitive au n primul bit valoarea 0 i toate cele negative valoarea -1. Prin transformarea lui 10000000 n -128 se pstreaz aceast regul.

    Folosind reprezentarea n complement fa de doi, numerele ntregi reprezentabile pe un octet sunt n intervalul -128 pn la 127, adic -27 pn la 27 -1. n general, dac avem o configuraie de n cifre binare, folosind reprezentarea n complement fa de doi putem reprezenta numerele ntregi din intervalul nchis -2n-1 pn la 2n-1-1. n practic, se folosesc numere ntregi cu semn reprezentate pe 1 octet, 2 octei, 4 octei i 8 octei, respectiv 8, 16, 32 i 64 de bii.

    Dac dorim s reprezentm un numr real n memoria calculatorului, o putem face memornd cteva cifre semnificative ale acestuia plus o informaie legat de ordinul su de mrime. n acest fel, dei pierdem precizia numrului, putem reprezenta valori foarte aproape de zero sau foarte departe de aceast valoare.

    Soluia de reprezentare este aceea de a pstra dou numere cu semn care reprezint cifrele semnificative ale numrului real respectiv un exponent care d ordinul de mrime. Cifrele reprezentative ale numrului se numesc mpreun mantis. Numrul reprezentat n final este 0.mantisaEexponent. E are valoarea 256 spre deosebire de exponentul 10 pe care l folosim n uzual. Dac valoarea exponentului estefoarte mare i pozitiv, numrul real reprezentat este foarte departe de 0, nspre plus sau nspre minus. Dac exponentul este foarte mare n valoare absoluti negativ, numrul real reprezentat este foarte aproape de zero.

    n plus, pentru a ne asigura de biunivocitatea corespondenei, avem nevoie de o convenie care s stabileasc faptul c virgula este plasat imediat n faa cifrelor semnificative i c n faa acesteia se gsete o singur cifr 0. Numerele care respect aceast convenie se numesc numere normalizate.

    Aceast mutare a virgulei imediat n faa cifrelor semnificative poate s presupun modificarea exponentului care pstreaz ordinul de mrime al numrului. Numerele fracionare se numesc n

    file:///C|/Documents%20and%20Settings/Luminita/Desk...%20in%20romana/Carte%20JAVA%20in%20romana/cap2.html (3 of 13)12.01.2006 23:07:45

  • Capitolul II -- Limbaje de programare

    limbajul calculatoarelor numere n virgul mobil sau numere flotante tocmai din cauza acestei eventuale ajustri a poziiei virgulei.

    Cu aceast convenie nu se poate reprezenta orice numr real, dar se poate obine o acoperire destul de bun a unui interval al axei numerelor reale cu valori. Atunci cnd ncercm s reprezentm n memoria calculatorului un numr real, cutm de fapt cel mai apropiat numr real reprezentabil n calculator i aproximm numrul iniial cu acesta din urm. Ca rezultat, putem efectua calcule complexe cu o precizie rezonabil.

    Descrierea conveniei exacte de reprezentare a numerelor reale n calculator depete cadrul acestei prezentri. Unele dintre detalii pot fi diferite de cele prezentate aici, dar principiul este exact acesta. Convenia de reprezentare a numerelor reale este standardizat de IEEE n specificaia 754.

    Desigur, n unele probleme, lipsa de precizie poate s altereze rezultatul final, mai ales c, uneori, erorile se cumuleaz. Exist de altfel o teorie complex, analiza numeric, conceput pentru a studia cile prin care putem ine sub control aceste erori de precizie. Putem crete precizia de reprezentare a numerelor reale prin mrirea spaiului rezervat mantisei. n acest fel mrim numrul de cifre semnificative pe care l pstrm. n general, unitile centrale actuale lucreaz cu dou precizii: numerele flotante simple, reprezentate pe 4 octei i numerele flotante duble, reprezentate pe 8 octei.

    2.3 Valori de adevr

    Uneori, avem nevoie s memorm n calculator valori de adevr. Exist doar dou valori de adevr posibile: adevrat i fals. Uneori, aceste valori de adevr se mai numesc i valori booleene. Dei pentru memorarea acestor valori este suficient o singur cifr binar, n practic aceste valori sunt reprezentate pe un ntreg octet pentru c operaiile la nivel de bit sunt de obicei prea lente. Valorile booleene se pot combina ntre ele prin operaii logice: i, sau, "negaie.

    2.4 iruri de caractere

    Dup cum spuneam mai nainte, dei orice informaie reprezentat n calculator este n final un numr, mintea uman este obinuit s lucreze cu cuvinte i imagini mai mult dect cu numere. De aceea, calculatorul trebuie s aib posibilitatea s simuleze memorarea informaiilor de acest fel.

    n ceea ce privete cuvintele, ele pot fi reprezentate n memoria calculatorului prin caracterele care le formeaz. niruirea acestor caractere n memorie duce la noiunea de ir de caractere. Pe lng caracterele propriu-zise care construiesc cuvntul, un ir de caractere trebuie s poat memora i numrul total de caractere din ir, cu alte cuvinte lungimea sa.

    n realitate, un ir de caractere nu conine doar un singur cuvnt ci este o niruire oarecare de caractere printre care pot exista i caractere spaiu. De exemplu, urmtoarele secvene sunt iruri de caractere:

    file:///C|/Documents%20and%20Settings/Luminita/Desk...%20in%20romana/Carte%20JAVA%20in%20romana/cap2.html (4 of 13)12.01.2006 23:07:45

  • Capitolul II -- Limbaje de programare

    "Acesta este un ir de caractere", "Eugen", "ABCD 0123", "HGkduI;.!".

    Fiecare limbaj de programare trebuie s ofere o convenie de reprezentare a irurilor de caractere n calculator precum i o convenie de scriere a acestora n program. De obicei, cea de-a doua convenie este aceea c irul de caractere trebuie nchis ntre apostroafe sau ghilimele. n paragraful anterior de exemplu, am folosit ghilimele pentru delimitarea irurilor de caractere.

    Convenia de reprezentare n memorie difer de la un limbaj de programare la altul prin modul n care este memorat lungimea irului, precum i prin convenia de reprezentare n memorie a caracterelor: ASCII, Unicode sau alta.

    mpreun cu fiecare tip de dat, limbajele de programare trebuie s defineasc i operaiile ce se pot executa cu datele de tipul respectiv. Pentru irurile de caractere, principala operaie este concatenarea. Prin concatenarea a dou iruri de caractere se obine un ir de caractere care conine caracterele celor dou iruri puse n prelungire. De exemplu, prin concatenarea irurilor de caractere "unu" i ", doi", rezult irul de caractere: "unu, doi".

    2.5 Tipuri primitive de valori ale unui limbaj de programareVom numi tipuri primitive de valori ale unui limbaj acele tipuri de valori care se pot reprezenta direct ntr-un anumit limbaj de programare. Pentru ca informaia reprezentabil s fie independent de calculatorul pe care ruleaz programele, un limbaj de programare trebuie s-i defineasc propriile sale tipuri primitive, eventual diferite de cele ale unitii centrale, tipuri care s generalizeze tipurile primitive ale tuturor unitilor centrale.

    Pentru fiecare dintre aceste tipuri primitive de valori, limbajul trebuie s defineasc dimensiunea locaiei de memorie ocupate, convenia de reprezentare i mulimea valorilor care pot fi reprezentate n aceast locaie. n plus, limbajul trebuie s defineasc operaiile care se pot executa cu aceste tipuri i comportarea acestor operaii pe seturi de valori diferite.

    Tipurile primitive ale unui limbaj sunt de obicei: numere de diverse tipuri, caractere, iruri de caractere, valori de adevr i valori de tip referin. Totui, acest set de tipuri primitive, denumirea exact a tipurilor i operaiile care se pot executa cu ele variaz mult de la un limbaj de programare la altul.

    2.6 Tablouri de elemente

    Tipurile primitive mpreun cu referinele, adic tipurile de date elementare, indivizibile ale unui limbaj, sunt insuficiente pentru necesitile unei aplicaii reale. De obicei este nevoie de organizri de date mai complicate n care avem structuri de date create prin asocierea mai multor tipuri de date elementare. Aceste structuri de organizare a informaiilor pot conine date de acelai tip sau date de tipuri diferite.

    file:///C|/Documents%20and%20Settings/Luminita/Desk...%20in%20romana/Carte%20JAVA%20in%20romana/cap2.html (5 of 13)12.01.2006 23:07:45

  • Capitolul II -- Limbaje de programare

    n cazul n care dorim s reprezentm o structur coninnd date de acelai tip, va trebui s folosim o structur clasic de reprezentare a datelor numit tablou de elemente. Practic, un tablou de elemente este o alturare de locaii de memorie de acelai fel. Alturarea este continu n sensul c zona de memorie alocat tabloului nu are guri. De exemplu, putem gndi ntreaga memorie intern a calculatorului ca fiind un tablou de cifre binare sau ca un tablou de octei.

    Informaiile de acelai fel reprezentate ntr-un tablou se pot prelucra n mod unitar. Referirea la un element din tablou se face prin precizarea locaiei de nceput a tabloului n memorie i a numrului de ordine al elementului pe care dorim s-l referim. Numrul de ordine al unui element se numete indexul elementului. De aceea, tablourile se numesc uneori i structuri de date indexate.

    S presupunem c, la adresa 1234 n memorie, deci ncepnd cu octetul numrul 1234, avem un tablou de 200 de elemente de tip ntregi cu semn reprezentai pe 4 octei. Pentru a accesa elementul numrul 123 din tablou, trebuie s i aflm adresa n memorie. Pentru aceasta, trebuie s calculm deplasamentul acestui element fa de nceputul tabloului, cu alte cuvinte, la ci octei distan fa de nceputul tabloului se gsete elementul numrul 123.

    Pentru calcului deplasamentului, este nevoie s tim cu ce index ncepe numerotarea elementelor din tablou. De obicei aceasta ncepe cu 0 sau cu 1, primul element fiind elementul 0 sau elementul 1. S presupunem, n cazul nostru, c numerotarea ar ncepe cu 0. n acest caz, elementul cu indexul 123 este de fapt al 124-lea element din tablou, deci mai are nc 123 de elemente naintea lui. n aceste condiii, pentru a afla adresa elementului dat, este suficient s adugm la adresa de nceput a tabloului, deplasamentul calculat ca numrul de elemente din fa nmulit cu dimensiunea unui element din tablou. Adresa final este 1234 + 123 * 4 = 1726.

    Pentru a putea lucra cu elementele unui tablou este deci suficient s memorm adresa de nceput a tabloului i indexul elementelor pe care dorim s le accesm. Alternativa ar fi fost s memorm adresa locaiei fiecrui element din tablou.

    Unul dintre marile avantaje ale utilizrii tablourilor este acela c elementele dintr-un tablou se pot prelucra n mod repetitiv, apelndu-se aceeai operaie pentru un subset al elementelor din tablou. Astfel, ntr-un program putem formula instruciuni de forma: pentru elementele tabloului T ncepnd de la al treilea pn la al N-lea, s se execute operaia O. Numrul N poate fi calculat dinamic n timpul execuiei programului, n funcie de necesiti.

    Elementele unui tablou pot fi de tip primitiv, referin sau pot fi tipuri compuse, inclusiv alte tablouri.

    2.7 Expresii de calcul

    Sarcina principal a calculatoarelor este aceea de a efectua calcule. Pentru a putea efectua aceste calcule, calculatorul trebuie s primeasc o descriere a operaiilor de calcul pe care le are de executat. Calculele

    file:///C|/Documents%20and%20Settings/Luminita/Desk...%20in%20romana/Carte%20JAVA%20in%20romana/cap2.html (6 of 13)12.01.2006 23:07:45

  • Capitolul II -- Limbaje de programare

    simple sunt descrise cel mai bine prin expresii de calcul.

    Expresiile sunt formate dintr-o serie de valori care intr n calcul, numite operanzi i din simboluri care specific operaiile care trebuiesc efectuate cu aceste valori, numite operatori. Operatorii reprezint operaii de adunare, nmulire, mprire, concatenare a irurilor de caractere, etc.

    Operanzii unor expresii pot fi valori elementare precum numerele, irurile de caractere sau pot fi referiri ctre locaii de memorie n care sunt memorate aceste valori. Tot operanzi pot fi i valorile unor funcii predefinite precum sinus, cosinus sau valoarea absolut a unui numr. Calculul complex al valorii acestor funcii pentru argumentele de intrare este astfel ascuns sub un nume uor de recunoscut.

    Figura 2.1 Un exemplu de expresie i componentele acesteia

    2.8 Variabile

    Uneori, atunci cnd calculele sunt complexe, avem nevoie s pstrm rezultate pariale ale acestor calcule n locaii temporare de memorie. Alteori, chiar datele iniiale ale problemei trebuie memorate pentru o folosire ulterioar. Aceste locaii de memorie folosite ca depozit de valori le vom numi variabile. Variabilele pot juca rol de operanzi n expresii.

    Pentru a regsi valoarea memorat ntr-o anumit variabil, este suficient s memorm poziia locaiei variabilei n memorie i tipul de dat memorat la aceast locaie, numit i tipul variabilei. Cunoaterea tipului variabilei este esenial la memorarea i regsirea datelor. La locaia variabilei gsim ntotdeauna o configuraie de cifre binare. Interpretarea acestor cifre binare se poate face numai cunoscnd convenia de reprezentare care s-a folosit la memorarea acelor cifre binare. Mai mult, tipul de variabil ne i spune ci octei de memorie ocup locaia respectiv.

    Pentru a putea referi variabilele n interiorul unui program, trebuie s atribuim cte un nume pentru

    file:///C|/Documents%20and%20Settings/Luminita/Desk...%20in%20romana/Carte%20JAVA%20in%20romana/cap2.html (7 of 13)12.01.2006 23:07:45

  • Capitolul II -- Limbaje de programare

    fiecare dintre acestea i s rezervm locaiile de memorie destinate lor. Aceast rezervare a locaiilor se poate face fie la pornirea programului fie pe parcurs.

    Putem mpri variabilele n funcie de perioada lor de existen n variabile statice, care exist pe tot parcursul programului i variabile locale care se creeaz doar n seciunea de program n care este nevoie de ele pentru a fi distruse imediat ce se prsete seciunea respectiv. Variabilele statice pstreaz de obicei informaii eseniale pentru execuia programului precum numele celui care a pornit programul, data de pornire, ora de pornire sau numrul p . Variabilele locale pstreaz valori care au sens doar n contextul unei anumite seciuni din program. De exemplu, variabilele care sunt utilizate la calculul sinusului dintr-un numr, sunt inutile i trebuiesc eliberate imediat ce calculul a fost terminat. n continuare, doar valoarea final a sinusului este important.

    n plus, exist variabile care se creeaz doar la cererea explicit a programului i nu sunt eliberate dect atunci cnd programul nu mai are nevoie de ele. Aceste variabile se numesc variabile dinamice. De exemplu, se creeaz o variabil dinamic atunci cnd utilizatorul programului introduce un nou nume ntr-o list de persoane. Crearea i tergerea acestui nume nu are legtur cu faza n care se afl rularea programului ci are legtur cu dorina celui care utilizeaz programul de a mai aduga sau terge un nume n lista persoanelor cu care lucreaz, pentru a le trimite, de exemplu, felicitri de anul nou.

    2.9 InstruciuniOperaiile care trebuiesc executate de un anumit program sunt exprimate n limbajele de programare cu ajutorul unor instruciuni. Spre deosebire de limbajele naturale, exist doar cteva tipuri standard de instruciuni care pot fi combinate ntre ele pentru a obine funcionalitatea programelor. Sintaxa de scriere a acestor tipuri de instruciuni este foarte rigid. Motivul acestei rigiditi este faptul c un compilator recunoate un anumit tip de instruciune dup sintaxa ei i nu dup sensul pe care l are ca n cazul limbajelor naturale.

    Tipurile elementare de instruciuni nu s-au schimbat de-a lungul timpului pentru c ele sunt coninute n nsui modelul de funcionare al calculatoarelor Von Neumann.

    n primul rnd, avem instruciuni de atribuire. Aceste instruciuni presupun existena unei locaii de memorie creia dorim s-i atribuim o anumit valoare. Atribuirea poate s par o operaie foarte simpl dar realitatea este cu totul alta. n primul rnd, valoarea respectiv poate fi rezultatul evalurii (calculului) unei expresii complicate care trebuie executat nainte de a fi memorat n locaia de memorie dorit.

    Apoi, nsi poziia locaiei n memorie ar putea fi rezultatul unui calcul n urma cruia s rezulte o anumit adres. De exemplu, am putea dori s atribuim o valoare unui element din interiorul unui tablou. ntr-o astfel de situaie, locaia de memorie este calculat prin adunarea unui deplasament la adresa de nceput a tabloului.

    file:///C|/Documents%20and%20Settings/Luminita/Desk...%20in%20romana/Carte%20JAVA%20in%20romana/cap2.html (8 of 13)12.01.2006 23:07:45

  • Capitolul II -- Limbaje de programare

    n fine, locaia de memorie i valoarea pe care dorim s i-o atribuim ar putea avea tipuri diferite. n acest caz, operaia de atribuire presupune i transformarea, dac este posibil, a valorii ntr-o nou valoare de acelai tip cu locaia de memorie. n plus, aceast transformare trebuie efectuat n aa fel nct s nu se piard semnificaia valorii originale. De exemplu, dac valoarea original era -1 ntreg iar locaia de memorie este de tip flotant, valoarea obinut dup transformare trebuie s fie -1.0.

    Transformarea valorilor de la un tip la altul se numete n termeni informatici conversie. Conversiile pot aprea i n alte situaii dect instruciunile de atribuire, de exemplu la transmiterea parametrilor unei funcii, n calculul unei expresii.

    Forma general a unei instruciuni de atribuire este:

    Locaie = Valoare

    Locaia poate fi o adres cu tip, un nume de variabil sau o expresie n urma creia s rezulte o adres cu tip. Printr-o adres cu tip nelegem o adres de memorie pentru care a fost specificat tipul valorilor care pot fi memorate n interior. O adres simpl, fr tip, nu poate intra ntr-o atribuire pentru c nu putem ti care este convenia de reprezentare care trebuie folosit la memorarea valorii.

    Al doilea tip de instruciune elementar este instruciunea condiional. Aceast instruciune permite o prim form de ramificare a ordinii n care se execut instruciunile. Ramificarea depinde de o condiie care poate fi testat pe setul de date cu care lucreaz aplicaia. n funcie de valoarea de adevr care rezult n urma evalurii condiiei se poate executa o instruciune sau alta. Modelul de exprimare a unei expresii condiionale este urmtorul:

    Dac condiia este adevrat

    execut instruciunea 1

    altfel

    execut instruciunea 2.

    Cele dou ramuri de execuie sunt disjuncte n sensul c dac este executat instruciunea de pe o ramur atunci cu siguran instruciunea de pe cealalt ramur nu va fi executat. Dup execuia uneia sau a celeilalte instruciuni ramurile se reunific i execuia i continu drumul cu instruciunea care urmeaz dup instruciunea condiional.

    file:///C|/Documents%20and%20Settings/Luminita/Desk...%20in%20romana/Carte%20JAVA%20in%20romana/cap2.html (9 of 13)12.01.2006 23:07:45

  • Capitolul II -- Limbaje de programare

    Figura 2.2 Schema de funcionare a unei instruciuni condiionale

    Condiia care hotrte care din cele dou instruciuni va fi executat este de obicei un test de egalitate ntre dou valori sau un test de ordonare n care o valoare este testat dac este mai mic sau nu dect o alt valoare. Condiiile pot fi compuse prin conectori logici de tipul i, sau sau non, rezultnd n final condiii de forma: dac variabila numit Temperatur este mai mic dect 0 i mai mare dect -10, atunci

    Instruciunile condiionale au i o variant n care, n funcie de o valoare ntreag alege o instruciune dintr-un set de instruciuni i apoi o execut. Aceast form este n realitate derivat din instruciunea condiional clasic, ea putnd fi exprimat prin:

    Dac Variabila este egal cu Valoarea 1 atunci

    execut instruciunea 1

    altfel, dac Variabila este egal cu Valoarea 2 atunci

    execut instruciunea 2

    altfel, dac Variabila

    altfel

    file:///C|/Documents%20and%20Settings/Luminita/Desk...%20in%20romana/Carte%20JAVA%20in%20romana/cap2.html (10 of 13)12.01.2006 23:07:45

  • Capitolul II -- Limbaje de programare

    execut instruciunea implicit.

    Un al treilea tip de instruciuni elementare sunt instruciunile de ciclare sau repetitive sau buclele. Acestea specific faptul c o instruciune trebuie executat n mod repetat. Controlul ciclurilor de instruciuni se poate face pe diverse criterii. De exemplu se poate executa o instruciune de un numr fix de ori sau se poate executa instruciunea pn cnd o condiie devine adevrat sau fals.

    Condiia de terminare a buclei poate fi testat la nceputul buclei sau la sfritul acesteia. Dac condiia este testat de fiecare dat nainte de execuia instruciunii, funcionarea ciclului se poate descrie prin:

    Atta timp ct Condiia este adevrat

    execut Instruciunea

    Acest tip de instruciuni de ciclare poat numele de cicluri while, cuvntul while nsemnnd n limba englez "atta timp ct. n cazul ciclurilor while, exist posibilitatea ca instruciunea din interiorul ciclului s nu se execute niciodat, dac condiia este de la nceput fals.

    Figura 2.3 Schema de funcionare a unui ciclu while

    Dac condiia este testat de fiecare dat dup execuia instruciunii, funcionarea ciclului se poate descrie prin:

    Execut Instruciunea

    atta timp ct Condiia este adevrat.

    Acest tip de instruciuni de ciclare poart numele de cicluri do-while, cuvntul do nsemnnd n limba englez "execut. n cazul ciclurilor do-while instruciunea din interiorul ciclului este garantat c se execut cel puin o dat, chiar dac valoare condiiei de terminare a buclei este de la nceput fals.

    file:///C|/Documents%20and%20Settings/Luminita/Desk...%20in%20romana/Carte%20JAVA%20in%20romana/cap2.html (11 of 13)12.01.2006 23:07:45

  • Capitolul II -- Limbaje de programare

    Figura 2.4 Schema de funcionare a unui ciclu do-while

    Dup cum ai observat, probabil, dac instruciunea din interiorul buclei nu afecteaz n nici un fel valoarea de adevr a condiiei de terminare a buclei, exist ansa ca bucla s nu se termine niciodat.

    Al patrulea tip de instruciuni sunt apelurile de proceduri. O procedur este o secven de instruciuni de sine stttoare i parametrizat. Un apel de procedur este o instruciune prin care form programul s execute pe loc instruciunile unei anumite proceduri. Dup execuia procedurii, se continu cu execuia instruciunii de dup apelul de procedur.

    Procedurile sunt utile atunci cnd, n zone diferite ale programului, dorim s executm aceeai secven de instruciuni. n aceste situaii, putem s scriem secvena de instruciuni o singur dat i s-o apelm apoi oriunde din interiorul programului.

    De exemplu, ori de cte ori vom dori s tergem toate semnele de pe ecranul calculatorului, putem apela la o procedur, pentru a nu fi nevoii s scriem de fiecare dat secvena de instruciuni care duce la tergerea ecranului. Procedura n sine, o vom scrie o singur dat i i vom da un nume prin care o vom putea apela ulterior ori de cte ori avem nevoie.

    Uneori secvena de instruciuni dintr-o procedur depinde de nite parametri adic de un set de valori care sunt precizate doar n momentul apelului procedurii. n aceste cazuri, procedura se poate comporta n mod diferit n funcie de valorile de apel ale acestor parametri. n funcie de tipul declarat al unor parametri i de tipul real al valorilor care sunt trimise ca parametri ntr-un apel de procedur, se poate ntmpla ca nainte de apelul propriu-zis s fie necesar o conversie de tip.

    De exemplu, n cazul procedurii care calculeaz valoarea sinusului unui numr, parametrul de intrare este nsui numrul pentru care trebuie calculat sinusul. Rezultatul acestui calcul va fi diferit, n funcie de valoarea la apel a parametrului. n mod normal, parametrul va fi un numr flotant iar dac la apel vom transmite ca parametru o valoare ntreag, ea va fi convertit spre o valoare flotant.

    file:///C|/Documents%20and%20Settings/Luminita/Desk...%20in%20romana/Carte%20JAVA%20in%20romana/cap2.html (12 of 13)12.01.2006 23:07:45

  • Capitolul II -- Limbaje de programare

    n urma apelului unei proceduri poate rezulta o valoare pe care o vom numi valoare de retur a procedurii. De exemplu, n urma apelului procedurii de calcul a sinusului unui numr, rezult o valoare flotant care este valoarea calculat a sinusului. Acest tip de proceduri, care ntorc valori de retur se mai numesc i funcii. Funciile definesc ntotdeauna un tip al valorii de retur pe care o ntorc. n acest fel, apelurile de funcii pot fi implicate i n formarea unor expresii de calcul sub form de operanzi, expresia cunoscnd tipul de valoare care trebuie ateptat ca valoare a apelului unei anumite funcii.

    Analogia cu funciile pe care le-ai studiat la matematic este evident dar nu total. n cazul funciilor scrise ntr-un limbaj de programare, dou apeluri consecutive ale aceleiai funcii cu aceleai valori ca parametri se pot comporta diferit datorit dependenei de condiii exterioare sistemului format din funcie i parametrii de apel. n plus, se poate ntmpla ca modul de comportare al funciei i valoarea de retur s nu fie definite pentru anumite valori de apel ale parametrilor. Dei scrierea acestui tip de funcii este nerecomandabil, n practic ntlnim astfel de funcii la tot pasul.

    [cuprins]

    (C) IntegraSoft 1996-1998

    file:///C|/Documents%20and%20Settings/Luminita/Desk...%20in%20romana/Carte%20JAVA%20in%20romana/cap2.html (13 of 13)12.01.2006 23:07:45

  • Capitolul III -- Reprezentarea informaiilor cu obiecte

    Capitolul III Reprezentarea informaiilor cu obiecte

    3.1 Obiecte 3.2 ncapsularea informaiilor n interiorul obiectelor 3.3 Clase de obiecte 3.4 Derivarea claselor de obiecte 3.5 Interfee spre obiecte

    3.1 Obiecte

    Informaiile pe care le reprezentm n memoria calculatorului sunt rareori att de simple precum culorile sau literele. n general, dorim s reprezentm informaii complexe, care s descrie obiectele fizice care ne nconjoar sau noiunile cu care operm zilnic, n interiorul crora culoarea sau o secven de litere reprezint doar o mic parte. Aceste obiecte fizice sau noiuni din lumea real trebuiesc reprezentate n memoria calculatorului n aa fel nct informaiile specifice lor s fie pstrate la un loc i s se poat prelucra ca un tot unitar. S nu uitm ns c, la nivelul cel mai de jos, informaia ataat acestor obiecte continu s fie tratat de ctre compilator ca un ir de numere naturale, singurele informaii reprezentabile direct n memoria calculatoarelor actuale.

    Pentru a reprezenta n memoria intern obiecte fizice sau noiuni, este nevoie s izolm ntregul set de proprieti specifice acestora i s l reprezentm prin numere. Aceste numere vor ocupa n memorie o zon compact pe care, printr-un abuz de limbaj, o vom numi, ntr-o prim aproximare, obiect. Va trebui ns s avei ntotdeauna o imagine clar a deosebirii fundamentale dintre un obiect fizic sau o noiune i reprezentarea acestora n memoria calculatorului.

    De exemplu, n memoria calculatorului este foarte simplu s crem un nou obiect, identic cu altul deja existent, prin simpla duplicare a zonei de memorie folosite de obiectul pe care dorim s-l dedublm. n realitate ns, este mult mai greu s obinem o copie identic a unui obiect fizic, fie el o simpl foaie de hrtie sau o bancnot de 10000 de lei.

    S revenim ns la numerele naturale. Din moment ce ele sunt singurele entiti reprezentabile n memoria calculatorului, este firesc ca acesta s fie echipat cu un set bogat de operaii predefinite de prelucrare a numerelor. Din pcate, atunci cnd facem corespondena dintre numere i litere de exemplu, nu ne putem atepta la un set la fel de bogat de operaii predefinite care s lucreze cu litere. Dar, innd cont de faptul c n cele din urm lucrm tot cu numere, putem construi propriile noastre operaii specifice literelor, combinnd n mod corespunztor operaiile numerice predefinite.

    De exemplu, pentru a obine dintr-o liter majuscul, s spunem A, corespondenta ei minuscul a, este suficient s adunm un deplasament numeric corespunztor, presupunnd c literele mari i cele

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...A%20in%20romana/Carte%20JAVA%20in%20romana/cap3.html (1 of 9)12.01.2006 23:07:46

  • Capitolul III -- Reprezentarea informaiilor cu obiecte

    mici sunt numerotate n ordine alfabetic i imediat una dup cealalt n convenia de reprezentare folosit. n setul ASCII deplasamentul este 32, reprezentarea lui A fiind 65 iar reprezentarea lui a fiind 97. Acest deplasament se pstreaz pentru toate literele din alfabetul englez i romn, la cel din urm existnd totui o excepie n cazul literei .

    Putem s extindem cerinele noastre mai departe, spunnd c, atunci cnd analizm un obiect fizic sau o noiune pentru a le reprezenta n calculator, trebuie s analizm nu numai proprietile acestora dar i modul n care acestea pot fi utilizate i care sunt operaiile care pot fi executate asupra lor sau cu ajutorul lor. Acest set de operaii va trebui ulterior s-l redefinim n contextul mulimii de numere care formeaz proprietile obiectului din memoria calculatorului, i s l descompunem n operaii numerice preexistente. n plus, trebuie s analizm modul n care reacioneaz obiectul atunci cnd este supus efectului unor aciuni exterioare. Uneori, setul de operaii specifice unui obiect mpreun cu modul n care acesta reacioneaz la stimuli exteriori se numete comportamentul obiectului.

    De exemplu, dac dorim s construim un obiect care reprezint o minge de form sferic n spaiu, este necesar s definim trei numere care s reprezinte coordonatele x, y i z relativ la un sistem de axe dat, precum i o valoare pentru raza sferei. Aceste valori numerice vor face parte din setul de proprieti ale obiectului minge. Dac mai trziu vom dori s construim o operaie care s reprezinte mutarea n spaiu a obiectului minge, este suficient s ne folosim de operaiile cu numere pentru a modifica valorile coordonatelor x, y i z.

    Desigur, obiectul minge este insuficient descris prin aceste coordonate i, pentru a simula n calculator obiectul real este nevoie de multe proprieti suplimentare precum i de multe operaii n plus. Dar, dac problema pe care o avem de rezolvat nu necesit aceste proprieti i operaii, este preferabil s nu le definim n obiectul folosit pentru reprezentare. Rezultatul direct al acestui mod de abordare este acela c vom putea defini acelai obiect real n mai multe feluri pentru a-l reprezenta n memoria intern. Modul de definire depinde de problema de rezolvat i de programatorul care a gndit reprezentarea. De altfel, aceste diferene de percepie ale unui obiect real exist i ntre diveri observatori umani.

    Din punctul de vedere al programrii, un obiect este o reprezentare n memoria calculatorului a proprietilor i comportamentului unei noiuni sau ale unui obiect real.

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...A%20in%20romana/Carte%20JAVA%20in%20romana/cap3.html (2 of 9)12.01.2006 23:07:46

  • Capitolul III -- Reprezentarea informaiilor cu obiecte

    Figura 3.1 Modelul de reprezentare al unui obiect n memorie. Stratul exterior reprezint doar operaiile care ofer calea de a interaciona cu proprietile obiectului i nu are corespondent

    direct n zona de memorie ocupat de obiect.

    3.2 ncapsularea informaiilor n interiorul obiectelorExist situaii n care accesul din exterior la proprietile unui obiect poate s pun probleme acestuia. Ce s-ar ntmpla de exemplu dac s-ar putea accesa direct valorile care definesc funcionalitatea corpului uman? Desigur, exist cazuri n care acest lucru ar fi mbucurtor. N-ar mai fi nevoie s acionm indirect asupra concentraiilor de enzime n corp ci am putea s modificm aceste valori n mod direct. Dar, n acelai timp, am putea provoca mari necazuri n cazul n care am modifica aceste valori n afara pragului suportabil de ctre organism. Din aceste motive, este preferabil s lsm modificarea acestor parametri n sarcina exclusiv a unor operaii definite de ctre obiect, operaii care vor verifica noile valori nainte de a le schimba n interiorul obiectului. n lipsa acestui filtru, putem s stricm coerena valorilor memorate n interiorul unui obiect, fcndu-l inutilizabil.

    Din acest punct de vedere, putem privi obiectul ca pe un set de valori care formeaz miezul obiectului i un set de operaii care mbrac aceste valori, protejndu-le. Vom spune c proprietile obiectului sunt ncapsulate n interiorul acestora. Mai mult, obiectul ncapsuleaz i modul de funcionare a operaiilor lui specifice, din exterior neputndu-se observa dect modul de apelare a acestor operaii i rezultatele apelurilor. Cu alte cuvinte, procesul de ncapsulare este procesul de ascundere a detaliilor neimportante sau sensibile de construcie a obiectului.

    Dar nu numai proprietile unui obiect trebuiesc protejate ci i operaiile definite de ctre acesta. Unele dintre operaiile definite pentru un obiect, cum ar fi de exemplu procesul respirator al omului, sunt periculos de lsat la dispoziia oricui. Este preferabil s putem controla foarte exact cine ce operaii poate apela pentru un anumit obiect. n acest mod, din punctul de vedere al unui observator strin, omul este perceput ca un obiect mult mai simplu dect este n realitate, pentru c acel observator nu poate

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...A%20in%20romana/Carte%20JAVA%20in%20romana/cap3.html (3 of 9)12.01.2006 23:07:46

  • Capitolul III -- Reprezentarea informaiilor cu obiecte

    vedea dect acele valori i nu poate apela dect acele operaii care sunt fcute publice.

    Desigur, n practic este nevoie de o oarecare rafinare a gradului de protejare a fiecrei operaii sau proprieti n aa fel nct nsui accesul observatorilor exteriori s poat fi nuanat n funcie de gradul de similitudine i apropiere al observatorului fa de obiectul accesat. Rafinarea trebuie s mearg pn la a putea specifica pentru fiecare proprietate i operaie n parte care sunt observatorii care au acces i care nu.

    Aceast protejare i ncapsulare a proprietilor i operaiilor ce se pot executa cu ajutorul unui obiect are i o alt consecin i anume aceea c utilizatorul obiectului respectiv este independent de detaliile constructive ale obiectului respectiv. Structura intern a obiectului poate fi astfel schimbat i perfecionat n timp fr ca funcionalitatea de baz s fie afectat.

    3.3 Clase de obiecte

    n lumea real se pot identifica uor familii de obiecte. Este greu s descriem ntr-un limbaj de programare fiecare minge din lume dar, pentru a putea folosi orice minge din lume, este suficient s descriem o singur dat care sunt proprietile unei mingi n general, precum i operaiile care pot fi executate cu aceasta. Aceasta nu nseamn c toate obiectele minge din lume sunt identice. Diferena dintre ele se afl reprezentat n primul rnd n valorile proprietilor lor care sunt mrimi numerice variabile, adic difer de la un obiect de acelai fel la altul. De exemplu, n fiecare obiect minge vom avea un numr natural care reprezint culoarea mingii. Acest numr poate s difere de la o minge la alta exact aa cum, n realitate, culoarea difer de la o minge la alta. La fel coordonatele poziiei mingii la un moment dat sau raza mingii precum i materialul din care este confecionat au valori care variaz de la o minge la alta.

    Cu alte cuvinte, fiecare minge din lume are acelai set de proprieti, dar valorile acestora pot s difere de la o minge la alta. Modelul de reprezentare n memorie a unui obiect este ntotdeauna acelai, dar valorile memorate n locaiile corespunztoare proprietilor sunt n general diferite.

    n ceea ce privete operaiile, acestea sunt ntotdeauna aceleai dar rezultatul aplicrii lor poate s difere n funcie de valorile proprietilor obiectului asupra cruia au fost aplicate. De exemplu, atunci cnd aruncm o minge spre pmnt ea va ricoa din acesta ridicndu-se din nou n aer. nlimea la care se va ridica ns, este dependent de dimensiunile i materialul din care a fost confecionat mingea. Cu alte cuvinte, noua poziie n spaiu se va calcula printr-o operaie care va ine cont de valorile memorate n interiorul obiectului. Se poate ntmpla chiar ca operaia s hotrasc faptul c mingea va strpunge podeaua n loc s fie respins de ctre aceasta.

    S mai observm c operaiile nu depind numai de proprietile obiectului ci i de unele valori exterioare acestuia. Atunci cnd aruncm o minge spre pmnt, nlimea la care va ricoa aceasta depinde i de viteza cu care a fost aruncat mingea. Aceast vitez este un parametru al operaiei de aruncare. Nu are nici un rost s transmitem ca parametrii ai unei operaii valorile proprietilor unui

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...A%20in%20romana/Carte%20JAVA%20in%20romana/cap3.html (4 of 9)12.01.2006 23:07:46

  • Capitolul III -- Reprezentarea informaiilor cu obiecte

    obiect pentru c acestea sunt ntotdeauna disponibile operaiei. Nici o operaie nu se poate aplica asupra unui obiect fr s tim exact care este obiectul respectiv i ce proprieti are acesta. Este absurd s ne gndim la ce nlime se va ridica o minge n general, fr s facem presupuneri asupra valorilor proprietilor acesteia. S mai observm ns c, dac toate mingile ar avea aceleai valori pentru proprietile implicate n operaia descris mai sus, am putea s calculm nlimea de ricoeu n general, fr s fim dependeni de o anumit minge.

    n concluzie, putem spune c obiectele cu care lucrm fac parte ntotdeauna dintr-o familie mai mare de obiecte cu proprieti i comportament similar. Aceste familii de obiecte le vom numi n continuare clase de obiecte sau concepte n timp ce obiectele aparinnd unei anumite clase le vom numi instane ale clasei de obiecte respective. Putem vorbi despre clasa de obiecte minge i despre instanele acesteia, mulimea tuturor obiectelor minge care exist n lume. Fiecare instan a clasei minge are un loc bine precizat n spaiu i n timp, un material i o culoare. Aceste proprieti difer de la o instan la alta, dar fiecare instan a aceleiai clase va avea ntotdeauna aceleai proprieti i aceleai operaii vor putea fi aplicate asupra ei. n continuare vom numi variabile aceste proprieti ale unei clase de obiecte i vom numi metode operaiile definite pentru o anumit clas de obiecte.

    Pentru a clarifica, s mai relum nc o dat: O clas de obiecte este o descriere a proprietilor i operaiilor specifice unui nou tip de obiecte reprezentabile n memorie. O instan a unei clase de obiecte este un obiect de memorie care respect descrierea clasei. O variabil a unei clase de obiecte este o proprietate a clasei respective care poate lua valori diferite n instane diferite ale clasei. O metod a unei clase este descrierea unei operaii specifice clasei respective.

    S mai precizm faptul c, spre deosebire de variabilele unei clase, metodele acesteia sunt memorate o singur dat pentru toate obiectele. Comportarea diferit a acestora este dat de faptul c ele depind de valorile variabilelor.

    O categorie aparte a claselor de obiecte este categoria acelor clase care reprezint concepte care nu se pot instania n mod direct, adic nu putem construi instane ale clasei respective, de obicei pentru c nu avem destule informaii pentru a le putea construi. De exemplu, conceptul de om nu se poate instania n mod direct pentru c nu putem construi un om despre care nu tim exact dac este brbat sau femeie. Putem n schimb instania conceptul de brbat i conceptul de femeie care sunt nite subconcepte ale conceptului om.

    Clasele abstracte, neinstaniabile, servesc n general pentru definirea unor proprieti sau operaii comune ale mai multor clase i pentru a putea generaliza operaiile referitoare la acestea. Putem, de exemplu s definim n cadrul clasei de obiecte om modul n care acesta se alimenteaz ca fiind independent de apartenena la conceptul de brbat sau femeie. Aceast definiie va fi valabil la amndou subconceptele definite mai sus. n schimb, nu putem dect cel mult s precizm faptul c un om trebuie s aib un comportament social. Descrierea exact a acestui comportament trebuie fcut n cadrul conceptului de brbat i a celui de femeie. Oricum, este interesant faptul c, indiferent care ar fi clasa acestuia, putem s ne bazm pe faptul c acesta va avea definit un comportament social, specific clasei lui.

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...A%20in%20romana/Carte%20JAVA%20in%20romana/cap3.html (5 of 9)12.01.2006 23:07:46

  • Capitolul III -- Reprezentarea informaiilor cu obiecte

    Cele dou metode despre care am vorbit mai sus, definite la nivelul unui superconcept, sunt profund diferite din punctul de vedere al subconceptelor acestuia. n timp ce metoda de alimentaie este definit exact i amndou subconceptele pot s o foloseasc fr probleme, metoda de comportament social este doar o metod abstract, care trebuie s existe, dar despre care nu se tie exact cum trebuie definit.

    Fiecare dintre subconcepte trebuie s-i defineasc propriul su comportament social pentru a putea deveni instaniabil. Dac o clas de obiecte are cel puin o metod abstract, ea devine n ntregime o clas abstract i nu poate fi instaniat, adic nu putem crea instane ale unei clase de obiecte abstracte.

    Altfel spus, o clas abstract de obiecte este o clas pentru care nu s-au precizat suficient de clar toate metodele astfel nct s poat fi folosit n mod direct.

    3.4 Derivarea claselor de obiecte

    O alt proprietate interesant a claselor de obiecte este aceea de ierarhizare. Practic, ori de cte ori definim o nou clas de obiecte care s reprezinte un anumit concept, specificm clasa de obiecte care reprezint conceptul original din care provine noul concept mpreun cu diferenele pe care le aduce noul concept derivat fa de cel original. Aceast operaie de definire a unei noi clase de obiecte pe baza uneia deja existente o vom numi derivare. Conceptul mai general se va numi superconcept iar conceptul derivat din acesta se va numi subconcept. n acelai mod, clasa original se va numi superclas a noii clase n timp ce noua clas de obiecte se va numi subclas a clasei derivate.

    Uneori, n loc de derivare se folosete termenul de extindere. Termenul vine de la faptul c o subclas i extinde superclasa cu noi variabile i metode.

    n spiritul acestei ierarhizri, putem presupune c toate clasele de obiecte sunt derivate dintr-o clas iniial, s-i spunem clasa de obiecte generice, n care putem defini proprietile i operaiile comune tuturor obiectelor precum ar fi testul de egalitate dintre dou instane, duplicarea instanelor sau aflarea clasei de care aparine o anumit instan.

    Ierarhizarea se poate extinde pe mai multe nivele, sub form arborescent, n fiecare punct nodal al structurii arborescente rezultate aflndu-se clase de obiecte. Desigur, clasele de obiecte de pe orice nivel pot avea instane proprii, cu condiia s nu fie clase abstracte, imposibil de instaniat.

    file:///C|/Documents%20and%20Settings/Luminita/Deskt...A%20in%20romana/Carte%20JAVA%20in%20romana/cap3.html (6 of 9)12.01.2006 23:07:46

  • Capitolul III -- Reprezentarea informaiilor cu obiecte

    Figura 3.2 O ierarhie de clase de obiecte n care clasele sunt reprezentate n cmpuri eliptice iar instanele acestora n cmpuri dreptunghiulare. Clasele abstracte de obiecte au elipsa dublat.

    Desigur, este foarte dificil s construim o ierarhie de clase de obiecte complet, care s conin clase de obiecte corespunztoare fiecrui concept cunoscut. Din fericire, pentru o problem dat, conceptele implicate n rezolvarea ei sunt relativ puine i pot fi uor izolate, simplificate i definite. Restrngerea la minimum a arborelui de concepte necesar rezolvrii unei anumite probleme fr a se afecta generalitatea soluiei este un talent pe care fiecare programator trebuie s i-l descopere i s i-l cultive cu atenie. De alegerea acestor concepte depinde eficiena i flexibilitatea aplicaiei.

    O clas de obiecte derivat dintr-o alt clas pstreaz toate proprietile i operaiile acesteia din urm aducnd n plus proprieti i operaii noi. De exemplu, dac la nivelul clasei de obiecte om am definit forma biped a acestuia i capacitatea de a vorbi i de a nelege, toate acestea vor fi motenite i


Recommended