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 Microsistems. Proiectul inceput sub numele de Green in
primavara anului 1991 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. Aparut ca versiune Alpha in 1995, Java include
cele mai importante caracteristici ale limbajelor de programare anterioare, cum ar fi C si
C++, permitind creearea de aplicatii puternice, precum si particularitati cum ar fi suportul
multimedia inclus, lasind totusi deoparte caracteristicile suparatoare din C/C++ 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 Windows, Unix si
Machintosh, prin intermediul conceptului de masina virtuala.

2. Tranzitia de la C/C++ la Java


Desi Java este modelat dupa C/C++, exista totusi citeva diferente majore fata de
acesta:

Prin compilarea programelor Java nu se obtine cod obiect

Cind sursele C/C++ 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 bytecode care nu este nici cod obiect si nici sursa.
Un beneficiu al acestui format este acela ca nu este dependent de nici o platforma,
ceea ce duce la portabilitatea sa. El este executat prin intermediul uni interpretor care
transleaza bytecode-ul in cod masina. Un alt beneficiu este acela ca este eliminat
pasul de link-editare. Interpretorul este cel care apeleaza bibliotecile la cerere.

In Java nu exista apeluri externe

In C++ se pot folosi proceduri si apeluri ale functiilor de sistem prin intermediul
apelurilor externe in sintaxa C, declarind o functie C in afara spatiului de nume C++.
In Java nu exista o astfel de sintaxa, ca rezultat imediat fiind faptul ca nu este posibila
folosirea directa a codului-sursa C/C++.
Totusi, Java incorporeaza o gama larga de functionalitati in interfata Java API,
pentru grafica, multimedia, lucru in retea, interogarea sistemului, I/O cu fisiere, si
multe altele.
Este de asemenea posibila folosirea surselor din C/C++, 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

Deseori 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. Cu cit aplicatia este mai complexa, 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

In C++ clasele, chiar daca fac parte din module separate ale proiectului, trebuie
totusi sa respecte principiul unicitatii numelor. Asta 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. Astfel, 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 existe in pachete diferite.

In Java nu exista pointeri

Sint probabil cunoscute deja problemele puse de manipularea memoriei prin


intermediul pointerilor. In Java exista totusi pointeri, insa nu in sensul cunoscut pina
acum. Fiecare instanta a unui obiect este referit prin intermediul unui pointer, insa la
atit se reduce functionalitatea lor.

In Java nu exista fisiere header separate

Fisierele header sint o parte importanta a programarii C++. O mare majoritate din
programatori folosesc fisierele header ca fiind documentatie (chiar daca impropie)
deoarece fisierele header pot specifica, dintr-o privire, ce face si cum trebuie folosita
o anume clasa.
In java nu exista 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 Developers Kit
contine doua instrumente pentru a usura munca: javap si javadoc.
Desasamblorul 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 functii 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. Astfel, toate aplicatiile
sunt obiecte si toate clasele Java sunt derivate dintr-un clasa primara, numita Object.

Unele programe Java nu au functie main()

Unele programe Java, numite applet-uri nu au nevoie de o functie main (probabil v-


ati intilnit deja cu aceasta notiune legata de World-Wide-Web). 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

In C++ exista posibilitatea scrierii unor metode generice numite sabloane (templates),
care permit scrierea unui bloc de cod pentru implementarea mai multor tipuri
asemanatoare de argumente. De 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

Conditiile de eroare a caror aparitie este improbabila in conditii de utilizare


normala, se numesc exceptii. De exemplu, 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. Acest 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.
Desi majoritatea versiunilor de C++ actuale include un mecanism de tratare a
axceptiilor, 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 exceptii.

Java are un mecanism de colectare a gunoiului automat

Desi 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. De 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 (garbage). Cu 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.
3. Prezentarea mediului integrat (IDE) folosit in
cadrul laboratorului

In cadrul laboratorului se va folosi mediul de dezlovtare J Builder 2.0 al firmei


Borland.

Prima aplicatie Java

Ca de obicei, prima aplicatie va fi una care va afisa mesajul Hello, world.


Pentru aceasta, vom crea un nou fisier, numit MyApp.java.

Programul va fi:

public class MyApp


{
public static void main(String args[])
{
System.out.println(Hello, world);
}
}

Atentie! In Java este obligatoriu ca numele clasei sa coincida cu cel


al fisierului si extensia trebuie sa fie .java !!!

Functia main() este, la fel ca in C++ 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 executata.

Obiectul System refera sistemul in care este executat programul, .out este iesirea
standard, iar printnl afiseaza sirul dat ca parametru. In C, echivalentul acestui apel este
printf, iar in C++ apelul cout <<.

Probabil ati observat ca mediul de dezvoltare inchide fereastra imadiat dupa


executie. Sa incercam sa introducem o functie care sa astepte un caracter. Acesta este
urmatorul:

System.in.read() care returneaza un int (de fapt urmatorul byte din stream).

Aceasta metoda insa poate genera execeptii, si ele trebuiesc preluate. O exceptie
este un obiect (o clasa) in care sint stocate informatii cu privire la ceea ce a generat acea
exceptie. Mecanismul este format din doua parti, una care arunca exceptia ( throw ) si
una care o prinde ( catch ).
metoda:
{
// operatii
//
if( eroare )
{
Exception e=new Exception(Eroare);
throw( e );
}
}

try
{
//apelarea metodei
metoda();
}
catch (ExceptionType1 e)
{
// zona de tratare a exceptiei de tipul Type1
}
catch (ExceptionType2 e)
{
// zona de tratare a exceptiei de tipul Type2
}
finally
{
// zona de tratare a altor exceptii
}

In blocul try se apeleaza metoda respective, si se initializeaza mecanismul de


prindere a exceptiei. Daca in metoda() apare o eroare, se arunca exceptia, urmind ca
aceasta sa fie prinsa de catch-urile de la sfirsitul blocului try. ExceptionType1 si
ExceptionType2 sunt clase derivate din Exception, restringind tipul de exceptie aparuta,
si in consecinta, tratarea ei.

In concluzie, noul program va arata astfel:

public class MyApp


{
public static void main(String args[])
{
System.out.println(Hello, world);
try
{
System.in.read();
}
catch( Expresion e){}
}
}

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("Hello, world");

int sum=0;
for(int i=0;i<100;i++)
sum += i;

System.out.println(sum);

try
{
System.in.read();
}
catch(Exception e){}
}
}
2. Sa se scrie un program care calculeaza 50 factorial si afiseaza rezultatul.

/*rezolvare propusa*/
public class Class2
{
public static void main( String args[] )
{
System.out.println("Hello, world");

long prod=1;
for(int i=1;i<50;i++)
prod *= i;

System.out.println(prod);

try
{
System.in.read();
}
catch(Exception e){}
}
}

3. Sa se scrie un program Java care sa calculeze madia aritmetica a 5 intregi, dati


intr-un tablou.

/*rezolvare propusa*/

public class Class3


{
public static void main( String args[] )
{
System.out.println("Hello, world");

int tab[]={10,20,30,40,50};

int sum=0;
for(int i=0;i<5;i++)
sum += tab[i];

System.out.println((float)sum/5);

try
{
System.in.read();
}
catch(Exception e){}
}
}

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