IX10-ProgramacaoAvancada-Aula003
Transcrição
IX10-ProgramacaoAvancada-Aula003
PROGRAMAÇÃO - CONTROLE DE AVANÇADA EXCECAO Prof. Angelo Augusto Frozza, M.Sc. [email protected] ROTEIRO 1. Controle de Exceção y Introdução y Try – Finally y Try – Except y Try – Except com especificação de tipo de exceção y Classe de exceção INTRODUÇÃO Exceção é um objeto definido pelo tipo Exception ou uma classe descendente; | Sua função é trabalhar especificamente nos casos de anormalidade que podem ocorrer na aplicação; | Exemplo: | y Se tentarmos acessar um índice não existente no ListBox uma anormalidade é detectada pela exceção e uma mensagem é mostrada; INTRODUÇÃO | Para tratar exceções, o Delphi fornece as cláusulas: y Try y Except y Finally y Raise INTRODUÇÃO | Try y A cláusula Try é usada para iniciar um bloco que pode gerar possíveis erros; y Se um erro ocorrer, o programa não será terminado; y Instantaneamente, o Try deixa de ser executado e dá lugar a cláusula Except OU Finally; y Try pode ser usado em inúmeros trechos do código, podendo até ser aninhado; INTRODUÇÃO procedure TForm1.btnTryFinallyClick(Sender: Tobject); var numero, zero: Integer; begin {Try – Usado para dividir um inteiro por zero para gerar uma exceção } numero := -1; try zero := 0; numero := numero div zero; ShowMessage(‘numero / zero =’ + IntToStr(numero)); finally if numero = -1 then begin ShowMessage(‘Valor negativo identificado, ’ + ‘ insira um valor válido!’) ; numero := 0; end; end; end; INTRODUÇÃO | Except y A cláusula Except é usada para iniciar um bloco caso uma exceção ocorra em Try; y Se o bloco que estiver em Except conter a exceção o programa não será terminado; INTRODUÇÃO procedure TForm1.btnTryExceptFinallyClick(Sender: Tobject); var numero, zero: Integer; begin {Try – Usado para dividir um inteiro por zero para gerar uma exceção } try zero := 0; numero := 1 div zero; ShowMessage(‘1 / zero =’ + IntToStr(numero)); except on E: Exception do begin ShowMessage(E.ClassName + + ‘ erro gerado, com mensagem: ’ + + E.Message); end; end; end; INTRODUÇÃO | Finally y A cláusula Finally é usada para iniciar um bloco havendo problemas ou não com a cláusula Try; INTRODUÇÃO procedure TForm1.btnTryFinallyClick(Sender: Tobject); var numero, zero: Integer; begin {Try – Usado para dividir um inteiro por zero para gerar uma exceção } numero := -1; try zero := 0; numero := numero div zero; ShowMessage(‘numero / zero =’ + IntToStr(numero)); finally if numero = -1 then begin ShowMessage(‘Valor negativo identificado, ’ + ‘ insira um valor válido!’) ; numero := 0; end; end; end; INTRODUÇÃO | Raise y Gera uma exceção; y Permite que você possa levantar exceções no próprio código quando ele descobrir dados inválidos ou inconsistentes em tempo de execução; y Também pode ser utilizada dentro de uma rotina de tratamento de exceção (cláusula Except) para relevantar uma exceção, isto é, propagá-la para o próximo handler; TRY - FINALLY try // Trechos de código finally // Trechos de código end; TRY - FINALLY procedure TForm1.btnTryFinallyClick(Sender: Tobject); var numero, zero: Integer; begin {Try – Usado para dividir um inteiro por zero para gerar uma exceção } numero := -1; try zero := 0; numero := numero div zero; ShowMessage(‘numero / zero =’ + IntToStr(numero)); finally Depois que o código if numero = -1 then begin em finally for ShowMessage(‘Valor negativo identificado, ’ a exceção executado + ‘ insira um valor válido!’) não; tratada mostrará numero := 0; uma mensagem de end; erro. end; end; TRY - EXCEPT try // Trechos de código except // Trechos de código end; TRY - EXCEPT procedure TForm1.btnTryExceptClick(Sender: Tobject); var numero, zero: Integer; begin {Try – Usado para dividir um inteiro por zero para gerar uma exceção } try zero := 0; numero := 1 div zero; ShowMessage(‘1 / zero =’ + IntToStr(numero)); except ShowMessage(‘Erro desconhecido encontrado’) ; end; Quando o código em end; except for executado será mostrada a mensagem de erro indicada. TRY - EXCEPT | Variações do Except: try // Trechos de código except // Trechos de código finally // Trechos de código end; TRY - EXCEPT | Variações do Except: try try // Trechos de código except // Trechos de código end; finally // Trechos de código end; TRY - EXCEPT | Variações do Except: try // Trechos de código finally try // Trechos de código except // Trechos de código end; end; TRY - EXCEPT | Variações do Except: try try // Trechos except // Trechos end; finally try // Trechos except // Trechos end; end; de código de código de código de código | EXERCÍCIOS... TRY – EXCEPT COM DE TIPO DE EXCEÇÃO | No caso do Except pode-se utilizar diferentes ações para diferentes tipos de exceções, tais como EInOutError; | Além disso, a cláusula else pode ser usada para pegar todos os tipos de exceções inesperadas; | O tipo geral Exception é usado para pegar todos os tipos de exceções; | Atribuindo um nome à exceção, o texto da mensagem da exceção (Name.Message) pode ser obtido para a exibição, ou então, para outras finalidades; TRY – EXCEPT COM DE TIPO DE EXCEÇÃO try // Trechos de código except on Nome: Tipo da Exceção do // Trechos de código else // opcional // Trechos de código end; TRY – EXCEPT COM DE TIPO DE EXCEÇÃO try // Trechos de código except on Nome: Tipo da Exceção do // Trechos de código on E: Exception do // Trechos de código end; TRY – EXCEPT COM DE TIPO DE EXCEÇÃO try // Trechos de código except on Nome: Tipo da Exceção do // Trechos de código on E: Exception do showMessage(E.ClassName + 'erro gerado, com mensagem: ' + E.Message'); end; TRY – EXCEPT COM DE TIPO DE EXCEÇÃO Classe Descrição Exception Exceção genérica, usada apenas como ancestral de todas as outras exceções Eabort Exceção silenciosa, pode ser gerada pelo procedimento Abort e não mostra nenhuma mensagem EAccessViolation Acesso inválido à memória, geralmente ocorre com objetos não inicializados EConvertError Erro de conversão de tipos EDivByZero Divisão de inteiro por zero EInOutError Erro de Entrada ou Saída reportado pelo sistema operacional EIntOverFlow Resultado de um cálculo inteiro excedeu o limite EInvalidCast TypeCast inválido com o operador as TRY – EXCEPT COM DE TIPO DE EXCEÇÃO Classe Descrição EInvalidOp Operação inválida com número de ponto flutuante EOutOfMemory Memória insuficiente Eoverflow Resultado de um cálculo com número real excedeu o limite ERangeError Valor excede o limite do tipo inteiro ao qual foi atribuída Eunderflow Resultado de um cálculo com número real é menor que a faixa válida EVariantError Erro em operação com variant EZeroDivide Divisão de real por zero EDatabaseError Erro genérico de banco de dados, geralmente não é usado diretamente EDBEngineError Erro da BDE, descende de EDatabaseError e traz dados que podem identificar o erro CLASSE DE EXCEÇÃO | Criando a classe de exceção: type EUsuarioInvalido = class (Exception); CLASSE DE EXCEÇÃO | Usando a classe de exceção: procedure TForm1.btnClasseExcecaoClick(Sender: Tobject); begin raise EUsuarioInvalido.Create(‘Usuário Inválido’); end; EXCEÇÕES E O DEBBUGER | Quando você estiver usando o Delphi para testar sua aplicação, antes das mensagens de tratamento de exceções serem exibidas uma notificação de Exceção da IDE aparece para você (passando a impressão de que o tratamento de exceção não funcionou) y | Mas às vezes isso fica sendo chato para testar uma aplicação y | Pressionando a tecla F9 é possível dar continuidade a aplicação; Uma solução é testar fora do Delphi, rodando o executável; Para testar a aplicação sem que apareça a notificação de Exceção da IDE do Delphi faça o seguinte (Delphi 2006) : y y Desmarque a opção “Notify on language exceptions ”, no menu Tools | Options | Debugger Options | Borland Debuggers | Language Exceptions; Dessa forma as mensagens de exceção do depurador não serão mostradas; REFERÊNCIAS | BIBLIOGRÁFICAS João Marcos Sakalauska y Tratamento de exceções - parte 1 http://www.planetadelphi.com.br/artigo/124/Tratamento%20d e%20exce%E7%F5es%20-%20parte%201 y Tratamento de exceções - parte 2 http://www.planetadelphi.com.br/artigo/125/tratamento-deexcecoes---parte-2 y Tratamento de exceções - parte final http://www.planetadelphi.com.br/artigo/129/tratamento-deexcecoes---parte-final | CANTÚ, M. Dominando o Delphi 2005: A Bíblia. São Paulo: Pearson, 2006.
Documentos relacionados
Aplicações Robustas Exceções Blocos Protegidos Principais
O tratamento de exceção é um mecanismo capaz de dar robustez a uma aplicação, permitindo que os erros sejam manipulados de uma maneira consistente e fazendo com que a aplicação possa se recuperar d...
Leia mais