Logo Passei Direto
Buscar

7_8_Tratamento de erro_sistema de tipo - Pré P2 - Schneider

User badge image

Enviado por Joao Vitor em

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Tratamento de erros
Inicialmente segue algumas observações importantes: 
- Algumas operações genéricas podem ser pré-determinadas pelas linguagens. 
- Quando é criado um tipo, é tido que definir as operações do tipo. Alocar e desalocar são um exemplo, pois se não criado um construtor, o C++ até os cria, entretanto não é feito com confiabilidade.
- Atribuir, verificar, construir e destruir são operações com qualquer tipos de dados.
	O tratamento de erros foi criado para resolver problemas e situações que acontecem de formas inesperadas ou incomuns na execução (diferente de erros de sintaxe ou do gênero).
 Exceções de hardware pode ser resultado da execução de sequências de instruções que tentam acessar endereços de memória inválidos ou efetuar uma divisão por zero. Exceções de software pode ser resultado do uso de parâmetros com valores inválidos ou serem iniciadas explicitamente.
	Com a programação estruturada cada bloco de execução indica com um código de erro se ele funcionou ou não naquele bloco, ajudando assim com uma organização mínima (no caso feito manualmente).
Código de erros
Subprogramas retornam status de tal forma que os programas que os chamaram possam verificar problemas na execução para tomar as medidas necessárias. Por convenção esse número deve ser zero para indicar uma execução sem erros, enquanto qualquer outro numero indica algum tipo de erro de execução.
	Desvantagens: 1. _ Criar um código em que a condições anormais ficam misturadas com a condição normal 2._Dificultar o projeto de funções que retornam o resultado de um processamento (além do status).
Manipulação de exceções
Manipulações de exceções não é a mesma coisa de tratamento de erros, manipulação de exceções é uma das formas de tratamento de erros.
Pondo em linguagem corrente seria o mesmo que "tente executar o código desta área; caso ocorra algum erro, faça uso do manipulador de exceções; no final, acione o manipulador de conclusão"
As manipulações dão mais legibilidade pois são separadas, os compiladores lidam com isso usando os tratadores, entretanto gastam muito recursos. 
Propagação de erro é uma forma de vincular a ocorrência de uma exceção à execução do tratador. Ele consiste em checar se houver erro na execução de algum subprograma e passar essa informação ao chamador (essa passagem que é feita manualmente usando o código de erro é feita automaticamente pela manipulação de exceções).
Os marcadores são blocos de códigos, seu reuso fica um pouco limitado tendo que colocar as várias partes dentro da estrutura do tratamento (try/catch).
Podem-se indicar os tipos de exceção que um método pode devolver utilizando-se a palavra reservada throws, isso força os trechos de programas, que utilizarem esse método a tratarem as exceções com catch ou finally.
Ex. metrodo(<parametros>)
	Throws Exceção1,...ExceçãoN{
}
Para vincular a ocorrência de uma exceção é também é utilizado o throw, com isso a exceção é criada e o subprograma termina de executar. Caso esteja dentro do try/catch ele volta para o catch.
Uma classe pode forçar o lançamento de exceções ou relançar uma determinada exceção para que possa ser tratada em diferentes escopos. (realizada a partir da palavra throw)
Vantagens das manipulações de exceções: Aumento da legibilidade e facilidade para descrever as formas de tratamento.
Desvantagens das manipulações de exceções: adiciona complexidade à linguagem e conseqüentemente ao seu compilador.
Sistema de tipo
Um sistema de tipos (em LP) é o conjunto de regras que permite a classificação de expressões de acordo com um tipo. Uma forma de fazer isso é declarar o tipo de cada variável antes do seu uso, entretanto oferece pouca flexibilidade para o programador. Para se conseguir essa flexibilidade existe o conceito de polimorfismo, onde o tratamento acontece para diferentes tipos de maneira uniforme, mas a conciliação com a verificação de tipos é muito difícil.
Nas linguagens onde os tipos são completamente determinados temos o monomorfismo (obs. nenhuma linguagem é totalmente monorfica), e naquelas onde elas são parcialmente determinadas, temos o polimorfismo. 
Alguns dos recursos que proporcionam polimorfismos são as vinculações de tipos, escopos dinâmicos, sobrecarga de subprogramas (e operadores) e subprogramas genéricos.
Mais do que declarar tipos para o compilador, a declaração de tipos serve como forma de documentação de código, evidenciando o significado das coisas. 
Alguns sistemas de tipos usam o conceito de herança para permitir restrições aos parâmetros de tipos, o termo herança é usado dentro do conceito da orientação, em que , Além de vermos tipos como casos especiais de outros tipos e termos operações comuns a vários tipos, existe também a preocupação a respeito de como essas operações alteram os valores de um tipo.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?