Sunteți pe pagina 1din 6

Curs 3 - Programarea calculatoarelor i limbaje de programare

Structuri de control
Instruciuni
Instruciuni de decizie:
if-else, switch-case
Instruciuni de salt:
for, while, do-while
Instruciuni pentru tratarea excepiilor:
try-catch-finally, throw
Alte instruciuni:
break, continue, return, label.
Instruciuni de decizie
lif-else
if (expresie-logica) {
...
}
Sau:
if (expresie-logica) {
...
} else {
...
}
switch-case
switch (variabila) {
case valoare1:
...
break;
case valoare2:
...
break;
default:
...
}
Instruciuni de salt
for
for(initializare; expresie-logica; pas-iteratie) {
//Corpul buclei
}
Exemplu:
for(int i=0, j=100 ; i < 100 && j > 0; i++, j--) {
...
}

while
while (expresie-logica) {
...
}
do-while
do {
...
} while (expresie-logica);

class Exemplu {
int a;
public void metoda(int b) {
a = b;
int c = 10;
for(int d=0; d < 10; d++) {
c --;
}
try {
a = b/c;
} catch(ArithmeticException e) {
System.err.println(e.getMessage());
}
}
}
Alte instruciuni
break: prsete forat corpul unei structuri repetitive.
continue: termin forat iteraia curent a unui ciclu i trece la urmtoarea iteraie.
return [valoare]: termin o metod i, eventual, returneaz o valoare.
numeEticheta: definete o etichet.
Nu exist goto
Pot fi definite etichete folosite astfel:
break numeEticheata
continue numeEticheta
Exemplu de folosire a etichetelor
i=0;
eticheta:
while (i < 10) {
System.out.println("i="+i);
j=0;
while (j < 10) {
j++;
if (j==5) continue eticheta;
//sau: if (j==5) break eticheta;
System.out.println("j="+j);
}

i++;
}
Vectori
Declararea
Tip[] numeVector; sau
Tip numeVector[];
Instanierea
numeVector = new Tip[nrElemente];
Iniializarea (opional)
String culori[] ={"Rosu", "Galben"};
v = new int[10];
//aloca spatiu pentru 10 intregi: 40 octeti
c = new char[10];
//aloca spatiu pentru 10 caractere: 20 octeti
Declararea i instanierea pot fi fcute simultan:
Tip[] numeVector = new Tip[nrElemente];
Primul indice al unui vector este 0, deci poziiile unui vector cu n elemente vor fi
cuprinse ntre 0 i n - 1.
Nu sunt permise construcii de genul Tip numeVector[nrElemente], alocarea
memoriei fcndu-se doar prin intermediul operatorului new.
int v[10]; //ilegal
int v[] = new int[10]; //corect
Tablouri multidimensionale
Tablou multidimensional = vector de vectori.
Tip mat[][] = new Tip[nrLinii][nrColoane];
mat[i] este linia i a matricii i reprezint un vector cu nrColoane elemente iar mat[i][j]
este elementul de pe linia i i coloana j.
Dimensiunea unui vector - length:
int []a = new int[5];
// a.length are valoarea 5
int m[][] = new int[5][10];
// m[0].length are valoarea 10
Copierea vectorilor
int a[] = {1, 2, 3, 4};
int b[] = new int[4];
// Varianta 1
for(int i=0; i<a.length; i++)
b[i] = a[i];

// Varianta 2
System.arrayCopy(a, 0, b, 0, a.length);
// Nu are efectul dorit
b = a;
iruri de caractere
char[]
String
String s = "abc";
String s = new String("abc");
char data[] = {a, b, c};
String s = new String(data);
StringBuffer = Un ir de caractere constant (nu se doresc schimbri n poriuni din coninutul
su pe parcursul execuiei programului) va fi declarat de tipul String, altfel va fi declarat de tip
StringBuffer. StringBuffer pune la dispoziie metode pentru modificarea coninutului irului,
cum ar fi: append, insert, delete, reverse.
Uzual, cea mai folosit modalitate de a lucra cu iruri este prin intermediul clasei String.
Clasa StringBuffer va fi utilizat predominant n aplicaii dedicate procesrii textelor cum
ar fi editoarele de texte.
String s1="asd",s2="";
s1=s2+"a";
System.out.println(s1+" "+s2);
iruri de caractere
Concatenarea: +
String s1 = "ab" + "cd";
String s2 = s1 + 123 + "xyz"
extrem de flexibil, permite concatenarea irurilor cu obiecte de orice tip care au o reprezentare
de tip ir de caractere.
Exemple:
System.out.print("Vectorul v are" + v.length + "elem.");
String x = "a" + 1 + "b;
De fapt:
String x = new StringBuffer().append("a").append(1).
append("b").toString()
Constructori
Obiectele se genereaz i se pot iniializa la instaniere cu ajutorul constructorilor.
Constructorii
sunt funcii membru ce au acelai nume cu numele clasei.
funcii apelate automat la crearea obiectelor.
Valorile de iniializare se transfer constructorului i ele joac acelai rol ca parametrii efectivi
de la apelurile funciilor obinuite.

Se pot defini mai muli constructori pentru o clas. n acest caz ei au acelai nume, dar difer
prin numrul i/sau tipurile parametrilor.
Dac exist mai muli constructori, atunci la iniializare se utilizeaz regulile de la apelurile
funciilor suprancrcate.
Funciile constructor nu ntorc valori, dar nu sunt precedai de cuvntul void.
Dac clasa nu conine constructori, se genereaz un constructor fr parametri, adic un
constructor implicit. El are rolul numai de alocare a obiectelor clasei respective, fr a le

iniializa

Exemplu:
class Complex {
double real;
double imag;
public Complex(double x, double y)
{real = x; imag = y;}
public Complex ( )
{real = 0; imag = 0;}
}
Exemple de instaniere:
Complex z= new Complex(); // z = 0 + 0*i
Complex z1= new Complex(1,0); // z1 = 1 + 0*i
Realizarea ncapsulrii datelor
Accesul la datele sau funciile membre ale unei clase din orice punct al domeniului de definiie
al clasei s-ar putea rezolva simplu prin declararea de tip public a acestora. O astfel de
implementare nu respect principiul ncapsulrii datelor i se recomand s fie evitat.
Din punct de vedere al dreptului de acces la membrii clasei, o clas bine definit permite
ncapsularea (sau ascunderea informaiilor), prin care un obiect poate ascunde celor care-l
folosesc modul de implementare, prin interzicerea accesului la datele i funciile private sau
protected.
In general, respectnd principiul ncapsulrii, datele membre sunt declarate private sau
protected i nu pot fi accesate direct (pentru citire sau scriere) din funcii nemembre ale clasei.
Pentru citirea sau modificarea unora dintre datele membre protejate n clasa respectiv se pot
prevedea funcii membre de tip public, care pot fi apelate din orice punct al domeniului de
definiie al clasei i fac parte din interfaa clasei.
De exemplu, pentru clasa Complex, o implementare care respect principiul ncapsulrii, dar,
n acelai timp permite accesul la datele private ale clasei poate arta astfel:
class Complex {
private double real;
private double imag;
public Complex(double x, double y)
{real = x; imag = y;}
public Complex ( )

{real = 0; imag = 0;}


public void set(double x, double y)
{ re = x; im = y; }
public void setre(double x)
{ re = x;}
public void setim(double y)
{ im = y; }
public double getre(){
return re;}
public double getim() {
return im;}
public void display(){
System.out.println(re+++im+i);}
}
class test{
public static void main(String arg[]){
Complex c1=new Complex(),
c2=new Complex(1,1);
c1.set(7, 9);
c1.display(); // afiseaza 7 +9*i
c1.setre(3);
c1.setim(8);
c1.display(); // afiseaza 3+8*i
}
}