Asigurarea CalitAsigurarea Calitؤƒإ£ii (ii (QA) ... 6. Numele de parametrii de tip pentru...
date post
01-Mar-2020Category
Documents
view
1download
0
Embed Size (px)
Transcript of Asigurarea CalitAsigurarea Calitؤƒإ£ii (ii (QA) ... 6. Numele de parametrii de tip pentru...
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Asigurarea Calităţii (Asigurarea Calităţii (QAQA))Asigurarea Calităţii (Asigurarea Calităţii (QAQA)) Principii de implementarePrincipii de implementarep pp p
Ciprian DobreCiprian Dobre ciprian.dobre@cs.pub.ro
Instrumente pentru dezvoltarea programelor – Curs 7 1
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
SumarSumarSu aSu a
• Erori Java comune • Câteva elemente de ghidaj în scrierea de
cod Javacod Java • Refactorizare • Modularitate
Ascunderea Informaţiilor• Ascunderea Informaţiilor
2Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Erori Erori Java Java ComuneComune
To err is human, but to really foul things up
you need a computeryou need a computer. (Paul Ehrlich)
3Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Accesarea Membrilor NonAccesarea Membrilor Non--Statici din Statici din M t d St tiM t d St tiMetode StaticeMetode Statice
• Membrii non-statici aparţin unor obiecte M b ii t ti i ţi i l• Membrii statici aparţin unei clase
• Dacă nu aveţi un obiect nu puteţi nici accesa un membru non-staticnon-static
• this se referă la obiectul asupra căruia o metodă non- statică este apelată public class Demo {p public class Demo {
public int x = 1; bli id () { }
public class Demo { public int x = 1; public void m() { }
bli t ti id ipublic void m() { } public static void main (String[] args) {
public static void main (String[] args) {
Demo d = new Demo(); int y = x; m(); Object o = this;
int y = d.x; d.m(); Object o = d;
4
} } } }
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Nume de metode greşite la Nume de metode greşite la suprascrieresuprascriere
• Java suportă polimorfismul prin mecanismul de overriding O f– O superclasă A defineşte o metodă m
– O subclasă B a lui A poate defini propria metodă m, suprascriind definiţia metodei din A Tipul obiectului din care este apelată metoda m decide ce versiune a lui m– Tipul obiectului din care este apelată metoda m decide ce versiune a lui m este în final folosită (cea definită în A sau cea definită în B)
• Problemă: atunci când definiţia metodei din subclasă foloseşte numele metodei în mod greşit faţă de metoda din superclasă suprascrierea nu g ş ţ p p mai poate funcţiona
• Simptom: o metodă nu ajunge să fie apelată; nu se generează nici un warning la nivel de compilator
• Problema poate fi depistată prin trasarea fluxului de control al programului
public class Demo extends WindowAdapter {public class Demo extends WindowAdapter { // This should be “windowClosed” !!! public void windowClose(WindowEvent e) {
S t it(0)
Programul nu se opreşte
după închiderea
5
System.exit(0); } }
p ferestrei!!!
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Suprascrieri cu semantici diferiteSuprascrieri cu semantici diferiteSup asc e cu se a t c d e teSup asc e cu se a t c d e te • Aveţi grijă ca orice metodă suprascrisă să păstreze
semantica metodei originale • Altfel: posibil comportament ciudat în părţi ale programului
ce par a fi implementate corect • Exemplu: folosirea in NZ a “Goods and Services Tax”• Exemplu: folosirea in NZ a Goods and Services Tax
conform cazului in Germania; semantici incompatibile!!! public class Product {public class Product {
public double grossPrice; public double netPrice() {
return 1 125*grossPrice; // in NZ: 12 5% GSTreturn 1.125*grossPrice; // in NZ: 12.5% GST } }
public class Food extends Product {public class Food extends Product { public double netPrice() {
// in Germania: GST e 7% pentru alimente return 1 07*grossPrice;
6
return 1.07*grossPrice; } }
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Gestiunea ExcepţiilorGestiunea ExcepţiilorGest u ea cepţ oGest u ea cepţ o • În Java: multe excepţii trebuie fie prinse, fie declarate • Adesea excepţiile sunt prinse fără o gestionare adecvată • Problemă: atunci când este aruncată o excepţie acest lucru nu mai
devine vizibil • Problema ce a cauzat excepţia poate cauza diverse alte probleme mai
târziutârziu public double reciprocal(double x) {
double y = 0; try {
y = 1/x; // ArithmeticException for x==0 } catch (Exception e) {} // no handling return y; // returns 0 for x==0
}
… } catch (Exception e) {
System.out.println(e); }
7
} …
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Câteva eroriCâteva erori & & excepţii importanteexcepţii importanteCâte a e oCâte a e o && e cepţ po ta tee cepţ po ta te 1. Nu faceţi confuzie între = şi == 2 Nu faceţi confuzie între == şi equals2. Nu faceţi confuzie între == şi equals 3. Indicii de array încep cu 0 ( off-by-one error) 4. Tipurile primitive sunt diferite de tipurile referite4. Tipurile primitive sunt diferite de tipurile referite
(call-by-value vs. call-by-reference) 5. Numele unui fişier.java trebuie să fie acelaşi cu
numele primei clase/interfeţe din elnumele primei clase/interfeţe din el 6. Java este case sensitive 7. Aţi recompilat programul după ce a suferit modificări?ţ p p g p
NullPointerException Object o = null;
ArithmeticException int x = 4/0;
ClassCastException Integer i = (Integer)j ;
o.getClass(); / ;g ( g )
"hello";
ArrayStoreException IndexOutOfBoundsException
8
Object x[] = new String[3]; x[0] = new Integer(0);
Object x[] = new String[3]; x[3] = "hello";
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Java Coding GuidelinesJava Coding GuidelinesJava Coding GuidelinesJava Coding Guidelines
9
9
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Convenţii de numeConvenţii de nume 1. Numele claselor şi interfeţelor întotdeauna încep cu litere
mari e g Demo Panel GridbagLayoute.g. Demo, Panel, GridbagLayout
2. Numele membrilor, parametrilor metodelor şi a variabilelor locale încep cu litere mici, e.g. getMax, start S f C C “3. Se foloseşte CamelCase, i.e. un cuvânt nou este “separat” printr-o literă mare, e.g. getMainPanel
4. Numele de pachete sunt scrise cu litere mici, e.g.4. Numele de pachete sunt scrise cu litere mici, e.g. java.awt.color
5. Constantele static final ar trebui scrise cu litere mari, cu cuvinte separate prin underscore (" ") e gcu cuvinte separate prin underscore ( _ ), e.g. MIN_WIDTH
6. Numele de parametrii de tip pentru elemente generice ar t b i ă ţi ă i ă lit ătrebui să conţină o singură literă mare, e.g. List
7. Câteva alte convenţii: • Prefixe de nume pentru interfeţe e g ICollection
10
Prefixe de nume pentru interfeţe, e.g. ICollection • Prefixe de nume pentru variabile private, e.g. _size
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
Altele...Altele...te ete e • Gestiunea condiţiilor de eroare (e.g. throw and handle
Exception)p ) • Comentariile aferente codului, în mod particular atunci când
nu este clar ce funcţie este implementată de o secvenţă de codcod – Comentariile se pun la începutul unei clase/metodă/variabilă
La ce e utilă clasa/metoda/variabila? De asemenea se comentează anumite instrucţiuni “cheie”– De asemenea se comentează anumite instrucţiuni cheie
• Nu se folosesc căi absolute de fişiere în codul sursă pentru că computere diferite au foldere diferite ( “ \ f ld \ fil t t”)(e.g. “c:\myfolder\myfile.txt”) Se folosesc în schimb căi relative la folderul aplicaţiei (e.g. “subfolder\myfile.txt”)
• Indentaţia urmăreşte structura programului • Adăugarea unei linii goale între blocuri logice de instrucţiuni
din cadrul aceleaşi metode
11
din cadrul aceleaşi metode • Definirea unei singure interfeţe/clase într-un fişier
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucuresti - Facultatea de Automatica si Calculatoare
RefactorizareRefactorizare
There's always room for improvement, you knowfor mprovement, you know
- it's the biggest room in the house (L H Leber)
12
(L. H. Leber)
Instrumente pentru dezvoltarea programelor – Curs 7
Universitatea Politehnica Bucurest
Recommended