Documente Academic
Documente Profesional
Documente Cultură
Cuvnt nainte
Introducere
JavaRo
(C) IntegraSoft 1996-1998
Cuvnt nainte
Dei 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
Introducere
Scurt istoric
Ce este Java?
Despre aceast carte
Convenii utilizate n aceast carte
Sugestii i reclamaii
Alte surse de informaii
Mulumiri
Scurt istoric
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.
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 carte
De exemplu:
public | private | protected
Posibilele 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 erotariu@agora.ro sau:
Eugen Rotariu
Computer Press Agora
Str. Tudor Vladimirescu, Nr. 63/1, Cod. 4300, Trgu Mure
Romnia
Mulumesc 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
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
A-Z
65-90
a-z
97-122
0-9
48-57
195,227
206,238
194,226
170,186
222,254
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
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-main
Vom 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
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
tablouluiT 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
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
execut instruciunea implicit.
Un al treilea tip de instruciuni elementare sunt instruciunile de
ciclare saurepetitive 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,
cuvntulwhile 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.
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
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.
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 obiectelor
Exist 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,
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
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.
Un obiect este o entitate complex pe care o putem privi din diverse puncte
de vedere. Omul de exemplu poate fi privit ca un mamifer care nate pui vii
sau poate fi privit ca o fiin gnditoare care nv s programeze
calculatoare sau poate fi privit ca un simplu obiect spaio-temporal care are
propria lui form i poziie n funcie de timp.
Aceast observaie ne spune c trebuie s dm definiii despre ce nseamn
cu adevrat faptul c un obiect poate fi privit ca un mamifer sau ca o fiina
gnditoare sau ca un obiect spaio-temporal. Aceste definiii, pe care le vom
numi n continuare interfee, sunt aplicabile nu numai clasei de obiecte om
dar i la alte clase de obiecte derivate sau nu din acesta, superclase sau nu
ale acesteia. Putem s gsim o mulime de clase de obiecte ale cror
instane pot fi privite ca obiecte spaio-temporale dar care s nu aib mare
lucru n comun cu omul. Practic, atunci cnd construim o interfa,
definim un set minim de operaii care trebuie s aparin obiectelor care
respect aceast interfa. Orice clas de obiecte care declar c respect
aceast interfa va trebui s defineasc toate operaiile.
Operaiile ns, sunt definite pe ci specifice fiecrei clase de obiecte n
parte. De exemplu, orice obiect spaial trebuie s defineasc o operaie de
modificare a poziiei n care se afl. Dar aceast operaie este diferit la un
om, care poate s-i schimbe singur poziia, fa de o minge care trebuie
ajutat din exterior pentru a putea fi mutat. Totui, dac tim cu