Assertions@regismelo                1
Assertions                 Objetivos• Saber quando, como e em quais situações  usar assertions.• Como compilar código-font...
Assertions              Por que usar Assertions?• Como programadores, devemos fazer mais do  que checagem de erro.• Código...
Assertions              Por que usar Assertions?   • Assertions vs. outro código de erro;   • Design-by-Contract         –...
Assertions                              Sintaxe   • assert expressao1;   Exemplo:   assert foo != null;   Equivalente a   ...
Assertions                              Sintaxe   • assert expressao1 : expressao2;   Exemplo:   assert foo != null : “Ass...
Assertions               Compilando com Assertions     • java –source 1.3             – usa a sintaxe antiga.     • java –...
Assertions               Controlando Assertions     • Linha de comando     Símbolo             Exemplo______________     -...
Assertions               Controlando Assertions     • Linha de comando     Símbolo               Exemplo______________    ...
Assertions                  Controlando Assertions• Programaticamente.• Habilita ou desabilita o uso de assertions para um...
Assertions                Controlando Assertions• Programaticamente.• Habilita o uso de assertions como default.     – pub...
Assertions             Quando usar Assertions• Reforçar suposições sobre aspectos de  estruturas de dados.• Reforçar const...
Assertions             Quando usar Assertions• Checar condições relacionadas ao início de  qualquer método.• Checar coisas...
Assertions             Quando não usar Assertions• Reforçar o uso na linha de comando.• Reforçar constraints em argumentos...
Assertions             Quando não usar Assertions• Como se fosse o seguinte:   – If (something) error();• Como um controle...
Assertions                   Exemplos(regras de uso)Regra: não usar assertions para reforçar o uso da       linha de coman...
Assertions                  Exemplos(regras de uso)Regra: usar assertions para reforçar o uso de constraints de argumentos...
Assertions                   Exemplos(regras de uso)Regra: não usar assertions para reforçar constraints de argumentos par...
Assertions                  Exemplos(regras de uso)Regra: não usar assertions para reforçar uso público de padrões ou prot...
Assertions                   Exemplos(regras de uso)Regra: não usar assertions para reforçar uma propriedade de uma inform...
Assertions                 Exemplos(regras de uso)Regra: usar assertions para reforçar suposições internas sobre aspectos ...
Assertions                 Exemplos(regras de uso)Regra: usar assertions para checar condições no fim de qualquer método.p...
Assertions                 Exemplos(regras de uso)Regra: usar assertions para checar condições     que nunca aconteceriam....
Assertions                 Exemplos(regras de uso)Regra: usar assertions para checar condições que nunca aconteceriam, mes...
Assertions                 Exemplos(regras de uso)Regra: usar assertions para checar condições relacionadas ao início de q...
Assertions                   Exemplos(regras de uso)Regra: usar assertions para checar coisas no meio de um loop grande.pu...
Assertions                  Exemplos(regras de uso)Regra: não usar assertions como algo do tipo: “if (something) error();”...
Assertions                  Exemplos(regras de uso)Regra: não usar assertions como uma condição de controle externa.public...
Assertions                    Exemplos(regras de uso)Regra: não usar assertions para checar a corretude de seu compilador,...
Próximos SlideShares
Carregando em…5
×

Java cert programmer (assertions)

606 visualizações

Publicada em

Java Assertions

  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Java cert programmer (assertions)

  1. 1. Assertions@regismelo 1
  2. 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. 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. 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. 5. Assertions Sintaxe • assert expressao1; Exemplo: assert foo != null; Equivalente a if ( ! (foo != null) ) { throw new AssertionError(); }@regismelo 5
  6. 6. Assertions Sintaxe • assert expressao1 : expressao2; Exemplo: assert foo != null : “Assertion”; Equivalente a if ( ! (foo != null) ) { throw new AssertionError(“Assertion”); }@regismelo 6
  7. 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. 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. 9. Assertions Controlando Assertions • Linha de comando Símbolo Exemplo______________ -esa java –esa -dsa java –das esa = enable system Assretion@regismelo 9
  10. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×