Libor FischmeistrČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZEFAKULTA ELEKTROTECHNICKÁ
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“
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";
}
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;
}
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();
…
Š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)) {...
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
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
Š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
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:
25.6.2009 Zjednodušení kódu v Javě s využitím transformačního systému Armada 11
TRANSFORMACE
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
Top Related