Sunteți pe pagina 1din 35

Metode avansate de programare

2011 Curs 1

Obiective
Introducere in analiza si proiectarea sistemelor soft folosind paradigma orientata obiect. Aprofundarea programarii orientata obiect (limbajul Java). Interfete grafice Sabloane de proiectare Spring

Bibliografie
Bruce Eckel, Thinking in Java, Ed. Prentice Hall, 4th edition, 2006. E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns Elements of Reusable Object Oriented Software, Ed. Addison Wesley, 1994. Kent Beck, Test Driven Development: By Example, Ed. Addison-Wesley Professional, 2002. Craig Larman, Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, Ed. Addison Wesley, 2004. Tutoriale Java http://download.oracle.com/javase/tutorial/

Nota finala
Nota laborator, L, 40%. Nota examen scris, S, 25%. Nota examen practic, P, 35%. Nota finala, NF=(40*L+25*S+35*P)/100. Conditii: L>=5, P>=5.

Continut curs 1
Introducere in analiza si proiectarea orientata obiect. Introducere in Java. Elemente de baza

Introducere in analiza si proiectarea OO


Dezvoltarea unui sistem soft se face iterativ si incremental:
iterativ: sistemul soft se dezvolta in mai multe iteratii; incremental: la fiecare iteratie se adauga noi functionalitati versiunii precedente. La sfarsitul unei iteratii, versiunea curenta a sistemului soft este stabila (testata si fara erori !).

Introducere in analiza si proiectarea OO


Etape intr-o iteratie:
Determinarea cerintelor Analiza cerintelor Proiectare Implementare Testare

Introducere in analiza si proiectarea OO


Determinarea cerintelor:
Tehnica cazurilor de utilizare (eng. use cases) nu este specifica OO Un caz de utilizare (CU) este o secventa de actiuni dintre utilizatorul sistemului si sistemul soft care are ca scop indeplinirea unei sarcini de catre utilizator. Definitie UML: o multime de actiuni realizate de sistemul soft pentru a furniza o valoare unui actor particular. Notatia UML:

Introducere in analiza si proiectarea OO


Specificarea unui caz de utilizare:
Caz de utilizare: Numele cazului de utilizare Descriere: o scurta descriere a cazului de utilizare Scenariu: Descrierea interactiunii dintre utilizator si sistem Scenarii alternative: exceptii de la scenariul descris anterior Preconditii: Postconditii: Cerinte speciale: performanta, timp de executie, etc.

Observatie: Specificarea poate sa contina diagrame aditionale, o schita a interfetei grafice, etc.

Introducere in analiza si proiectarea OO


Exemplu:
Se doreste dezvoltarea unui sistem soft pentru gestiunea rezervarilor la o firma de transport persoane.

Specificarea CU: Rezerva loc


Caz de utilizare: Rezerva loc Descriere: Cazul de utilizare descrie cum face angajatul firmei o rezervare Scenariu: CU incepe cand un client vrea sa rezerve locuri (la sediul firmei sau telefonic) 1. Angajatul selecteaza rezervarea unui loc. 2. Sistemul afiseaza rutele disponibile. 3. Angajatul selecteaza o ruta. 4. Sistemul afiseaza cursele existente (data si ora plecarii). 5. Angajatul selecteaza cursa dorita. 6. Angajatul introduce numele clientului si numarul de locuri. 7. Angajatul face rezervarea pentru cursa aleasa. 8. Sistemul actualizeaza numarul de locuri disponibile pentru cursa selectata. 9. Sistemul creaza o noua rezervare cu datele introduse. 10. Sistemul afiseaza numarul locului (numerele locurilor) rezervat(e). 11. Cazul de utilizare se termina.

Specificarea CU: Rezerva loc (continuare)


Scenarii alternative:
A1. La pasul 5, nu exista locuri disponibile pentru cursa dorita. Se afiseaza un mesaj corespunzator si cazul de utilizare se termina. A2. La pasul 8, nu exista atatea locuri disponibile. Se afiseaza un mesaj corespunzator si cazul de utilizare se termina.

Preconditii:
Angajatul trebuie sa fie autentificat pentru a putea folosi sistemul.

Postconditii:
Daca rezervarea s-a efectuat cu succes, o noua inregistrare a fost creata in baza de date pentru rezervare, si numarul de locuri disponibile pentru cursa aleasa a fost actualizat. Daca rezervarea a esuat, baza de date ramane nemodificata.

Cerinte speciale:
O rezervare nu ar trebui sa dureze mai mult de 1 minut.

Introducere in analiza si proiectarea OO


Etape:
Determinarea cerintelor Analiza cerintelor: concepte, modelul conceptual Proiectare: clase, diagrame de secventa, diagrama de clase Implementare Testare

Introducere in limbajul Java


Caracteristici:
simplu orientat obiect robust independent de platforma ...

Introducere in limbajul Java

Introducere
Variabile
Declararea variabilelor:
tip nume_var1[=expresie1][, nume_var2[=expresie2]];

Tipuri de date primitive


Tip boolean byte short int long float double char Nr. octeti 1 octet 2 octeti 4 octeti 8 octeti 4 octeti 8 octeti 2 octeti Valori true, false -128 +127 -215 215-1 -231 231-1 -263 263-1 IEEE754 IEEE754 Unicode 0, Unicode 216-1 Valoare implicita false (byte)0 (short)0 0 0L 0.0f 0.0d \u0000 (null)

Introducere
Exemple
boolean gasit=true; int numar=34, suma; float eroare=0.45; char litera=c; litera=f; litera=litera+1;

Introducere - Comentarii
3 moduri:
1. // toata linia 2. /* mai multe

linii */
3. /**

mai multe liniii*/

Observatie: Modalitatile nu pot fi incuibate.


/* /* */ */ /* // // */

Introducere
Constante:
Declararea:
final tip nume_constanta[=valoare];

Exemple: a) final b) final


MAX=100; int MAX=100;

int MAX;

MAX=150; //eroare

Tablouri
Unidimensionale: definirea unui tablou se face in 2 pasi
Declararea:
tip[] nume_ tablou; tip nume_ tablou[];

Crearea:
nume_tablou=new tip[dim]; //se aloca spatiul in memorie //indexarea 0 dim-1

Referirea unui element: nume_tablou[index]

Exemple:
float[] vec; vec=new float[10]; int[] sir=new int[3]; float tmp[]; tmp=vec; //vec si tmp refera acelasi tablou

Tablouri unidimensionale
Variabila length: returneaza dimensiunea tabloului.
int[] sir=new int[5]; int lung_sir=sir.length; sir[0]=sir.length; sir.length=2; int[] y; int lung_y=y.length; //eroare, y nu a fost inca creat //eroare //lung=5;

double[] t=new double[0]; int lung_t=t.length; t[0]=2.3 //lung_t=?; //?

Creare si initializare
int[] dx={-1,0, 1};

Tablouri n-dimensionale rectangulare


Declararea:
tip nume_tablou[][][][]; tip[][][][] nume_tablou;

Crearea:
nume_tablou=new tip[dim1][dim2][dimn];

Referirea unui element:


nume_tablou[index1][index2][indexn];

Exemple:
int[][] a; a=new int[5][5]; a[0][0]=2; int x=a[2][2]; //x=?

Tablouri n-dimensionale nerectangulare


Exemple:
int[][] a=new int[3][]; for(int i=0;i<3;i++) a[i]=new int[i+1]; int x=a.length; int y=a[2].length; //x=? //y=?

Declarare+creare+initializare:
char[][] lit={{a},{b}}; int[][] b={{1,2}, {2,5,8}, {1}}; double[][] mat=new double[][]{{1.3, 0.5}, {2.3, 4.5}};

Siruri de caractere
char[] sir={a,n,a}; //compararea si tiparirea se //fac caracter cu caracter sir[0]=A;

Constante siruri de caractere:


Ana are mere; //obiect de tip String

Clasa String:
String s=abc; s=s+123; t+=12; //concatenarea a 2 siruri //t=?, s=? String t=s; //t=abc123

Observatii: Caracterele nu pot fi modificate:


char c=t.charAt(0); t[0]=A;

Lungimea sirului, metoda

length(): int lun=s.length();

Egalitatea a doua siruri de caractere, metoda equals(): t.equals(s) Compararea a doua siruri, metoda
compareTo(): int rez=t.compareTo(s)

Operatori
aritmetici:
+, -, *, /, % >=, <, <=, !=, == ++, --

relationali: >,
prefixat: postfixat:

incrementare/decrementare:
int a=2;

int b=++a; //a=?, b=? int a=2; int b=a++; //a=?, b=? =, +=, -=, *=, /= &&, ||, ! >>, <<, >>>, &, |, ~ (not), ^ (sau exclusiv)

atribuirea: pe biti:
-

conditionali:

shift

- conditionali operatorul ternar:


?:

ex: expresie_logica ? expresie1 : expresie2 Daca expresie_logica este adevarata atunci expresie1 altfel expresie2

Prioritatea operatorilor
Prioritatea 1. Postfix 2. Unari 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Operatori expr++ expr-++expr --expr +expr -expr ~ ! * / % + << >> >>> < > <= >= instanceof == != & ^ | && || ? : = += -= *= /= %= &= ^= |= <<= >>= >>>=

Instructiuni
Instructiunea compusa:
{ instructiune1; instructiune2; }

Daca:
if (expresie_logica) instructiune; if (expresie_logica) instructiune1; else instructiune2;

Obs: expresie_logica trebuie sa se evalueze la true sau


accepta valori numerice.

false.

Nu se

Instructiuni
Instructiunea while:
while(expresie_booleana) instructiune

Instructiunea do-while:
do instructiune while(expresie_booleana);

Obs: Instructiunea este executata pana cand expresia_booleana devine false.

Instructiuni
Instructiunea for:
for(initializari; expresie_booleana; pas) instructiune

Obs: Oricare din expresiile initializari, poate sa lipseasca. int suma=0;


for(int i=1;i<10;i++) suma+=i; for(int i=0,suma=0;i<10;i++) suma+=i; for(;;) // instructiune

expresie_booleana, pas

Instructiuni
Sintaxa foreach (JSE >=5):
for(Tip numeElem : numeTablou) instructiune; int[] x={1, 4, 6, 9, 10}; for(int el:x) System.out.println(el); for(int i=0;i<x.length;i++) System.out.println(x[i]);

Obs: Folosind foreach valorile din tablou nu pot fi modificate:


int[] x={1,4,6,10}; for(int el:x){ System.out.print( +el); el+=2; } //1 4 6 10 for(int e:x){ System.out.print( +e); }

//?

Instructiuni
Instructiunea return:
return; return valoare;

Instructiunea

break:

opreste executia unei iteratii.

int[] x= { 2, 8, 3, 5, 12, 8, 62}; int elem = 8; boolean gasit = false; for (int i = 0; i < x.length; i++) { if (x[i] == elem) { gasit = true; break; } }

Instructiuni
Instructiunea
continue:

sare peste iteratia curenta din interiorul unui ciclu (for, while, dowhile) . opreste executia instructiunilor din interiorul unui ciclu si determina reevaluarea expresiei booleene.
int[] x= { 2, 8, 3, 5, 12, 8, 62}; int elem = 8; int nrApar=0; for (int i = 0; i < x.length; i++) { if (x[i] != elem) continue; nrApar++; }

Instructiuni
Instructiunea
switch:
[break;] [break;] [break;] [break;] [break;] switch(integral-selector) { case integral-value1 : statement; case integral-value2 : statement; case integral-value3 : statement; case integral-value4 : statement; case integral-value5 : statement; // ... default: statement; }

Instructiuni
Instructiunea
switch:
1: 3: 5: 7: 8: 10: 12: nrZile = 31; break; 4: 6: 9: 11: nrZile = 30; break; 2: if ( anBisect(an) ) nrZile = 29; else nrZile = 28; break; default: System.out.println(Luna invalida"); switch (luna) { case case case case case case case case case case case case

Program simplu Java


//Test.java public class Test { public static void main(String[] args) { System.out.println("Salut"); for(String el : args) System.out.println(el); } }

Compilare:
javac Test.java

Rulare:
java Test java Test ana 1 2 3

S-ar putea să vă placă și