Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Descrierea limbajului Java prin comparatie cu limbajul C/C++

java


Descrierea limbajului Java prin comparatie cu limbajul C/C++

Limbajul C si limbajul Java sunt foarte asemanatoare.



Cuvintele cheie si operatorii sunt mosteniti de Java din C, în mod particular tipurile de date, fluxurile de control, toti operatorii constituie corpul tuturor aplicatiilor.

Restul aplicatiei Java este reprezentat de constructii orientate obiect si se refera mai mult la cadrul de lucru si proiectare al aplicatiei si mai putin la implementare.

O aplicatie Java este formata doar din clase, o singura clasa implementând metoda main. Spre deosebire de C++, limbajul Java este în întregime orientat pe obiecte (OOP - Object Oriented Programming). Java este robust, marind gradul de siguranta al codului, existând doua nivele de verificare: unul la compilare si unul la rulare.

Accesul la tablourile Java este verificat la rulare, eliminând astfel accesul accidental sau 646j91g malitios în afara domeniului tabloului.

Pentru a crea si a lansa în executie o aplicatie sunt necesare mai multe operatii.

În continuare sunt prezentate etapele necesare dezvoltarii si lansarii în executie a unei aplicatii stand- alone. Acestea sunt:

-scrierea codului

-compilarea

-interpretarea si lansarea în executie

Aceste etape sunt reprezentate sugestiv in diagrama din Figura 1.1.

Editarea unui program Java se face utilizând orice editor simplu de text, care salveaza datele în format text. Este important ca fisierul în care se salveaza programul sa aiba numele clasei respective (doar în cazul în care clasa este declarata publica). Iar în cazul dezvoltarii aplicatiilor stand-alone este obligatoriu ca în clasa sa fie metoda main() de forma:

public static void main(String args[] )

Aceasta metoda trebuie sa existe în orice aplicatie Java, fiind prima metoda apelata de interpretor când se lanseaza în executie un program Java.

Exemplu de program:

class AplicatieJava

Acest program va fi salvat cu numele AplicatieJava.java însa nu obligatoriu pentru ca, clasa nu este publica.

În continuare se va realiza compilarea programului prin comanda:

javac AplicatieJava.java

Daca compilarea se face cu succes va rezulta un fisier cu extensia class: AplicatieJava.class, fisier care contine programul executabil (bytecod) Java.

Dupa ce am obtinut fisierul cu extensia class se lanseaza în executie folosind interpretorul Java cu comanda:

java AplicatieJava

În urma acestei comenzi se va afisa la consola:

"Aplicatie demonstrativa !"

Vom face în continuare o scurta trecere în revista a principalelor componente comune între limbajul C si Java.

Cuvintele cheie si operatorii dau simtul si expresivitatea unui limbaj de programare ele fiind luate de Java din C. Java retine elementele coincise lipsite de posibile erori si compacte ce duc la dezvoltarea aplicatiilor eficiente.

Cuvintele cheie comune celor doua limbaje constituie nucleul aplicatiei. Aceste cuvinte cheie împreuna cu operatorii determina majoritatea constructiilor folosite în realizarea functiilor dorite.

Cadrul de realizare a aplicatiei poate fi obiectual dar implementarea este foarte aproape de cea din C.

Limbajul Java foloseste si cuvinte cheie specifice C++ având si propriile cuvinte cheie (package, import, extends, instanceOf, super, etc.)

Operatorii sunt clasificati în acelas mod ca si cei din limbajul C dar sunt mai clar definiti. Daca în limbajul C se permite a converti o valoare numerica în una booleana expresia (x=10) fiind convertita în valoarea booleana true, în limbajul Java acest lucru nu este posibil. In limbajul Java se determina un cost pornind de la un tabel de costuri cu 16 intrari care permite conversia între tipuri de date. Costul 0 (zero) este pentru conversia unui tip în el însusi. Daca costul este mai mare de 10 atunci precizia se pierde semnalizându-se un avertisment.

Compararea a doua obiecte din punct de vedere al continutului lor se face cu metoda equals(), operatorul de comparatie, == comparând doar adresele obiectelor respective. In plus Java introduce operatorul >>> ca si operator de deplasare dreapta fara extensia semnului.

Nu se folosesc operatorii sizeof pentru determinarea dimensiunii, indirectare *, adresare &, acces -> iar operatorul virgula , ca si evaluare secventiala se mai poate folosi doar în structuri de control de tip for.

Exista patru modalitati de a considera variabilele în Java:

-declarare;

boolean ok;

float aria;

-asignare, ce permite asignarea unei valori la o variabila declarata în prealabil:

aria=10.5;

-initializari, ce sunt asignari combinate cu declaratii;

boolean ok=true;

-cast-uri, daca dorim sa plasam o valoare de un tip intr-o variabila de alt tip lucru ce e permis doar pentru tipuri compatibile:

int iaria = (int) aria;

Se observa ca si în acest caz Java este mai robust.

Identificatorii respecta aceleasi reguli ca si în limbajul C lungimea lor fiind ori cât de mare recomandându-se ca:

-numele clasei, a variabilelor din metode si a parametrilor sa înceapa cu litera mica

-numele metodelor sa înceapa cu _

-constantele sa se scrie cu litere mari.

Constantele se declara în afara corpului functiilor din cadrul claselor în general fiind prefixate de cuvintele cheie public static si final însemnând ca asignarea e finala publica si nu poate fi modificata. Fiind statice accesul la aceste constante se va face prefixându-le cu numele clasei si operatorul punct.

Constanta de tip caracter se mai poate reprezenta si ca o notatie de tip Unicode de forma: '\uxxxx'. Exista unele modificari de asemenea la secventele escape.

O expresie este ori ce combinatie de operatori si operanzi care trebuie sa fie evaluata pentru a produce o valoare. Java a adoptat puterea si facilitatile expresiilor din C/C++ cu unele diferente tinând cont de faptul ca Java este independent de platforma si international. De aceea tipurile de date primitive sunt erxtrem de clar si precis definite fata de limbajul C ele fiind:

-byte, reprezinta 1 octet ca o valoare cu semn

-boolean, este pe bit având doua valori, true si false neputând fi convertit în alt tip de data si nu poate fi obtinut din alt tip de data

-char se reprezinta pe 2 octeti în Unicode respectând regulile de conversie la întregi din C

-short, int, long sunt întregi cu semn pe 16, 32 si 64 biti împartirea cu zero activând exceptia ArithmeticException

-double, float sunt reali pe 64 respectiv 32 de biti. Exista constante predefinite:

-POSITIVE_INFINITY

-NEGATIVE_INFINITY ce apar la cazurile de depasire când nu se declanseaza exceptii.

Java a adoptat standardul IEEE 754 prin care toate tipurile de date au o lungime fixa evitând ambiguitati si independenta fata de platforma.

Limbajul Java ofera de asemenea pentru fiecare tip elementar câte o clasa ale caror instante reprezinta obiecte similare valorilor cu tipuri elementare. (Short, Integer, Float, Boolean, etc.) Metodele din aceste clase permit diverse operatii ce pot fi efectuate cu obiectele respective.

Structurile de control din Java ofera abilitatea de a selecta diferite ramuri de urmat functie de unele puncte de decizie precum si efectuarea de cicluri în program. Aceste structuri de control au fost adoptate de Java din C cu urmatoarele observatii:

-conditia pe baza careia se ia decizia trebuie sa fie o expresie de tip boolean

-instructiunile break si continue pot avea si variabile ca si etichete permitând fortarea iesirii nu neaparat imediat dupa ea respectiv reluarea unui ciclu exterior având eticheta precizata

-s-a eliminat instructiunea goto rezervându-se însa cuvântul, etc.

Pentru tratarea exceptiilor s-au introdus pe lânga instructiuni specifice C++ si alte instructiuni Java. Astfel se folosesc instructiunile try, catch, throw, throws si finally.

Alte instructiuni specifice limbajului Java sunt synchronized, package si import.

Tablourile si sirurile de caractere sunt tratate în Java ca niste obiecte de clasa primara ce nu sunt însa supuse la erori si confuzii ca cele din C++.

Tablourile în Java pot deci pastra la fiecare indice un obiect sau o valoare primitiva toate datele fiind însa de acelas tip. Tablourile în Java :

-se declara oferind o referinta

-se creeaza alocându-se spatiu de memorie dinamic

-se asigneaza valori tabloului

-se distrug când nu mai sunt folosite.

Tablourile difera fata de cele din limbajul C prin urmatoarele:

-se creeaza folosind operatorul new, dimensiunea tabloului fiind introdusa doar în expresia new,

int iTablou[]= new int[5];

-fiind derivate direct din clasa Object aceasta clasa radacina a ierarhiei defineste mai multe metode si date astfel încât toate tablourile memoreaza lungimea de alocare într-o variabila numita length care poate fi accesata ori când astfel,

int lungTabl= iTablou.length;

-ele sunt protejate la depasirea indicilor atât inferior cât si superior decansându-se o întrerupere Java ArrayIndexOutOfBoundException

-tablorile multidimensionale se declara ca si tablouri de tablouri putând aloca dimensiune specifica fiecarei coloane ulterior

-copierea tablourilor se face folosind metoda arraycopy().

Desi nu avem pointeri în Java când se da ca si parametru într-o metoda un tablou practic se transfera referinta catre acel tablou si nu valoarea componentelor.

Asa cum am mai spus sirurile de caractere reprezinta obiecte derivate din clasa Object. Ele se implementeaza cu ajutorul claselor:

-String, pentru siruri constante

-StringBuffer, pentru siruri modificabile

-StringTokenizer, permite împartirea unui sir pe componente pentru a putea fi extrase.

Un obiect al clasei String poate fi privit ca si un tablou de caractere reprezentate în Unicode el nefiind terminat printr-un octet cu valoarea 0 ca si în limbajul C.

Toate aceste clase specifice sirurilor de caractere din Java poseda diverse metode ce permit prelucrarea lor.

Daca tablourile odata ce au fost create îsi pastreaza dimensiunea, în cadrul clasei Vector putem adauga sau elimina în continuare elemente. Vectorii se folosesc în locul tablourilor atunci când:

-avem un numar variabil de elemente si vrem sa adaugam sau sa stergem unele elemente

-elementele trebuie sa fie obiecte iar datele primare pot fi convertite usor în obiecte folosind clasele Java

-dorim sa determinam usor unde e plasat un obiect si care e pozitia lui.

Vectorii reprezinta o facilitate extrem de utila oferita de catre limbajul Java în realizarea unor aplicatii care utilizeaza date variabile sau transfera un numar variabil de argumente la o functie.

Metodele (functiile) din Java sunt foarte asemanatoare cu cele din limbajul C/C++ doar ca Java a simplificat lucrurile prin faptul ca metodele sunt incluse doar în clase. In acest mod metodele normale vor fi invocate folosind un obiect instantiat iar cele statice prin intermediul numelui clasei în care au fost definite. Metodele statice permit definirea de functii utilitare care pot fi de sine statatoare daca declaram si clasa publica.

Si în limbajul Java metoda main() permite utilizarea argumentelor în linia de comanda având un singur argument de tip tablou de siruri de caractere. Practic nu este nevoie de un alt parametru care sa specifice numarul de argumente, acesta fiind pastrat în variabila length asociata tabloului iar argumentul dependent de sistemul de operare a fost eliminat pentru a pastra facilitatea multiplatforma a limbajului. Argumentele se preiau ca si siruri de caractere urmând a fi apoi convertite la alte tipuri cu metode oferite de catre limbaj. Java nu mai transfera ca prim argument numele aplicatiei.

Pointerii nu exista în limbajul Java ei creând multe probleme în limbajul C în cazul în care ei nu erau bine gestionati de catre programatori. Numele unor tablouri sau obiectele neinstantiate din Java sunt însa similare ca si functionalitate cu pointerii din C. Aproape toate cerintele se pot rezolva asfel privind accesul la date prin adrese cu urmatoarele exceptii:

-nu se poate realiza transferul datelor în cadrul metodelor prin adresa desi tablorile si obiectele sunt transferate prin adresa, implicit în functia apelata facându-se o copie a lor. Daca se doreste o modificare a unor valori se vor folosi metode care returneaza valori.

-nu se pot folosi pointeri la functii, aceasta functionalitate putând fi obtinuta cu ajutorul functiilor virtuale sau a mostenirii. Tabelele de pointeri spre functii pot fi realizate cu ajutorul variabilelor neinstantiate ale clasei Object precum si cu ajutorul identificatorilor de tip run-time.

Intre bibliotecile standard oferite de catre limbajul C si ierarhia de clase oferita de catre limbajul Java exista similaritati functionale, clasele Java adaugând multe alte facilitati.

Daca în limbajul C++ clasele au fost adaugate peste un limbaj secvential, limbajul C, limbajul Java este un limbaj pur obiectual totul fiind implementat în cadrul claselor. Pentru a lucra cu un obiect este nevoie de o clasa care sa descrie structura si functionalitatea obiectului. Astfel definirea unei clase în Java se face dupa cum urmeaza:

[lista_modoficatori] class idClasa [extends idClasaBaza] [implements lista_ interface]

Din definitie se observa ca obligatoriu pentru a defini o clasa trebuie sa avem cuvântul cheie class.

Pentru a defini o clasa dintr-o alta clasa de baza sau supreclasa se foloseste cuvântul cheie extends urmat de numele clasei de baza. În Java spre deosebire de C++ poate exista o singura clasa de baza.

O interfata în Java reprezinta un fel de clasa abstracta în care nici una din metode nu a fost definita ele fiind doar declarate fara a utiliza cuvântul cheie abstract (lipseste corpul metodei dar s-a declarat metoda).

Ca si concluzie corpul clasei contine o lista de declaratii atribute, metode si constructori. Totalitatea atributelor caracterizeaza starea unui obiect din acea clasa.

Totalitatea metodelor reprezinta interfatarea clasei si caracterizeaza functionalitatea clasei. Constructorii unei clase au un scop bine definit în initializarea unui obiect din acea clasa.

Diferentele principalele între clasele Java si cele C++ constau din:

-omiterea operatorului de scop, ::, la definirea functiilor membre

-abilitatea din C++ de a folosi variabile multiple folosind un singur specificator de acces

-utilizarea cuvântului cheie extends în Java pentru procesul de derivare

-utilizarea cuvântului cheie super în Java pentru apelul constructorilor sau a altor metode si variabile din clasa aflata mai sus în ierarhie

-prin utilizarea conceptului de package Java a schimbat scopul modificatorului protected astfel încât clasele din acelas package au acces la variabilele protected ca sunt sau nu derivate ele fiind considerate friendly.

In Java se poate utiliza metoda finalize() care daca se declara în cadrul unei clase ea va fi apelata chiar înainte ca procesul de garbagecollection sa distruga obiectul din memorie. Aici practic se pot închide fisiere care au fost uitate deschise sau elibera alte resurse cum ar fi soclurile, socket-uri.

Operatorul instanceOf ne arata daca un obiect apartine sau nu unei clase.

Daca dorim ca o clasa sa nu mai poata fi derivata ea se declara de tip final, compilatorul putând efectua diferite optimizari. In acest caz si metodele pot fi declarate de tip final ceea ce înseamna ca ele vor fi legate în mod static adica stau pe postul functiilor de tip inline din C++.

In cazul mostenirii upcastingul permite crearea unui obiect referit de o clasa derivata prin instantierea unui obiect folosind clasa de baza. Downcastingul se face doar prin folosirea operatorului cast permitând conversia unui tip de baza într-unul derivat.

Java permite folosirea unor pachete predefinite dar si crearea unor pachete proprii în cazul în care se doreste a oferi o mai mare functionalitate procesului de dezvoltare a unei aplicatii.

Grafica în programare s-a impus pornind de la consideratia ca o imagine înseamna mai mult decât 1000 de cuvinte. Initial grafica în Java folosind pachetul AWT (Abstract Window Toolkit) s-a bazat pe ideea folosirii unui singur standard GUI (Graphic User Interface) standard ce a pornit de la dezvoltatorii Unix fiind cunoscut sub numele CDE, Common Desktop Environment. AWT foloseste principiul Common Functionality Specific Implementation derivat din CDE urmarind sa conserve asa numitul look and feel caracteristic platformei specifice. Acest pachet a suferit cele mai mari modificari pornind de la versiunile Java dezvoltate de-a lungul timpului. Versiunea 1.0 cu pachetul java.awt se baza pe asa numitele handlere definite în interiorul componentelor grafice iar de la versiunea 1.1 pachetul java.awt.event permite definirea handlere-lor în alte clase asocierea facându-se cu diferite metode. Grafica bazata pe swing-uri ofera un nou nivel mai profesional în realizarea aplicatiilor grafice.

Acest mecanism al utilizarii graficii îl întâlnim si în limbajul C++ unde dupa cum se stie grafica nu este standardizata.

Lucrarea de fata considera noile elemente introduse de Java odata cu utilizarea noului concept Java 2 Enterprise Edition. Se vor prezenta principalele facilitati J2EE precum si unele exemple privind dezvoltarea de aplicatii dedicate domeniului procesarii imaginilor si domeniului multimedia.


Document Info


Accesari: 3941
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )