Documente Academic
Documente Profesional
Documente Cultură
Lab 10
Lab 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.
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 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 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.
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
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.
Programul va fi:
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 <<.
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
}
Tema:
/*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){}
}
}
/*rezolvare propusa*/
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){}
}
}