Obhajoba - test

12
Libor Fischmeistr ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE FAKULTA ELEKTROTECHNICKÁ

description

 

Transcript of Obhajoba - test

Page 1: Obhajoba - test

Libor FischmeistrČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZEFAKULTA ELEKTROTECHNICKÁ

Page 2: Obhajoba - test

Nalézt často dělané chyby

Oprava špatně (nehezky) a neoptimálně napsaného kódu

Implementovat transformační pravidla za účelem zjednodušení a zpřehlednění kódu psaného v Javě

Naučit začínající programátory, že lze něco naprogramovat lépe

25.6.2009 2Zjednodušení kódu v Javě s využitím transformačního systému Armada

„TRANSFORMACE“

Page 3: Obhajoba - test

Nejde o chyby ovlivňující funkčnost aplikace Nemusí vždy být chybné Mohou používat více prostředků než je nutné

Příklad: správný kód, ale lze napsat lépe

25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 3

String getResult(){if(isMethod())

return "Valid";else

return "Invalid";}

String getResult(){return isMethod() ? "Valid" : "Invalid";

}

Page 4: Obhajoba - test

Zbytečné deklarace proměnných

Špatně:

Správně:

25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 4

integer void setHeight(int a){int b = a;globalHeight = b + 5;

}

integer void setHeight(int a){globalHeight = a + 5;

}

Page 5: Obhajoba - test

Vytváření již existujících objektů znovu a znovu (typicky Scanner)

25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 5

System.out.print(„Zadejte velikost strany čtverce: “);int size = new Scanner(System.in).nextInt();

System.out.print(„Zadejte poloměr kružnice: “);int radius = new Scanner(System.in).nextInt();

Page 6: Obhajoba - test

Špatné porovnávání Stringů

25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 6

String a = "fel";

...

if("fel" == a) {...

String a = "fel";

...

if("fel".equals(a)) {...

Page 7: Obhajoba - test

Jazyk TXL

Specializovaný na transformace

Tvorba gramatiky i pravidel

Transformační nástroj FreeTXL

Umožňuje aplikovat transformační pravidla na zdrojový kód

25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 7

Page 8: Obhajoba - test

Oprava zbytečně složitě implementované metody s jednoduchým tělem

Prohřešky programátora

Nová deklarace již existující lokální proměnné

Přiřazení proměnné na samostatném řádku

25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 8

Page 9: Obhajoba - test

Špatně zapsaný kód:

double getNumber(int multiplier){double x;x = 5 * multiplier;return x;

}

Správně napsané:

double getNumber(int multiplier){return 5 * multiplier;

}

25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 9

Page 10: Obhajoba - test

25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 10

rule SimpleReturnreplace [repeat declaration_or_statement]

Variable [local_variable_declaration]Statement1 [statement]Statement2 [statement]

deconstruct Variable_ [repeat modifier] _ [type_specifier] Declarator [variable_declarators] ’;

deconstruct DeclaratorID1 [id]

deconstruct Statement1Unary [unary_expression] ’= Assignment [assignment_expression] ’;

deconstruct UnaryID2 [id]

deconstruct Statement2’return Expression [expression] ’;

deconstruct ExpressionID3 [id]

whereID1 [= ID2 ]

whereID1 [= ID3 ]

by’return Assignment ’;

end rule

Implementace pravidla v jazyce TXL:

Page 11: Obhajoba - test

25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 11

TRANSFORMACE

Page 12: Obhajoba - test

Podařilo se

naimplementovat pravidla pro většinu nalezených chyb

nalézt příčinu vzniku chyb

vytvořit bázi pro další práce v oblasti opravy kódu

25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 12