Você está na página 1de 18

Tratamento de Exceções e

Tratamento de Eventos
Prof. Ricardo Mesquita
Introdução
• A maioria dos sistemas de hardware de computadores é capaz de detectar certas
condições de erro em tempo de execução
• As primeiras linguagens de programação foram projetadas e implementadas de
forma que o programa de usuário não podia nem detectar, nem tentar tratar esses
erros.’
• A ocorrência de tal tipo de erro simplesmente fazia o programa ser terminado e o controle
transferido para o sistema operacional.

• A reação típica do sistema operacional para um erro em tempo de execução é


mostrar uma mensagem diagnóstica, a qual pode ser significativa e útil ou
altamente críptica.
Prof. Ricardo P. Mesquita 2
Introdução
• Existe uma categoria de erros sérios que não são detectáveis por hardware, mas
que podem ser pelo código gerado pelo compilador.
• Por exemplo, os erros de índices de faixas de matrizes

• A detecção de erros de faixas de índices é algumas vezes requerida pelo projeto


da linguagem.
• Em C, as faixas de índices não são verificadas porque acreditava-se (e acredita-
se) que o custo da verificação não vale o benefício de detectar tais erros.
• Em alguns compiladores para algumas linguagens, a verificação de faixa de
índices pode ser selecionada ou desabilitada.

Prof. Ricardo P. Mesquita 3


Introdução
• Os projetistas da maioria das linguagens contemporâneas incluíram mecanismos
que permitem aos programas reagir de uma maneira padrão a certos erros em
tempo de execução, assim como a outros eventos não usuais detectados pelos
programas.
• Os programas também podem ser notificados quando certos eventos são
detectados por hardware ou por software de sistema, de forma que também
possam reagir a esses eventos.
• Tais mecanismos são coletivamente chamados de tratamento de exceções.

Prof. Ricardo P. Mesquita 4


Conceitos Básicos
• Definimos uma exceção como qualquer evento não usual, errôneo ou não,
detectável por hardware ou por software que possa requerer um processamento
especial.
• O processamento especial que pode ser requerido quando uma exceção é
detectada é chamado de tratamento de exceção.
• Esse processamento é feito por uma unidade de código ou por um segmento
chamado de tratador de exceção (ou manipulador de exceção).
• Uma exceção é levantada (raised) quando seu evento associado ocorre.
• Em algumas linguagens baseadas em C, as exceções são ditas como lançadas (thrown), em
vez de levantadas.
Prof. Ricardo P. Mesquita 5
Conceitos Básicos
• A ausência de recursos de tratamento de exceções separados ou específicos em
uma linguagem não impede o tratamento de exceções definidas pelo usuário,
detectadas por software:
• Através do uso de um parâmetro auxiliar (variável de estado).
• Por passagem de rótulos (quando a linguagem permite).
• Ou ter o tratador definido como um subprograma separado cujo nome é passado como um
parâmetro para a unidade chamada.

• Se for desejável tratar uma exceção na unidade na qual ela for detectada, o
tratador é incluído como um segmento de código nessa unidade.

Prof. Ricardo P. Mesquita 6


Conceitos Básicos
• Vantagens em ter tratamento de exceções definidos em uma linguagem:
• Sem tratamento de exceções, o código necessário para detectar condições de erro pode se
tornar consideravelmente confuso.
• A exceção levantada em uma unidade de programa pode ser tratada em outra unidade em seu
ancestral dinâmico ou estático.
• Isso permite que um único tratador de exceções seja usado por qualquer número de unidades de
programa.
• Uma linguagem que suporta o tratamento de exceções encoraja seus usuários a considerarem
todos os eventos que podem ocorrer durante a execução dos programas e como eles podem
ser tratados.
• lidar com situações não errôneas, mas não usuais, pode ser mais simples com o tratamento de
exceções.

Prof. Ricardo P. Mesquita 7


Questões de Projeto
• Como e onde os tratadores de exceções são especificados e qual o seu escopo?
• Como uma ocorrência de uma exceção é vinculada a um tratador de exceção?
• A informação acerca de uma exceção pode ser passada para o tratador?
• Onde a execução continua, se é que continua, após um tratador de exceção
completar sua execução?
• Alguma forma de finalização é fornecida?
• Como as exceções definidas pelo usuário são especificadas?

Prof. Ricardo P. Mesquita 8


Questões de Projeto
• Se existem exceções pré-definidas, devem existir tratadores de exceção
padronizados para programas que não forneçam seus próprios?
• As exceções pré-definidas podem ser explicitamente levantadas?
• Os erros detectáveis por hardware são considerados exceções que devem ser
tratadas?
• Existe alguma exceção pré-definida?
• Deve ser possível desabilitar exceções pré-definidas?

Prof. Ricardo P. Mesquita 9


Prof. Ricardo P. Mesquita 10
Prof. Ricardo P. Mesquita 11
Prof. Ricardo P. Mesquita 12
Tratamento de Eventos
• O tratamento de eventos é similar ao tratamento de exceções.
• Em ambos os casos, os tratadores são implicitamente chamados pela ocorrência de algo.
• Mas os eventos são criados por ações externas, como interações de usuário por
uma interface gráfica.
• Em programação convencional (não dirigida por eventos), o código propriamente
dito especifica a ordem na qual o código é executado, apesar de a ordem ser
normalmente afetada pelos dados de entrada do programa.
• Na programação dirigida por eventos, partes do programa são executadas em
momentos completamente imprevisíveis, geralmente disparadas por interações de
usuários com o programa em execução.

Prof. Ricardo P. Mesquita 13


Tratamento de Eventos
• Um evento é uma notificação de que algo ocorreu, como um clique de mouse em
um botão gráfico.
• Um tratador de evento é um segmento de código executado em resposta à
aparição de um evento. Tratadores de evento habilitam um programa a responder
às ações do usuário.
• Os componentes GUI e os tratadores de eventos fornecem a interatividade dos
aplicativos.

Prof. Ricardo P. Mesquita 14


Modelo de Eventos
• Interações de usuários com componentes GUI criam eventos capazes de ser
capturados por tratadores de eventos, os quais fornecem as computações
associadas.
• Componentes GUI são considerados geradores de eventos; todos eles geram
eventos.
• Em Java, tratadores de eventos são chamados de escutadores de eventos
(listeners), que são conectados aos geradores de eventos pelo registro de um
escutador de evento.
• O registro de um escutador como esse é feito com um método da classe que
implementa a interface escutadora.

Prof. Ricardo P. Mesquita 15


Modelo de Eventos
• O objeto painel no qual os componentes são colocados pode ser o escutador de
eventos para esses componentes.
• Apenas escutadores de eventos registrados para um evento especificado são
notificados quando tal evento ocorre.
• Um gerador de eventos informa a um escutador de um evento pelo envio de uma
mensagem para o escutador (em outras palavras, chamando um dos métodos do
escutador).
• O método escutador que recebe a mensagem implementa um tratador de evento.

Prof. Ricardo P. Mesquita 16


Modelo de Eventos
• Uma classe que precisa implementar um escutador deve implementar uma
interface para esse escutador.
• Existem muitas classes de eventos e interfaces escutadoras.

• Cada método tratador de evento recebe um parâmetro de evento, que fornece


informações acerca deste.
• Classes de evento têm métodos para acessar tais informações.

Prof. Ricardo P. Mesquita 17


Dúvidas?

Prof. Ricardo P. Mesquita 18

Você também pode gostar