BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.

Slides:



Advertisements
Apresentações semelhantes
Curso de aprofundamento na linguagem C
Advertisements

Programação em Java Prof. Maurício Braga
Programação em Java Prof. Maurício Braga
Estruturas de Repetição
Tratamento de Exceções
Programação de Computadores I Prof. Eduardo 2011
Excepções Algoritmos e Tipos Abstractos de Informação (ATAI)
(C) 2010 Pearson Education, Inc. Todos os direitos reservados. Java Como Programar, 8/E.
(C) 2010 Pearson Education, Inc. Todos os direitos reservados. Os programas que obtêm certos tipos de recursos devem retorná-los ao sistema explicitamente.
Introdução à Computação - Jorge Macêdo
Classes Concretas e Abstratas
Templates Traduzido de:
PROGRAMAÇÃO MODULAR (com uso de subprogramas)
LPG - I: Alocação Dinâmica de Memória - Ponteiros
LINGUAGEM ESTRUTURADA TURBO C
Universidade Federal do Espírito Santo
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
Classes e objetos P. O. O. Prof. Grace.
Estrutura de Dados em Java
CRIANDO OBJETOS EM JAVA
Introdução a Computação e Cálculo Numérico
Bruno Rafael de Oliveira Rodrigues. Tratadores de Excessões A exceção é uma indicação de que um erro ou problema aconteceu durante a execução de uma aplicação.
Unidade I: “Dê um mergulho rápido”
Aula prática 13 Orientação a Objetos – C++ Parte 1
Python: Exceções, Iteradores e Geradores
Linguagens de Programação
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Tecnologia para Web Tratamento de Exceções
Introdução a aplicativos Java
Programação Orientada à Objetos
Erick Luis Moraes de Sousa
Programação em C++ Compiladores
Prof. Roberto Rosa Aula 8.  A partir de agora vamos aprender como ver qual é o erro que está acontecendo em nosso projeto. Para.
SISTEMAS OPERACIONAIS I
Excepções Conceito de Excepção A classe Exception
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
Linguagem II Exceções.
Paradigmas da Programação – Semestre 1 – Aula 10 Professor: Eduardo Mantovani )
Aula prática 14 Orientação a Objetos – C++ Parte 2
Tratamento de Exceções
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
Linguagens de Programação
Capítulo 6 Exceções.
Exceções Suzana Fragoso (smpf) Adaptado do material de Guilherme Carvalho (gvc)
Exceções Profa. Patrícia A. Jaques Alterada por Leandro Tonietto abr-15.
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Introdução ao C++ para programadores OO Instrutores: Francisco Carvalho, João Paulo do Monte, Renato Viana Ferreira {fcfl, jpsml,
Profa. Maria Augusta Constante Puget
Profa. Maria Augusta Constante Puget
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 08) Prof. Alessandro Bernardo.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Programação para Web I AULA 4 ESTRUTURAS DE CONTROLE.
11 Revisão da Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Capítulo 15 – Tratamento de Exceções
Linguagem de Programação
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
(C) 2010 Pearson Education, Inc. Todos os direitos reservados. Java™ Como Programar, 8/E.
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
Tratamento de Exceções. Roteiro O que são exceções? Quando usar Capturando Exceções Exemplos.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ PAE: Pedro Shiguihara Professor: Dilvan Moreira.
Recursividade, Entrada pelo teclado e Funções com retorno Dilvan Moreira.
Transcrição da apresentação:

BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2

 Site da disciplina:  Moodle:  Lista de s:  Para solicitar acesso: 2

Avisos 3

4

 Polimorfismo  Funções Virtuais  Resolução Dinâmica  Classes Abstratas ▪ Funções Virtuais Puras  Conversão de Tipos  Destrutores Virtuais 5

 Exceções  try, throw e catch  Modelo de Terminação  Erros comuns  Quando Utilizar Exceções?  Classes de Exceções da Biblioteca Padrão 6

7

 Uma exceção é uma indicação de um problema que ocorre durante a execução de um programa  O próprio nome indica que o problema é infrequente;  A regra é que o programa execute corretamente.  O tratamento de exceções permite que os programas sejam mais robustos e também tolerantes a falhas  Os erros de execução são processados;  O programa trata o problema e continua executando como se nada tivesse acontecido;  Ou pelo menos, termina sua execução elegantemente. 8

 Em programas com muitas classes criadas por diferentes programadores, se ocorrer um erro de execução, qual classe o tratará?  Como estabelecer a comunicação entre os métodos das diferentes classes?  Se uma função precisa enviar uma mensagem de erro, ela “lança” um objeto representando o erro para fora dela;  Se a função que a chamou não “capturar” este objeto, ele será enviado para quem a chamou  E assim por diante, até que alguma função o capture. 9

#include using namespace std; int main() { int n= ( int ) , *ptr; ptr = new int [n]; ptr[0] = 5; cout<<"Endereco: "<<(void*) ptr <<endl; delete [] ptr; return 0; } 10

#include using namespace std; int main() { int n= ( int ) , *ptr; ptr = new int [n]; if(ptr) { ptr[0] = 5; cout<<"Endereco: "<<(void*) ptr <<endl; delete [] ptr; } else cout<<"Memoria insuficiente!" <<endl; return 0; } 11

 Nenhum destes dois programas evitam o erro causado quando a linha do operador new for executada  Compilação ok;  Não haverá tempo nem para executar o if que vem depois, no segundo código.  O ideal seria “tentar” executar a instrução new  Se der certo, ok;  Caso contrário, “lançar” um objeto com a exceção para que alguma função o “capture” e o processe. 12

13

 Estas ações podem ser realizadas com o uso de exceções;  Temos 3 palavras chave:  try (tentar);  throw (lançar);  catch (capturar). 14

 A instrução try é utilizada para definir blocos de código em que exceções possam ocorrer  O bloco de código é precedido pela palavra try e é delimitado por { e };  As instruções que podem implicar em exceções e todas as instruções que não podem ser executadas em caso de exceção fazem parte do bloco de código. 15

 A instrução throw lança uma exceção  Indica que houve um erro;  É criado um objeto, que contém a informação sobre o erro ▪ Logo, podemos criar uma classe que defina o erro ▪ Ou utilizar uma existente.  Posteriormente, outro trecho de código capturará este objeto e tomará a atitude adequada. 16

 Exceções são tratadas por manipuladores catch  Capturam e processam as exceções.  Pelo menos um catch deve seguir um bloco try  O bloco de código é precedido pela palavra catch seguido de parênteses e é delimitado por { e };  Dentro dos parênteses há os parâmetros da exceção ▪ Representa o tipo de exceção que o catch pode processar.  O catch cujos parâmetros sejam de tipos iguais ao da exceção será executado;  O valor default para um catch é...  Normalmente um catch imprime mensagens de erro, termina o programa elegantemente ou tenta refazer a operação que lançou a exceção. 17

 Um engano comum é achar que em todo tratamento de exceções é obrigatório usar pelo menos um try, um throw e um catch juntos  Recomendável é utilizar juntos o try e o catch para manipular as exceções;  O throw é utilizado somente para lançar exceções, não para manipulá-las. 18

19

 Se em um bloco try, uma exceção ocorre:  O bloco termina imediatamente;  O primeiro catch cujo tipo seja igual (ou uma classe derivada) do tipo da exceção é executado;  Quando o catch termina, suas variáveis são destruídas e o fluxo de execução passa para a primeira instrução depois do último catch relacionado ao try que lançou a execução. ▪ O que é chamado de modelo de terminação.  Há outro modelo em que o fluxo passa para o ponto logo após ao lançamento da exceção ▪ Modelo de resumo. 20

 Se ocorrer uma exceção em um try e não houver catch correspondente, ou se não houver try  A função que contém a instrução com erro termina;  O programa tenta encontrar um bloco try aberto com a chamada da função;  Caso a exceção seja realmente inesperada, é executada uma chamada abort ▪ Não há nenhum bloco try que a contenha; ▪ O programa termina sem chamar destrutores.  Se não ocorrer uma exceção, o bloco try termina e todos os catch são ignorados. 21

22

23 Continua na próxima aula...

24

#include // arquivo de cabeçalho stdexcept contém runtime_error using namespace std; // objetos DivideByZeroException devem ser lançados por funções // ao detectar exceções de divisão por zero class DivideByZeroException : public runtime_error { public: // construtor especifica a mensagem de erro padrão DivideByZeroException(): runtime_error( “tentou dividir por zero" ) {} }; 25

 Nossa classe que representa o erro de divisão por zero é derivada da classe runtime_error  Definida na stdexcept;  Derivada da classe exception da biblioteca padrão C++ ▪ Classe base de todas as exceções.  Representa os erros de execução.  Nossa classe simplesmente passa uma string de erro ao construtor da classe runtime_error  Não é obrigatório derivar classes específicas para erro, como fizemos. 26

 Se optarmos por derivar a classe runtime_error, teremos um recurso extra  O método virtual what, que nos permite obter uma mensagem de erro apropriada;  No nosso exemplo, utilizaremos um objeto da classe DivideByZeroException para indicar uma tentativa de divisão por zero ▪ Ao criar o objeto, o construtor será chamado e a mensagem enviada. 27

#include using namespace std; #include "DivideByZeroException.h" // Classe DivideByZeroException // realiza a divisão e lança o objeto DivideByZeroException se // a exceção de divisão por zero ocorrer double quotient( int numerator, int denominator ) { // lança DivideByZeroException se tentar dividir por zero if ( denominator == 0 ) throw DivideByZeroException(); // termina a função // retorna resultado da divisão return static_cast ( numerator ) / denominator; } 28

int main() { int number1; // numerador especificado pelo usuário int number2; // denominador especificado pelo usuário double result; // resultado da divisão cout << "Enter two integers (end-of-file to end): "; // permite ao usuário inserir dois inteiros para dividir while ( cin >> number1 >> number2 ) { // bloco try contém código que poderia lançar exceção // e código que não deve executar se uma exceção ocorrer 29

try { result = quotient( number1, number2 ); cout << "The quotient is: " << result << endl; } // fim do try // handler de exceção trata uma exceção de divisão por zero catch ( DivideByZeroException &divideByZeroException ) { cout << "Exception occurred: " << divideByZeroException.what() << endl; } // fim do catch cout << "\nEnter two integers (end-of-file to end): "; } // fim do while cout << endl; return 0; // termina normalmente } 30

31

 Não pode haver código entre um bloco try e um catch  É um erro de sintaxe.  Cada catch só pode ter um único parâmetro  Uma lista de parâmetros é um erro de sintaxe.  É um erro de lógica capturar o mesmo tipo de exceção em dois catch diferentes;  Após o tratamento da exceção, achar que o fluxo de execução volta para o ponto em que a exceção foi lançada. 32

33

 Erros síncronos (na execução de uma instrução)  Índice de vetor fora dos limites;  Overflow aritmético (valor fora dos limites do tipo);  Divisão por zero;  Parâmetros inválidos;  Alocação de memória.  Exceções não devem ser utilizadas para erros assíncronos (pararelos à execução do programa)  Erros de I/O;  Cliques de mouse e pressionamento de teclas. 34

35

36

37 Perguntas?

38  Templates (genéricos)

FIM 39