OO-SC (Meyer) - Cap 121 OO-SC (MEYER) Quando o contrato é quebrado: tratamento de exceções.

Slides:



Advertisements
Apresentações semelhantes
Python: Funções Claudio Esperança.
Advertisements

Deadlocks Professora: Lúcia Drummond. Deadlocks Recursos: hardware ou informação Preemptivo Não preemptivo Uso do Recurso: 1. Pedido (Request ou Open)
Programação de Computadores
Programação em Java Prof. Maurício Braga
Exercícios PAA- Grafos
Desenvolvimento de Sistemas Baseado na Transformação de Modelos
©Silberschatz, Korth and Sudarshan (modificado)1Database System Concepts result := {R}; done := false; calcular F+; while (not done) do if (há um esquema.
Recursividade e Iteração Factorial, Fibonacci e Maior Divisor Comum
(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.
Algoritmos Distribuídos Professora: Lúcia Drummond
Algoritmos Distribuídos Professora: Lúcia Drummond
Ivan Saraiva Silva Sistemas de Tempo Real Embutidos
Sincronização de Processos (3)
Sincronização de Processos (2)
OBS: Este ppt não é o definitivo (Versão Beta)
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
7 Abstração Genérica Unidades genéricas e instanciação.
Sintaxe de Fortran 25/abril/2006. Comandos Fortran PROGRAM PRINT READ STOP END.
Algoritmos e Estruturas de Dados II
Apresentação da linguagem Python
Sincronização e Comunicação entre Processos
Robson Godoi / Sandra Siebra
Contratos Modelagem Funcional.
O Portal do Estudante de Computação
Paradigmas de programação
Sistemas Operacionais I
Ada.
Estruturas de Controlo em Pascal
Unidade I: “Dê um mergulho rápido”
Unidade 3 Controle de Concorrência
Funções Declaração function nomedafunção (arg_1, arg_2,..., arg_n) corpoDaFunção end.
Python: Exceções, Iteradores e Geradores
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC
Seminário 1: Revisão de C
Estruturas de Dados Módulo 3 – Controle de Fluxo
OO-SC (Meyer) - Cap 111 OO-SC (MEYER) Desenho por Contrato Construindo software confiável.
O Portal do Estudante de Computação
Estruturas de Controle entre Instruções
Controle de concorrência
Pilhas Profa. Nádia Félix.
Estrutura de Decisão Multipla
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Processo de Aquisição Adilson de Almeida Cezar Meriguetti
SISTEMAS OPERACIONAIS I
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
BCC /01 Aula Teórica 09 Funções Material Didático Proposto. 1 BCC701 – Programação de Computadores I Universidade Federal de Ouro Preto Departamento.
Algoritmos e Estruturas de Dados RECURSIVIDADE. O que é recursividade? Recursividade significa algo ser definido em termos de sí próprio. Em termos de.
Iteração – Capítulo 5 Programming from Specifications Carroll Morgan Prentice-Hall, 1994 Integrantes: Alex Motta Carlos Nascimento Paulo Maia.
Tratamento de Exceções
Introdução à Linguagem C
Capítulo 6 Exceções.
Programação e Aplicações Gráficas
Exceções Suzana Fragoso (smpf) Adaptado do material de Guilherme Carvalho (gvc)
Introdução ao MATLAB 5.3 para Hidrólogos
Introdução aos Computadores e Programação DI-FCT-UNL-2003/2004
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.
Fundamentos de linguagens de programação
Introdução a Programação
Introdução à Programação
Prof: Adriano A. Ribeiro
BCC221 Programação Orientada a Objetos Prof. Marco Antonio M. Carvalho 2014/2.
Trechos de código que permitem reutilização de uma mesma tarefa. Qualquer código PHP pode estar contido no interior de uma função. Não se pode definir.
Linguagens de Programação
Andréa Iabrudi 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I.
Programação para Web I AULA 4 ESTRUTURAS DE CONTROLE.
ARQUITETURA DE COMPUTADORES Nível do Conjunto de Instruções
11 Revisão da Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
IF E ITERAÇÃO WHILE Dilvan Moreira (baseado no livro Big Java e T. Munzner)
Transcrição da apresentação:

OO-SC (Meyer) - Cap 121 OO-SC (MEYER) Quando o contrato é quebrado: tratamento de exceções

OO-SC (Meyer) - Cap 122 Exceções Cedo ou tarde, apesar de todas as precauções tomadas, alguns eventos não esperados e não desejados vão acontecer. Isto é conhecido como uma exceção e devemos estar preparados para tratá-las.

OO-SC (Meyer) - Cap 123 Conceitos básicos: zFalha na definição correta de tratamento de exceções: Muitas vezes os mecanismos de tratamentos de exceções (em linguagens como ADA e PL/1) servem como instruções tipo goto, violando o princípio de Proteção Modular.

OO-SC (Meyer) - Cap 124 … zFalha: Uma operação tem sucesso se termina a sua execução satisfazendo o seu contrato. Ela falha se não tiver sucesso. zExceção: é um evento de execução que pode ocasionar a falha de uma operação.

OO-SC (Meyer) - Cap 125 Origem das exceções: 1.Tentar executar a.f e o objeto a não existe 2.Tentar ligar um objeto a outro que não existe 3.Executar uma operação que produz uma condição anormal detectada pelo hardware ou sistema operacional 4.Chamar uma operação que falha (*) 5.Verificar que a pré-condição falha

OO-SC (Meyer) - Cap 126 … 6.Verificar que a pós-condição falha 7.Verificar que a invariante falha 8.Verificar que a invariante de um loop não é satisfeita depois do from ou depois de uma iteração 9.Verificar que uma iteração de um loop não altera a variante 10.Executar um ckeck e verificar que a assertiva falhou 11.Executar uma instrução que gera exceção

OO-SC (Meyer) - Cap 127 Falhas e exceções: A falha em uma operação ocasiona uma exceção no seu chamador! Uma chamada a uma operação falha se e somente se ocorrer uma exceção durante a sua execução e a operação não se recuperar da exceção.

OO-SC (Meyer) - Cap 128 Tratamento de exceções: (exemplo em ADA) sqrt (n: REAL) return REAL is begin if x < 0.0 then raise Negative else cálculo_normal_da_raiz_quadrada end exception when Negative => put (Argumento Negativo) return when others => … end -- sqrt

OO-SC (Meyer) - Cap 129 Princípio do tratamento disciplinado de exceções: Só existem duas respostas legítimas para uma exceção: zR1: Refazer (retrying): mudar as condições que levaram à exceção e executar a operação novamente zR2: Falha (pânico organizado): limpar o ambiente, terminar a chamada e reportar a falha ao chamador

OO-SC (Meyer) - Cap 1210 pânico organizado: zGarantir que o chamador vai receber uma exceção! (pânico) zRestabelecer um estado consistente de execução (organizado): >> garantir as invariantes antes de devolver o controle!

OO-SC (Meyer) - Cap 1211 A cadeia de chamada: r0 r1 r2 r3

OO-SC (Meyer) - Cap 1212 Um mecanismo de exceção: zCláusula Rescue (resgate/salvamento): executada no caso de exceção (pré- condição, execução, pós-condição) zCláusula Retry: re-inicia a rotina desde o início. Deve aparecer no âmbito da cláusula Rescue

OO-SC (Meyer) - Cap 1213 Posição das cláusulas: rotina is require pré-condições local -- declarações de entidade locais do -- corpo ensure pós-condições rescue cláusulas_rescue end

OO-SC (Meyer) - Cap 1214 Princípio da falha: zA execução de uma cláusula rescue até o final, não passando por uma instrução retry, leva a rotina corrente a falhar!

OO-SC (Meyer) - Cap 1215 Tabela de histórico de exceções: zSe uma rotina falha: yPorque não tem uma cláusula rescue ou yPorque executa até o final sem passar por nenhum retry Interrompe a execução do chamador, que tem as duas opções: -Rescue c/ retry -Falha

OO-SC (Meyer) - Cap 1216 A cadeia de chamada: r0 r1 r2 r3

OO-SC (Meyer) - Cap 1217 Exemplo: Input de valor inteiro get_integer is -- Obter inteiro do usuário. -- Se incorreto pedir de novo do print (Informe um inteiro: ) ler_um_inteiro rescue retry end

OO-SC (Meyer) - Cap 1218 Input melhorado! Maximo_tentativas: INTEGER is 5 Get_integer is local tentativas: INTEGER do if tentativas < Maximo_tentativas then print (Favor fornecer um inteiro: ) ler_um_inteiro inteiro_foi_lido := True else inteiro_foi_lido := False end rescue tentativas := tentativas + 1 retry end

OO-SC (Meyer) - Cap 1219 Falha de hardware / sistema operacional zCalcular a função: 1 X

OO-SC (Meyer) - Cap 1220 Falha de hardware/SO quasi_inverse (x: REAL): REAL is -- 1/X, se possível; 0 (zero), caso contrário local division_tried: BOOLEAN do if not division_tried then Result := 1/x end rescue division_tried := True retry end

OO-SC (Meyer) - Cap 1221 Quando não existe uma clásula rescue? Class ANY -- mãe de todas as classes default_rescue is -- trata exceções no caso de não -- existir clásula rescue do end