VinBR

LP 26/10/2011

Oct 27th, 2011
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.98 KB | None | 0 0
  1.  
  2. # # # # # # # # # # # # # #
  3. # Linguagens de Programação #
  4. # Prof. Fernando Pereira #
  5. # notasdogarcia.blog.com #
  6. # # # # # # # # # # # # # #
  7.  
  8. // A aula começou falando sobre como retornar um erro em uma função de tipo estatico?
  9.  
  10. Solução 1:
  11. Reservar um valor para erro. Como por exemplo retornar 0 ao desempilhar uma pilha vazia de inteiros.
  12.  
  13. Problemas:
  14. Isso pode causar confusão.
  15.  
  16. Solução 2:
  17. Utilizar um flag de erro.
  18.  
  19. Problemas do uso de flags:
  20. Não há nada que force o programador a ler o flag, então é perigoso.
  21.  
  22. Solução 3:
  23. Usar uma guarda, que deve ser chamada antes de se realizar a chamada da função para verificar se está tudo ok.
  24.  
  25. Problemas:
  26. Gasto exacerbado de processamento, já que é preciso verificar a cada uso.
  27.  
  28. Solução 4:
  29. Terminar o programa.
  30.  
  31. Problemas o código fica pouco modular, já que quem vai usar isso pode não querer que o programa termine.
  32.  
  33. Que solução um compilador poderia nos dar para tratar esses erros?
  34.  
  35. Sol. de Compilador 1:
  36. Ao declarar uma função voce pode colocar as requisições necessárias para seu funcionamento.
  37. E as requições necessárias quanto ao tipo de retorno para garantir que o retorno foi válido.
  38.  
  39. Vantagens:
  40. Tudo é garantido pelo compilador, assim o usuário não precisa se preocupar com isso.
  41.  
  42. Sol. de Compilador 2:
  43. - Tipagem, não aceitar tipos inválidos.
  44.  
  45. Sol. de Compilador 3:
  46. - Contratos,
  47.  
  48. Sol. de Compilador 4:
  49. - Exceções (checked = Java)
  50.  
  51. Sol. de Compilador 5:
  52. - Visilibidade
  53.  
  54. Sol. de compilador
  55. - Anotações
  56.  
  57. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  58.  
  59. Exemplo de exceção em SML:
  60.  
  61. exception BadArgument of int;
  62.  
  63. fun fact n = if n=0 then 1 else n * fact(n-1)
  64.  
  65. Agora se o parâmetro for -1 isso dará loop infinito.
  66.  
  67. Como corrigir esse problema?
  68.  
  69. fun fact1 n = if n<0 then raise BadArgument n else fact n;
  70.  
  71. fun usefact1 n =
  72. "Resp: " ^ int.toString(fact n)
  73. handle BadArgument n => "Erro: " ^ Int.toString n;
  74.  
  75. E pronto temos uma função mais segura.
  76.  
  77. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  78.  
  79. Para haverem exceções é preciso de 3 coisas:
  80.  
  81. Definir exceções.
  82.  
  83. Disparar exceções.
  84. ex: raise, throw
  85.  
  86. Tratar exceções.
  87. ex: handle, catch except
  88.  
  89. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  90.  
  91. exceções em python:
  92.  
  93. Class ArithmeticException(Exception):
  94. def __init__(self, msg):
  95. self.value = msg
  96. def __str__(self):
  97. return repr (self.value)
  98.  
  99. def div(n,d):
  100. if d == 0:
  101. raise ArithmeticException("Erro: " + str(n))
  102. else:
  103. return n/d
  104.  
  105. while True:
  106. try:
  107. n = float(raw input("Dividendo: "))
  108. d = float(raw input("Divisor: "))
  109. r = div(n,d)
  110. print r
  111. except ValueError:
  112. print "Não eh numero!. Tente novamente: "
  113. except ArithmeticException, ae:
  114. print ae.value
  115.  
  116. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  117.  
  118. Em java:
  119.  
  120. public class TE
  121. {
  122. public static void main(String[] args)
  123. {
  124. try
  125. {
  126. int i = Integer.parseInt(args[0]);
  127. int j = Integer.parseInt(args[1]);
  128. System.out.println( i/j );
  129. }
  130. catch(ArrayIndexOutOfBoundsException aie) { System.out.println("Deu pau na divisao por zero"); }
  131. catch(ArithmeticException ae) { System.out.println("Deu pau na divisao por zero"); }
  132. }
  133. }
  134.  
  135. // Uma exceção em java volta destruindo e imprimindo as funções destruidas na tela. ( quando se está debugando )
  136. // Assim aparecem várias menssagens.
  137.  
  138. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  139.  
  140. Em java as exceções e erros são classes na forma:
  141.  
  142. Object
  143.  
  144. Error extend object implements Throwable, Exception extend object implements Throwable
  145.  
  146. "Checked" extende Exception, runtimeExceptioin herda de Exception
  147.  
  148. "cacheBad" extende Exception.
  149.  
  150. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  151.  
  152. // Exception é portanto mãe de todos os outros erros. e um catch Exception é capaz de receber qualquer erro.
  153. // Em java não coloque um catch exception antes de outros catchs pois isso torna o código dos demais catchs inalcansável, e isso da erro de compilação.
  154.  
  155. Qualquer erro que extenda exception diretamente (ao invés de herdar de RuntimeException) necessáriamente precisa ser tratado., Se não for o programa encerra com erro.
  156.  
  157. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  158.  
  159. // Houveram vários exemplos de exceções em java.
  160.  
  161. Pergunta:
  162. Porque nem todas as exceções são obrigatóriamente tratadas?
  163.  
  164. Porque isso é custoso, em termos de legibilidade do código, pode até ser que o código fique mais denso com tratamentos do que com código.
  165.  
  166. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  167.  
  168. O professor mostrou que uma exceção estaticamente verificada deve ser verificada na declaração da função com a o nome "throws(exp1, exp2)"
  169.  
  170.  
  171. // Em resumo tava com sono, a aula foi sobre gramática de chamada de exceções e catchs em java.
  172. // finally é uma coisa chamada após o bloco de um catch, e dentro do bloco do finally as coisas são executadas imediatamente antes do try terminar.
  173.  
  174. // fim da aula.
Advertisement
Add Comment
Please, Sign In to add comment