O documento discute tratamento de exceções em programação orientada a objetos. Ele explica o que são exceções, para que servem tratamento de exceções, tipos de exceções, vantagens do tratamento de exceções, fluxo try-catch-finally, invocação de métodos e lançamento de exceções, validações, exemplos e dificuldades/soluções.
2. Alunos para Apresentação Rosemberg Lima ( rosemberg_lima@hotmail.com ) Augusto Henrique ( augustodutraleal_@hotmail.com ) Jonas Glauciano ( jonas_glauciano@hotmail.com ) Wesley Galindo ( wesley-galindo@hotmail.com ) Joseildo Soares ( jonhi14@hotmail.com ) Renato Vasconcelos ( renato_cesar45@hotmail.com ) Sivaldo Severino ( silvado-14@hotmail.com )
3. Conteúdo de Apresentação O que é? Pra que serve? Vantagens Exemplo Positivo Exemplo Negativo Outros Exemplos Dificuldades/Soluções
4. O que é? Exceção é um evento que acontece durante a execução de um programa corrompendo o curso normal do seu fluxo lógico. Em Java exceções são representadas por uma hierarquia particular de objetos. A classe raiz que representa uma exceção é Throwable.
5. Tipos de Exceção Existem três categorias de exceções: Erro, Falha e Exceção de Contingência representadas respectivamente pelas classes: Error, RuntimeException e Exception.
6. Para que serve? Por que usar o tratamento de exeções? -Encontrar e Tratar erros Instruções condicionais vs Tratamento de exeções Instruções condicionais - Instruções tratam de condiçõesEx: Um programador poe uma instrução If...Else que se o usuarionao digitarvalores válidos ,informa que está errado.(Isto não é um erro, apenas a condição esperada nao foi digitada) Tratamento de exeções -Tratão áreas de possiveis erros -Tratamento especificado de exeções -Tratamento de todas a exeções do mesmo tipo
7. -Try : Aponta onde está o erro-Catch: É onde manipula o erro-Finaly– É executado depois do bloco try catch
8. Categorias de Exceção Erro (Error): É uma das exceção mais graves, pois se ela acontece a própria aplicação não consegue resolver o problema, e que existe realmente alguma coisa muito errada na aplicação. Ex: StackOverflowError. Falha (RunTimeException): É uma exceção mais leve, pois a aplicação irá rodar, mas provavelmente a mesma não irá funcionar corretamente. Ex: IllegalArgumentException, NullPointerException. Exceção de Contingência (Exception): Esta exceção é mais simples, pois ela pode ou não pode ser causada pela aplicação. Ex: FileNotFoundException.
9. Vantagens... Trata condições incomuns que interrompem a operação normal da classe; Colocar as intruções passíveis de gerar exceções dentro bloco try. Exceções geradas durante a execução deste bloco podem ser detectadas e tratadas num bloco catch;
12. Validações Evite sempre o bloco de tratamento de exceções Try/Catch para fazer validações simples, como por exemplo cálculos, conversões, etc.. Há sempre uma alternativa mais performática e ao mesmo tempo mais elegante de fazer essas operações para evitar todo o overhead que existe em um bloco Try/Catch. Para exemplifcar isso, podemos citar alguns exemplos de códigos onde teremos primeiramente o código ruim e, em seguida, o mesmo código já reformulado:
13. Código ruim try { IReaderreader = (IReader)e.Data; reader.ExecuteOperation(); } catch (InvalidCastException) { Response.Write("Tipo incompatível."); } try { int id = Convert.ToInt32(Request.QueryString["Id"]); this.BindForm(id); } catch (InvalidCastException) { Response.Write("Id inválido."); }Try Dimreader As IReader = DirectCast(e.Data, IReader) reader.ExecuteOperation() Catch ex As InvalidCastException Response.Write("Tipo incompatível.") EndTry Try Dim id As Integer = Convert.ToInt32(Request.QueryString("Id")) Me.BindForm(id) Catch ex As InvalidCastException Response.Write("Id inválido.") EndTry
14. Código Reformulado else { Response.Write("Id inválido."); }Dimreader As IReader = TryCast(e.Data, IReader) IfNotIsNothing(reader) Then reader.ExecuteOperation() Else Response.Write("Tipo incompatível.") EndIf Dim id As Integer = 0 IfInteger.TryParse(Request.QueryString("Id"), id) Me.BindForm(id) Else Response.Write("Id inválido.") Endif IReaderreader = (IReader)e.Data as IReader; if(reader != null) { reader.ExecuteOperation(); } else { Response.Write("Tipo incompatível."); } int id = 0; if(int.TryParse(Request.QueryString["Id"], out id)) { this.BindForm(id); }
15. Conclusão Boas práticas de programação são sempre bem-vindas em qualquer tipo de linguagem. Claro que as técnicas não param por aqui. Existem muitas outras técnicas e benefícios relacionados a cada uma delas que este artigo não contempla. Este artigo dá apenas uma visão de técnicas que devem ser utilizadas no desenvolvimento de aplicações baseadas na plataforma .NET para tirar um melhor proveito da linguagem, não perdendo performance.
16. Outros Exemplos Ao executar esta classe sem informar nenhum argumento e, ao tentar acessar diretamente, conforme o exemplo descrito, uma exceção é obtida que interromperá a execução normal do programa, e a seguinte mensagem será mostrada: