Documente Academic
Documente Profesional
Documente Cultură
Scurt istoric
#include <iostream>
using namespace std;
void main()
{
int a, b, x, y;
cout << "a= ";
cin >> a;
cout << "b= ";
cin >> b;
cout << "x= ";
cin >> x;
cout << "y= ";
cin >> y;
void desenez()
{
// Se deseneaza dreptunghiul
}
DeclaraŃii
Metode (funcŃii) de variabile
b = bb;
x = xx;
y = yy;
}
ObservaŃii:
s1 = dreptungh1.arie();
Utilizarea claselor
În exemplele precedente, dreptung1 şi dreptung2 sunt obiecte din
clasa dreptunghi sau, altfel spus, instanŃe ale clasei dreptunghi. Ele au
fost realizate folosind intrerfaŃa grafică a aplicaŃiei.
/**
* Constructor for objects of class figuri
*/
public figuri()
{
// initialise instance variables
d1 = new dreptunghi(20,30,2,0);
127
d2 = new dreptunghi(20,30,2,0);
}
}
Faptul că noua clasă foloseşte clasa dreptunghi trebuie indicat prin
selectarea butonului (Insert a ‘uses’ relation) urmat de indicarea cu
mouse-ul în fereastra aplicaŃiei a claselor figuri şi dreptunghi. RelaŃia va fi
reprezentată printr-o linie punctată.
După crearea unui obiect din clasa figuri se poate vedea conŃinutul
acestuia.
128
Clase derivate
/**
* Constructor for objects of class dreptunghi
*/
public dreptunghi(int aa, int bb, int xx, int yy)
{
// initialise instance variables
super(xx, yy);
a = aa;
b = bb;
}
Clasa cerc, derivată tot din punct, conŃine în plus variabila întreagă r. Ca şi în
cazul clasei dreptunghi, în clasa cerc sunt adăugate metodele arie() şi perim() şi este
suprascrisă metoda desenez().
ObservaŃii:
1. RelaŃia de derivare este exprimată prin clauza extends ...:
public class cerc extends punct ...
FuncŃiile declarate public getXPos() şi setXPos() vor putea fi apelate atât din
clasele derivate cât şi din oricare altă clasă a aplicaŃiei în care există obiecte
din clasa Geom.
Accesul în cadrul unei clase derivate la variabilele clasei de bază poate fi
realizat şi direct, fără utilizarea unor functii de acces, dacă în loc de private
acestea sunt declarate protected.
Exemplu:
protected int xPos; // variabila clasei Geom accesibila si in cls. derivate
/**
* Constructor for objects of class figuri
*/
public figuri()
{
// initialise instance variables
p1 = new punct(20, 30);
d1 = new dreptunghi(32,24,20,30);
p2 = new punct(45, 34);
d2 = new dreptunghi(20,30,45,34);
p3 = new punct(65, 75);
c = new cerc(124, 65, 75);
System.out.println("Aria dreptunghiului d1 este " + d1.arie());
System.out.println("Perim. dreptunghiului d1 este " + d1.perim());
System.out.println("Aria cercului c este " + c.arie());
System.out.println("Perim cercului c este " + c.perim());
double s_arii = d1.arie() + d2.arie() + c.arie();
double s_perim = d1.perim() + d2.perim() + c.perim();
}
134
Anexă
Un program scris în limbajul Java este supus unei compilări în urma căreia se
obŃine un cod intermediar (cod de octeŃi) care este apoi interpretat şi executat de o
aplicaŃie specializată, care poate fi asimilată unui procesor virtual. Această aplicaŃie
poartă denumirea de "maşină virtuală java" (eng. Java Virtual Machine, JVM
denumită mai nou JRE – Java Runtime Environment). Codul rezultat în urma
compilării poate fi transferat şi apoi executat pe orice calculator pe care există instalat
JVM. Site-ul firmei Sun oferă spre descărcare, gratuit, aplicaŃia JVM pentru toate
sistemele de operare majore.
Fiind derivat din C++, limbajul Java nu pune probleme dificile celor care
cunosc acest limbaj. De aceea prezentarea elementelor fundamentale ale limbajului
va fi realizată foarte succint.
Comentarii
Programele Java conŃin explicaŃii sub forma unor comentarii. Acestea vor
asigura în timp înŃelegerea diferitelor metode şi rolul funcŃional al variabilelor folosite.
Într-un program scris în Java pot fi folosite două tipuri de comentarii:
• comentarii "în linie", introduse prin //. Un astfel de comentariu se încheie
la sfârşitul liniei curente;
• comentarii pe unul sau mai multe rânduri consecutive. Zona care conŃine
comentariul este delimitată prin /* (comentariu) */.
136
De regulă se folosesc comentariile în linie, cel de-al doilea tip fiind folosit
frecvent în timpul depanării programelor mari şi complexe, pentru a suprima din
program anumite zone.
Comentariile care încep cu /** sunt prelucrate de aplicaŃia javadoc pentru
realizarea automată a unei pagini web conŃinând comentariile programatorului.
Această facilitate este folosită pentru documentarea rapidă a programelor mari,
compuse din mai multe clase.
Variabile
În Java numele unei variabile, metode sau clase poate fi orice combinaŃie de
litere şi cifre, începând cu o literă. Caracterele '_' (underscore) şi '$' sunt considerate
litere şi pot intra în construcŃia numelor. Nu pot fi folosite ca nume cuvintele
rezervate folosite la definirea limbajului.
Cuvânt cheie
Descriere Mărime/Reprezentare internă
pt. declarare
(numere întregi)
byte Întreg reprezentat pe un octet 8-biŃi, repr. in compl. faŃă de 2
short Întreg scurt 16-biŃi, repr. in compl. faŃă de 2
int Intreg 32-biŃi, repr. in compl. faŃă de 2
long Întreg lung 64-biŃi, repr. in compl. faŃă de 2
(numere reale)
float Simplă precizie 32-biŃi, IEEE 754
double Dublă precizie 64-biŃi IEEE 754
(alte tipuri)
char Un caracter 16-biŃi, repr. Unicode
boolean O valoare logică true sau false
Spre deosebire de alte limbaje, în Java informaŃiile din tabelul precedent sunt
valabile indiferent de calculatorul pe care se execută programul.
Şiruri
Pentru a utiliza un şir, în Java trebuie declarat şi apoi realizată alocarea
memoriei necesare.
Exemple fundamentale:
int a[]; // Se poate scrie si int [] a;
a = new int[7];
int b[] = {1, 3, 4, 6, 10};
Şirurile pot avea două sau chiar mai multe dimensiuni. Exemplu:
int [ ] [ ] c;
c = new int [3] [4];
c[0] [2] = 17;
System.out.println("c(0,2) ="+c[0] [2]);
Clasa String
În Java şirurile de caractere sunt obiecte aparŃinând clasei String. Declararea
unui şir de caractere poate fi realizată fie scriind:
Unirea mai multor obiecte de tip String anterior definite se realizează folosind
operatorul '+', astfel:
String trei;
trei=unu+" & " + doi; // rezultat "Thomas & Jerry"
Literali
În timpul scrierii unui program, programatorul foloseşte frecvent literali.
Literalii sunt valori aparŃinând tipurilor primitive prezentate. Compilatorul analizează
aceste valori, le stabileşte tipul, le converteşte şi le memorează în locaŃii din
memorie. De exemplu, în clasa Greutate apărea atribuirea:
h = 178;
Compilatorul va asocia literalului "178" tipul int., va face conversia în binar
corespunzătoare şi va memora rezultatul într-o zonă din memorie având o lungime
de 4 octeŃi. La fel, în expresia greutăŃii:
g = 50.0+0.75*(h-150)+0.25*(v-20);
140
compilatorul va considera că 50.0, 0.75 şi 0.25 sunt double (numere reale în dublă
precizie) iar 150 şi 20 sunt int (numere întregi).
Exemple fundamentale:
8864L long
37.266 double
37.266D double
87.363F float
26.77e3 double
'c' char
true boolean
false boolean
Conversiile de tip
Când într-o expresie intervin operanzi de tipuri diferite, operanzii
corespunzând unui tip mai restrictiv se convertesc automat spre tipul mai general
astfel încât nu se produce pierdere de informaŃie.
Dacă rezultatul unei expresii este float sau double şi este atribuit unei
variabile de tip întreg, compilatorul va sesiza posibila pierdere de informaŃie şi va
semnala o eroare.
int n = 5 ;
x = n++ ; x = ++n ;
atribuie 5 lui x atribuie 6 lui x
În general în Java,
exp1 op= exp2 ; echivalează cu
exp1 = exp1 op (exp2) ;
unde op este + - * / %.
Exemplu fundamental:
x *= y + 1 ;
echivalează cu :
x = x * (y + 1) ;
şi nu cu
x=x*y+1;
Expresiile condiŃionale
Pentru a calcula expresia z = max(a, b) ;
se poate scrie
143
if (a > b)
max = a ;
else
max = b ;
InstrucŃiunea de decidere - if
InstrucŃiunea while
InstrucŃiunea while permite realizarea unei structuri repetitive (ciclu)
condiŃionate anterior. Corpul ciclului poate fi executat o dată, de mai multe ori sau de
loc.
Exemplu fundamental:
int contor = 1;
while ( contor <= 3 )
{
System.out.println("Contor = "+contor);
contor = contor + 1; // sau mai bine contor++
}
System.out.println("La revedere!");
InstrucŃiunea do
Pentru astfel de cazuri există însă şi o cale mai simplă, respectiv folosirea
instrucŃiunii do.
Exemplu:
g = 9.81;
t = 0;
do
{
d = (g * t * t ) / 2;
System.out.println( t + " " + d);
t = t + 1;
}
while (d <= 500);
InstrucŃiunea for
InstrucŃiunea for este preferată ori de câte ori trebuie realizat un ciclu care
foloseşte un contor. Ea poate fi însă folosită însă în toate cazurile în care trebuie să
realizăm un ciclu, şi reprezintă o modalitate compactă şi elegantă de scriere a
acestora.
Dacă înaintea unui ciclu trebuie realizate mai multe iniŃializări, acestea pot
scrise în for una după alta, despărŃite prin virgule:
class Suma
{
public static void main ( String[] args )
{
int [] a = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int i, sum;
for (i=0,sum = 0; i<a.length; i++)
sum = sum + a[i];
System.out.println("Suma elementelor sirului a este: "+sum);
}
}
Oricare dintre cele trei părŃi ale instrucŃiunii for pot lipsi. Lipsa condiŃiei de
reluare este echivalentă cu a scrie o condiŃie care este întotdeauna adevărată.
Ieşirea dintr-un astfel de ciclu se poate face folosind instrucŃiunea break.
Exemplu:
146
for ( ; ; )
{
..
break;
..
}
InstrucŃiunea switch
InstrucŃiunile de ciclare prezentate, while, do şi for sunt folosite pentru
realizarea blocurilor de instrucŃiuni a căror execuŃie începe cu prima linie şi este
controlată de către programator. InstrucŃiunea switch este folosită tot pentru a
construi un bloc de instrucŃiuni dar punctul de unde începe execuŃia depinde de
valoarea unei expresii având valori întregi.
Sintaxa instrucŃiunii este:
switch (expresie)
{
case constanta_1 : instrucŃiuni
case constanta_2 : instrucŃiuni
...
default : instrucŃiuni;
}
Fiecare dintre punctele de unde poate începe execuŃia blocului este etichetat
printr-o constantă având valoare întreagă. Dacă expresia de testat corespunde uneia
dintre constante, execuŃia blocului începe din punctul indicat de aceasta.
Cazul default este facultativ.
Exemplu :
switch (t)
{
case 's' :
rez = Math.sin(Math.PI * x / 180.);
System.out.println("rezultatul este : "+rez);
break;
case 'c' :
147
Exemple:
p1.translatez(3, 10); // abscisa si ordonata punctului p1 sunt modificate
y = r * Math.sin(x); // sin() este o metodă statică a clasei Math
k = Integer.parseInt(args[1]); // parseInt() este o met. statică a clasei Integer
Vizibilitatea variabilelor
Vizibilitatea unei variabile se defineşte ca zona din program în care aceasta
este cunoscută deci poate fi accesată. Regulile privind vizibilitatea variabilelor în
Java pot fi reprezentate grafic.
class vizvar {
zona de vizib. a
var. clasei
declaraŃii variabile membre
zona de vizib. a
param. excepŃiei
}
Din punct de vedere al locului declarării, o variabilă poate fi membră a clasei
(declarată în afara oricărei metode) sau locală (declarată în interiorul unei metode, de
obicei la la începutul acesteia sau la începutul unui bloc din interiorul acesteia).
Variabilele locale aparŃinând unor blocuri separate sunt diferite, chiar dacă
poartă acelaşi nume. Se recomandă totuşi folosirea unor nume de variabile distincte
şi mai ales sugestive, care să ajute programatorul în urmărirea logicii programului.
Unei variabile membre a clasei i se alocă spaŃiu în memorie în momentul
creării unei instanŃe a clasei folosind operatorul new.
Variabilele locale există pe timpul execuŃiei blocului în care au fost declarate şi
îşi încetează existenŃa în momentul ieşirii din acesta.