Sunteți pe pagina 1din 10

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++; } Ce este un pachet ? Pachet = Colecie de clase i interfee Scopul: Organizarea lucrului Gsirea i utilizarea mai uoar a claselor Evitarea conflictelor de nume Controlul accesului Pachetele standard java.lang - clasele de baz ale limbajului Java java.io - intrri/ieiri, lucrul cu fiiere java.util - clase i interfee utile java.applet - dezvoltarea de appleturi java.awt - interfaa grafic cu utilizatorul java.awt.event - tratare evenimente java.beans - scrierea de componente reutilizabile java.net - programare de reea java.sql - lucrul cu baze de date java.rmi - execuie la distan java.security - mecanisme de securitate java.math - operaii matematice cu numere mari java.text - lucrul cu texte, date i numereindependent de limb java.lang.reflect - introspecie javax.swing - interfaa grafic cu utilizatorul, mult mbogit fa de AWT. Folosirea membrilor unui pachet specificarea numelui complet: numePachet.NumeClasa. Button - numele scurt al clasei java.awt - pachetul din care face parte java.awt.Button - numele complet al clasei Importul unei clase sau interfee Importul clasei respective import numePachet.numeClasa; //Pentru exemplul nostru: import java.awt.Button; import java.awt.TextField; ... Button b1 = new Button("OK"); Button b2 = new Button("Cancel"); TextField tf1 = new TextField("Placut"); TextField tf2 = new TextField("Foarte placut"); //Problema: import java.awt.Button; import java.awt.TextField;

import java.awt.Rectangle; import java.awt.Line; import java.awt.Point; import java.awt.Polygon; importul ntregului pachet import numePachet.*; //Pentru exemplul nostru: import java.awt.*; ... Button b = new Button("OK"); Point p = new Point(0, 0); import java.awt.C*; = eroare Importate automat: pachetul java.lang pachetul curent pachetul implicit (fr nume) Crearea unui pachet package numePachet; //Fisierul Graf.java package grafuri; class Graf {...} class GrafPerfect extends Graf {...} //Fisierul Arbore.java package grafuri; class Arbore {...} class ArboreBinar extends Arbore {...} 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- variabila 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*

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.2, 9.3); c1.display(); // afiseaza 7.2 9.3 c1.setre(1.3); c1.setim(2.8); c1.display(); // afiseaza 1.3 2.8 } }

} Clase abstracte Sunt clasele pentru care programatorul nu intenioneaz s instanieze obiecte. clase de baz in ierarhii se mai numesc clase abstracte de baz O clas devine abstract dac conine una sau mai multe declaraii de funcii abstracte Dac o clas ce motenete o clas ce conine o funcie abstract nu implementeaz acea funcie abstract motenit, devine ea nsi o clas abstract. OBS: clasele pentru care se pot instania obiecte se numesc clase concrete.

Clasa String. Metode si exemple


Crearea unui ir Constructorul implicit creaz un ir vid: String s = new String(); String str = "abc"; este echivalent cu: char data[] = {'a', 'b', 'c'}; String str = new String(data); OBS. Dac elementele din vectorul data sunt modificate dup crearea irului str, atunci aceste modificri nu apar n acest ir. Construirea unui ir pe baza altui ir: String str2 = new String(str); Operaii cu iruri Metoda length() returneaz lungimea unui ir Ex: System.out.println(Hello.length()); // afieaz 5 Operatorul + este utilizat pentru concatenarea a dou sau mai multe iruri Ex: String myname = Harry; String str = My name is + myname+ .; Caracterele dintr-un ir pot fi accesate astfel: public char charAt(int index); Returneaz caracterul din poziia index. Domeniul de indexare este de la 0 la length() - 1. Ex. char ch; ch = abc.charAt(1); // ch = b getChars() - Copiaz caracterele din irul surs n irul destinaie public void getChars(int srcBegin, int srcEnd,char[] dst, int dstBegin) srcBegin indexul primului caracter din surs srcEnd indexul ultimului caracter din surs dst vectorul destinaie dstBegin poziia de la care ncepe copierea n vectorul destinaie lequals() Compar dou iruri la egalitate public boolean equals(String s2)

equalsIgnoreCase()- Compar dou iruri la egalitate fr s in cont de litere mici sau mari public boolean equalsIgnoreCase(String s2) startsWith() Testeaz dac irul ncepe cu prefixul specificat (la nceput sau dintr-o anumit poziie) public boolean startsWith(String prefix) Ex.Figure.startsWith(Fig); // true public boolean startsWith(String prefix, int toffset) Ex.figure.startsWith(gure, 2); // true endsWith() - Testeaz dac irul se termin cu sufixul specificat public boolean endsWith(String suffix) Ex. Figure.endsWith(re); // true compareTo() Compar dou iruri din punct de vedere lexicografic Rezultatul este: Negativ, dac irul precede irul primit ca argument Zero, dac irurile sunt egale Pozitiv, dac irul urmeaz irului primit ca argument public int compareTo(String anotherString) public int compareToIgnoreCase(String str) indexOf Caut prima apariie a unui caracter sau ir ntr-un alt ir. Returneaz -1 dac nu l gsete. public int indexOf(int ch) public int indexOf(String str) Ex. String str = How was your day today?; str.indexOf(o); // 1 str.indexOf(was); //4 cutare ncepnd de la o poziie specificat: public int indexOf(int ch, int fromIndex) public int indexOf(String str, int fromIndex) Ex. String str = How was your day today?; str.indexOf(a, 6); //14 str.indexOf(was, 2); //4 lastIndexOf() - Caut ultima apariie a unui caracter sau ir ntr-un alt ir, similar lui indexOf. concat() Concateneaz irul specificat la irul surs public String concat(String str) "to".concat("get").concat("her"); // returneaz "together" replace()- Returneaz un nou ir n care toate apariiile caracterului oldChar sunt nlocuite cu caracterul newChar. public String replace(char oldChar, char newChar) Ex. "mesquite in your cellar".replace('e', 'o'); returneaz "mosquito in your collar" toLowerCase(): Convertete toate caracterele la litere mici public String toLowerCase()

toUpperCase(): Convertete toate caracterele la litere mari public String toUpperCase() Ex: HELLO THERE.toLowerCase(); hello there.toUpperCase();