Documente Academic
Documente Profesional
Documente Cultură
Introducere in Limbajul Java v2 BASIC 90
Introducere in Limbajul Java v2 BASIC 90
0
Contents
Introducere in limbajul Java v2.0............................................................................................................. 1
Capitol 1: Ce reprezinta Java? .............................................................................................................. 3
Capitol 2: Programarea orientata pe obiecte ...................................................................................... 40
Capitol 3: Componentele limbajului Java .......................................................................................... 71
Capitol 4: Operatorii si structurile de control ale limbajului Java ................................................... 118
Capitol 5: Fundamentele definirii si utilizarii claselor ..................................................................... 138
Capitol 6: Clasele System, String, StringBuilder, Math si de impachetare ..................................... 162
Capitol 7: Vectori ............................................................................................................................. 182
Capitol 8: Clase si mostenirea claselor ................................ Eroare! Marcaj n document nedefinit.
Capitol 9: Proiectarea interfetelor grafice ............................ Eroare! Marcaj n document nedefinit.
Capitol 10: Programarea bazata pe evenimente si interfetele graficeEroare! Marcaj n document
nedefinit.
Capitol 11: Exceptii in Java ................................................. Eroare! Marcaj n document nedefinit.
Capitol 12: Colectii de obiecte ............................................. Eroare! Marcaj n document nedefinit.
Capitol 13: Fire de executie ................................................. Eroare! Marcaj n document nedefinit.
1.1.2 Hardware
Hardware-ul calculatorului reprezinta echipamentul fizic folosit pentru a efectua un set de instructiuni
pentru calculator.Calculatoarele se prezinta in mai multe forme.Acestea includ calculatoarele
personale,personal digital assistants (PDA-uri), telefoane mobile,si ceasuri.Partile fizice ale
calculatorului sunt de obicei cunoscute ca si hardware.Cateva exemple de hardware al calculatorului le
reprezinta monitorul,tastatura,mouse-ul,imprimanta,hard drive-ul,placa de retea,CD-ROM-ul,discurile
demontabile,si modemul.CD-urile,si hartia de imprimanta nu sunt hardware de calculator.
- Memoria - Aceasta reprezinta locatia in care datele sunt procesate sau in care instructiunile folosite
sunt stocate.Exista doua tipuri de memorie intr-un calculator.Primul tip este memoria persistenta
precum hard drive-uri,CD-uri.Memoria persistenta isi pastreaza informatiile stocate atunci cand
calculatorul este stins.Memoria dinamica isi pastreaza informatiile stocate in cipul de memorie atata
timp cat calculatorul este pornit.Memoria dinamica mai este numita random-access memory (RAM).
Programele Java sunt stocate in RAM atunci cand sunt folosite.
1.1.3 Software
Software-ul si sistemul de operare controleaza modul de functionare al hardware-ului.
Hardware-ul nu poate efectua multe sarcini de unul singur.Hardware-ul are nevoie de software pentru
a-l face sa functioneze.Software-ul reprezinta o colectie de instructiuni ce ii impun hardware-ului
comportamentul.De exemplu,software-ul ii impune CD-ROM-ului dintr-un sistem stereo sa cante
muzica.Software-ul furnizeaza CPU-ului pasii necesari pentru a indeplini o sarcina,si ii descrie
detaliat.Imaginati-va ca pasii explica modul de a bea dintr-o cana.Aceasta sarcina simpla implica mai
multi pasi:
Pas 1 Priviti cana
Pas 2 Intindeti mana
Pas 3 Deschideti mana
Pas 4 Prindeti cana
Pas 5 Inchideti mana
Pas 6 Ridicati cana catre gura
Pas 7 Inclinati cana
Pas 8 Beti din cana
Software-ul poate fi clasificat ca si un sistem de operare (SO)sau o aplicatie.Diferentele dintre un SO
si o aplicatie se bazeaza pe tipurile de actiuni pe care aceste programe le efectueaza.Ambii termeni fac
referire la un grup de programe de calculator ce contin un set de instructiuni ce impun hardware-ului
si
- Sa cumpere software care este deja scris.Software-ul poate fi astfel obtinut cu usurinta si la un cost
mic.Programul de procesare a cuvintelor care a fost folosit pentru crearea acestui document a fost
achizitionat de la o companie de software.Aceasta inseamna ca a fost achizitionata o licenta pentru
folosirea software-ului.Daca software-ul nu are anumite trasaturi sau nu este compatibil cu hardwareul,utilizatorul nu poate schimba modul in care software-ul functioneaza.
- Sa modifice software-ul,daca licenta permite.Un nou curent in software este denumit open
source.Acesta permite oricui sa obtina drepturile de a folosi software-ul si dreptul de a modifica
programele incluse in software.Pentru a modifica software-ul,majoritatea utilizatorilor trebuie sa fie de
acord sa-si trimita modificarile gratis oricui doreste sa foloseasca sau sa modifice software-ul.
- Sa scrie software individual.Daca acest tip de software este creat si testat corespunzator,va face exact
ceea ce-si doreste utilizatorul.Acest tip de sofware poate fi scump si crearea sa poate dura.Limbajele
precum Java si alte utilitare de dezvoltare pot reduce timpul de creare a programului.
In figura , potriviti termenii din partea de jos a graficului caracteristicilor lor.Faceti drag and drop
fiecarui termen in spatiul gol din dreapta definitiei.Apoi dati click pe butonul Check pentru a
determina daca termenii au fost pusi in zona potrivita.Dati click pe butonul Show Me pentru a
vizualiza raspunsurile corecte.
Atunci cand o interfata in linia de comanda (CLI)este folosita,utilizatorul interactioneaza cu
calculatorul printr-o combinatie tastatura-monitor.Acest utilizator introduce comenzi text.Acesta este
modul in care lucrurile obisnuiau sa fie rezolvate in zilele timpurii ale calculatoarelor
mainframe,minicalculatoarelor,si calculatoarelor personale pe baza de DOS.Comenzile anterioare
includeau dir,del,edit,cd,ls,si grep . Nici o interfata grafica cu utilizatorul (GUI)nu era folosita in acele
timpuri.
Oamenii de stiinta de la Apple Computer,Inc si Xerox PARC au creat GUI-uri care sunt mai intuitive
pentru utilizatori.Versiunile curente ale acestor GUI-uri includeau Microsoft Windows,Mac OS,si
Unix.Un GUI face referire la folosirea elementelor grafice,precum si a tastaturii si a mouse-ului,pentru
a oferi o interfata usor-de-folosit pentru un program.
1.1.4 Aplicatii
Aplicatiile sunt grupuri de programe de calculator.Editoare de cuvinte,browser-e de Internet,si jocuri
pe calculator sunt toate exemple de aplicatii.Fiecare dintre aceste aplicatii includ programe de
calculator ce efectueaza sarcini prestabilite.De exemplu,exista de obicei un program de verificare a
ortografiei intr-un editor de cuvinte.Exista un alt program ce salveaza documentele pe hard disk-ul
calculatorului.
Un calculator poate de asemenea sa proceseze datele in informatii ce pot fi folosite.Datele reprezinta
fapte si figuri neprelucrate.Aplicatiile contin programe ce ii recomanda calculatorului ce date sa
foloseasca si cum sa le proceseze.Procesul general care este utilizat pentru a afisa informatii este aratat
in Figura .
Datele de intrare includ numele de familie,prenumele si data nasterii.Programul proceseaza aceste date
pentru a produce numele si varsta individului.
Majoritatea utilizatorilor de calculatoare isi cumpara aplicatii pentru calculatoare.Multe companii isi
creaza propriile aplicatii software.Aceste aplicatii sunt specializate si efectueaza sarcini critice
necesare afacerii.La sfarsitul acestui curs,studentii vor fi capabili sa scrie si sa-si creeze propriile
aplicatii.
Acest exemplu demonstreaza modul in care un utilizator ii indica unei aplicatii ce sa faca.Pentru a
verifica ortografia dintr-un document,utilizatorii dau click pe un buton sau selecteaza o optiune dintr7
Oamenii de stiinta au observat procesul folosit pentru crearea unei aplicatii de calculator si au impartito intr-un set de probleme de baza ce trebuiesc rezolvate.Cum va citi si va scrie calculatorul datele de
pe hard drive?Cum va primi date de la tastatura?Cum va afisa mesaje si documente pe
monitor?Intrucat au fost scrise programe pentru fiecare problema,s-a stabilit ca daca fiecare aplicatie
va rezolva individual aceste probleme,atunci fiecare va trebui sa interactioneze cu hardware-ul si sa
efectueze sarcini functii specifice.Un astfel de exemplu este de a crea documente intr-un editor de
cuvinte.Un SO separa sarcinile folosite pentru controlul hardware-ului de setul de sarcini ale fiecarei
aplicatii.SO-ul controleaza hardware-ul si aplicatia executa restul.
8
- Abilitatea de a trimite mesaje intre programele de calculator a devenit critica pentru dezvoltarea unui
SO.Sistemele de operare au nevoie ca aplicatiile sa trimita mesaje SO-ului pentru a cere folosirea unei
parti de hardware.Doua exemple sunt citirea sau scrierea datelor pe hard drive.Aceasta necesita
folosirea de interfete.Interfetele permit programelor de calculator sa comunice intre ele.Java
Application Programming Interface (API)reprezinta un grup de clase distribuite cu Java Development
Kit.Programatorii le pot folosi pentru a-si construi propriile aplicatii.Aceste interfete sunt discutate
mai tarziu in modul.
Limbajul calculatorului ales pentru un program depinde de mai multi factori.Acesti factori includ
cunoasterea limbajului,a utilitarelor folosite pentru dezvoltarea unui program,caracteristicile
hardware,si tipul de problema ce trebuie rezolvata.
Anumite beneficii ale Java includ:
Limbajul vorbit este prea complex pentru un calculator.In timp ce creierul uman poate procesa
propozitii,un calculator intelege numai starile unui switch.Intrucat calculatoarele timpurii nu includeau
programe,programatorii trebuiau sa scrie cod pentru a procesa datele si pentru a calcula
rezultatele.Singura metoda disponibila la acel moment era sa scrie instructiuni in codul binar cu 0 si 1.
11
12
Aceste limbaje de nivel inalt inca mai constrangeau programatorul sa gandeasca precum un
calculator.Programatorii inca mai trebuiau sa separe o problema in mai multi pasi pe care un calculator
sa ii efectueze.Apoi trebuiau sa descrie problema in termeni in care un calculator ar rezolva-o.
Exista trei metode pentru a obtine programe.Acestea sunt de achizitionare,de modificare a celor
vechi,sau de creare a lor.Acelasi lucru este adevarat si referitor la obiecte.Obiectele sunt doar parti ale
programelor.Programatorii trebuie sa-si ia in considerare bugetul si timpul lor inainte de a decide daca
sa cumpere o biblioteca de obiecte sau sa-si creeze propriul obiect.Crearea unui obiect poate fi
costisitoare si limbajul Java ofera mai multe metode de reducere a costului si a timpului necesare
crearii obiectelor particularizate.De exemplu,Sun Microsystems ofera o biblioteca bogata de obiecte si
programe testate ce pot fi refolosite.Java are mai multe site-uri web ce ofera obiecte si programe
testate,gratuite sau cu plata.
Metodele de programare orientata-pe-obiecte reflecta mult mai mult metoda de rezolvare a
problemelor folosita de catre oameni.Ca si rezultat,aceste limbaje sunt populare in industria
software.Aceste metode au adus avantaje in reutilizare,mentenanta si in imbunatatirea productivitatii
software.Limbajele de programare procedurala nu permit programatorilor sa-si refoloseasca partile de
cod in cel mai usor mod posibil.Acelasi cod poate fi folosit in programe diferite in aceeasi
aplicatie.Schimbarile ar trebui realizate pentru fiecare program pentru ajustarea unei parti de cod.In
metodele orientate-pe-obiecte,exista o singura copie a unui cod,astfel ca numai o copie trebuie
actualizata daca o schimbare este necesara.Aceasta este considerata cea mai buna practica in industrie.
Urmatorul modul se va concentra pe modul in care programatorii creaza obiecte diferite.
14
16
17
18
Avantaje Java:
19
20
21
22
23
}
}
In urma compilarii,obtinem un fiiser in Bytecode,cod inteles de catre JVM.
- Utilitarele necesare rularii unui program Java sunt un compilator si JVM.Codul sursa Java este mai
intai compilat in cod de biti,care este apoi interpretat si convertit in cod nativ de catre JVM.Sun
Microsystems ofera programatorilor Java un set de utilitare ce sunt folosite pentru dezvoltarea si
rularea programelor Java.Acestea includ un compilator si JVM.Aceste programe si biblioteci Java
formeaza Java Development Toolkit (JDK). JDK-ul a evoluat cu fiecare versiune a JVM-ului.Toolkitul curent este denumit Java 2 Software Development Kit (J2SDK). JDK este de obicei folosit pentru a
face referire la toolkit.J2SDK poate fi descarcat gratis de pe site-ul web Sun Microsystems
http://java.sun.com si Java Software Development Kit (SDK)poate fi descarcat de pe acest site
web.Majoritatea fisierelor se extrag singure si se instaleaza cu un program util de instalare.
- Selectati un editor pentru a crea codul sursa Java pentru program.Editorul poate fi un program
simplu precum Notepad,WordPad,TextPad,vi,Emacs,sau un program software Integrated
Development Environment (IDE)precum BlueJ.Unele editoare sau IDE-uri pot ajuta cu
sintaxa,punctuatia,si vocabularul Java.
- Creati un director pentru a stoca fisierele sursa si fisierele .class.Dezvoltarea programului este mult
mai usoara atunci cand fisierele sunt organizate.
27
28
Programul exemplificat aici descrie un obiect denumit SayHello.Acest obiect contine unele date
precum un nume,un numar,si un mesaj si stie cum sa printeze aceste date in consola.
Figura ilustreaza codul sursa din programul SayHello.Dati click pe elementele numarate pentru a
invata despre elementele programului.Exista cateva puncte cheie in acest exemplu:
29
- Fiecare fisier cu cod sursa Java defineste una sau mai multe clase.Priviti o clasa ca un negativ al unui
obiect.Fiecare clasa are un nume unic si codul sursa al unei clase trebuie sa fie stocat intr-un fisier
sursa ce are acelasi nume ca si clasa.Daca o clasa este denumita SayHello,este salvata intr-un fisier
denumit SayHello.java.Numele fiecarei clase incepe cu o majuscula.Exista trei nume de clase in
programul SayHello Acestea sunt String,System si SayHello.
- Clasele contin atat date cat si metode.Datele pot fi numere,caractere,sau alte obiecte.Metodele sunt
parti de cod ce ii spun obiectului ce sa faca cu datele din obiect.
- Clasa SayHello are o metoda denumita main(). Metoda main() dintr-un program Java are o definitie
unica.Este punctul in care JVM-ul incepe sa citeasca si sa ruleze programul.Atunci cand studentii isi
scriu propriile clase si definesc metode in aceste clase,vor observa ca exista multe modalitati de a scrie
o metoda.Fiecare metoda are proprietati unice precum numele sau si datele oferite la intrare
metodei.Aceste proprietati mai sunt denumite si semnatura metodei.Semnatura metodei poate fi
inteleasa ca identificatorul unic al unei metode.Metoda main() trebuie sa aiba o semnatura de metoda
astfel incat JVM sa o gaseasca.Exista doua modalitati de a scrie semnatura metodei pentru metoda
main.Acestea sunt ilustrate in Figura .
Nota : Parantezele ( [] ) sunt intr-un alt loc in cele doua semnaturi de metoda.Fiecare modalitate este
corecta si studentii ar trebui sa fie constienti de ambele.
- Simbolul unui punct ( . ) are un rol special in limbajul Java.Este denumit operatorul punct.Acesta
permite programatorului sa acceseze metode sau obiecte din alte obiecte.In programul SayHello,cele
doua puncte din System.out.println ii spun compilatorului Java ca este nevoie de folosirea metodei
println in obiectul out gasit in clasa System.Acestea vor fi explicate in modulele urmatoare.
30
- Introduceti comanda javac SayHello.java.Acest program va crea un fisier cu cod de biti cu acelasi
nume ca si fisierul cod sursa si cu sufixul .class.Java este un program case sensitive.Atunci cand
programul este compilat,in cazul in care comanda javac sayhello.java este introdusa,numele fisierului
sursa nu se va potrivi cu numele clasei din codul sursa.Compilatorul javac va printa un mesaj de eroare
si fisierul SayHello.java nu va fi compilat.
- Verificati daca fisierul .class a fost creat.Introduceti comanda dir SayHello.Fisierul SayHello.class
exista.In acest exemplu fisierul .java si fisierul .class sunt salvate in acelasi director.Pentru a localiza
aceste fisiere,utilitarele Windows sau linia de consola pot fi folosite pentru a accesa directorul in care
fisierul SayHello.java este salvat.Fisierul SayHello.class va fi de-asemenea salvat in aceasta locatie.
3.Rulati programul.Acesta este ilustrat in Figura
- Introduceti comanda java SayHello.Aceasta comanda va functiona numai daca utilizatorul este in
acelasi director in care fisierul SayHello.class este localizat.
31
Fereastra consolei folosita pentru compilarea si rularea programelor este un program ce ruleaza pe
calculator.Fereastra liniei de comanda este consola.Fereastra proiectului BlueJ ofera acces la o
fereastra terminal pentru afisarea rezultatelor programului.Linia de comanda accepta textul ca si mesaj
de intrare si poate trimite acel mesaj altor programe si urmatorului program Java.In BlueJ,selectarea
metodei main() pentru o clasa deschide o fereastra in care utilizatorul poate introduce date.
Programul consolei preia tot textul in linia de comanda si interpreteaza primul cuvant ca si numele
unui program si restul cuvintelor ca si parametri de intrare pentru acel program.Atunci cand java
SayHello "Fred Smith"este introdus in linia de comanda,programul consolei ii spune sistemului de
operare sa execute un program denumit java cu parametrul de intrare SayHello "Fred Smith". In
32
- Toate metodele primesc datele de la intrare sub forma unei liste de argumente.Lista de argumente
reprezinta textul din interiorul parantezelor dupa numele metodei.Pentru metoda main(), lista de
argumente este String[] args.
- Lista de argumente pentru o metoda este o lista de perechi de cuvinte.Primul cuvant identifica ce tip
de date trebuie sa fie si al doilea cuvant este identificatorul,sau numele,unui argument.In metoda
main(), identificatorul datelor de intrare este args si tipul datelor este String array.
- Un vector este o lista de elemente care sunt de acelasi tip.Un vector de String-uri este o lista de
obiecte String.Un obiect String contine text.Parantezele drepte ( [] ) sunt operatorii ce indica un vector
in Java.Acestia pot fi plasati langa identificatorul vectorului,sau pot aparea langa numele tipului de
elemente din vector.In acest exemplu,String[] args sau String args[] inseamna un vector de obiecte
String.Acum este clarificat motivul pentru care exista doua modalitati de a scrie metoda main().
- Erori la rulare - Acestea au loc in timp ce programul ruleaza,dupa ce toate erorile de compilare au
fost corectate.
- Erori logice - Acestea nu sunt detectate de catre compilator.Ele au loc atunci cand un program nu
produce rezultatul intentionat.Daca un program este proiectat pentru a adauga doua numere,o eroare
logica este creata daca programatorul foloseste semnul minus (-) in loc de semnul plus (+).
Exista alte metode pentru reducerea numarului de erori de compilare din program:
- Folosirea unui IDE pentru scrierea codului Java.Majoritatea IDE-urilor coloreaza elementele diferite
ale limbajului pentru a ajuta programatorii sa gaseasca erori.Ele si atentioneaza programatorii inainte
de a face erori simple de sintaxa precum parantezele deschise.
- Asezati prima acolada pe aceeasi linie ca si declararea metodei.Deoarece acolada nu isi are propria
linie,mai multe linii pot fi vazute intr-o fereastra de editor.
Folosirea parantezelor:
- Notati comentariul dupa ultima acolda din exemplu.Folosirea unui astfel de comentariu la sfarsitul
acoladei pentru fiecare metoda o va face mai usor de gasit si de verificat acoladele din codul sursa.
- Pe masura ce studentii progreseaza pe parcursul acestui curs,unele dintre cele mai cunoscute
conventii sau stiluri de codare vor fi evidentiate.
- Verificati daca exista acolade si paranteze deschise.Retineti ca argumentele fiecarei metode sunt
incluse intre paranteze.
- Salvati codul sursa dupa ce l-ati modificat.Daca apar aceleasi erori de compilare,asigurati-va ca
schimbarile facute codului sursa au fost salvata in fisierul de cod sursa.Compilatorul Java citeste
fisierul de cod sursa.Compilatorul Java citeste fisierul cu cod sursa si nu ce este afisat in fereastra.
36
37
38
Rezumat
Programarea ofera un set de instructiuni logice pentru un calculator astfel incat acesta sa efectueze
sarcini.Limbajele care sunt folosite pentru programarea unui calculator pot fi procedurale sau
orientate-pe-obiecte.
Limbajele de programare procedurale sunt codate cu logica lineara.Fisierele sunt create folosind
compilatoare.FORTRAN si COBOL sunt limbaje procedurale.
Limbajele orientate-pe-obiecte precum Java sparg un program in obiecte ce efectueaza sarcini in
cadrul programului.
Java este atat compilat cat si interpretat.Comanda javac este folosita pentru a compila codul.Comanda
java este apoi folosita pentru a interpreta si a rula codul.
Un program Java poate fi creat cu un editor simplu precum Notepad sau un utilitar IDE precum
BlueJ.Programatorii folosesc utilitare ca ii ajuta sa produca programe mai rapid.BlueJ este un IDE
efectiv pentru a crea programe Java si pentru a invata limbajul Java.Limbajul Java include o biblioteca
de program cunoscuta ca si clase.Acestea formeaza Java API.
Programatorii trebuie sa corecteze erorile.Un tip de eroare este eroarea de compilare.Aceasta nu ii
permite codului sa fie compilat.Erorile de rulare sunt cauzate de exceptii ce se au loc in timpul rularii
programului.Erorile logice au loc daca un program nu indeplineste sarcinile pentru care a fost proiectat
sa le efectueze.
39
- Structurile de date pot fi reprezentate ca o retea de structuri asociate ce fac referire una la cealalta.
- Procedurile pot fi reprezentate ca o retea de rutine care se cheama apeleaza una pe cealalta,ca intr-un
arbore de apeluri.
Abordarea orientata pe obiecte este urmatoarea:
- Aceste entitati,care sunt denumite obiecte,pot fi asociate intre ele intr-o singura retea in loc de doua.
Cum sa bei dintr-o ceasca:
- Atribute - Acestea descriu starea unui obiect.Ele mai sunt denumite date.
- Tip de date - Acesta descrie tipul de date al unui atribut.
- Comportamente - Acestea descriu ce poate face un obiect.Ele mai sunt denumite metode.
- Metoda - Aceasta este un set de instructiuni efectuate de catre un obiect.
- Mostenire - Aceasta are loc atunci cand unele obiecte deriva atribute si comportamente din alte
obiecte.
Figura
42
43
- Obiectele mediului de operare - Acestea exista intr-o retea si sunt controlate de catre SO-ul unui
calculator.De exemplu,un server este un obiect ce furnizeaza servicii pentru alte obiecte,precum
obiectele software-ului.
- Obiectele referitoare la sarcini - Acestea sunt folosite pentru a efectua o activitate.Exista trei grupuri
de obiecte referitoare la sarcini:
-Documente - Acestea includ obiecte create de o aplicatie.World Wide Web este o colectie de obiecte
document.
-Multimedia -
sunet,imagini,animatii
si
45
si
46
O clasa de clienti poate defini toate caracteristicile comune ale clientilor.Ea caracterizeaza un tip de
client pentru un domeniu de probleme.Intr-un sistem de inregistrare la hotel,definitia clasei
HotelCustomer poate include atribute pentru numele,adresa,cartea de credit si preferintele de camera
ale fiecarei persoane.Definitia unei clase VideoStoreCustomer poate include atribute pentru
numele,adresa,limitele de inchiriere video si data de expirare a numarului de membru pentru fiecare
persoana.Definirea clasei InstantMessengerCustomer poate include atribute pentru numele,adresa de email si numele de ecran ale fiecarei persoane.
Obiectele ce vor fi folosite de catre aplicatie sunt instante ale clasei fiecarui client.Fiecare client ce
rezerva o camera la hotel este o instanta a clasei HotelCustomer.Fiecare client ce inchiriaza un film
este o instanta a clasei VideoStoreCustomer.Programatorul creeaza definitiile pentru clasele de tip
client pe baza datelor si metodelor din fiecare situatie.
Numele unei clase este cunoscut ca identificator.Un identificator reprezinta serii de caractere pe care
programatorul le foloseste pentru a denumi clase,obiecte si variabile.In Java,un identificator este
folosit pentru a denumi clasa,obiectul sau variabila stocata pe calculator atunci cand este necesar.
Fiecare obiect mai are o referinta obiect ce identifica unde este stocat in memorie.Referintele obiect
B1,B2,si B3 din Figura 2 sunt locurile in care obiectele sunt stocate in memorie.Aceste numere sunt
invizibile utilizatorului dar programatorii le pot folosi.Atunci cand programatorul se refera la
B2,programul stie unde sa localizeze butonul de continuare.
- Nume - chargeRent
- Datele necesare - numberOfDays
Aceasta va calcula o taxa si va afisa rezultatele.
Metodele ce schimba valorile datelor pentru un obiect se mai numesc mutatori.Aceste metode au
formatul setObjectData.Metodele ce primesc datele de la un obiect se numesc accesori.Aceste metode
au de obicei formatul getObjectData.ObjectData este identificatorul pentru valoarea ambelor metode
mutator si accessor.Acest identificator este definit ca un atribut pentru obiect.
Cum functioneaza metodele:
48
49
2.2.7 Incapsularea
Incapsularea ascunde detaliile unui obiect.Face obiectele robuste si nu permite altor obiecte sa
acceseze sau sa schimbe datele.Utilizatorii stiu numele metodelor din interiorul obiectului,dar nu si
modul in care metodele functioneaza.In majoritatea cazurilor,utilizatorii nu trebuie sa stie modul lor de
functionare.
Incapsularea inseamna de asemenea impachetare.Un obiect isi va avea datele si metodele impachetate
impreuna.Obiectul Client nu poate accesa atributul DateDue al obiectului VideoRented si nu ii poate
seta valoarea.Obiectul Client va avea nevoie sa trimita un mesaj obiectului VideoRented cu metoda sa
calculateDateDue.
Limbajele POO efectueaza incapsularea prin cuvinte cheie speciale pe care un programator le poate
folosi pentru a defini clasele.Java foloseste cuvintele cheie private,public si protected pentru a
identifica diferite niveluri de incapsulare pentru un obiect.Acesti identificatori se mai numest
modificatori de acces.Acestia definesc nivelul de acces la o clasa,la date sau la o metoda.Un obiect
incapsulat corespunzator va avea toate datele participante identificate ca private si majoritatea
accessorilor si mutatorilor identificati ca public.
Folositi activitatea din Figura pentru a identifica nivelul de acces permis de catre fiecare
modificator.Asezati fiecare element in locatia corecta.
Obiectele pot fi folosite chiar daca modul lor de functionare nu este cunoscut.Obiectele pot fi privite
ca niste cutii negre cu functionalitate.
O cutie neagra este un termen ingineresc.Ea functioneaza astfel:
1.Este introdus un element in cutia neagra.
50
- Relatii de legatura sau asociere - Aceasta inseamna ca un obiect stie despre existenta altui
obiect.Intr-un program al unui magazin video,obiectul VideoStoreCustomer stie despre obiectul
VideoRented.El cunoaste data inchirierii,data expirarii,data returnarii si suma datorata.Obiectul
VideoRented stie despre fiecare obiect de tip film care este inchiriat de catre un client.Obiectul de tip
film contine titlul,tipul,numarul copiei si ID-ul unic.Acestea sunt ilustrate in Figura .
- Relatii de tip parte-intreg - Aceasta inseamna ca un obiect nu poate exista fara un alt obiect.De
exemplu,obiectul VideoRented nu poate exista fara un VideoStoreCustomer.Datele despre inchirierea
unui film nu exista pana cand un client nu inchiriaza un film.Acestea sunt ilustrate in Figura 2.Relatiile
de legatura si cele de tip parte-intreg sunt ambele relatii de izolare.Ele nu implica mostenirea de
atribute sau comportamente de la alte clase.
51
- Relatia "poseda un" - Aceasta inseamna ca un tip de obiecte contine un altul.O masina "poseda"un
motor si o bicicleta "poseda"o roata.Relatia "este un/o"inseamna ca obiectul este un element specific
unui grup general.O masina "este un"vehicul si o bicicleta "este un"vehicul.
- Relatii de mostenire - Programatorul poate defini o clasa ca parinte sau superclasa.Alte clase sunt
definite ca subclase ce preiau comportamente si atribute de la superclasa.Mostenirea permite
reutilizarea definitiilor clasei si imbunatatirea anumitor metode si comportamente pentru a asigura ca
programul este sigur.
2.2.9 Mostenirea
Mostenirea incorporeaza principiul reutilizarii al limbajelor POO.Ea defineste si relatia dintre
clase.Acest lucru este ilustrat in Figura .
De exemplu,un caine pe nume Rover este o instanta sau obiect al clasei GoldenRetriever.Rover
mosteneste atributele comune tuturor Golden Retriever-ilor.Golden Retriever-ii mostenesc atribute din
clasa Dog.Rover mosteneste comportamentele tuturor cainilor si ale tuturor Golden Retriever-ilor
(vezi figura ).
52
Acest concept se extinde in lumea programarii prin folosirea POO.Java permite comportamentelor si
atributelor sa fie partajate intre clase prin mostenire.O subclasa are acces la datele si metodele
superclasei.Acest lucru este ilustrat in Figura .
53
54
55
UML este o colectie de simboluri si modele de simboluri.Este folosit pentru a descrie obiecte,relatiile
dintre ele,utilizarea si starile lor.
ULM este un limbaj mare;poseda mai multe tipuri de diagrame care pot fi folosite pentru a descrie
modelele de obiecte.Trei dintre acestea vor fi folosite in acest curs:
- Diagramea de caz - Aceasta descrie modul in care utilizatorii vor folosit obiectele intr-un
sistem.Acest lucru este ilustrat in Figura :
- Diagrama de clasa - Aceasta descrie atributele obiectelor intr-un sistem.Acest lucru este ilustrat in
Figura .
56
- Diagrama de stare - Aceasta descrie stagiile sau ciclul de viata al obiectelor.Acest lucru este ilustrat
in Figura .
Scopul acestei sectiuni este de a familiariza studentii cu diagramele de clase.Acestea sunt folosite
pentru a comunica definitiile claselor si relatiilor lor cu celelalte clase in moduri usor de inteles.
58
Diagrama din Figura ilustreaza cateva dintre cele mai comune simboluri de diagrame de caz.Linia
punctata este folosita pentru a reprezenta o implementare si o asociere.Formele de la sfarsitul liniilor
de legatura sunt un diamant gol,un diamant plin sau un capat de sageata in forma de triunghi.
59
Simbolurile plus (+), minus (-) si semnul diez (#) sunt folosite pentru a descrie modificatorii de acces
pentru fiecare atribut sau metoda a unei clase.Exista mai multe simboluri folosite in UML.
61
Diagramele obiect desciu structura statica a unui sistem.Acestea pot fi folosite pentru a testa
diagramele de clasa.Acest lucru este ilustrat in Figura .
62
Diagramele de secventa descriu interactiunile claselor in termenii unui schimb de mesaje in timp.Acest
lucru este ilustrat in Figura .
63
64
Diagramele de activitate ilustreaza natura dinamica a unui sistem.Acestea modeleaza fluxul de control
de la o activitate la alta.O activitate este o operatie pe o clasa care schimba starea unui
sistem.Majoritatea diagramelor de activitate sunt folosite pentru a modela fluxul de lucru sau procesele
business si operatiile interne.Acest lucru este ilustrat in Figura .
65
66
{
}
Cuvantul cheie public permite altor clase sa foloseasca aceasta clasa.
Clasele publice trebuie sa fie definite in fisiere separate.
- Tipul de date
- Identificatorul
- Domeniul de vizibilitate atata timp cat un obiect este folosit
- Adresa adresa in memorie, nu este vizibila programatorului
- Valoare/Datele valoarea este atribuita la creare a unui obiect
Urmeaza un exemplu.Clasa Person defineste trei variabile;acestea sunt name,dateOfBirth si id.Fiecare
variabila are asociat un tip de date.Tipul de date pentru id este int.Tipul de date pentru name este
String.Domeniul de vizibilitate al unei variabile reprezinta punctul in care o variabila este definita si
accesibila si punctul in care nu este accesibila.Datele vor fi stocate in fiecare variabila atunci cand
programul ruleaza;in acelasi timp,variabilei i se atribuie o adresa interna.Aceasta adresa nu este
necesara pentru scrierea unui program.
Java include cuvintele cheie care sunt folosite pentru a implementa incapsularea.In acest
exemplu,cuvantul cheie private este aplicat unui atribut astfel incat alte obiecte sa nu il poata
accesa.Aceste date pot fi accesate numai de catre metode din cadrul clasei.Alte obiecte vor avea
nevoie sa foloseasca o metoda accesor pentru a obtine datele.
- Metoda mutator - Aceasta schimba unui datele obiect.Imaginati-va ca exista un obiect Person
denumit JohnDoe.Daca datele pentru JohnDoe sunt incapsulate,Obiectul A trebuie sa trimita mesaje
obiectului JohnDoe pentru a aplica schimbarile si trebuie sa specifice un nume de metoda din clasa
Person.Acest lucru este ilustrat in Figura .Ex: vezi clasa Person. Metodele setName, setDateOfBirth
- Metoda accesor - Aceasta obtine datele unui obiect.Obiectul A poate trimite un mesaj obiectului
JohnDoe pentru a obtine date.Datele obtinute vor trebui sa fie stocate in Obiectul A.Acest lucru este
ilustrat in Figura .Ex: vezi clasa Person. Metodele getName, getDateOfBirth
Obiectul A
opereaza pe obiectul Person prin folosirea unei metode publice pentru a schimba valoarea atributului
name.
- Valori returnate de metode - Un obiect poate interactiona cu alt obiect pentru a obtine date.Mesajul
care este trimis celuilalt obiect poate include argumente.Acest lucru este ilustrat in Figurile si .
Rezumat
Acest modul a introdus anumite concepte specifice POO precum obiectele si clasele
Obiectele sunt membri ai unei clase.Ele mai sunt cunoscute ca si instante ale claselor.Obiectele pot
stoca si modifica datele.Fiecare obiect are atribute si comportamente.Obiectele interactioneaza intre
ele prin intermediul metodelor.Un programator defineste metode pentru un obiect.Obiectele trimit si
primesc mesaje pentru a interactiona intre ele.
Clasele sunt schitele folosite pentru a crea obiecte.Clasele contin metode,care sunt seturi de
instructiuni pentru efectuarea unor sarcini.Metodele accesor sunt folosite pentru a obtine
informatii.Metodele mutator sunt folosite pentru a modifica date.
Clasele au relatii cu alte clase.Mostenirea este o relatie in care clasele preiau atribute si
comportamente de la alte clase.Relatiile dintre clase pot fi modelate cu UML.Acest sistem de
simboluri este folosit pentru comunicarea intre utilizatori si programatori.
70
- Documentatia API
- Utilitarul javadoc
- Cuvinte cheie si simboluri
- Identificatori
- Memoria RAM
- Dimensiunea spatiului de stocare
- Stocarea datelor
- Variabile
- Tipuri de date Java
- Clase de impachetare
- Instanta unei clase
- Reguli de sintaxa Java
- Declaratii
- Modificatori de acces si specificatori
- Mutabilitate
- Metoda finalize
71
72
73
Comentariile de o linie pot fi imbricate in comentarii block.Exemplul din Figura ilustreaza folosirea
comentariilor de o linie imbricate.Comentariile de o linie impricate in interiorul comentariilor javadoc
sunt incorporate in documente HTML.
/**
Definirea unei clase incepe aici
//serializarea este o interfata de tip maker.
*/
74
75
Utilitarele de cautare pot fi folosite pentru a ajuta la localizarea fisierului javadoc.html.Acest lucru este
ilustrat in Figura .
Mult timp poate fi petrecut pe documentatie dupa ce un program este scris.Utilizarea javadoc ajuta la
automatizarea acestui proces.Acest lucru va reduce costurile de dezvoltarea si de mentenanta.
Toate comentariile javadoc ar trebui plasate inainte sau pe linia anterioara acestor linii de cod:
- Definitia clasei
- Definitia fiecarui atribut
- Definitia metodelor si a constructorilor
Toate comentariile javadoc plasate in interiorul acoladelor de cod a unei metode sau constructor vor fi
ignorate.Din moment ce comentariile javadoc sunt folosite pentru a furniza informatii unui utilizator a
unei clase,comentariile ar trebui plasate deasupra atributelor si metodelor publice si
protejate.Atributele private sau metodele nu necesita comentarii javadoc.Programatorul poate alege sa
includa comentarii java standard intre /* */ sau precedate de //.
77
AP-ul ofera un set de utilitare,si metode ce pot fi folosite pentru a dezvolta software.API-ul Java are
utilitare ce pot fi folosite pentru a dezvolta software bazat pe Java.
Figura
78
79
80
3.2.1 Introducere
Fiecare limbaj de programare este compus din elemente.Majoritatea limbajelor contin cuvinte
cheie,simboluri,nume pentru date sau operatii,si reguli de sintaxa pentru utilizarea lor.Dupa ce un
limbaj a fost invatat,celelalte limbaje sunt sunt mai usor de invatat.
81
82
83
Cateva cuvinte cheie sunt exceptii.Cuvintele cheie const si goto sunt rezervate.Ele permit unui
compilator Java sa produca mesaje de eroare mai bune,Desi true si false ar parea sa fie cuvinte
cheie,ele sunt de fapt literali boolean.Un literal este o valoare actuala.
Un exemplu este prezentat mai jos:
int myInt = 1;
In aceasta declaratie,1 este un literal intreg.
Desi null poate parea a fi un cuvant cheie,este de fapt literalul null.Null inseamna absenta unei valori.
O valoare semnifica faptul ca este asociata cu datele stocate si procesate de catre un program.Simbolul
9 reprezinta o valoare numerica de noua si simbolurile 4 si 5 pot fi combinate pentru a reprezenta
valoarea numerica patruzecisicinci.Valoarea datelor este cunoscuta in program sau atunci cand
programul ruleaza.Cateva valori sunt mai greu de descris cu simboluri precum caractere sau numere.In
Java,valoarea datelor ce reprezinta un raspuns true sau false este reprezentata cu cuvintele rezervate
true sau false.
Figura ilustreaza o mostra de program Java.Miscati mouse-ul deasupra programului pentru a gasi
cuvintele care sunt si nu sunt cuvinte cheie.Care dintre cuvintele evidentiate nu sunt cuvinte cheie?
84
85
86
3.2.3 Identificatori
Identificatorii reprezinta etichete care sunt atribuite datelor.Programatorii Java folosesc etichete pentru
a accesa datele stocate.Identificatorii mai sunt atribuiti numelor de clase si numelor de metode.
Java are cateva reguli care sunt folosite pentru a crea identificatori:
- Orice caracter din orice alfabet poate fi folosit pentru a ii crea.Caracterele care sunt folosite in
limbajul englez sunt reprezentate prin cod ASCII.Java ofera cod international si date cu un set de
simboluri codate cunoscute ca si Unicode.Acestea includ reprezentatii pentru aproape fiecare limba
vorbita din lume.
- Orice caracter din orice alfabet poate fi folosit pentru a ii crea.Caracterele care sunt folosite in
limbajul englez sunt reprezentate prin cod ASCII.Java ofera cod international si date cu un set de
simboluri codate cunoscute ca si Unicode.Acestea includ reprezentatii pentru aproape fiecare limba
vorbita din lume.
- Primul caracter trebuie sa fie o litera.Toate celelalte caractere pot fi litere,numere,sau simboluri.
- Ei nu pot contine simbolul de procent (%) sau semnul diez (#).
87
- Simbolurile speciale precum semnul dolarului ($) si ampersandul (&) ar trebui evitate.
- Ei nu pot contine spatii
- Ei sunt case sensitive
- Ei nu pot folosit anumite cuvinte cheie,care sunt cunoscute ca si cuvinte rezervate.
Aceste reguli sunt ilustrate in Figura
88
Semnul dolarului ($) poate fi folosit in Java pentru compatibilitatea cu sisteme de mostenire.Mai este
folosit cu clase si nume de interfata generate de compilator.
Linia (_) este uneori folosita pentru a recunoaste identificatorii care sunt compusi din mai multe
cuvinte precum savings_Account_Balance.
- Paranteze ({}) - Acestea sunt folosite pentru a limita declaratiile block,definitiile de clasa,definitiile
de metode,si alte declaratii care ar trebui sa fie rulate intr-un grup.Acestea sunt illustrate in Figura .
Parantezele care sunt folosite pentru a define o clasa sau o metoda ar trebui plasate dupa declaratia
definitiei.Asezarea parantezelor face mai facila depistarea erorilor si depanarea programelor.Unele
editoare precum BlueJ includ utilitare de cautare pentru a gasi parantezele potrivite
- Punct si virgule (;) - Acestea sunt folosite la sfarsitul unei declaratii.Acestea sunt illustrate in
Figura . Inainte ca un program sa fie compilat,asigurati-va ca fiecare linie a codului se termina cu
punct si virgula.
89
- Virgule (,) - Acestea sunt separatorii sau delimitatorii datelor.Fiecare valoare dintr-o metoda trebuie
sa fie separata prin virgula.Declaratia metodei defineste valori necesare pentru o metoda ca una sau
mai multe perechi de lista de tip de date si variabile.In general,daca sintaxa unui limbaj identifica o
virgula in descriere,programatorul trebuie sa foloseasca virgula.Metodele cu mai mult de un parametru
sunt folosite dupa cum este ilustrat in Figura .
- Spatii - Acestea sunt folosite pentru a separa cuvintele cheie si identificatorii si ar trebui sa fie
incluse atunci cand informatiile sunt printate sau ilustrate:
public class Student
Atunci cand codul Java este compilat,Java ignora spatiile precum un spatiu,taburi,si \r.Spatiile sunt
folosite de regula pentru a face programele mai usor de citit.
Urmatoarele caractere sunt interpretate ca si spatii in Java:
- \t - tab orizontal
- \n - linie noua
- \f - spatiu de formular
- \r - enter
- Spatiu
3.3.1 Introducere in stocarea datelor
Toate programele care ruleaza pe un calculator trebuie sa fie stocate in memorie.Studentii nu trebuie
sa stie modul in care un calculator stocheaza electronic datele pentru a crea clase Java.Sunt utile cateva
cunostinte despre modul in care memoria este alocata si folosita in timp ce un program
ruleaza.Acestea vor ajuta la crearea si referintele corespunzatoare la tipurile de date Java.
Folositi jocul de potrivire din figura pentru a invata despre stocarea datelor.Exista sase locuri pentru a
stoca datele:
92
-Identificatorii sunt etichete pe care programatorii le folosesc pentru a face referire la locatiile de
stocare.
-Domeniu de vizibilitate sau durata unei variabile reprezinta disponibilitatea datelor in timp ce un
program ruleaza.Domeniul de vizibilitate al unei variabile este reprezentat de codul in care este
definita.Variabilele care stocheaza date au un domeniu de vizibilitate pe parcursul existentei
obiectului.Cat timp obiectul este folosit,datele obiectului sunt disponibile.Variabilele definite intr-o
metoda pot fi folosite numai in interiorul metodei.O variabila este limitata in domeniu daca este
continuta in logica unei metode.Atunci cand o metoda nu mai ruleaza,variabila nu mai
exista.Variabilele sunt intr-un domeniu atunci cand exista in memorie.
-Adresa variabilei este locatia variabilei si datele din memorie.Programatorii Java nu trebuie sa stie
locatia datelor.Ei au nevoie doar de un identificator pentru datele ce reprezinta numele
variabilei.Acesta va fi folosit pentru a accesa datele.
Java este un limbaj "strongly typed". Aceasta inseamna ca fiecare tip de date are o anumita cantitate
de stocare alocata.Compilatorul stie cantitatea de memorie necesara fiecarui tip de date.Datele pot fi
mutate din memoria unui tip de date in altul in conditii specifice.Acest lucru reprezinta conversia
tipului.
94
Tipul de date boolean stocheaza o reprezentare a valorilor true si false.Tipul de date char stocheaza
orice caracter Unicode.Celelalte sase tipuri de primitive sunt folosite pentru numere.Folositi activitatea
din Figura pentru a identifica tipurile de date care ar putea fi folosite pentru a reprezenta o valoare.
95
Marimea memoriei reprezinta numarul de biti care sunt folositi pentru a stoca o reprezentatie a unui
numar,simbol caracter,sau status boolean.Memoria este masurata in bytes.Exista opt biti intr-un
byte.Fiecare bit poate fi reprezentat ca o valoare de loc in sistemul binar de numarare.Acest sistem
foloseste doua cifre,care sunt 1 si 0.
Fiecare bit poate fi on sau off.Acesta este reprezentat ca 1 pentru on sau 0 pentru off.Pozitita fiecarui
bit reprezinta o putere a lui 2.De exemplu,primul bit reprezinta 2 la puterea 0,care este 1.Al doilea bit
reprezinta 2 la puterea 1,care este 2.Al treilea bit reprezinta 2 la puterea 2,care este 4.Atunci cand un
bit este on,el reprezinta valoarea lui 2 atribuita acelei pozitii.Pentru a reprezenta un numar zecimal in
biti,convertiti numarul in unitati de 2.Adaugati valorile fiecarui bit on pentru a obtine o valoare
zecimala pe care un set de biti o reprezinta.Acestea sunt ilustrate in Figurile si . Al optulea bit este
folosit pentru semnul numarului.Un 0 este pentru numere pozitive si un 1 este pentru numere negative.
97
Cuvantul "bit"vine de la "binary digit". Exista opt biti intr-un byte deoarece acesta era numarul
necesar pentru a ilustra caracterele folosite de catre calculatoare.Opt biti pot fi folositi pentru a
reprezenta 256 de caractere.
Figura
98
99
100
Variabilele studentName si grade din Figura fac referire la obiectele tipului de clasa String.Aceasta
este una dintre clasele principale.Obiectele String sunt unele dintre tipurile Java de baza.Acest lucru se
datoreaza faptului ca majoritatea datelor sunt date text,care reprezinta un sir de caractere.Acestea sunt
ilustrate in Figura .
Retineti ca String este o clasa si char este o primitiva.Unii studenti fac confuzie intre String si un
vector de char.Un vector de caractere este manipulat ca un vector de primitive.Atunci cand String este
instantiata,obiectul are proprietati de clasa care difera de cele ale unui vector.
3.5.1 Variabile
Sintaxa se refera la regulile pentru folosirea simbolurilor si a cuvintelor cheie dintr-un limbaj.Aceasta
pagina acopera sintaxa pentru variabile,clase,metode,constructori,si modificatori.
Atunci cand o variabila este declarata,alocarea memoriei este necesara.Daca variabila este definita ca
si parte a datelor dintr-un obiect,valorile implicite sunt atribuite variabilei atunci cand obiectul este
creat.Daca este o variabila locala sau dintr-o metoda,valoarea sa trebuie sa fie atribuita de catre
programator ca si parte a definitiei metodei.
Figura evidentiaza sintaxa pentru clasa Student. Ex: vezi clasa StudentFigura
pentru fiecare tip de declaratie.
101
descrie sintaxa
In Figura , valoarea pentru fiecare camp String va fi null.Un obiect String nu a fost creat pentru ca
obiectul Student sa il referentieze.
Atunci cand un obiect este o forma specializata a altuia,acest lucru poate fi exprimat ca o relatie
"este".
Mai jos sunt cateva exemple de specializare:
- Soparla-reptila
- Vaca-mamifer
- Masina-vehicul
- Prajitor de paine-aparat de uz casnic
O relatie de agregare are loc atunci cand un obiect este o parte a unui alt obiect.
Mai jos sunt cateva exemple de agregare:
- Schelet-soparla
103
- Uger-vaca
- Motor-masina
- Element de incalzire-prajitor de paine
O relatie de container este o forma de agregare in care un obiect este continut de catre un alt obiect.
Mai jos sunt cateva exemple de container:
- Oaie-turma
- Leu-mandrie
- Lup-haita
- Nava-flota
O relatie asociere are loc atunci cand un obiect este legat de un alt obiect.Al doilea obiect nu trebuie sa
fie parte sau sa fie continut de catre primul obiect.
Mai jos sunt cateva exemple de asociere:
- Guvern-oras
- Autor-carte
- Proprietar-masina
- Actor-piesa
3.5.3 Datele claselor
Obiectele unei clase trebuiesc deseori sa partajeze valoarea datelor.Toti clientii unei banci partajeaza
cateva informatii despre banca precum adresa si nume.Toti studentii unei clase pot partaja informatii
despre un profesor sau despre cea mai mare nota de la un test.Atunci cand datele sunt partajate de catre
toate obiectele unei clase,datele sunt declarate static si sunt aceleasi pentru toate instantele
clasei.Cuvantul cheie static este folosit pentru a defini datele ca si statice.Atributele clasei Bank vor fi
definite ca si statice.Membrii de tip static si metodele claselor Math si System vor fi si acestea folosite.
Examinati clasa Student din Figura
104
3.5.5 Constante
O constanta este o locatie de stocare din memorie.Constantele au aceleasi cinci aspecte ca si
variabilele.Acestea sunt identificatori,scop,adresa,tipul datelor,si valoarea.Datele unei constante nu se
modifica la procesare.In Java,cuvantul cheie final defineste o locatie de stocare ca si constanta.Datele
ambilor membri sau instante si datele statice sau cele ale clasei pot fi declarate ca si constante folosind
cuvantul cheie final.
Clasa Student,courseNumber si studentName pot fi declarate ca si final.Daca este creata o instanta a
obiectului Student,studentName nu poate fi modificata.Atunci cand clasa este incarcata in memorie
106
3.5.6 Clasa
Sintaxa definitiei unei clase este ilustrata in Figura
- O clasa publica trebuie sa aiba un nume de clasa care sa se potriveasca cu numele fisierului.Numele
fisierului si numele clasei trebuie sa fie aceleasi.Java este case sensitive.Numele de clasa de student si
numele fisierului Student.java nu sunt aceleasi.
- Fisierul sursa sau fisierul .java pot avea definita o singura clasa publica.
- Fisierul sursa poate avea definite mai multe clase.Numai una dintre acestea poate fi declarata ca si
publica.
de
clase
3.5.7 Metoda
Doua tipuri de metode care pot fi definite pentru o clasa sunt metode standard si particularizate.
Metodele standard seteaza,returneaza,sau modifica datele unui obiect.Metodele care seteaza sau
modifica valorile datelor pentru un obiect se numesc mutatori.Majoritatea acestor metode se numesc
setObjectData precum setAccountBalance.Metodele care returneaza datele de la un obiect se numesc
metode de acces.Majoritatea acestor metode se numesc getObjectData precum
getAccountBalance.ObjectData este identificatorul pentru datele pe care metoda le va modifica sau
returna.Acest identificator este definit ca si atribut pentru obiect.
Metodele particularizate implementeaza reguli precum metoda whenButtonPressed pentru o clasa
Button sau calculateDueDate pentru o clasa Video_rented.
-setDateRented - o metoda mutator care atribuie data la care un film este inchiriat pentru atributul
dateRented>-getDateRented - o metoda de acces care returneaza data
-calculateDueDate - o metoda particularizata care calculeaza data la care expira inchirierea pe baza
dateRented si seteaza valoarea dateDue.
Un obiect Customer care functioneaza intr-un obiect Video-rented poate folosi metoda mutator
setDateRented pentru a seta data ca si data curenta.Metoda particularizata calculateDueDate poate fi
folosita pentru a seta atributul dateDue al obiectului Video-rented.
Sintaxa pentru declararea metodei este ilustrata in Figura
-Tipul de intoarcere - Fiecare metoda cu exceptia metodei constructor trebuie sa declare un tip de
intoarcere.Acesta
ar
putea
fi
orice
tip
de
date
primitive,precum
boolean,char,byte,short,int,long,float,sau double.Acesta ar mai putea fi o referinta la un obiect.Daca
acesta este cazul,clasa obiect este folosita in locul variabilei referinta.Daca metoda nu returneaza o
valoare,cuvantul cheie void trebuie sa fie folosit.
- Numele metodei - Acesta este identificatorul unei metode.Conventiile folosite pentru a denumi
metodele sunt:
109
Folositi activitatea din Figura pentru a identifica sintaxa pentru declaratiile de metode din clasa
Student.Retineti sa includeti metoda principala in analiza.
110
3.5.8 Constructor
Definitiile tuturor claselor includ o metoda care este folosita pentru a construi obiecte.Aceasta metoda
trebuie sa fie definita pentru a crea un obiect.
Sintaxa pentru un constructor este ilustrata in Figura
Un constructor nu are valori de returnare.Numele metodei trebuie sa fie numele clasei.Pot exista mai
multe metode constructor definite intr-o clasa.Daca un programator nu defineste o metoda
constructor,compilatorul va introduce una in definitia clasei atunci cand codul sursa este compilat.
111
3.5.9 Modificatori
Definirea unei clase,a unei metode sau variabile poate include modificatori.Cele doua tipuri de
modificatori sunt specificator de acces si calificativ.
Specificatorii de acces definesc nivelul de acces.Cuvintele cheie folosite pentru un specificator de
acces sunt private,public si protected.Daca pentru un specificator de acces este lasat spatiu,accesul este
definit implicit.
Calificativul defineste stadiul unui obiect,al unei variabile,sau metode.Cuvintele cheie folosite pentru a
ii defini sunt static,final,native,si transient.
Pentru a exclude un membru de date dintr-un flux puteti declara membrul ca si transient.Acest lucru
impiedica metoda sa scrie acel camp intr-un flux.Declarand un membru ca si transient atunci cand un
obiect este citit dintr-un flux,campurile de date transient vor fi setate la valorile lor implicite.De
exemplu,intregii vor fi setati la 0,si sirurile vor fi setate ca null.Daca trebuie sa restaurati datele
transient la valorile ne-implicite,va trebui sa implementati o metoda.Atunci cand obiectele sunt
serializate,membrii de date transient sunt omise.
112
3.5.10 Mutabilitate
113
RAM
2.Initializare implicita,care seteaza valorile implicite ale obiectelor bazate pe tipul datelor.
3.Initializare explicita de valori
4.Executarea constructorului
5.Atribuirea referintei adresei unui obiect la variabila
In clasa Student,metoda main() a fost folosita pentru a crea obiecte Student.
114
Rezumat
Acest modul a introdus cateva elemente de Java.Succesul unui program depinde de folosirea
corespunzatoare a regulilor limbajului si a documentiei functionalitatilor programului.Refolosirea
codului este o caracteristica principala Java.Aceasta trasatura este suportata de documentatia
functionalitatilor publice pentru un program.
Documentatia programului beneficiaza programatorului si altor utilizatori ai unei clase.Utilitarul
javadoc interpreteaza etichetele care sunt introduse in codul sursa pentru a crea documente
HTML.Aceste tipuri de comentarii sunt incluse in documentatia /** */. API-ul este disponibil in
format HTML.Acesta este o referinta pentru folosirea setului extins de clase care formeaza platforma
limbajului Java.
Java are un set bogat de cuvinte cheie si simboluri.Cuvintele rezervate pot fi folosite pentru a defini
cateva tipuri de valori precum true,false,si null.Cuvantul cheie new necesita spatiu de stocare pentru
un obiect.Acesta este cunoscut ca si operatorul new.Cuvintele cheie public,private,protected,static si
final sunt modificatorii de clase,date,sau metode.
Cuvantul cheie static este un specificator de date sau metode si mai este cunoscut ca si classbased.Cuvantul cheie final este si el un specificator de date sau metode si este cunoscut ca si constanta.
Identificatorii sunt etichete pe care programatorii le atribuie datelor sau locatiilor de
stocare.Identificatorii mai sunt atribuiti numelor de clase si numelor de metode.Folosirea
parantezelor,punct si virgula,virgule,si spatii sunt uzuale in cod.Ele trebuie sa se supuna regulilor de
sintaxa Java.
Java este cunoscut ca un limbaj "strongly typed". Acest lucru inseamna ca este importanta stocarea
datelor si ca exista legatura intre tipurile datelor si cantitatea de stocare.Exista sase locuri de stocare a
datelor.Acestea includ stocarea in registrii CPU,RAM,non-RAM precum in spatiul de pe hard
disk.Memoria RAM este impartita in stiva,heap,si memorie constanta.Marimea de stocare este
numarul de biti necesari pentru stocarea reprezentatiei unui numar,simbol caracter,sau simbol boolean.
The Java data types are as follows:
- boolean
- char
- byte
- short
- int
- long
- float
- double
- reference
115
- Declararea de variabile
<modifiers>datatype identifier;
- Declararea unei clase
<modifiers>class classname
{
// definition
}
- Declararea de metode
<modifiers>return-type methodname (<modifier
data-type identifier>, <modifier data-type
identifier>, ...)
{
// method instructions
}
-Declararea de constructori
<modifiers>Classname (modifier data-type
identifier>, <modifier data-type identifier>, ...)
{
116
// constructor instructions
}
Modificatorii includ modificatori de acces si specificatori.Modificatorii
public,private,protected si default.Specificatorii sunt static si final.
de
acces
sunt
Mecanismul de garbage collector este un program special ce este rulat de catre JVM pentru a elibera
memorie.Un programator poate seta un obiect pentru distrugere printr-o referinta null la obiect.Metoda
finalize poate fi setata pentru a efectua activitati de curatare,precum inchiderea fisierelor sau salvarea
datelor intr-un fisier.
117
- Concatenare
- Structuri de control
- Structuri de control pentru selectie
- Structuri de control pentru repetitie
- Clasa System
- Clase esentiale
4.1.1 Operatii cu obiecte
Manipularea datelor este efectuata prin intermediul operatorilor.Folosirea datelor si a operatorilor
pentru a obtine un rezultat este cunoscuta ca o formula sau o expresie.In Java,expresiile sunt parti ale
declaratiilor.Valorile membrilor obiect si clasa,sau campuri si sunt lucrurile pe care se opereaza.Si
118
120
- Expresiile aritmetice sunt asociative de stanga.Acest lucru inseamna ca ele sunt evaluate de la stanga
la dreapta.
- Operatorii de atribuire sunt asociativi de dreapta.Acest lucru inseamna ca valoarea trebuie sa fie
determinata inainte de a fi atribuita.
Folositi activitatea din figura pentru a deveni familiar cu ordinea de precedenta si folosirea
parantezelor pentru a administra aceste reguli.
Exemplul din Figura ilustreaza ca un programator trebuie sa se uite la tipul datelor si la ordinea
operatiilor pentru a se asigura ca intr-un obiect sunt stocate valori corecte.Rezultatul acestui cod este
ilustrat in Figura .
Completati propozitiile ce descriu instructiunile operatorului din Figura
Colectiile de biti pot fi folosite pentru a economisi spatiul de stocare daca sunt necesare multe valori
logice,sau pentru a reprezenta starea intrarii binare de la echipamentele fizice.De exemplu,rezultatele
unui chestionar cu raspunsuri da si nu ar putea fi salvate ca si valori logice si operatii ar putea fi
efectuate folosind operatori logici la nivel de bit.Manipularea la nivel de bit pot fi folosita pentru a
administra seturile de flag-uri logice.Un program poate avea mai multe flag-uri logice pentru a ilustra
proprietatile diferitelor componentelor dintr-un program,precum visibile sau draggable.Un
programator ar putea defini o variabila denumita flags pentru toate componentele in loc sa defineasca
variabile pentru fiecare.Fiecare bit din cadrul variabilei flags ar reprezenta starea unuia dintre flaguri.Manipularea bitilor poate fi folosita pentru a seta si a obtine fiecare flag.In primul rand,setati
constantele ce indica flag-urile pentru program.Fiecare flag ar trebui sa fie o putere diferita a lui 2
pentru a va asigura ca fiecare bit este folosit numai de catre un singur flag.Codul exemplu din
Figura seteaza flag-urile la 0.Acest lucru inseamna ca toate flag-urile sunt false din moment ce nici
unul dintre biti nu este setat.
Operatiile cu datele char includ conversia unei valori char la int,sau conversia unei valori int la
char.Datele de intrare pentru un program de la majoritatea echipamentelor sunt primite ca un sir de
biti.In Java,acesti biti trebuie sa fie schimbati in int,si apoi in char.Valoarea int pentru fiecare char este
definita in simbolurile Unicode pentru fiecare limbaj.Valoarea char '9'are o valoare int de 57.O
referinta care poate ajuta utilizatorii sa converteasca de la char la int este un subset ASCII a tabelei
Unicode,care poate fi gasita pe website-ul Unicode.
126
127
4.5.3 Instructiunea if
Declaratiile conditionale permit executia unei parti de program bazat pe valoarea unor expresii.Java
suporta declaratia if pentru alternative cu doua cai.Acestea sunt ilustrate in Figura . Intr-o declaratie
if,actiunile sunt efectuata pe baza unei conditii.Conditia este o expresie logica sau valoare.Conditia
trebuie sa fie true sau false.
Sintaxa de baza pentru o declaratie if/else este ilustrata in Figura
Daca sunt folosite imbricari,operatorul scurcircuit poate fi folosit in locul unei declaratii if.Acest lucru
este ilustrat in Figura .
In unele cazuri,operatorul conditional poate fi folosit in locul unei declaratii if.Acest lucru este ilustrat
in Figura .
Toate cele trei exemple cu clasa Teacher contin urmatoarea atribuire:
int score = s1.getPoints() * 100 / totalPoints;
Operatorii de impartire si inmultire au acelasi grup de precedenta si sunt asociativi de la stanga la
dreapta.Aceasta declaratie poate fi mai clara daca sunt folosite paranteze:
int score = (s1.getPoints() * 100) / totalPoints;
Astfel punctele studentului,sunt inmultite cu 100,impartite cu totalPoints pentru a produce un procent.
129
este implementata cu
Un test conditional va avea acelasi rezultat ca si operatorii &sau &&. Acelasi cod ar putea fi scris asa
cum este ilustrat in Figura .
Parantezele ar trebui folosite pentru a margini un bloc de declaratii.In exemplul ilustrat in Figura ,
primele declaratii ruleaza in cazul in care conditia este adevarata.Declaratia 2 este rulata
intotdeauna.Lipsa parantezelor face secventa de cod neclara.Un programator ar putea sa nu poata
urmari logica programului pentru a corecta erorile sau problemele.Folosirea corecta a parantezelor este
ilustrata in Figura .
- break - Aceasta inchide secventa de actiuni si iese din structura de control switch.
- default - Aceasta este un set de actiuni care vor fi executate daca nu este gasita nici o potrivire intre
expresie si fiecare constanta.
In instructiunea switch,expr1 trebuie sa fie compatibil pentru atribuire cu un tip int,byte,short sau
char.Numerele reale,expresiile lungi,sau referintele la clasa precum obiectele String nu sunt
permise.Eticheta implicita poate fi folosita pentru a specifica segmentul de cod in care valoarea
variabilei sau a expresiei nu se poate potrivi cu nici una dintre valorile de caz.Daca nu exista
instructiuni de break ca in ultima instructiune din segmentul de cod pentru un caz,executia continua in
segmentul de cod pentru urmatorul caz.Valoarea expresiei de caz nu va fi verificata.
Codul exemplificat in Figura configureaza un obiect Car pe baza variabilei intregi carModel.Daca
variabila carModel este egala cu constanta intreaga DELUXE,care are o valoare de unu,atunci aerul
conditionat este adaugat la masina.Daca variabila carModel este egala cu constanta intreaga
STANDARD,care are o valoarea de doi,atunci sunt adagaute numai radioul,rotile,si un motor.
130
Acest cod rezolva apelurile metodei redundante din exemplul anterior.Acesta permite fluxului de
control sa scada prin mai multe blocuri case.De exemplu,daca variabila carModel este egala cu
constanta intreaga THE_WORKS,atunci pachetul auriu si scaunele ajustabile in sapte moduri sunt
adaugate acestei masini.Masina mai are covorase de podea,aer conditionat,un radio,stergator,roti,si un
motor.Daca variabila carModel este egala cu constanta STANDARD,sunt adaugate numai un
radio,stergatoarele,si un motor.
Noua din zece instructiuni switch necesita break pentru fiecare bloc de caz.Absenta acestei instructiuni
cauzeaza majoritatea erorilor de programare logice in instructiunile switch.
Figura ilustreaza de ce ar putea fi utila folosirea instructiunilor case pana la capat.Acest cod
calculeaza numarul de zile dintr-o luna.
Sintaxa switch evalueaza un tip de date char,byte,sau short.Figura evalueaza variabila month,care a
fost declarata explicit si definita inaintea instructiunii switch.Evaluarea mai poate fi prin comparatie cu
o valore returnata de la o metoda sau expresie daca tipul de date al valorii returnate se potriveste cu
tipul de date al conditiei de caz.
4.5.7 Bucle
Structurile bucla permit executia repetata a blocurilor de instructiuni.Java suporta trei tipuri de
constructii bucla.Acestea sunt buclele for,while si do.Inainte de executia corpului de bucla,care este o
bucla de pretestare,buclele for si while testeaza conditia de bucla.Pentru a verifica o conditie dupa ce
este executata bucla,sunt folosite buclele do,care sunt bucle de posttest.Buclele for si while ar putea sa
nu ruleze corpul de bucla deloc.Buclele do vor rula corpul de bucla cel putin odata.
Folositi bucla for atunci cand bucla este pe cale de a fi executata de un anumit numar setat de
ori.Folosit buclele while si do se vor utiliza daca numarul de repetitii nu este cunonscut.
Toate structurile de bucla au patru elemente sau actiuni care au loc:
- Initializare
- Testarea unei conditii sau expresii
- Executia instructiunilor
- Alterarea conditiei sau a expresiei pentru a iesi din bucla
131
Sintaxa descrie doua din cele trei elemente.Programatorul introduce celelalte doua
elemente.Instructiunea de initializare dintr-o bucla do este definita inainte de structura de
bucla.Aceasta bucla face un test inainte sa ruleze instructiunile.Aceasta bucla va rula cel putin o
singura data.
Priviti instructiunea i++; din figura.Valoarea variabilei i este testata pentru a controla bucla
do.Aceasta variabila a fost initializata la linia 11.Daca instructiunea i++; este omisa,bucla va rula la
infinit.Pentru a controla oprirea unei bucle conditia trebuie modificata in fals.Intr-o bucla
do,programatorul trebuie sa se asigure ca rezultatul conditiei va fi fals la un moment dat.Schimbarea
valorii i cu operatorul de incrementare va cauza valoarea lui i sa creasca.Atunci cand aceasta valoare
este zece,bucla nu va mai afisa propozitia "Are you finished yet?" si va afisa propozitia "Done".
Atunci cand sunt folosite bucle do,asigurati-va ca variabila de control a buclei este
initializata,actualizata in corpul buclei,si testata.
- break [eticheta];
- continue [eticheta];
- [eticheta:] instructiunea ;
Folositi instructiunea break pentru a iesi din instructiunile switch,instructiunile de bucla si blocurile cu
etichete.Folositi instructiunea continue pentru a sari la sfarsitul corpului buclei si apoi pentru a returna
controlul instructiunii de control al buclei.
Instructiunea eticheta identifica orice instructiune valida la care trebuie sa fie transferat controlul.Intr-o
instructiune break cu eticheta,eticheta poate identifica orice instructiune.Intr-o instructiune continue cu
eticheta,eticheta trebuie sa identifice o constructie bucla.
Folositi instructiunea break asa cum este ilustrat in Figura . Atunci cand conditia if este
adevarata,instructiunea break este rulata si fluxul de executie ar ajunge la urmatoarea instructiune dupa
structura de bucla,care este instructiunea 3.Codul din instructiunea 2 nu este executat.
Folosirea instructiunii continue este ilustrata in Figura . Atunci cand conditia if este adevarata in
interiorul structurii do,fluxul de control ajunge la ultima conditie while a celei mai exterioare structuri
do.
Figura ilustreaza instructiunea break cu o eticheta denumita extern.Atunci cand conditia if este
adevarata in cea mai interioara structura do,instructiunea break este rulata si controlul paraseste blocul
etichetat,care este cea mai exterioara structura do.
Figura ilustreaza instructiunea continue cu o eticheta denumita test.Atunci cand conditia if este
adevarata,fluxul de control ajunge la conditia while.
Folositi activitatile din Figurile
si
135
for the Investment class also shows how the Console class is used.
Rezumat
Acest modul introduce cativa operatori Java si structuri de control.Studentii invata ca exista operatori
aritmetici,unari,boolean,de comparatie,logici,si de atribuire.Prioritatea ofera precedenta unor operatori
inaintea altora astfel incat evaluarea unei instructiuni sa fie previzibila si consistenta.Operatorii mai au
proprietati asociative.Cateva instructiuni sunt evaluate de la stanga la dreapta.Altele sunt evaluate de la
dreapta la stanga.
Acest modul a mai avut de-a face cu trei structuri de control.Acestea sunt secventa,selectia si
repetitia.Constructiile de selectie sunt instructiunile if si switch.Constructiile repetitiei sunt buclele
do,while si for.
Java ofera clasa System pentru a accesa proprietatile echipamentelor SO-ului pentru fluxurile de date
de intrare si de iesire din program.Clasa System contine referinte la trei obiecte statice.Acestea sunt
in,out si err.Aceste obiecte pot trimite si primi date de la echipamentele implicite de intrare si iesire.
137
- Definitia clasei
- Incapsulare
- Atribute
- Date private
- Date ale obiectului
- Date ale clasei
- Modificatorii de acces private,public,default si protected
- Calificatorii static si final
- Imutabilitate
- New
- Instanta
- Constructorii impliciti si cei definiti
- Variabila this
- Initializarea datelor
- Domeniul de vizibilitate si durata de viata
- Sintaxa metodei
138
Programatorii care sunt la primul contact cu limbajele orientate pe obiecte incep adesea cu foarte
putine clase care efectueaza prea multe sarcini complexe.Pentru o buna definire a obiectelor,este
esential sa evitam clase care fac prea mult si sa mentinem numarul de clase in limite rezonabile.Daca
definitia unei clase este prea extinsa,este mai greu sa gestionam modificarile si erorile;este mai bine sa
avem multe clase robuste decat clase putine care se defecteaza la fiecare modificare.
O aplicatie este un program care rezolva o problema de afaceri.Cum procedeaza programatorii pentru
a descoperi obiectele necesare in crearea unei aplicatii?Un mod de a incepe este sa folositi activitatea
din Figura pentru a identifica toate substantivele din descrierea problemei.
Dupa descoperirea obiectelor necesare,urmatorul pas pentru programator este proiectarea schemei,sau
a clasei,pentru fiecare obiect.Substantivele si adjectivele pot indica programatorului posibile date sau
atribute ale obiectului.Verbele pot ajuta programatorul la selectarea metodelor si a
comportamentelor.In cadrul activitatii din Figura , folositi descrierea pentru a identifica atributele si
comportamentele unui abonat.
-Obiectele sunt create pe baza definitiei unei clase.Un fisier sursa Java poate contine o singura
definitie a unei clase publice.Numele clasei publice trebuie sa coincida cu numele fisierului.Acest
lucru este ilustrat in Figura .
-Un fisier sursa Java poate contine mai multe definitii de clase.Fisierul PayCalculator.java contine
doua clase.Prima clasa este Pay,iar accesul implicit la aceasta clasa este restrictionat la obiecte ale
claselor din acelasi pachet sau director.Clasa PayCalculator este declarata ca fiind
publica.Compilatorul va crea fisiere .class pentru clasele Pay si PayCalculator.Fisierul
PayCalculator.class contine metoda main;aceasta clasa va fi executata prima si reprezinta punctul de
intrare in program.Clasa PayCalculator creeaza obiecte din clasa Pay;acest lucru este aratat in
Figura .
Definitia unei clase include cateva structuri:
- Definitiile constructorilor - Definitiile de clase pot include metode constructor.Scopul unei metode
constructor este sa specifice detaliile procesului de creare a obiectelor.O clasa poate fi definita fara
niciun constructor.In Figura , clasa Pay nu defineste niciun constructor.In cadrul clasei
PayCalculator,obiectul Pay este creat cu instructiunea new Pay(). Compilatorul adauga un constructor
implicit fara parametri,Pay(), daca nu exista nici un alt constructor definit.Constructorii poseda
urmatoarele proprietati:
- Definitiile metodelor standard - Cand trebuie sa ascundem datele dintr-un obiect la definirea unei
clase,accesul se restrictioneaza prin cuvantul-cheie private.Singura modalitate de acces la aceste date
este prin metode.Un programator poate defini metode care sa citeasca sau sa modifice datele.Metodele
folosite pentru citirea datelor dintr-un obiect sunt numite accesori;metodele folosite pentru modificarea
datelor dintr-un obiect sunt numite mutatori.Alti termeni care descriu aceste tipuri de metode sunt
140
- Definitiile metodelor speciale - Metodele care implementeaza regulile de afacere pentru care este
proiectata o aplicatie fac parte din definitia clasei.Cateva exemple sunt metoda numita
displayVideoTitleandLocation() pentru obiectul VideoItem sau calcInterest pentru un obiect de tip
CreditCardAccount.Acestea sunt expuse in Figura .
-Datele specifice clasei sau variabilele statice sunt stocate in clasa si sunt disponibile tuturor obiectelor
clasei si obiectelor din alte clase daca accesul la ele este permis.Acestea sunt date partajate.Datele
statice nu sunt neaparat constante - ele pot fi declarate de tip final,ceea ce le face constante.De
fapt,cuvantul-cheie static se refera la accesibilitatea globala a datelor - se stocheaza numai o singura
copie a valorii datelor statice care este partajata de toate obiectele.Atat variabilele statice cat si
variabilele de instanta sunt initializate automat cu valori specifice tipului lor de date.
-Datele locale sau variabilele de metoda sunt date folosite in interiorul unei metode.Aceste date sunt
temporare si inceteaza sa existe dupa terminarea executiei metodei.Accesul la variabilele locale este in
mod implicit privat;modificatorii de acces public,private si protected nu pot fi aplicati variabilelor
locale.
Exemplul de cod din Figurile si arata variabile de instanta,statice si locale.Dati click pe
simbolurile numerotate pentru a citi o explicatie a fiecarui tip de variabila folosit in acest cod.
Stocarea datelor
Programatorii Java folosesc trei zone de stocare pentru datele locale,ale obiectelor si ale clasei:
- Toate obiectele sunt create in RAM.Ele sunt stocate in heap,care este prevazut si cu un garbage
collector.Variabilele care apartin unui obiect sunt initializate pe baza tipului de date.Figura
valorile initiale pentru diverse tipuri de date.
143
indica
- Toate datele unei metode sunt de asemenea create in RAM.Zona de stocare pentru acestea poarta
numele de stiva(stack).
- Variabilelor declarate intr-o metoda nu li se asociaza valori implicite.Programatorii trebuie sa se
asigure ca aceste variabile au asignate valori inainte de folosirea lor.Variabilele dintr-o metoda sunt
create pe stiva.Variabilele definite ca parametri ai metodei sunt initializate cu valorile pasate metodei
in cadrul unui apel.
- Toate datele clasei sunt de asemenea create in RAM.Zona de stocare folosita se numeste zona de
stocare statica.Variabilele statice sunt de asemenea initializate in functie de tipul de date.
Figura ilustreaza impactul utilizarii claselor CreditCardUser si CreditCardAccount asupra stivei si a
heap-ului.
In general,datele sau atributele unei clase trebuie sa fie private,in timp ce metodele apelate din exterior
trebuie sa fie publice.Cand este necesar accesul la valorile variabilelor din afara clasei,o simpla
metoda publica de tip accesor sau getter poate intoarce rezultatele dorite.Cateva exceptii care trebuie
considerate sunt:
- Metodele care vor fi folosite intern de alte metode din aceeasi clasa pot fi declarate ca private.
- Metodele sau membrii asociati clasei,sau statici,sunt folositi in general din exterior si pot fi declarati
ca publici.
Modificatorii de acces se aplica in aceeasi maniera atat variabilelor de instanta cat si variabilelor de
clasa.Imaginati-va ca clasa CreditCardAccount din Figura are nevoie de acces la o rata a
dobanzii,insa obiectele de tip CreditCardAccount nu trebuie sa poata schimba ratele in mod direct.In
aceasta situatie,interestRate trebuie sa fie stocata ca variabila statica.De asemenea,trebuie sa fie
ascunsa fata de celelalte obiecte prin declararea tipului de acces privat.Variabila interestRate poate fi
accesata direct numai de catre alte metode din clasa CreditCardAccount.Aceste metode acceseaza
variabila cu numele ei,care este interestRate.
Clasa CreditCardAccount stocheaza un numar de cont pentru fiecare instanta a sa.Aceste numere ar
putea fi chiar secventiale;fiecare instanta a clasei va obtine unul dintre ele.Pentru a asigura faptul ca nu
exista duplicate printre numerele asignate,variabila nextAccountNumber este pastrata ca atribut static
al clasei.Toate obiectele clasei CreditCardAccount vor partaja acest atribut.
Pentru a face nextAccountNumber accesibil celorlalte clase,accesul este declarat ca public.In acest
exemplu,variabila are acces implicit,prin urmare alte clase din acelasi pachet sau director o pot accesa.
O clasa care utilizeaza sintaxa numele_clasei.membru poate accesa variabila nextAccountNumber.Prin
urmare,toate obiectele clasei si obiectele din acelasi pachet sau director vor fi capabile sa acceseze si
sa modifice aceasta variabila.
Modificatorul private static pentru variabila interestRate este mai restrictiv.Astfel,variabila
interestOnly este accesibila numai din interiorul clasei CreditCardAccount.
Influenta modificatorilor de acces se aplica in acelasi mod atat pentru variabilele de instanta cat si
pentru variabilele statice.
-Sintaxa unei metode are cateva elemente obligatorii.Acestea includ tipul rezultatului returnat si
numele metodei.Sintaxa metodei include si alte elemente optionale;acestea sunt descrise in interiorul
simbolurilor <> - vezi Figura . Caracteristicile sunt urmatoarele:
-Calificatorii pot fi omisi.Calificatorii definesc limitari speciale sau capabilitati ale metodei.Cuvintelecheie folosite in acest caz includ:
-static - Nu este necesara existenta unui obiect din aceasta clasa,metoda putand fi apelata prin referinta
numele-clasei.metoda(). Folosirea lui static in contextul unei metode este identica cu situatia unui
atribut static.
-final - Definitia metodei nu poate fi schimbata.Acest calificator este folosit in special pentru
implementarea mostenirii sau a subclaselor.
-native - Metoda apeleaza proceduri sau programe scrise in alt limbaj.Aceasta este o optiune avansata
a Java care nu este acoperita in acest curs.
- return value;
- return;
In primul format,tipul returnat identifica datele care vor fi intoarse,cum ar fi x,care poate fi o referinta
la un tip primitiv sau la un alt obiect,sau this,care referentiaza obiectul curent al metodei apelate.
Compilatorul furnizeaza automat cel de-al doilea format la sfarsitul blocului unei metode al carei tip
returnat este void.Exista cazuri in care programatorii vor folosi cel de-al doilea format - acesta va fi
folosit ulterior in curs pentru a parasi abrupt o metoda si a iesi inainte de executia tuturor
instructiunilor.Aceasta situatie poate aparea daca o anumita conditie impiedica continuarea executiei
codului.
Tipurile specifice Java sunt cele primitive si clasele Java.O greseala uzuala facuta in scrierea unei
metode este descrierea tipului returnat ca variabila de referinta la un obiect sau tip primitiv.Daca o
metoda intoarce o referinta la un obiect,sintaxa metodei declara doar clasa obiectului si nu referinta
acestuia.La fel,daca o metoda intoarce un tip primitiv,sintaxa ei declara doar tipul si nu numele
variabilei.
O metoda poate intoarce o singura valoare.O instructiune return poate intoarce o valoare referentiata
de o variabila sau rezultatul unei expresii.In toate cazurile,tipul de date al valorilor intoarse trebuie sa
fie compatibil cu tipul returnat declarat in definitia metodei.
150
154
- Numarul de argumente trebuie sa fie diferit,sau daca numarul de argumente este acelasi,cel putin un
argument trebuie sa aiba tipuri de date diferite.
- Nu putem supraincarca o metoda doar prin schimbarea tipului returnat daca numele ei,numarul si
tipul argumentelor raman la fel.
Dupa cum a fost mentionat anterior,motivul supraincarcarii este obtinerea unor date de intrare
diferite;diferentele trebuie sa apara la apelarea metodei.Este posibil sa supraincarcarea sa fie folosita
pentru a schimba ordinea operatorilor,insa aceasta procedura nu este recomandata - mentenanta
codului pentru toate ordinile posibile ale unei liste lungi de argumente este dificila si
neplacuta.Exemplul de cod pentru clasa Commission din Figura ilustreaza utilizarea metodelor
supraincarcate.
Cum decide JVM-ul ce metoda sau constructor sa foloseasca?Compilatorul utilizeaza un proces de
manipulare,de "decorare"a numelor pentru a genera identificatori interni distincti ai
metodelor.Procesul de decorare a numelor implica adaugarea de caractere pentru a reprezenta tipurile
argumentelor.
In Figura
5.9.7 Finalizatori
Finalizatorii sunt metode care efectueaza orice actiuni sunt necesare inainte de distrugerea obiectelor
de catre programul de garbage collection al JVM-ului.Cum metoda finalize este apelata de catre JVM
chiar inainte de rularea garbage collector-ului,programatorii nu pot estima cand va avea loc executia
ei.Cu toate ca putem folosi metoda statica runFinalization din clasa System (System.runFinalization())
pentru rularea metodelor de finalize ale obiectelor care au fost scoase din uz dar ale caror metode de
finalize nu au fost apelate,aceasta operatie este efectuata de JVM fara a oferi garantii.
Cum JVM-ul elibereaza memoria odata ce obiectele sunt distruse,de multe ori nu este nevoie de
finalizatori.In general,finalizatorii sunt folositi pentru sarcini de curatare diferite de realocarea
memoriei si trebuie utilizati cu grija.
Principalul motiv este ca programatorii nu au niciun control asupra intervalului de rulare al garbage
collector-ului.De exemplu,daca un obiect Java este folosit pentru a stabili o conexiune de retea si
instructiunile de inchidere a conexiunii se gasesc in metoda finalize a obiectului,este posibil ca
conexiunea sa nu fie inchisa niciodata daca garbage collector-ul nu este necesar programului.Aceasta
ar cauza persistenta unor conexiuni deschise catre un cont bancar sau date bancare intr-o aplicatie
financiara.Cu toate ca asemenea lucruri nu se intampla aproape niciodata in productie,acestea
reprezinta un exemplu al consecintelor ce ar putea rezulta in cazul in care programatorul se bazeaza pe
metoda finalize().
O alternativa la metoda finalize() si la eforturile aproximative ale metodei runFinalization() este
definirea unei metode de inchidere sau curatare.Cand aceasta este apelata de programator,va executa
instructiunile necesare.Clasele folosite pentru crearea obiectelor de tip GUI utilizeaza asemenea
metode pentru a se asigura ca imaginile si resursele alocate obiectelor GUI sunt eliberate si sterse de
pe ecran.
Fiecare clasa mosteneste superclasa Object.Conceptul de mostenire este explorat in mai multe detalii
in modulul 8.Mostenirea este un concept simplu cu posibilitati de implementare complexe.O clasa
poate deriva multe dintre metodele si atributele sale de la o alta clasa.Acest lucru ii permite
programatorului sa organizeze clasele astfel incat odata ce o clasa este definita,testata si functioneaza
corect,poate fi creata o clasa asemanatoare cu metode sau atribute suplimentare.Se considera ca cea
de-a doua clasa deriveaza sau mosteneste proprietatile primei clase.Toate clasele din limbajul Java
mostenesc superclasa Object.Clasa Object include cateva metode care fac parte automat din definitia
oricarei clase - printre ele,metoda finalize(). Codul acestei metode poate fi inlocuit cu un cod scris de
programator.Totusi,programatorii trebuie sa utilizeze semnatura exacta a metodei.Documentele din
API ofera informatii mai multe despre clasa Object.
Exemplul de cod pentru clasa FinalizerClass demosntreaza definirea si utilizarea metodei finalize() din
clasa Object.
5.9.8 Imutabilitate
159
Rezumat
Acest modul a introdus conceptele de baza pentru definirea si utilizarea claselor.Exista patru pasi in
procesul de definire al unei clase:
1.Declararea atributelor
2.Definirea constructorilor
3.Definirea metodelor standard
4.Definirea metodelor speciale
Odata ce clasa a fost definita,studentii trebuie sa-si aminteasca sa initializeze intotdeauna datele,sa
mentina datele private pentru a nu viola principiul incapsularii si sa foloseasca nume care reflecta
sarcinile clasei.Fiecare clasa si fiecare obiect vor avea un modificator de acces (sau pe cel implicit)si
160
161
6.1.2 Metode
164
6.2.1 Metode
165
Pentru a face o comparatie intre obiecte StringBuilder,convertiti-le in obiecte String si apoi utilizati
metoda String.equals(), asa cum este indicat in Figura .
Site-ul afisat mai jos explica de ce clasa StringBuilder este mai eficienta decat clasa String.
- Integer - Metodele pentru clasa Integer sunt descrise in tabelul din Figura .
- Double - Metodele pentru clasa Double sunt descrise in tabelul din Figura .
- Character - Metodele pentru clasa Character sunt descrise in tabelul din Figura .
- Boolean - Metodele pentru clasa Boolean sunt descrise in tabelul din Figura .
Anumite situatii necesita utilizarea valorilor double cu punctuatie utilizand virgula,cum ar fi datele
introduse printr-o GUI.Metodele parseDouble(String val)sau Double(String val).doubleValue() din
clasa wrapper Double nu pot manipula punctuatia cu virgula cum ar fi 1,234.50 si vor arunca o
exceptie de tipNumberFormatException.O exceptie este situatie de eroare care cauzeaza oprirea
programului din executie.
In plus fata de clasele wrapper,sunt furnizate clase care formateaza date.O alternativa este utilizarea
clasei DecimalFormat,parte a pachetului java.text,apeland metoda parse(String val)asa cum este aratat
in Figura .
Utilizati metoda trim() pentru a elimina orice spatii anterioare si succesive.Metoda parse() a clasei
DecimalFormat nu accepta spatii.Includeti mereu optiunea trim().
171
Figura
SimpleDateFormat este o clasa concreta pentru formatarea si parcurgerea datelor intr-o maniera
sensibila la locatie.Acasta permite formatarea unei date in text si parcurgerea textului pentru crearea
unei date.SimpleDateFormat permite alegerea oricarui tipar definit de utilizator pentru formatarea
datei si a timpului.
Micul exemplu din Figura primeste o data in formatul "yyyy-mm-dd"si o va reformata in formatul
"mm/dd/yyyy". In acest exemplu,data introdusa ar fi putut veni de la un camp de date dintr-un
GUI,furnizata de un utilizator.Acest exemplu utilizeaza clasa SimpleDateFormat.
Tiparele de editare ale clasei SimpleDateFormat sunt extrem de robuste si flexibile.Consultati API-ul
Java pentru mai multe informatii.O mentiune speciala trebuie facuta pentru sirurile de formatare
caracter "MM"fata de "MMM". Consultati tiparele de formatare "yyyy-MM-dd"si "MM/dd/yyyy".
Utilizand "MM", formatarea va produce/astepta o valoare numerica pentru luna cum ar fi 04 pentru
Aprilie.Utilizand "MMM", formatarea va produce/astepta reprezentarea standard text de trei caractere
pentur reprezentarea lunii,cum ar fi Apr pentru Aprilie.In ultimul rand,utilizarea unui tipar cu mai mult
de trei caractere de tip "MMM"va atrage producerea/asteptarea unui sir intreg pentru specificarea
lunii,cum ar fi Aprilie pentru Aprilie si Septembrie pentru Septembrie.
Testati acest comportament prin schimbarea tiparului de formatare in Figura :
SimpleDateFormat sdfOutput = new
SimpleDateFormat ( "MM/dd/yyyy" );
Schimbati "MM"in "MMM"sau "MMMM"pentru a obtine diferite formate de output.
Site-ul de mai jos furnizeaza informatii suplimentare pentru adaugarea sau scaderea de timp de la o
data.
175
.
176
Optiunea -cp poate de asemenea fi folosita pentru a declara o cale specifica (classpath)pentru
interpretor.In exemplul din Figura , clasa Console este in acelasi director ca si clasele Student si
Teacher,ca in cazul anterior.Pentru a utiliza programul Teacher,classpath-ul trebuie setat la directorul
curent.
-Permit definirea controlului mai strict al accesului.Utilizarea cuvantului cheie protected pentru acces
din interiorul unei clase sau metode asigura accesul exclusiv al subclaselor din ierarhia de mostenire la
respectiva metoda,atribut sau clasa.Cand nu sunt folositi modificatori de acces clasa,metoda sau
atributul este considerat cu acces implicit.Clasele din acealsi pachet pot prin urmare sa aceseze aceasta
clasa.
-Usureaza reutilizarea numelor comune.De exemplu,o clasa Printer poate exista in clasele API,in
pachetul Bank si in interiorul pachetului Theacher.Numele comun Printer este reutilizat pentru a defini
functionalitati specifice de imprimare disponibile in fiecare colectie sau pachet de clase.
-Colecteaza clasele pentru ca acestea sa poata fi partajate mai usor intre aplicatii.De exemplu,clasa
Date este asamblata (face parte din acelasi pachet)cu alte clase utilitare.Clasa Date serveste multor
programe ce opereaza cu date.Aceasta clasa poate fi impartita si utilizata de alte clase.Ea este utilizata
in clasele Student,Customer si Bank.Aplicatia Bank este independenta de aplicatia Teacher dar
aceastea pot partaja si utiliza pachetul utility.
Cum sunt alese nume unice pentru pachete?Acest lucru este relativ simplu daca toate clasele cu care se
va lucra vreodata sunt create de catre o singura persoana;din pacate,se intampla destul de rar.De cele
mai multe ori,programele vor fi accesate prin Internet.Aceste programe pot folosi nume de clase si
pachete care intra in conflict cu cele deja selectate.Daca programele sunt transferate catre o alta
masina,ar putea exista un conflict in numele directoarelor sau al pachetelor.Pentru a evita acest lucru
este cel mai bine sa utilizati un nume de domeniu unic.
Figura arata o modalitate de a crea pachete in structuri de directoare.In acest exemplu,identificatorul
pachetului este de forma:
edu.state.district.studentname.banking
Clasele care sunt asamblate (packaged)se gasesc in directorul Banking.Pentru a mentine unicitatea
acestui pachet fata de oricare alt pachet Banking,numele directoarelor parinte sunt incluse ca parte a
numelui pachetului.
177
Toate fisierele dintr-un pachet pot de asemenea fi combinate intr-un singur fisier folosind utilitarul
jar.Acest utilitar va prelua toate fisierele class din directoare si subdirectoare si le va asambla intr-un
singur fisier.Fisierul respectiv este cunoscut ca un fisier arhiva.Jar este acronimul pentru Java
Archive.Acest procedeu poate imbunatati foarte mult procesul de administrare si livrare al
claselor.Utilitarul jar a fost dezvoltat pentru Applet-uri.Applet-urile contin cod si elemente grafice
comprimate pentru descarcare mai rapida.Compilatorul si interpretorul Java poate accesa clasele
arhivate intr-un fisier jar in mod direct.
Tabelul din Figura
Acesti pasi subliniaza procesul de creare a unui fisier jar folosind optiunile utilitarului jar:
1.Setati directorul curent de lucru.Fisierele din directorul Banking vor forma pachetul Banking.
2.Utilizati comanda jar asa cum este indicat in Figura
3.Utilizati comanda jar pentru a afisa continutul fisierului jar asa cum este indicat in Figura
178
Rezumat
Acest modul se concentreaza asupra bibliotecii de clase Java.Modulul pune accent pe utilizarea APIului Java,a documentatiei si a claselor de baza (core)ale limbajului Java.Clasele String si StringBuffer
au fost comparate explorand modurile de utilizare si metodele lor.Studentii au invatat ca clasele de
impachetare implementeaza tehnologia obiect pentru fiecare tip primitiv de date,si au vazut modul in
care clasele generice sunt folosite pentru a mari functionalitatea de asignare a acestor
clase.Programarea necesita adesea utilizarea functiilor si formulelor matematice complexe.Acestea
sunt furnizate prin intermediul clasei Math,iar aplicatiile care necesita utilizarea preciziei arbitrare
pentru numere foarte mari pot folosi clasele BigDecimal si BigInteger din pachetul Math.Valorile
datelor pot fi create,manipulate si formatate folosind clasele Date,Calendar si DateFormat.
Studentii au explorat utilizarea asamblarii in Java API.Conceptele si principiile care formeaza tehnicile
de asamblare au fost explorate.Acest modul a acoperit optiunile din limbajul Java care ajuta utilizatorii
sa-si organizeze clasele.
Pachetul este entitatea care este folosita pentru a colecta sau grupa clase.Selectia claselor care fac parte
dintr-un pachet este bazata pe utilizarea lor comuna si nu neaparat pe relatia lor de mostenire.Clasele
care sunt in pachete pot fi arhivate si comprimate intr-un singur fisier utilizand utilitarul jar.
Instructiunea package trebuie sa fie prima instructiune intr-o definitie a unei clase.Fisierul sursa care
contine definitia clasei se numeste unitate de compilare.O unitate de compilare poate avea doar o clasa
declarata ca public
Compilatorul incarca clasele cautand mai intai in directorul implicit,care este directorul curent de
lucru,apoi cauta in directoarele identificate in varibila CLASSPATH si in cele din urma in directoarele
identificate de instructiuniile package.Clasele standard sunt incarcate in mod automat si nu sunt
afectate de setarile classpath.
Classpath-ul poate fi redefinit la momentul compilarii utilizand optiunea -classpath,sau la momentul
rularii folosind optiunea -cp.Cand se utilizeaza fisiere jar,classpath-ul trebuie sa pointeze spre locatia
exacta a fisierului jar.
180
181
Capitol 7: Vectori
Capitol 7: Vectori
Prezentare generala
Acest modul se concentreaza pe vectori.Vectorii sunt mecanisme logice,organizate pentru stocarea
obiectelor care sunt de acelasi tip.Limbajul Java ofera de asemenea suport pentru vectori
multidimensionali,un vector de vectori
Vectorii asigura flexibilitate sporita in programare.Datele din vectori pot fi accesate,procesate si
sortate repede si eficient folosind bucle.Utilizarea buclelor si a vectorilor reduce numarul de
instructiuni pe care un programator trebuie sa le codeze si numarul de instructiuni pe care compilatorul
trebuie sa le compileze.
Studentii vor invata cum sa creeze,initializeze si sa utilizeze vectorii in acest modul.
Cuvinte cheie
- Vectori de primitve
- Vectori de obiecte
- Initializare
- Marime fixa
- Subscripts
- Index
- Indexare cu baza 0
- Lungimea vectorului
- Bloc de initializare nonstatica
- Analiza paralela
- Sortare
- Bubble sort
- Vectori multidimensionali
- IndexOutOfBoundsException
- NegativeArraySizeException
- NullPointerException
7.1.1 Introducere in vectori
Java furnizeaza o serie de constructii diferite pentru a manipula mai mult de o instanta a unei clase,sau
mai multe valori ale aceluiasi tip de date primitiv.Atunci cand se lucreaza cu instante multiple ale unei
clase sau cu valori multiple pentru un tip de date primitv,variabile separate pot fi create,una pentru
fiecare valoare sa referinta la obiect.Cand se proceseaza fiecare dintre aceste variabile,chiar daca
aceleasi operatii trebuiesc efectuate,instructiuni separate trebuiesc utilizate.In cateva dintre
laboratoarele de pana acum,studentii au creat mai mult decat o singura instanta a clasei Employees si
182
Capitol 7: Vectori
Department.Cand metodele pentru fiecare obiect au trebuit sa fie apelate,studentii au codat instructiuni
separate pentru a accesa metodele fiecarui obiect.
Java permite programatorilor sa trateze grupuri de obiecte din aceasi clasa si grupuri de date de tipuri
similare ca si colectii,lucru ce permite utilizarea buclelor pentru a accesa fiecare membru al grupului si
pentru a opera pe obiectele sau valorile respective.Acest lucru este asigurat prin utilizarea obiectelor
collection.Vectorul este un obiect collection,care este disponibil ca parte a tipurilor de date de baza
(core)ale limbajului.Aditional,biblioteca API asigura clase speciale care sunt cunoscute precum clase
collection sau container.Aceste vor fi examinate in modulul 12, "Clase Utilitar". Acest modul se
concentreaza pe utilizarea obiectului array (vector)pentru a manipula colectia de primitive de variabile
referentiate.Un obiect array creeaza si stocheaza date intr-un set secvential de locatii de stocare.
De ce utilizeaza programatorii vectori?Considerati catalogul unui profesor.Un numar de obiecte este
necesar pentru a mentine informatii despre fiecare student din clasa.Programatorii trebuie sa creeze
variabile separate cu un nume unic pentru fiecare student.Pentru a afisa datele unui student,instructiuni
separate trebuiesc scrise pentru fiecare obiect Student.De fiecare data cand un nou student este inscris
in clasa,codul trebuie modificat.Acum considerati ca exista mai mult de 20 de studenti intr-o clasa si
codul trebuie scris pentru a manipula toate aceste obiecte Student.Acest cod va fi compus din multe
linii de cod care vor repeta acelasi set de instructiuni pentru fiecare obiect.
Codul pentru clasa Teacher este aratat in figura . Acest lucru demonstreaza ca pana si cu trei obiecte
Student,exista o crestere semnificativa in numarul de linii de cod care trebuiesc repetate.Aceste este
doar procesul crearii fiecarui obiect Student,setarii datelor,si printarii acestora.Considerati procesul
pentru actiuni mai complicate,cum ar fi calculul notelor si a mediilor sau stocarea datelor pentru multe
obiecte Student in memorie sau intr-un fisier.Acest numar mare de linii de cod introduce potential
pentru erorile de omisiune,unde programatorul uita sa seteze datele unuia sau altui obiect Student.
Programatorilor li se cere sa creeze programe care sunt eficiente si ruleaza rapid.De asemenea acestia
trebuie sa scrie cod rapid si eficient.Programatorilor li se cere deseori sa creeze solutii rapid.Folosind
Java,ei pot realiza acest lucru utlilizand tipuri de date existente (pre-built)cum ar fi tipul de date vector
(array)pentru a construi un obiect vector (array)pentru a stoca un numar mare de obiecte si folosind un
numar mic de linii de cod pentru a manipula aceste obiecte.
Un vector este cel mai eficient mod de a stoca si accesa aleator o secventa de obiecte.In Figura ,
referintele la obiectele Student sunt stocate intr-un vector.Un programator trebuie sa acceseze
referintele prin vector.Acesti vectori pot fi folositi in bucle pentru a efectua acelasi actiuni asupra
fiecarui obiect.
Lungimea unui vector este stabilita la creearea acestuia,in executie.Dupa creare,un vector este o
structura cu lungime fixa.Un element al unu vector este reprezentat de una din valorile din vector si
este accesata prin pozitia sa in interiorul vectorului,asa cum este indicat in Figura .
Capitol 7: Vectori
Variabilele sunt utilizate pentru a referentia date.O variabila referentiaza un singur tip de date primitiv
sau o singura referinta la un obiect.Un vector este un obiect care referentiaza multe valori primitive
sau obiecte ca o colectie.Vectorul insusi ete referentiat prin o singura variabila.Un vector permite
programatorilor sa manipuleze seturi de vairabile de acelasi tip cu un singur nume./font>
Fiecare primitiva sau obiect poate fi accesata printr-o variabila.In toate programele aratate pana acum
in acest curs,fiecare variabila a avut un nume unic.Un obiect de tip vector(array)stocheaza referintele
la valorile aceluiasi tip de date.Unii programatori Java considera acest set de obiecte ca partajand
acelasi nume,managerul grupului fiind obiectul vector (array).
Indiferent de tipul de vector (array)pe care programatorul il utilizeaza,variabila vector (array)este
referentiata de un obiect care este creat in heap.Accesul la date se va realiza prin acest obiect vector
(array). Obiectul vector (array)are un indentificator unic de variabila.Accesul la primitive si obiecte se
va face prin variabila vector (array). Obiectul vector (array)poate referentia unul sau mai multe
obiecte si primitive de acelasi tip de date ca o secventa de obiecte.De exemplu,un vector (array)de
intregi este o secventa de date de tipul primitiv int stocate una langa cealalta.Toate tipurile de date
primitive pot fi stocate intr-un vector.Referintele la obiecte pot fi de asemenea stocate intr-un vector
(array). O definitie simpla a unui vector este aratata in figura.
Un vector de caractere este o secventa de primitive char.Unele clase se specializeaza in stocarea
secventelor de primitive char.Clasele String si StringBuffer,de exemplu,stocheaza text ca un vector de
primitive char.
7.1.3 Indici
Obiectul vector este un obiect preconstruit(implicit). Acest lucru inseamna ca dezvoltatorii limbajului
au definit atribute pentru obiectul vector.Deoarece Java este un obiect puternic axat pe tastare,toate
obiectele referentiate de un obiect vector ar trebui sa fie de acelasi tip de date pentru a simplitate si
eficienta.Nu trebuie sa existe operatii suplimentare pentru a descoperi care este urmatoarea locatie de
stocare.Pentru a mentine aceasta operatie ca fiind una eficienta,obiectul vector trebuie sa cunoasca
exact numarul de obiecte sau primitive pe care le referentiaza.Numarul fix de obiecte sau primitive
determina marimea unui vector sau numarul de locatii de stocare pe care vectorul le va
referentia.Aceste informatii sunt stocate intr-o variabila finala int a obiectului vector,etichetata
lungime.Aceasta variabila ofera doar drepturi de citire sau este de tip final.Odata ce obiectul vector
este creat,lungimea sa este fixata si aceasta nu se mai poate modifica.
Desi obiectele vector creeaza referinte catre alte obiecte sau asigura stocare continua pentru
primitive,se pot accesa datele in orice ordine.De unde se cunoaste ce obiecte sau primitive trebuiesc
accesate?Se foloseste un index.Intr-un vector,fiecarei primitive sau referinte ii este astribuita o valoare
int in secventa in care a fost creata.Primul obiect adaugat vectorului ii este atribuita valoarea index
0.In Java,toate indexarile incep de la 0 in loc de 1.Valoarea index pentru un element este indicata in
Figura .
184
Capitol 7: Vectori
Atunci cand se creeaza un vector de primitive sau obiecte,datele sunt accesate prin indexul elementului
in vector.Primului element din vector ii este mereu atribuit indexul 0 si urmatorului indexul
1.Lungimea vectorului va determina numarul total de elemente create.Ultimul element din vector va
avea un index egal cu lungimea vectorului minus unu.Daca vectorul continte 15 elemente,ultimul
element are indexul 14,care este 15 minus 1.Este important sa observati ca indexul incepe de la
0.Acest lucru este indicat in Figura .
Indicele unui vector nu pot fi de tip long.Doar intregi pozitivi pot fi folositi ca indici.
Acest lucru limiteaza numarul de elemente dinr-un vector la 2,147,483,648 sau 231 cu indecsi de la 0
la 231 minus 1.
Capitol 7: Vectori
dicutat in modulele anterioare,un pachet este termenul din limbajul Java folosit pentru a descrie si
identifica accesul la o organizare de clase dintr-un director.
Urmatoarele sectiuni ale modulului vor adresa crearea si utilizarea obiectelor vector.
Capitol 7: Vectori
Instructiunile Java pentru crearea unui obiect vector care referentiaza alte obiecte sunt aceleasi ca si
cele folosite la crearea unui vector de primitive.Variabila vector si numarul de elemente trebuiesc
definite.Valoare implicita pentru tipul de date referentiat este null.Ca rezultat,fiecare din elementele
din vector contin valoarea null.Este important sa intelegeti ca niciun obiect referentiat de vector nu a
fost creat.
Declararea unui vector ca variabila de tip final insemana ca variabila vector va referentia mereu acelasi
vector.Nu inseamna ca elementele vectorului nu pot fi schimbate.
va
genera
exceptia
Este important sa observati diferenta intre "al n-lea element din vector"si "elementul n din vector".
Deoarece indicii incep de la 0 "al n-lea element al vectorului"are indicele n-1,in timp ce "elementul n
din vector"are indicele n,si este defapt elementul n+1 al vectorului.Intr-un vector de 10 elemente,al
saptelea element al unui vector are un indice de 6,si elementul 8 are un indice de 8.Aceasta confuzie
este deseori sursa erorilor "off-by-one".
Exemplul indicat in Figura demonstreaza utilizarea expresiilor pentru a accesa un element al unui
vector.Principala metoda creeza un obiect vector de int-uri si un obiect vector de double-uri.Fiecarui
element din vectorul de tip int ii este asignata valoarea implicita 0 si fiecarui element al vectorului de
tip double ii este asignata valoarea implicita 0.0.O variabila int indexElement este creata ca o variabila
locala in blocul de cod al buclei for.Aceasta bucla ruleaza de cateva ori si afiseaza valoarea
elementului vectorului referentiat de valoarea variabilei indexElement.
Capitol 7: Vectori
vectorului.Initializarea explicita a unui vector este permisa doar in timpul declararii unui vector.De
exemplu,urmatoarele nu sunt permise:
int[] xArray;
xArray = { 1,2,3,4,5};
Valorile pot fi de asemenea schimbate de la valoarea implicita la o alta valoare dupa ce obiectul vector
a fost creat.Codul din exemplul indicat in Figura foloseste trei bucle for pentru a stoca date.Prima
bucla for stocheaza date in fiecare element al obiectului vector de caractere.Acesta obtine input de la
utilizator folosind clasa deja exsistenta Console.Clasa Console a fost discutata in modulul 4.A doua
bucla for utilizeaza valoarea elementului index intr-o expresie pentru a calcula si stoca date in fiecare
element al vectorului de tip int.Aceasta tehnica este deseori utilizata pentru a stoca valori de
identificare intr-un vector.A treia bucla for utilizeaza rezultatul elementului cantitate inmultit cu
2.50.Aceasta tehnica este deseori utilizata pentru a crea valori paralele.O valoare cantitate corespunde
unei valori.Amandoua sunt stocate in acelasi elemente ale unor vector paraleli.Acest lucru inseamna ca
valoarea elementului 0 reprezinta o valoare cu insemnatate a cantitatii din elementul 0.Un exemplu al
acestei utilizari ar fi pretul si cantitatea unui produs dintr-un obiect care stocheaza o lista de preturi si
cantitati.
Bucla for creeaza o variabila i de tip int.Prima valoare a variabilei este 0.Valoarea este marita cand
++i este executat.Bucla este controlata comparand valoarea variabilei i cu valoarea variabilei length
pentru vector.
Cand se proceseaza vectori,utilizati mereu variabila length a unui vector pentru a asigura faptul ca nu
se incearca accesarea unui element peste marimea vectorului.Daca se referentiaza un element al unui
vector pentru care nu exista index,o eroare se va produce si programul se va termina.Acest tip de
eroare
nu
va
fi
sesizata
decat
in
momentul
rularii.Eroarea
se
numeste
IndexOutOfBoundsException.Capitolul 11 va discuta modul de administrare al acestui tip de eroare.
Orice tip de bucla poate fi folosita pentru a stoca date intr-un vector.Procesul stocarii valorilor intr-un
vector este de asemenea referit ca popularea vectorului.In acelasi cod exemplu din Figura , buclele
do si while sunt de asemenea folosite pentru a popula fiecare dintre elementele vectorului.Luati aminte
ca valoarea lui x este incrementata utilizand incrementare postfixa prin operatorul ++. Vlaoarea lui x
este folosita ca valoare index si este incrementata in pregatirea pentru urmatoarea repetitie a buclei.
188
Capitol 7: Vectori
Codul exemplu din Figura pentru clasele Teacher demonstreaza acest proces.Clasa Teacher creeaza
variabila studentsInTheClass pentru a stoca referinta catre obiectul vector.Lungimea vectorului este
trei.Acest obiect vector va stoca referinte pentru trei obiecte Student.
Un obiect Student este apoi creat,si o referinta catre acest obiect este stocata in primul element al
vectorului.Acest lucru este repetat pentru restul obiectelor Student.Referinta catre aceste obiecte este
stocata in al doilea si al treilea element al vectorului.Pentru a accesa date despre un student
specific,metodele din clasa Student sunt accesatae utilizand elementul vectorului studentsInTheClass
care stocheaza referinta catre obiectul specific Student.Acest lucru este indicat in Figura .
189
Capitol 7: Vectori
Clasa JavaStudent poate fi definita ca in exemplu.Exista trei vectori statici declarati in aceasta
definitie.Vectorul testDate stocheaza date asupra datei fiecarei test.Vectorul testName referentiaza
obiecte String care stocheaza date ce reprezinta un titlu pentru fiecare test,si vectorul maxPoints
stocheaza maximum de puncte ce pot fi obtinute pentru fiecare test.
Un bloc non-static de initializare poate fi utilizat pentru a initializa date nonstatice si pentru a modifica
date statice.In cazul clasei JavaStudent,elementele vectorului testScore si vectorul de procentaje nu
trebuiesc initializate.Date primtive stocate in heap sunt automat initializate cu valori implicite.Vectorul
de String-uri testComments poate sau poate nu fi initializat.Codul exemplu din Figura ilustreaza
modul de utilizare al unui bloc de initializare nonstatica pentru initializarea vectorului
testComments.In acest exemplu,variabila statica numOfTests este utilizata pentru a seta lungimea
vectorului.Variabilele statice sunt create inainte de crearea unui obiect,numOftests este disponibil
pentru utilizare in acest bloc de cod.
Urmatoarea sectiune a modulului va demonstra modul de utilizare al clasei JavaStudent si impactul
blocurilor de initializare asupra obiectelor JavaStudent.
Capitol 7: Vectori
numele clasei cum ar fi System.arraycopy();. Codul exemplu din Figura 6 ilustreaza utilizarea metodei
arraycopy.
O utilizare pentru meotda System.arraycopy este adaugarea si stergerea elementelor din mijlocul unui
vector,asa cum este aratat in Figura .
Capitol 7: Vectori
Iata doua exemple:
In exemplele utilizate pana acum in acest modul,elementele vectorului au fost manipulate in secventa
in care au fost create.De exemplu,obiectul Student a fost afisat incepand cu primul student.Pentru a
afisa studentii in ordine alfabetica sau in ordinea scorurilor sau a procentajelor,vectorul trebuie mai
intai sa fie sortat in ordine ascendenta sau descendenta.
Exemplele de cod din Figurile si ilustreaza o tehnica de programare comun folosita numita
sortare prin interschimbare (bubble sort). Aceasta tehnica particulara se bazeaza pe posibilitatea
compararii unor perechi de valori,presupunand ca exista o ordine in care elementele pot fi
organizate.In aceasta tehnica,doua valori sunt comaparate.Daca valorile nu sunt in ordine,atunci ele
sunt interschimbate.Cele trei variabile x,y si z,care contin valori intregi,sunt afisate in ordine
ascendenta si apoi descendenta.O variabila temporara este necesara pentru a interschimba valorile din
x,y si z.
Sortarea a doua sau trei valori este destul de simpla.Sortarea unui numar mare de valori fara utilizarea
vectorilor poate fi o sarcina dificila.Tehnica simpla de interschimbare ar putea fi folosita de cateva ori
pentru a procesa un vector pana cand valorile sunt in ordinea necesara.Tehnica pentru efectuarea
acestei operatii se numeste sortare prin interschimbare (bubble sort). In aceasta tehnica,vectorul este
procesat pana cand cel mai mare sau cel mai mic numar este atribuit primului element.Fiecare
procesare a vectorului include comparatii ale perechilor de valori si interschimbarea lor daca este
necesar.
Codul exemplu din Figura demonstreaza o sortare prin interschimbare (bubble sort)folosind un
vector simplu de intergi.Vectorul referentiaza zece numere.Vectorul este procesat prin compararea a
doua numere unul cu celalat.Se porneste de la primele doua elemente ale vectorului,si apoi al doilea si
192
Capitol 7: Vectori
al treilea element,si asa mai departe.Valorile sunt interschimbate atunci cand este necesar.Vectorul
este procesat pana cand nu mai exista interchimbari de facut.Acest exemplu sorteaza vectorul in ordine
ascendenta,de la cel mai mic la cel mai mare.
Sortarea obiectelor nu este cu mult mai diferita de sortarea primitivelor.Obiectele sun in general
sortate in functe de valoarea unor date din obiect.De exemplu,daca un profesor vrea sa sorteze
studentii dintr-o clasa in functie de ID,vectorul JavaStudent ar fi procesat comparand ID-urile pentru
fiecare student.Singura diferenta ar fi ca variabila temp va fi de tipul JavaStudent si comparatia pentru
interschimbare utilizeaza metoda getId() pentru a compara ID-urile pentru fiecare student.
Capitol 7: Vectori
aratat in Figura . De exemplu,o referinta [2][3]ar identifica al patrulea rezultat pentru a treilea
student,sau Polly Pockets,Test4,scor 83.
Crearea si initializarea vectorilor multidimensionali nencesita crearea fiecarei dimensiuni exterioare
inainte de initializarea valorilor pentru urmatoarea dimensiune interioara.Codul exemplu din Figura
ilustreaza acest proces de initializare.Unele obiecte JavaStudent ar putea apoi fi create si relationate cu
vectorul multidimensional de scor.
Vectorii multidimensionali pot avea vectori de diferite lungimi in fiecare dimensiune.Exemplul din
Figura arata ca prima dimensiune a vectorului poate avea lungimea de trei si ca fiecare dintre
dimensiunile ulterioare ale vectorilor pot avea diferite dimensiuni.Cand se proceseaza vectori de
lungimi diferite,utilizati lungimea vectorului pentru a-l procesa.Codul exemplu ilustreaza un alt mod
de a initializa vectori de dimensiuni inegale.
Deoarece fiecare element din cel mai exterior vector al unui vector multidimensional este o referinta la
un obiect,nu este necesar ca vectorii bidimensionali sa fie rectangulari,sau cei tridimensionali sa fie
cubici.Fiecare vector interior poate avea marimea proprie.
Rezumat
Acest modul a explicat conceptul de vectori.Vectorii sunt obiecte speciale Java,deja existente,care
furnizeaza un mod de administrare a unui grup de obiecte de acelasi tip.Vectorii pot fi unidimensionali
si pot stoca doar un tip de date sau pot fi multidimensionali si pot stoca mai multe tipuri de informatii
pentru fiecare obiect.
Este important ca studentii sa inteleaga cum este numerotat fiecare element si cum sa
acceseze,proceseze si sa sorteze elementele unui vector.Primul element al unui vector este indexat la
valoarea 0 si ultimul element este indexat la valoarea lungimea vectorului minus unu.Elementele
vectorului sunt deseori accesate sau procesate utilizand constructii de bucla.Bucle care proceseaza
194
Capitol 7: Vectori
vectori trebuie sa asigure ca blocul de cod nu incearca sa acceseze un valoare index mai mare decat
lungime vectorului sau mai mica decat 0.
Daca un vector este accesat dupa ultimul element sau cu un index negativ,JVM va opri programul si
va
produce
un
mesaj
de
eroare
IndexOutOfBoundsExeception
sau
NegativeArraySizeException.Vectorii pot fi sortati utilizand o metodologie de interschimbare sau
bubble sort.
195