Você está na página 1de 18

DESENVOLVIMENTO DE SOFTWARE

AULA 5
Profa: ADRIANA SICSÚ, DSc.
adriana.aparicio@globo.com

AULA 1 - Profa. ADRIANA SICSÚ, DSc.


OBJETIVOS DA AULA
• Exceções
• Tratamento de Exceções Estruturadas
• Tipos de Exceção
• Bloco Try... End Try
• A seção Catch
• Blocos Try... End Try Aninhados
• A seção Finally
• Lançamento de Exceções

2
Exceção

• Exceção é um erro no fluxo normal de execução do


código de um programa de uma aplicação.
• O .NET framework oferece uma forma unificada de
identificar e tratar exceções entre todas as linguagens
de programação .NET (BALENA, 2006).

• Há dois tipos de exceções:


 Exceções de Hardware
 Exceções de Software.

3
Exceção

Exceção de Hardware
São causadas por erros do programa a nível de hardware.
Exemplo: Violação de acesso a endereços de memória.

Exceção de Software
são causadas por erros do programa a nível de software.
Exemplo: Atribuir um valor incompatível a uma variável
Divisão por zero
(MACKENZIE e SHARKEY, 2003).

4
Tratamento de Exceções
Estruturadas (SEH)

• O tratamento de exceções estruturadas (Structured Exception


Handling - SEH) é uma estratégia para codificar o programa de
uma aplicação para tratar tanto as exceções de hardware quanto
as exceções de software.
• Dessa forma, o código para tratamento de exceções se torna
unificado e mais consistente por tratar tanto as exceções de
hardware quanto as exceções de software.
• O tratamento de exceções estruturadas é codificado para
proteger seções do código que estiverem propensas a gerarem
exceções como, por exemplo, cálculos, acesso a banco de dados,
operações com arquivos etc.
(MACKENZIE e SHARKEY, 2003).

5
Tipos de Exceções

• Os principais tipos de exceções são:


– ArgumentException
– ArgumentNullException
– ArgumentOutOfRangeException
– IndexOutOfRangeException
– NotImplementedException
– OutOfMemoryException
– OverflowException
– FileNotFoundException

Os tipos de exceções derivam da classe System.Exception que é definida


no .NET framework.

6
Bloco Try ... End Try

• As palavras-chave Try... End Try delimitam o bloco de códigos


protegidos para tratar as exceções que ocorrerem.

Sintaxe:

Try
... Cath:
Catch ex As Exception Marca a seção do bloco que captura e trata as
... exceções que podem eventualmente ocorrer.
End Try Em geral, usa-se uma seção Catch para capturar
cada tipo de exceção e uma seção Catch, chamada
genérica, no final para capturar todos os demais
tipos de exceções que não foram capturados pelas
seções Catch anteriores.

7
Bloco Try ... End Try

Sintaxe:
Try
...
Catch ex1 As Exception1
' Código para tratamento da Exception1
...
Catch exN As ExceptionN
' Código para tratamento da ExceptionN
...
' Captura Genérica
Catch ex As Exception
' Código para tratamento das demais exceções
...
End Try

8
Bloco Try ... End Try

Exemplo: Sem Captura e Tratamento de Exceção

Sub Main() Erro:


Dim i As Decimal = 10 Divisão por Zero
Dim j As Decimal = 0
Dim Resultado As Decimal
  Resultado = i / j
Console.ReadKey()
End Sub

9
Bloco Try ... End Try

Exemplo: Com Captura e Tratamento de Exceção

Sub Main()
Permite realizar a captura e o tratamento da
Dim i As Decimal = 10
exceção genérica, ou seja, de qualquer tipo de
Dim j As Decimal = 0
exceção.
Dim Resultado As Decimal

Try
  Resultado = i / j
Catch ex As Exception
' Captura Genérica
Console.WriteLine("Houve um erro de exceção de divisão por zero.")
End Try
Console.ReadKey()
End Sub

10
Bloco Try ... End Try

Exemplo: Com Captura e Tratamento de Exceção


Sub Main()
Dim i As Decimal = 10 Permite realizar a captura e o tratamento da
Dim j As Decimal = 0 Divisão por Zero e capturar e tratar uma exceção
Dim Resultado As Decimal genérica, ou seja, de qualquer tipo de exceção.
Try
  Resultado = i + 10
Resultado = i / j
Catch exDivideByZero As DivideByZeroException
‘ Captura DivideByZeroException
Console.WriteLine("Houve um erro de exceção de divisão por zero.")
Catch ex As Exception
' Captura Genérica
Console.WriteLine("Houve um erro de exceção genérica.")
End Try
Console.ReadKey()
 End Sub

11
Bloco Try ... End Try - Aninhado

Imports System.IO
Module Module1 Define um bloco Try...End Try externo que
 Sub Main() contém um outro bloco Try...End Try interno.
Dim FileName As String = "TestFile.data"
' Bloco externo
Try
Dim fs As New FileStream(FileName, FileMode.Open, FileAccess.Read)
' Bloco interno
Try
Dim reader As New BinaryReader(fs)
reader.ReadInt32()
Catch ex As Exception
Se ocorrer uma exceção na
Console.WriteLine("Exceção na leitura do arquivo.")
abertura do arquivo, o programa
End Try
exibe a mensagem "Exceção na
Catch ex As Exception
abertura do arquivo." e se após a
Console.WriteLine("Exceção na abertura do arquivo.")
abertura do arquivo sem exceção,
End Try
ocorrer uma exceção na leitura do
Console.ReadKey()
arquivo, o programa exibe a
End Sub
mensagem "Exceção na leitura do
 End Module
arquivo.“

12
Seção Finally

• Define o código que deverá ser sempre executado, sem ou com a


ocorrência de uma exceção, antes de terminar o bloco Try...End
Try.
• Em geral, contém o código para liberar recursos alocados no
bloco Try...End Try ou o código comum a ser executado antes de
terminar o bloco Try...End Try.

13
Seção Finally

Sub Main()
Dim i As Decimal = 10 Sempre emite um sinal sonoro, Beep(), antes
Dim j As Decimal = 0 de terminar o bloco Try...End Try.
Dim Resultado As Decimal
Try
  i = i + 10
Resultado = i / j
Catch exDivideByZero As DivideByZeroException
' Captura DivideByZeroException
Console.WriteLine("Houve um erro de exceção de divisão por zero.")
Catch ex As Exception
' Captura Genérica
Console.WriteLine("Houve um erro de exceção genérica.")
Finally
Beep()
End Try
Console.ReadKey()
 End Sub

14
Lançamento de Exceções

• Em algumas situações você pode deseja lançar uma exceção para


esta seja tratada por uma rotina de tratamento de exceção ou
para gerar uma exceção.

Sintaxe:
Throw [ expressão ]

15
Lançamento de Exceção

Sub Main() Exemplo: Lançamento de Exceção


Dim i As Decimal = 10
Dim j As Decimal = 0 Lançar uma exceção genérica com a mensagem
Dim Resultado As Decimal "Divisor j igual a zero" se o valor da variável j for
Try igual a zero.
  i = i + 10
If (j = 0) Then
Throw New System.Exception("Divisor j igual a zero.")
End If
Resultado = i / j
Catch ex As Exception
' Captura Genérica
Console.WriteLine("Houve um erro de exceção de divisão por zero.")
Finally
Beep()
End Try
Console.ReadKey()
End Sub

16
Saiba Mais ....
– Tratamento de Exceções
• http://msdn.microsoft.com/pt-br/library/c68xfk56.aspx
– Manipulação Estruturada de Exceções
• http://msdn.microsoft.com/pt-br/library/8a9f2ew0.aspx
– Classe Exception
• http://msdn.microsoft.com/pt-br/library/system.exception.aspx
– Como Capturar uma exceção
• http://msdn.microsoft.com/pt-br/library/ys1b32h3.aspx
– Declaração Try... Catch... Finally... End Try
• http://msdn.microsoft.com/pt-br/library/fk6t46tz.aspx
– Tratamento de Exceção Não Estruturado
• http://msdn.microsoft.com/pt-br/library/sf1hwa21.aspx
– Declaração On Error
• http://msdn.microsoft.com/pt-br/library/5hsw66as.aspx
– Quando Usar Manipulação de Exceção Estruturada ou Não Estruturada
• http://msdn.microsoft.com/pt-br/library/s74yzzb5.aspx
– Como Lançar um exceção
• http://msdn.microsoft.com/pt-br/library/z7w9ff54.aspx
– Declaração Throw em linguagem
• http://msdn.microsoft.com/pt-br/library/ty79csek.aspx

17
Próxima Aula

– Programação Orientada a Objetos

18

Você também pode gostar