Sunteți pe pagina 1din 7

Tehnici de Programare Lucrarea Nr 10

1. Ce este Java?
Java este un limbaj de programare orientat-obiect dezvoltat de JavaSoft o companie
din cadrul concernului Sun !icrosistems" Proiectul inceput sub numele de #$reen% in
primavara anului 1&&1 avind ca scop dezvoltarea unui suport pentru comertul electronic
avea sa duca la aparitia Java care promite se fie cel mai robust usor de utilizat si versatil
limbaj de programare disponibil astazi" 'parut ca versiune 'lpha in 1&&( Java include
cele mai importante caracteristici ale limbajelor de programare anterioare cum ar fi ) si
)** permitind creearea de aplicatii puternice precum si particularitati cum ar fi suportul
multimedia inclus lasind totusi deoparte caracteristicile suparatoare din )+)** cum ar fi
mostenirea multipla supraincarcarea operatorilor si pointerii"
Probabil cel mai important beneficiu adus de Java este totusi portabilitatea" Nu mai
este necesara dezvoltarea de aplicatii separate pentru platforme diferite o aplicatie
creeata fiind folosibila pentru platforme multiple cum ar fi ,indo-s .ni/ si
!achintosh prin intermediul conceptului de #masina virtuala%"
2. Tranzitia de la C/C++ la Java
0esi Java este modelat dupa )+)** e/ista totusi citeva diferente majore fata de
acesta1
Prin compilarea programelor Java nu se obtine cod obiect
)ind sursele )+)** sint compilate se obtine cod obiect adica un format obiect
specific platformei pentru care au fost compilate" Pe de alta parte sursele Java prin
compilare duc la un format numit b2tecode care nu este nici cod obiect si nici sursa"
.n beneficiu al acestui format este acela ca nu este dependent de nici o platforma
ceea ce duce la portabilitatea sa" 3l este e/ecutat prin intermediul uni interpretor care
transleaza b2tecode-ul in cod masina" .n alt beneficiu este acela ca este eliminat
pasul de lin4-editare" 5nterpretorul este cel care apeleaza bibliotecile la cerere"
In Java nu exista apeluri externe
5n )** se pot folosi proceduri si apeluri ale functiilor de sistem prin intermediul
apelurilor e/terne in sinta/a ) declarind o functie ) in afara spatiului de nume )**"
5n Java nu e/ista o astfel de sinta/a ca rezultat imediat fiind faptul ca nu este posibila
folosirea directa a codului-sursa )+)**"
Totusi Java incorporeaza o gama larga de functionalitati in interfata Java 'P5
pentru grafica multimedia lucru in retea interogarea sistemului 5+6 cu fisiere si
multe altele"
3ste de asemenea posibila folosirea surselor din )+)** insa intr-o maniera
complicata si nu face obiectul laboratorul de fata" Totusi ar trebui reamintit ca aceasta
folosire duca la limitarea drastica a portabilitatii"
In Java nu exista mostenire multipla
0eseori in programarea orientata-obiect de nivel avansat este necesara creearii
unui obiect care sa mosteneasca caracteristicile a mai mult de un alt obiect caz in
care apare mostenirea multipla" )u cit aplicatia este mai comple/a cu atit creste
necesitatea folosirii acestui tip de mostenire"
Java inlocuieste mostenirea multipla cu un nou concept numit interfata despre
care se va vorbi mai pe larg in laboratoarele urmatoare"
Java nu are probleme legate de spatiile de nume
5n )** clasele chiar daca fac parte din module separate ale proiectului trebuie
totusi sa respecte principiul unicitatii numelor" 'sta inseamna ca nici o clasa din
cadrul unui proiect nu trebuie sa aiba un nume care coincide cu o alta din cadrul
acelui proiect" Java evita acest lucru prin creearea unui spatii de nume ierarhizat pe
mai multe nivele de precedenta incepind cu nivelul cel mai inalt corespunzator
spatiului de nume al pachetului si terminind cu cel mai scazut adica cel al spatiului
de nume al blocului local" 'stfel fiecare nivel in spatiile de nume este folosit pentru a
construi un nume identic pentru fiecare obiect permitind ca doua clase cu acelasi
nume sa e/iste in pachete diferite"
In Java nu exista pointeri
Sint probabil cunoscute deja problemele puse de manipularea memoriei prin
intermediul pointerilor" 5n Java e/ista totusi pointeri insa nu in sensul cunoscut pina
acum" 7iecare instanta a unui obiect este referit prin intermediul unui pointer insa la
atit se reduce functionalitatea lor"
In Java nu exista isiere !eader separate
7isierele header sint o parte importanta a programarii )**" 6 mare majoritate din
programatori folosesc fisierele header ca fiind documentatie 8chiar daca impropie9
deoarece fisierele header pot specifica dintr-o privire ce face si cum trebuie folosita
o anume clasa"
5n java nu e/ista delimitarea intre declarare si definire corpul functiiei fiind corp
component al #declaratiei% clasei nemaifiind o zona a sursei care sa asigure o
#documentare implicita%" Pentru a compensa aceasta deficienta Java 0eveloper:s ;it
contine doua instrumente pentru a usura munca1 javap si javadoc"
0esasamblorul javap poate fi folosit pentru tiparirea semnaturilor claselor in timp
ce javadoc este un generator de documentatie in format "html generata din
comentariile continute in cadrul codului-sursa"
In Java nu exista unctii independente
Java este in primul rind un limbaj de programare orientat pe obiecte si de aceea s-
a considerat necesar sa se renunte la functiile #stand-alone%" 'stfel toate aplicatiile
sunt obiecte si toate clasele Java sunt derivate dintr-un clasa primara numita Object.
"nele programe Java nu au unctie main#$
.nele programe Java numite applet-uri nu au nevoie de o functie main 8probabil v-
ati intilnit deja cu aceasta notiune legata de World-Wide-Web9" Totusi fiecare clasa
Java poate avea o metoda main() si toate aplicatiile Java au un echivalent al functiei
main() prin intermediul careia parametrii se transmit aplicatiei"
In Java nu exista sabloane
5n )** e/ista posibilitatea scrierii unor metode generice numite sabloane (templates)
care permit scrierea unui bloc de cod pentru implementarea mai multor tipuri
asemanatoare de argumente" 0e asemenea acestea mai pot fi folosite si pentru generarea
automata a claselor ceea ce este un alt avantaj important"
Java detine mecanisme de tratare a exceptiilor
)onditiile de eroare a caror aparitie este improbabila in conditii de utilizare
normala se numesc exceptii" 0e e/emplu o functie care calculeaza radacina patrata a
unui numar ar trebui sa primeasca ca argumente doar numere pozitive totusi este
posibila transmiterea si a unui numar negativ" 'cest gen de erori pot duce de la o
functionare deficitara pina la blocarea programului sau chiar la accesul in zone de
memorii protejate ale sistemului ceea ce duce fie la blocarea sa fie la creearea unor
brese de securitate"
0esi majoritatea versiunilor de )** actuale include un mecanism de tratare a
a/ceptiilor acestea nu au reusit sa se impuna in masura suficient de mare" Pe de alta
parte Java obliga folosirea mecanismelor de tratare a eceptiilor atunci cind se
incearca apelarea unei metode ce este o generatoare virtuala de e/ceptii"
Java are un mecanism de colectare a gunoiului automat
0esi destructorii ofera o posibilitate buna de management a memoriei acest
mecanism nu este lipsit de posibilitatea aparitiei erorilor" Stergerea unei zone de
memorie care se doreste inca a se folosi duce la blocarea programului" 0e asemenea
lasarea zonelor de memorie nefolosite inca active duce la epuizarea spatiului de
memorie disponibil"
Java are un mecanism propriu de recuperare a zonelor de memorie ce nu mai sint
folosite 8garbage9" )u ajutorul acestui mecanism se pastreaza evidenta zonelor de
memorie care sint folosite si a celor care nu mai sint folosite realizindu-se
alocarea+dealocarea memoriei in mod automat"
%. Prezentarea mediului integrat #I&'$ olosit in
cadrul laboratorului
5n cadrul laboratorului se va folosi mediul de dezlovtare J <uilder ="0 al firmei
<orland"
Prima aplicatie Java
)a de obicei prima aplicatie va fi una care va afisa mesajul #>ello -orld%"
Pentru aceasta vom crea un nou fisier numit !2'pp"java"
Programul va fi1
public class !2'pp
?
public static void main8String args@A9
?
S2stem"out"println8#>ello -orld%9B
C
C
(tentie) In Java este obligatoriu ca numele clasei sa coincida cu cel
al isierului si extensia trebuie sa ie .*ava )))
7unctia main() este la fel ca in )** punctul de intrare in program" Numai ca aici
functia main() trebuie sa fie membrul clasei care are acelasi nume ca al fisierului in caz
contrar ea nu va fi e/ecutata"
6biectul System refera sistemul in care este e/ecutat programul .out este iesirea
standard iar printnl afiseaza sirul dat ca parametru" 5n ) echivalentul acestui apel este
printf iar in )** apelul cout <<"
Probabil ati observat ca mediul de dezvoltare inchide fereastra imadiat dupa
e/ecutie" Sa incercam sa introducem o functie care sa astepte un caracter" 'cesta este
urmatorul1
System.in.read() care returneaza un int 8de fapt urmatorul b2te din stream9"
'ceasta metoda insa poate genera e/eceptii si ele trebuiesc preluate" 6 e/ceptie
este un obiect 8o clasa9 in care sint stocate informatii cu privire la ceea ce a generat acea
e/ceptie" !ecanismul este format din doua parti una care #arunca% e/ceptia 8 thro 9 si
una care o #prinde% 8 catch 9"
metoda1
?
++ operatii
++ D
if8 eroare 9
?
3/ception eEne- 3/ception8#3roare%9B
thro-8 e 9B
C
C
tr2
?
++apelarea metodei
metoda89B
C
catch 83/ceptionT2pe1 e9
?
++ zona de tratare a e/ceptiei de tipul T2pe1
C
catch 83/ceptionT2pe= e9
?
++ zona de tratare a e/ceptiei de tipul T2pe=
C
finall2
?
++ zona de tratare a altor e/ceptii
C
5n blocul try se apeleaza metoda respective si se initializeaza mecanismul de
prindere a e/ceptiei" 0aca in metoda() apare o eroare se #arunca% e/ceptia urmind ca
aceasta sa fie #prinsa% de catch-urile de la sfirsitul blocului try" 3/ceptionT2pe1 si
3/ceptionT2pe= sunt clase derivate din 3/ception restringind tipul de e/ceptie aparuta
si in consecinta tratarea ei"
5n concluzie noul program va arata astfel1
public class !2'pp
?
public static void main8String args@A9
?
S2stem"out"println8#>ello -orld%9B
tr2
?
S2stem"in"read89B
C
catch8 3/presion e9?C
C
C
Tema:
1. Sa se scrie un program Java care sa insumeze primele 100 numere intregi si sa
afiseze rezultatul"
/*rezolvare propusa*/
public class Class1
{
public static void main( String args[] )
{
System.out.println(!ello" #orld)$
int sum%&$
'or(int i%&$i(1&&$i)))
sum )% i$
System.out.println(sum)$
try
{
System.in.read()$
*
catc+(,-ception e){*
*
*
.. Sa se scrie un program care calculeaza (0 factorial si afiseaza rezultatul"
/*rezolvare propusa*/
public class Class.
{
public static void main( String args[] )
{
System.out.println(!ello" #orld)$
long prod%1$
'or(int i%1$i(/&$i)))
prod *% i$
System.out.println(prod)$
try
{
System.in.read()$
*
catc+(,-ception e){*
*
*
0. Sa se scrie un program Java care sa calculeze madia aritmetica a ( intregi dati
intr-un tablou"
/*rezolvare propusa*/
public class Class0
{
public static void main( String args[] )
{
System.out.println(!ello" #orld)$
int tab[]%{1&".&"0&"1&"/&*$
int sum%&$
'or(int i%&$i(/$i)))
sum )% tab[i]$
System.out.println(('loat)sum//)$
try
{
System.in.read()$
*
catc+(,-ception e){*
*
*

S-ar putea să vă placă și