Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
ELEMENTE GENERALE
1. Ce este JAVA ?
n este un limbaj de programare dezvoltat de JavaSoft, companie in cadrul firmei Sun Microsystems.
n este complet orientat pe obiecte si ofera posibilitatea reala de refolosire a codului (care este de fapt promisiunea facuta la aparitia programarii orientate pe obiecte).
n este neutru din punct de vedere arhitectural, cu alte cuvinte Java este un limbaj independent de platforma de lucru, aceeassi aplicatie ruland, fara nici o modificare, pe sisteme diferite cum ar fi Windows, UNIX sau Macintosh, lucru care aduce economii substantiale firmelor care dezvolta aplicatii pentru Internet.
n limbajul Java este modelat dupa C si C++, trecerea de la C, C++ la Java facandu-se foarte usor.
n elimina sursele frecvente de erori ce apar in programare prin eliminarea pointerilor, administrarea automata a memoriei si eliminarea fisurilor de memorie printr-o procedura de colectare a "gunoiului" care ruleaza in fundal;
n este cel mai sigur limbaj de programare disponibil in acest moment, asigurand mecanisme stricte de securitate a programelor concretizate prin: verificarea dinamica a codului pentru detectarea secventelor periculoase, impunerea unor reguli stricte pentru rularea programelor lansate pe calculatoare aflate la distanta (acestea nu au acces la reteaua locala, la fisierele stocate in sistemul local si nu pot lansa in executie programe locale), etc.
n permite creearea unor documente Web imbunatatite cu animatie si multimedia.
n a fost proiectat pentru a fi folosit in medii distribuite si sisteme deschise.
Evolutia limbajului JAVA
In 1991, firma SUN, mergand pe directia dezvoltarii sistemelor deschise de lucru in retea, a creat un proiect de lucru numit Green, care avea drept scop punerea la punct a unor procesoare care sa poata rula pe diferite tipuri de aparate si punerea la punc a unui sistem care sa poata rula pe platforme diferite. Planul initial prevedea dezvoltarea proiectului in C++, dar au aparut foarte multe probleme in incercarea de dezvoltare acompilatorului de C++. Ca urmare, James Gosling, membru al grupului Green, a inceput sa lucreze la dezvoltarea unui nou limbaj, numit Oak, care, mai tarziu, avea sa se numeasca Java. De asemenea grupul Green avea sa-si schimbe numele intai in FirstPerson, apoi in JavaSoft.
Abia dupa ce a fost infiintata compania Netscape Communications Corporation, cei de la JavaSoft s-au orientat catre Internet si Web, mediul multiplatforma distribuit al retelei Internet fiind perfect pentru testarea proiectului.
In prezent licenta pentru tehnologia Java a fost acordata unor firme precum IBM, Microsoft, Sillicon Graphics, Adobe si Netscape.
Java : un limbaj compilat si interpretat
In functie de modul de executie al programelor, limbajele de programare se impart in doua categorii :
interpretate : instructiunile sunt citite linie cu linie de un program numit interpretor si traduse in instructiuni masina; avantaj : simplitate; dezavantaje : viteza de executie redusa
compilate : codul sursa al programelor este transformat de compilator intr-un cod ce poate fi executat direct de procesor; avantaj : executie rapida; dezavantaj : lipsa portabilitatii, codul compilat intr-un format de nivel scazut nu poate fi rulat decat pe platforma pe care a fost compilat.
Programele Java pot fi atat interpretate cat si compilate.
Cod sursa Java (compilare) Cod de octeti
Codul de octeti este diferit de codul masina. Codul masina este reprezentat de o succesiune de 0 si 1; codurile de octeti sunt seturi de instructiuni care seamana cu codul scris in limbaj de asamblare.
Codul masina este executat direct de catre procesor si poate fi folosit numai pe platforma pe care a fost creat; codul de octeti este interpretat de mediul Java si de aceea poate fi rulat pe orice platforma care foloseste mediul de executie Java neutralitatea limbajului Java din punc de vedere arhitectural.
Cum este rulat un program Java ? Interpretorul Java transforma codul de octeti intr-un set de instructiuni masina, intarzierea interpretarii fiind insa foarte mica datorita asemanarii dintre codul de octeti si limbajul de asamblare si din acest motiv executia se face aproape la fel de repede ca in cazul programelor compilate.
Cum este obtinuta neutralitatea arhitecturala a limbajului Java ? Cu alte cuvinte, cum este posibila portarea codului de octeti pe calculatoare diferite? Truc : codul sursa este compilat nu pentru calculatorul pe care se lucreaza ci pentru un calculator inexistent, acest calculator imaginar fiind numit Masina virtuala Java (Java Virtual Machine). Interpretorul actioneaza apoi ca un intermediar intre Masina virtuala Java si masina reala pe care este rulat programul.
Aplicatia utilizatorului |
||
Obiecte Java |
||
Masina virtuala Java |
||
UNIX |
Windows |
Macintosh |
Sisteme de operare |
Java si conceptele programarii orientate pe obiecte
Limbajul Java este urmatorul pas logic in domeniul limbajelor de programare si se bazeaza pe cel mai popular limbaj de programare al momentului C++. In Java se pot obtine programe cu aspectul si comportarea programelor C++, dar beneficiind de avantajele oferite de un limbaj proiectat special pentru POO. Java rebunta complet la programarea procedurala specifica C-ului si va obliga sa folositi conceptele solide ale POO.
Conceptele programarii orientate pe obiecte cuprind :
Obiectele
Incapsularea si transmiterea de mesaje
Clasele
Bibliotecile (numite pachete, in Java)
Mostenirea
Modificatorii de acces
Obiectele
unitatea elementara a POO
starea obiectului este data de variabile de instanta
comportamentul obiectului este dat metode
usor de refolosit, actualizat, intretinut
Incapsularea si transmiterea de mesaje
Clasele
incapsuleaza obiecte
o singura clasa poate fi folosita pentru instantierea mai multor obiecte
Pachetele: colectie de clase inrudite
Mostenirea : permite
extinderea functionalitatii unor clase existente
refolosirea codului
Modificatorii de acces : controleaza accesul la metodele si variabilele obiectelor. Acestea pot fi :
Private - accesibile doar obiectelor din aceeasi clasa
Protejate - accesibile obiectelor din aceeasi clasa si din subclasele clasei respective
Prietenosase - (nivelul de accesibilitate prestabilit) accesibile tuturor claselor din pachetul curent
Publice - accesibile tuturor claselor din orice pachet
Programarea in limbajul Java
5. Caracteristicile de baza al limbajului Java
A. Folosirea in medii de retea distribuite
Java a fost proiectat pentru un mediu complex cum este Internetul si de aceea trebuie sa poata rula pe platforme eterogene distribuite. Acest lucru este posibil deoarece :
este neutru din punct de vedere arhiectural = programele pot fi rulate pe orice platforma care are instalat mediul Java
are un grad ridicat de portabilitate = contine obictecte care pot fi folosite pe platforme eterogene si respecta standardele IEEE (Institue of Electrical and Electronics Engineers) pentru structurile de date (folosirea intregilor, a numerelor in virgula mobila, a sirurilor, etc)
este distribuit = poate folosi atat obiecte memorate local cat si obiecte stocate pe calculatoare aflate la distanta
este compatibil cu mediile de lucru in retea (poate fi utilizat in retele complexe) si accepta direct protocoalele de retea obisnuite cum ar fi FTP si HTTP
B. Asigurarea performantei ridicate
compilatorul si sistemul de executie ofera o viteza ridicata rularii programelor
are incorporate posibilitati de executie multifilara (rularea simultana a mai multor procese) folosind un sistem de acordare de prioritati proceselor ce trebuie executate. Printre procesele care ruleaza in fundal sunt cele de "colectare a gunoiului" si de gestionare a memoriei.
C. Refolosirea codului si fiabilitatea
Java este un limbaj dinamic, lucru asigurat prin intarzierea legarii obiectelor si legarea dinamica a claselor in timpul executiei, ceea ce impiedica aparitia erorilor in cazul schimbarii mediului de lucru dupa compilarea programului sursa.
Fiabilitatea este asigurata prin eliminarea pointerilor, prin folosirea verificarii dinamice a limitelor si prin gestionarea automata a memoriei, inlaturandu-se posibilitatea fisurilor si violarilor de memorie. O alta cale de evitare a erorilor este verificarea structurilor de date atat la compilare cat si in timpul executiei.
D. Asigurarea securitatii
Interzice accesul la stiva sistemului, la zona libera de memorie si la sectiunile protejate de memorie
Verifica validitatea codului semnaland urmatoarele:
n Violarile de acces
n Conversiile ilegale de date
n Valori si parametri incorecti
n Modificarea claselor sau folosirea incorecta a acestora
n Depasirea stivei in partea superioara sau inferioara
n Activitati suspecte sau neautorizate
Structura limbajului Java
Aplicatii si miniaplicatii
n miniaplicatie (applet) = program Java creat pentru a fi folosit in sitemul WWW. Applet-urile necesita un program de vizualizare extern : browser Web sau un program specializat de vizualizare (applet viewer).
n aplicatie (app) = program Java care poate fi rulat independent
Spatii de nume
Pentru evitarea conflictelor legate de spatiile de nume, fiecare componenta a unui nume este imbricata in conformitate cu unul din urmatoarele niveluiri:
0 - spatiul de nume al pachetului
1 - spatiul de nume al unitatii de compilare
2 - spatiul de nume al tipului
3 - spatiul de nume al metodei
4 - spatiul de nume al blocului local
5 - spatiul de nume al blocului imbricat
Interpretorul este responsabil pentru mentinerea si translatarea spatiului de nume. Spatiile de nume sunt separate prin punct.
Ex. java.lang.System.out.println() - calea completa
Pachetele Java din biblioteca originala de pachete sunt referite prin java uramt de numele pachetului (java.lang).
In cazul in care nu exista confuzii poate fi folosita o varianta prescurtata a apelului (interpretorul foloseste prima potrivire de nume descoperita); apelul la println() se putea face si prin System.out.println()
Structuri de denumire a programelor
Fisiere sursa .java (compilare) cod de octeti format din unitati de compilare;
Pentru fiecare clasa declarata in codul sursa este generata o unitate de compilare stocata intr-un fisier separat cu extensia .class
Unitatile de compilare Java contin :
instructiuni de pachet
instructiuni de import
declaratii ale claselor si interfetelor
(structura de baza a unui program Java)
Instructiuni de pachet
Sunt folosite pentru a preciza pozitia pachetelor folosite intr-o aplicatie. In mod implicit Java foloseste calea de acces curenta si presupune ca fisierele cu cod compilat se afla in directorul curent la rularea programului.
Pentru ca obiectele si clasele sa respecte o structura ierarhica diferita de cea prestabilita trebuie inclusa in codul sursa o instructiune de pachet :
package NumePachet
In cazul cand se folosesc mai multe niveluri instructiunea va avea forma:
package MyPackages.NumeSubPachet
Numele de pachete de pe fiecare nivel al spatiului de nume trebuie sa reflecte structura de directoare a sistemului de fisiere, deoarece Java transforma numele pachetelor in cai de acces pentru localizarea claselor si a metodelor asociate pachetelor. De exemplu intr-un sistem Windows 95/NT numele de pachet MyPackages.Pachetel va fi transformat in directorul
aMyPackagesaPachetel unde Java va cauta pachetul respectiv.
Instructiuni de import
Java contine un set de functii principale, accesibile global, si care sunt localizate in pachetul java.lang. Pentru a obtine accesul la alte pachete, clase si obiecte care nu se afla in aceasta biblioteca se folosesc instructiuni de import, care ajuta compilatorul Java sa regaseasca metodele corespunzatoare si sa evite conflictele de nume.
De exemplu, pentru a apela metoda Button din pachetul java.awt (awt = Abstract Window Toolkit) se foloseste instructiunea java.awt.Button. O metoda mai eficienta este de a importa metoda import java.awt.Button si de a apela metoda doar prin instructiunea Button
Cea mai uzuala metoda de import este importul la cerere, care spune compilatorului sa importe numai clasele de care este nevoie in program : import java.awt.* pentru a nu face disponibile toate clasele din java.awt.
Declaratiile de clasa
In Java toate clasele sunt derivate dintr-o clasa sistem numita Object Object este radacina ierarhiei de clase, toate metodele si variabilele clasei fiind disponibile celorlalte clase. In mod implicit toate clasele sunt private. Declaratiile de clasa, fara modificatori de acces, au aceeasi sintaxa ca in C++ :
class nume_clasa
Java accepta numai mostenirea simpla a claselor, fiecare clasa avand asadar un singur parinte, numit superclasa. In scimb, Java permite mostenirea multipla a metodelor claselor, prin intermediul interfetelor claselor.
Declaratiile de interfata
Interfetele sunt clase abstracte. Diferenta majora fata de o clasa este aceea ca interfetele nu pot stoca date. De asemenea, nu pot contine implementari ale metodelor ci doar declaratii ale acestora.
O clasa poate sa implementeze una sau mai multe interfete si poate sa partajeze aceaasi interfata cu alte clase sau instante ale unei clase.
Declaratiile de interfata fara modificatori au urmatorul format:
interface nume_interfata
Declaratiile de clase care folosesc interfete au urmatorul format:
class nume_clasa implements nume_interfata
Un alt format poate fi:
class nume_clasa implements nume_interfata1,,nume_interfataN
Singura deficienta a folosirii interfetelor este aceea ca necesita legare dinamica, ceea ce reduce performantele executiei. Sunt insa mai eficiente decat mostenirea multipla din C++, deoarece reduc suprasarcina de executie.
Copyright © 2024 - Toate drepturile rezervate