Sunteți pe pagina 1din 10

Curs 2 - Programarea calculatoarelor i limbaje de programare

1. Caracteristicile limbajul de programare Java


Java este un limbaj de programare orientat obiect, destinat n principal programrii internet.
nceputul limbajului Java este n toamna anului 1991, cnd firma Sun Microsystems a finanat
un proiect cu numele Green condus de James Gosling. Scopul echipei Green era s plaseze
firma Sun Microsystems pe piaa produselor electronice comerciale. Inginerii i dezvoltatorii
de soft de la Sun au cutat microprocesoare care s ruleze pe o multitudine de maini, n
particular pe sisteme distribuite care lucreaz n timp real. Cheia succesului firmei Sun a fost
abilitatea lucrului pe platforme multiple. Dupa 4 ani de lucru, echipa Green finalizeaz
specificaiile limbajului Java. Apoi compania Sun Microsystems vinde licena firmelor IBM,
Microsoft, Silicon Graphics, Adobe si Netscape.

Limbaj compilat i interpretat


Un limbaj este interpretat dac instruciunile unui program scris n acel limbaj sunt
procesate linie cu linie i traduse n cod main.
Un limbaj este compilat dac un program scris n acel limbaj este tradus ntr-un cod pe
care calculatorul l poate nelege (executa) mult mai uor. Programele interpretate
sunt mai lente dect cele compilate, ns cele compilate sunt de obicei dependente de
platforma respectiv.
Programele Java sunt mai nti compilate n nite fiiere intermediare asemntoare
codului de asamblare (byte code) i apoi acestea sunt interpretate de mediul de
execuie Java n instruciuni main asociate platformei sistem.

Limbaj independent de platform (portabilitate). La instalarea limbajului Java se va


crea o maina virtual Java (JVM Java Virtual Machine) care are drept scop
traducerea instruciunilor unui byte code Java n instruciuni main pentru platforma
curent. Astfel, fiierele intermediare byte code pot fi copiate i executate pe orice
platform (indiferent c este Windows, Unix, Solaris etc.)

Complet orientat pe obiecte. Aceasta este o trstur implicit, punnd n eviden


toate aspectele legate de programarea orientat obiect: obiecte, trimitere de parametri,
ncapsulare, clase, biblioteci, motenire, modificatori de acces.

Limbaj concurent. Concurena (multithreading) nseamn capacitatea unui program


de a executa mai multe secvene de cod n acelai timp. O secven de cod Java se
numete fir de execuie (thread). Datorit posibilitii crerii mai multor fire de
execuie, un program Java poate s execute mai multe sarcini simultan, de exemplu
animaia unei imagini, trimiterea unei melodii spre placa de sunet, comunicarea cu un
server, alocarea i eliberarea memoriei etc.

Simplitate. Spre deosebire de C++ care este un limbaj orientat pe obiect mai popular,
Java elimin cteva din trsturile acestuia: posibilitatea motenirii multiple este
exclus, irurile sunt ncapsulate ntr-o structur clas, nu exist pointeri, alocarea i
dealocarea memoriei se face automat, exist un mecanism de eliberare a memoriei
(garbage collection) .

Limbaj distribuit. Java este distribuit pentru c permite utilizarea obiectelor locale i
la distan. El ofer posibilitatea dezvoltrii de aplicaii pentru Internet, capabile s
ruleze pe platforme distribuie i eterogene. n acest sens, Java respect standardul
IEEE (Institute of electrica land Electronics Engineers) pentru structurile de date, cum
ar fi folosirea ntregilor, numerelor n virgul flotant i irurilor de caractere. Java se
poate folosi n aplicaii de reea, deoarece respect protocoalele de reea, cum ar fi
FTP, HTTP etc.

Limbaj performant. Interpretorul Java este capabil s execute un byte code aproape la
fel de repede ca un cod compilat. Avnd posibilitatea s lucreze cu fire de execuie
multiple, Java justific faptul c este un limbaj performant.

Robustee nu exist pointeri, care genereaz multe erori n cazul limbajelor C i


C++.
Dinamic. Administrarea automat a memoriei. Java verific memoria dinamic nainte
de a fi alocat i are un sistem automat de alocare/dealocare a memoriei.
Securitate. Programele Java nu pot accesa memoria heap, stack sau alte seciuni
protejate de memorie, deoarece Java nu folosete pointeri i aloc memorie doar la
execuie. nainte ca interpretorul Java s execute byte codul, se verific dac este un
cod Java valid prin cercetarea accesului la date, conversiilor de date nepermise, valori
i parametri incoereni, depirea stivei.

2. Platforme de lucru Java oferite de Sun Microsystems


JavaSE (Standard Edition)
Aplicaii independente, appleturi, n general pentru sisteme gen workstation.
JavaME (Micro Edition)
Programarea dispozitivelor mobile
JavaEE (Enterprise Edition)
Aplicaii complexe, pe mai multe nivele pentru sisteme eterogene, cu baze de
date distribuite, etc.
Aplicaii i servicii Web: servleturi, pagini JSP, etc.
Distribuiile Java sunt oferite gratuit
http://www.oracle.com/technetwork/java/index.html

Mediul de dezvoltare Java Developers Kit (JDK) conine pe de o parte o serie de biblioteci de
clase Java necesare scrierii unui program (API) i pe de alta parte un set de utilitare necesare
compilarii, testarii, executiei i documentarii unei aplicaii Java.
3. Implementarea mainii virtuale Java
De regul, arhitectura i setul de instruciuni al calculatorului, pe care se execut un
program Java, difer de cele ale mainii virtuale Java. n consecin, codul de octei
generat de compilatorul Java nu poate fi executat nemijlocit de procesorul (proc esoarele)
calculatorului pe care acesta se execut.

Dac este realizat software (aa cum se ntampl n majoritatea cazurilor), maina
virtual Java este ea nsi un produs program, care este scris i compilat special pentru
tipul de calculator pe care se instaleaz, deci folosete setul de instruciuni nativ al
acestuia. Acest produs program trebuie s respecte specificaia mainii virtuale Java, dar
realizarea concret depinde de tipul de calculator pe care se instaleaz. Mai mult, pentru
acelai calculator pot fi realizate mai multe maini virtuale Java, care toate respecta
specificaia, dar difer ntre ele prin modul de realizare.
n principiu, componenta principal a mainii virtuale Java este un interpretor, adic un
program care parcurge instruciunile coninute n codul de octei Java din memoria
mainii virtuale Java i le convertete n instruciuni native, care pot fi executate de
procesorul calculatorului gazd. Aceast conversie necesit un anumit timp, din care
cauz durata de execuie a unui program interpretat este intotdeauna mai mare dect a
unuia compilat direct n codul nativ. Din aceast cauz, principala deficien care se
semnala la primele implementri ale mainii virtuale Java era c durata de execuie a
programelor era sensibil mai mare dect a celor scrise in limbaje "tradiionale" compilate,
cum ar fi C, C++, Pascal, Fortran etc.
Implementrile moderne ale mainii virtuale Java se caracterizeaz prin mrirea sensibil
a vitezei de executie, care se apropie deja de cea a programelor compilate. Aceasta se
realizeaz, n special, prin introducerea unei compilri "just in time": codul de octei este
compilat, n momentul execuiei, in cod nativ pentru calculatorul gazd i abia apoi este
executat.
Desigur c cea mai eficient reducere a duratei de execuie se produce atunci cnd
maina virtual Java este implementata hardware, astfel nct codul de octeti Java
(bytecode) este cod nativ al acestei maini. n acest caz, durata de execuie a programului
este aceeai cu cea a unui program compilat tradiional.
4. Tipuri de produse software scrise n Java
Limbajul Java este folosit cel mai frecvent pentru a scrie urmatoarele trei tipuri de
programe:
aplicaie - este un produs software care se instaleaz pe un anumit calculator i
funcioneaz direct sub controlul sistemului de operare, avnd acces la toate resursele
calculatorului respectiv. Una din clasele aplicaiei trebuie sa conin metoda principal,
cu care ncepe execuia aplicatiei. Aceast metod se numete main i are forma:
public static void main(String args[]) {
// corpul metodei
}

applet (miniaplicaie) - este un program care se transmite sub form de cod de octei
(bytecode) prin reeaua de calculatoare i este executat n cadrul unui navigator (browser)
de Web, fr a avea acces la fiierele sau sistemul de intrare/ieire al calculatorului pe

care se execut;
servlet - un program care se execut pe un server din reea.

5. ablon de aplicaie simpl n limbajul Java


class <nume_clasa> {
public static void main(String args[]) {
// corpul metodei main
}
}
<nume_clasa> - este numele clasei, fiind ales de ctre programator cu respectarea
urmtoarelor condiii:
- numele clasei trebuie s nceap cu o liter i este format numai din litere, cifre i
eventual _;
- n cazul numelor compuse din mai multe cuvinte, fiecare cuvnt ncepe cu
majuscul;
// corpul metodei main - este o succesiune de instruciuni i comentarii care respect
sintaxa limbajului Java

Primul program
1. Scriererea codului surs
class FirstApp
{
public static void main( String args[])
{
System.out.println("Hello world!");
}
}
Definire clas class numeclasa
Funcia principal a unei aplicaii Java propriu-zise:
- public static void main( String args[])
Afiare - System.out.println
Salvarea fiierelor surs
C:\intro\FirstApp.java
Compilarea aplicaiei
javac FirstApp.java
va rezulta: FirstApp.class
Rularea aplicaiei
java FirstApp

Se poate folosi un IDE (mediu integrat de dezvoltare) pentru a realiza toi paii anteriori
(JCreator, Eclipse, NetBeans, etc.)
Editarea fisierului surs
Pentru nceput, vom considera c aplicaia este constituit dintr-o singur clas, care
respect ablonul indicat anterior. Programul surs pentru aceast clas va fi editat sub
forma unui fiier separat, care are acelai nume cu clasa i are extensia .java.
Compilarea i eliminarea erorilor semnalate de compilator
Translatarea programului surs n program sub forma de cod de octei (bytecode) se face
cu ajutorul compilatorului Java, numit javac. n acest scop, va deplasai n subdirectorul
n care se gsete programul surs pe care dorii s-l compilai i dai comanda
javac <fisier_sursa>
Dup ce ai dat aceast comand, vei obine unul din urmtoarele rezultate:
1. Pe ecran apare din nou promptul sistemului de operare, fr a se afia un mesaj de
eroare. n acest caz, compilarea a decurs normal, iar dac dai comanda dir vei
constata ca n subdirectorul curent a aprut un nou fiier, care poart numele
clasei i extensia class. Acesta este fiierul care conine bytecode-ul clasei
compilate.
2. Obinei un mesaj de eroare, care indic fie c exist erori n program, care au fost
sesizate de compilator, fie c exist erori n linia de comand prin care ai cerut
compilarea. n ambele cazuri, este necesar s eliminai erorile i s reluai
compilarea
Executarea (rularea) aplicaiei
Dac n directorul curent exist fiierul <nume_aplicaie>.class, executarea acestei
aplicaii se solicit prin comanda:
java <nume_aplicaie>
Trebuie remarcat c se d ca parametru numai numele clasei, fr extensia class. Efectul
acestei comenzi este, fie executarea aplicaiei, fie apariia unui mesaj de eroare de
execuie.
Prin comanda java se pune n execuie interpretorul mainii virtuale Java. Acest
interpretor verific dac n directorul curent exist fiierul <nume_aplicaie>.class. Daca
acesta exist, ncarc n memorie codul de octei pe care l conine i pune n execuie
metoda public static void main(). Dac fiierul nu exist sau dac el nu conine o astfel
de metod, se semnaleaz printr-un mesaj de eroare.

Tip abstract de date


mulime de date care au aceeai reprezentare i pentru care este definit setul de operaii care
se pot executa asupra elementelor mulimii respective.

are dou pri: o parte care definete reprezentarea datelor si o parte care definete operaiile
asupra datelor respective.

Noiunea de clas
O clas definete un tip abstract de date.
Definiie clas:
class nume{
lista_elementelor_membru
}
Lista elementelor membru poate conine:
1. declaraii de date;
2. implementri de funcii;
3. prototipuri de funcii abstracte.
Datele declarate printr-o definiie de clas se numesc date membru.
Funciile definite sau pentru care este prezent numai prototipul n definiia clasei, se numesc
funcii membru sau metode.
Att datele ct i metodele pot avea modificatori de acces.
Modificatorii de acces
Modificatorii de acces sunt cuvinte rezervate ce controleaz accesul celorlalte clase la
membrii unei clase. Specificatorii de acces pentru variabilele i metodele unei clase sunt:
public, protected, private i cel implicit (la nivel de pachet).
Specificator
Private
Protected
Public
Implicit

Clasa
X
X
X
X

Subclasa
X*
X

Exemplu:

class Complex {
// date membru
float real;
float imag;
// functii membru publice
public void atribuire(float x, float y) {
real = x; imag=y;
}
public double retreal() {
return real;
}

Pachet

X
X

Oriunde

public void afiscomplex(){


System.out.println(real+++imag+*i);
}
}

Obiecte
Un obiect este o dat de un tip definit printr-o clas. Se spune c obiectul este o instaniere a
clasei respective.
Formatul declaratiei unui obiect:
nume_clas nume_obiect;
Instanierea obiectelor se face folosind operatorul new.
nume_obiect = new nume_clas(..);
Datele membru se aloc distinct la fiecare instaniere a clasei. O excepie o constituie datele
membru care au clasa de memorare static, ea este o parte comun pentru toate instanierile
clasei i exist ntr-un singur exemplar.
Funciile membru sunt ntr-un singur exemplar oricte instanieri ar exista.
Legtura dintre funcii membru i obiectul pentru care se face apelul se realizeaz folosind
operatorul punct.
Exemplu de instanieri pentru clasa complex:
Complex z;
z=new Complex();
Atunci:
z.atribuire(0,0);
z.afiscomplex();
afieaz numrul complex z (n cazul de fa 0+0i).

Fundamentele limbajului Java. Sintax Java.


Identificatori
Sunt secvene nelimitate de litere i cifre Unicode plus simbolul _, ce ncep cu o liter
sau _.
Identificatorii nu au voie s fie identici cu cuvintele rezervate.
Exemple: a1, FirstApp, factorial, etc.
Convenie:
Nume de clasa: prima liter mare ( Complex)
Nume de metod: prima liter mic ( aduna, adunaComplex)
Nume variabil: prima liter mic (var1)
Nume constant: prima liter mare sau tot numele cu litere mari (Pi, PI)
Obs: dac identificatorul este format din mai muli atomi lexicali, atunci primele litere ale
celorlali atomi se scriu cu majuscule.
Constante

Intregi (10, 16 -0x, 8-0)


- normali - se reprezint pe 4 octei (32 bii)
-lungi - se reprezint pe 8 octei (64 bii) i se termin cu caracterul L (sau l).
Flotani: 1.0, 2e2, 3f, 4D
-s aib cel puin o zecimal dup virgul
-s fie n notaie exponenial
-s aib sufixul F sau f pentru valorile normale - reprezentate pe 32 bii, respectiv
D sau d pentru valorile duble reprezentate pe 64 bii.
Logici: true, false
Caracter: J, a, v, a, \n
Caracter sau secvene escape (permit specificarea caracterelor care nu au reprezentare
grafic i reprezentarea unor caractere speciale precum backslash, apostrof, etc.)
Secvenele escape predefinite n Java sunt:
\b : Backspace (BS)
\t : Tab orizontal (HT)
\n : Linie nou (LF)
\f : Pagin nou (FF)
\r : Inceput de rnd (CR)
\" : Ghilimele
\ : Apostrof
\\ : Backslash
iruri de caractere: Text
Este format din zero sau mai multe caractere ntre ghilimele. Caracterele care formeaz irul
pot fi caractere grafice sau secvene escape.
Separatori: indic sfritul unei uniti lexicale i nceputul alteia.
()[];,.
Observaie: instruciunile sunt separate prin ;
Operatori
atribuirea:
=
matematici:
+, -, *, /, %, ++, -lval op= rval: x += 2 n -= 3
x++, ++x, n--, --n
logici:
&&(and), ||(or), !(not)
relaionali: <, <=, >, >=, ==, !=
pe bii:
&(and), |(or), ^ (xor),~ (not)
de translaie: <<, >>, >>> (shift la dreapta fr semn)
if-else:
expresie-logica ? val-true: val-false
Operatorul , (virgul) folosit pentru evaluarea secvenial a operaiilor:
int x=0, y=1, z=2;
Operatorul + pentru concatenarea irurilor

String s1="Ana";
String s2="mere";
int x=10;
System.out.println(s1 + " are " + x + " " + s2);
Operatori pentru conversii (cast) : (tip-de-data)
int a = (int)a;
char c = (char)96;
int i = 200;
long l = (long)i; //widening conversion
long l2 = (long)200;
int i2 = (int)l2; //narrowing conversion
Comentarii
Exist trei feluri de comentarii:
Comentarii pe mai multe linii, nchise ntre /*i */.
Comentarii pe mai multe linii care in de documentaie, nchise ntre /** i */.
Textul dintre cele dou secvene este automat mutat n documentaia aplicaiei de ctre
generatorul automat de documentaie javadoc.
Comentarii pe o singur linie, care incep cu //.
Tipuri de date
Tipurile primitive:
aritmetice
ntregi: byte (1 octet), short(2), int (4), long(8)
reale: float (4), double (8)
caracter: char (2)
logic: boolean (true i false)
Tipul referin:
Vectorii, clasele i interfeele
Valoarea unei variabile de acest tip este, spre deosebire de tipurile primitive, o
referin (adres de memorie) ctre valoarea sau mulimea de valori reprezentat de
variabila respectiv.
Nu exist: pointer, struct i union.
Variabile
Declararea variabilelor:
Tip numeVariabila;
Iniializarea variabilelor:
Tip numeVariabila = valoare;
Declararea constantelor:
final Tip numeVariabila;
final double PI = 3.14;
int valoare = 100;
long numarElemente = 12345678L;
String bauturaMeaPreferata = "apa";

Categorii variabile
a. Variabile membre ale unei clase, declarate n interiorul unei clase, vizibile pentru toate
metodele clasei respective ct i pentru alte clase n funcie de nivelul lor de acces
b. Parametrii metodelor, vizibili doar n metoda respectiv
c. Variabile locale, declarate ntr-o metod, vizibile doar n metoda respectiv
d. Variabile locale, declarate ntr-un bloc, vizibile doar n blocul respectiv.
e. Parametrii de la tratarea excepiilor

Adrese utile
www.java.com
Toat lumea
www.java.net
Comunitate
java.sun.com
Dezvoltatori
jguru.com
Cursuri
jars.com
Resurse
javaworld.com, javareport.com
Articole
www.exampledepot.com
Exemple de cod
google:java