Asigurarea CalitAsigurarea Calitؤƒإ£ii (ii (QA) ... 6. Numele de parametrii de tip pentru...

download Asigurarea CalitAsigurarea Calitؤƒإ£ii (ii (QA) ... 6. Numele de parametrii de tip pentru elemente generice

of 90

  • date post

    01-Mar-2020
  • Category

    Documents

  • view

    0
  • download

    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