2. „TRANSFORMACE“
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 Zjednodušení kódu v Javě s využitím transformačního systému Armada 2
3. 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
String getResult(){
if(isMethod())
return "Valid";
else
return "Invalid"; String getResult(){
} return isMethod() ? "Valid" : "Invalid";
}
25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 3
4. Zbytečné deklarace proměnných
Špatně: integer void setHeight(int a){
int b = a;
globalHeight = b + 5;
}
Správně: integer void setHeight(int a){
globalHeight = a + 5;
}
25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 4
5. Vytváření již existujících objektů znovu a
znovu (typicky Scanner)
…
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();
…
25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 5
6. Špatné porovnávání Stringů
String a = "fel";
...
if("fel" == a) {
...
String a = "fel";
...
if("fel".equals(a)) {
...
25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 6
7. 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
8. 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
9. Š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
10. Implementace pravidla v jazyce TXL:
rule SimpleReturn
replace [repeat declaration_or_statement]
Variable [local_variable_declaration]
Statement1 [statement]
Statement2 [statement]
deconstruct Variable
_ [repeat modifier] _ [type_specifier] Declarator [variable_declarators] ’;
deconstruct Declarator
ID1 [id]
deconstruct Statement1
Unary [unary_expression] ’= Assignment [assignment_expression] ’;
deconstruct Unary
ID2 [id]
deconstruct Statement2
’return Expression [expression] ’;
deconstruct Expression
ID3 [id]
where
ID1 [= ID2 ]
where
ID1 [= ID3 ]
by
’return Assignment ’;
end rule
25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 10
11. TRANSFORMACE
25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 11
12. 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