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)

595 visualizações

Publicada em

Java Assertions

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
595
No SlideShare
0
A partir de incorporações
0
Número de incorporações
6
Ações
Compartilhamentos
0
Downloads
6
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no 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.
  • 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

    ×