Java cert programmer (assertions)

  • 316 views
Uploaded on

Java Assertions

Java Assertions

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
316
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
2
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • Assertions podem ser usados para garantir pré-condições se e somente se o método não é público. Assertions são sempre bons para pós-condições. Invariantes são condições que devem ser sempre verdadeiras.
  • expressao_2 pode ser qualquer tipo suportado pelos construtores da classe AssertionError, que são: object, boolean, char, int, long, float, double.
  • expressao_2 pode ser qualquer tipo suportado pelos construtores da classe AssertionError, que são: object, boolean, char, int, long, float, double.
  • Na opção java –source 1.4, assertion é uma nova keyword.
  • Assertions são desabilitados por default. Pode-se usar combinações desses símbolos. Por exemplo, habilitar as assertions num pacote e desabilitar para uma classe em particular(java –da:pacoteX –ea:classeX).
  • Os métodos pertencem à classe ClassLoader. className – nome da classe que o comando afetará. enabled - indica se a assertion será ou não aplicada.
  • packageName – nome do pacote que o comando afetará. enabled - indica se a assertion será ou não aplicada. Lembre-se de setar esses flags antes de carregar as classes que você quer que sejam afetadas. Remover assertions é fortemente desencorajado, a não ser que se tenha uma boa razão.
  • packageName – nome do pacote que o comando afetará. enabled - indica se a assertion será ou não aplicada. Lembre-se de setar esses flags antes de carregar as classes que você quer que sejam afetadas. Remover assertions é fortemente desencorajado, a não ser que se tenha uma boa razão.

Transcript

  • 1. Assertions@regismelo 1
  • 2. Assertions Objetivos• Saber quando, como e em quais situações usar assertions.• Como compilar código-fonte, controlar a execução do programa, adicionar e remover assertions. @regismelo 2
  • 3. Assertions Por que usar Assertions?• Como programadores, devemos fazer mais do que checagem de erro.• Código de tratamento de erro inclui uma quantidade substancial de esforço de programação.• Não é possível eliminar todos os erros, mas podemos planejar à frente do inesperado.• Assertion pode ser usado para capturar condições que não esperávamos acontecer. @regismelo 3
  • 4. Assertions Por que usar Assertions? • Assertions vs. outro código de erro; • Design-by-Contract – Pré-condições; – Pós-condições; – Invariantes;@regismelo 4
  • 5. Assertions Sintaxe • assert expressao1; Exemplo: assert foo != null; Equivalente a if ( ! (foo != null) ) { throw new AssertionError(); }@regismelo 5
  • 6. Assertions Sintaxe • assert expressao1 : expressao2; Exemplo: assert foo != null : “Assertion”; Equivalente a if ( ! (foo != null) ) { throw new AssertionError(“Assertion”); }@regismelo 6
  • 7. Assertions Compilando com Assertions • java –source 1.3 – usa a sintaxe antiga. • java –source 1.4 – usa a sintaxe nova, com assertion.@regismelo 7
  • 8. Assertions Controlando Assertions • Linha de comando Símbolo Exemplo______________ -ea java –ea -da java –da -ea:<classname> java –ea:AssertClass -da:<classname> java –da:AssertClass -ea:<packagename> java –ea:Package0 -da:<packagename> java –da:Package0@regismelo 8
  • 9. Assertions Controlando Assertions • Linha de comando Símbolo Exemplo______________ -esa java –esa -dsa java –das esa = enable system Assretion@regismelo 9
  • 10. Assertions Controlando Assertions• Programaticamente.• Habilita ou desabilita o uso de assertions para uma classe. – public void setClassAssertionStatus( String className, boolean enabled);- Habilita ou desabilita o uso de assertions para um pacote. – public void setPackageAssertionStatus( String packageName, boolean enabled);@regismelo 10
  • 11. Assertions Controlando Assertions• Programaticamente.• Habilita o uso de assertions como default. – public void setDefaultAssertionStatus( boolean enabled);• Desabilita o uso de todas as assertions. – public void clearAssertionStatus();@regismelo 11
  • 12. Assertions Quando usar Assertions• Reforçar suposições sobre aspectos de estruturas de dados.• Reforçar constraints em argumentos de métodos private.• Checar condições que nunca deveriam ocorrer.• Checar condições que nunca deveriam ocorrer, mesmo que você esteja certo disso.@regismelo 12
  • 13. Assertions Quando usar Assertions• Checar condições relacionadas ao início de qualquer método.• Checar coisas no meio de loops grandes.• Qualquer assertion é melhor do que nada.@regismelo 13
  • 14. Assertions Quando não usar Assertions• Reforçar o uso na linha de comando.• Reforçar constraints em argumentos de métodos públicos.• Reforçar uso público de padrões ou protocolos.• Reforçar uma propriedade de qualquer informação de um usuário.@regismelo 14
  • 15. Assertions Quando não usar Assertions• Como se fosse o seguinte: – If (something) error();• Como um controle condicional externo.• Checar a corretude de seu compilador, sistema operacional ou hardware.@regismelo 15
  • 16. Assertions Exemplos(regras de uso)Regra: não usar assertions para reforçar o uso da linha de comando.public class Application { public static void main(String[] args) { //BAD!! assert args.length == 3; }} @regismelo 16
  • 17. Assertions Exemplos(regras de uso)Regra: usar assertions para reforçar o uso de constraints de argumentos para métodos private.public class aClass { private void method(Object required, Object optional) { assert (required != null) : “method():required = null”; }} @regismelo 17
  • 18. Assertions Exemplos(regras de uso)Regra: não usar assertions para reforçar constraints de argumentos para métodos public.public class aClass { public void disconnect(Source required, Object optional) { //BAD!! assert (required != null) : “method():required = null”; }} @regismelo 18
  • 19. Assertions Exemplos(regras de uso)Regra: não usar assertions para reforçar uso público de padrões ou protocolos.public class Connection { private boolean isOpen = false; public void close() { //BAD!! assert isOpen : “Cannot close a connection!”; }} @regismelo 19
  • 20. Assertions Exemplos(regras de uso)Regra: não usar assertions para reforçar uma propriedade de uma informação de usuário.public void processZipCode(String zipCode) { if (zipCode.length() == 5) { //ok } else { //BAD!! assert false:”Only 5- and 9- digit supported!”; }} @regismelo 20
  • 21. Assertions Exemplos(regras de uso)Regra: usar assertions para reforçar suposições internas sobre aspectos de estruturas de dados.private void showDate(int array[]) { assert (array.length == 3);} @regismelo 21
  • 22. Assertions Exemplos(regras de uso)Regra: usar assertions para checar condições no fim de qualquer método.public void open() { //... isOpen = true; //... assert isOpen;} @regismelo 22
  • 23. Assertions Exemplos(regras de uso)Regra: usar assertions para checar condições que nunca aconteceriam.public void method() { int a = getValue(); //returns 0 if (a == 0) { //deal with 0 } else { assert false : “Impossible!!!” }} @regismelo 23
  • 24. Assertions Exemplos(regras de uso)Regra: usar assertions para checar condições que nunca aconteceriam, mesmo que você tenha certeza.public void method() { int a = getValue(); //returns 0 assert a < 0 || a > 0 : “Impossible!!!”} @regismelo 24
  • 25. Assertions Exemplos(regras de uso)Regra: usar assertions para checar condições relacionadas ao início de qualquer método.public void processZipCode(String zipCode) { assert zipCodeMapIsValid(); //.....} @regismelo 25
  • 26. Assertions Exemplos(regras de uso)Regra: usar assertions para checar coisas no meio de um loop grande.public void method() { while (true) { Socket socket = serverSocket.accept(); //long pause assert socketListIsValid(); }} @regismelo 26
  • 27. Assertions Exemplos(regras de uso)Regra: não usar assertions como algo do tipo: “if (something) error();”public class Server { private int port; public void listen() { //BAD!! assert port >= 1024 : “No permission to listen!”; }} @regismelo 27
  • 28. Assertions Exemplos(regras de uso)Regra: não usar assertions como uma condição de controle externa.public class App { static private boolean turnLoggingOn() { return true; } static public void main(String[] args) { //BAD!! assert turnLoggingOn(); }} @regismelo 28
  • 29. Assertions Exemplos(regras de uso)Regra: não usar assertions para checar a corretude de seu compilador, sistema operacional ou hadware, a não ser que você esteja depurando.public void method() { int a = 10; //REDUNDANT!! assert a == 10;} @regismelo 29