Mtodos de Programao II Mestrado Integrado em Engenharia

  • Slides: 18
Download presentation
Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre

Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Excepções e Streams em Java Métodos Programação II 1

Excepções • O Java introduz uma forma de fornecer robustez aos programas através de

Excepções • O Java introduz uma forma de fornecer robustez aos programas através de um mecanismo de tratamento de excepções. • O que é uma excepção ? – É uma sinal gerado pela máquina virtual java (em tempo de execução) que é comunicado ao programa indicando a ocorrência de uma erro recuperável. – Exemplos: tentativas de divisão por zero, indexação fora dos limites de um array, tentativas de leitura para além dos limites de um ficheiro, etc. – São quase sempre violações semânticas ao nível do ambiente de programação – No entanto (como vamos ver com exemplos), as excepções podem resultar de acções que não obedecem às restrições semânticas dos próprios problemas codificados. Métodos Programação II 2

Excepções (cont) • Uma excepção é lançada (thrown) no ponto do código onde ocorreu

Excepções (cont) • Uma excepção é lançada (thrown) no ponto do código onde ocorreu e diz-se apanhada (caugh) no ponto do código para o qual o controle foi transferido. • As excepções podem ser implícitas (originadas da máquina Java) ou explicitas (programadas e incluídas no código). • Excepções são representadas por instâncias da respectiva classe de excepção. • Podemos definir as nossas próprias excepções definindo classes que são subclasses de java. lang. throwable. Exception • Exemplo do posicionamento na hierarquia de classes: Object Throwable Exception Run. Time. Exception Métodos Programação II Array. Index. Out. Of. Bounds. Exception 3

Excepções (exemplo) • Para o programa t. java: public static void main(String a[]) {

Excepções (exemplo) • Para o programa t. java: public static void main(String a[]) { double v[] = new double[10]; for(int i=0; i<11; i++) v[i] = i * i; } • A sua execução lança a excepção (e mensagem): • > java t Exception in thread "main“ java. lang. Array. Index. Out. Of. Bounds. Exception: 10 at t. main(t. java: 4) Nome da classe que representa esta excepção Métodos Programação II 4

Definição de blocos de vigilância de excepções • Declaração de blocos de código onde

Definição de blocos de vigilância de excepções • Declaração de blocos de código onde são tratadas as excepções: • O Java usa cinco keywords para estas declarações try / catch / throws / finally • try{ Definição do bloco do código a detectar a ocorrência da excepção } catch(Id_da_excepção var 1) { Definir tratamento a dar a este caso. Vão existir tantos catch quantas as excepções a tratar. } finally { Código que é executado independentemente da ocorrência ou não da excepção. Exemplo: fechar ficheiro, etc. } Métodos Programação II 5

Exemplo try/catch try { …. …. } catch(Array. Index. Out. Of. Bounds. Exception e)

Exemplo try/catch try { …. …. } catch(Array. Index. Out. Of. Bounds. Exception e) { System. out. println(“ Limite máximo de elementos atingido”); } catch(Number. Format. Exception e) { System. out. println(“ Formato do valor numérico inválido”); } catch(Nova. Excep e) { System. out. println(e. get. Message()); } …. …. Métodos Programação II 6

Lançamento de excepções e definição de métodos • Podemos ter métodos a não tratar

Lançamento de excepções e definição de métodos • Podemos ter métodos a não tratar localmente as excepções mas a delegar na entidade que envia a mensagem ao método. Nome da classe de excepção • Exemplo: public double area() throws Number. Format. Exception { …. } Palavra chave que designa lançamento da excepção para ser tratada exteriormente ao método Métodos Programação II 7

Excepções representativas de violações semânticas • Por vezes, podemos usar as excepções como indicadores

Excepções representativas de violações semânticas • Por vezes, podemos usar as excepções como indicadores de situações anómalas que ocorrem durante a execução do nosso programa. • Estas situações de erro são representadas por excepções definidas pelo programador. Os erros são de definição própria dentro do contexto do programa e. g. o utilizador escolher uma opção não esperado num menu de escolha. • Exemplo: public class Stack Indicação que lança a excepção para o exterior {. . . public Object pop() throws empty. Stack. Exception { if(this. empty()) throw new empty. Stack. Exception(); else num. Elem -=1; Criação de uma instância da } excepção e seu lançamento } Métodos Programação II 8

Classes representativas de Excepção • Quando pretendemos definir uma excepção representativa de uma violação

Classes representativas de Excepção • Quando pretendemos definir uma excepção representativa de uma violação semântica do nosso ambiente definimos uma nova classe. class Nova. Excep extends Exception { Nova. Excep() { super(); } Nova. Excep(String s) { super(s); } } • Existe um método get. Message() definido em Exception que contém a mensagem de erro correspondente à violação ou erro. Métodos Programação II 9

Streams • Resume em Java todas as considerações sobre I/O de dados. • Noção

Streams • Resume em Java todas as considerações sobre I/O de dados. • Noção de Stream: • abstracção que representa fonte/destino de dados do tipo sequencial e independente dos dispositivos físicos. • Como abstracção que é tem de ser redefinida e concretizada! • Package = java. io • Duas grandes divisões (classes): – Input. Stream – Output. Stream • Duas classes de streams: – Streams de texto; – Streams de bytes. Métodos Programação II 10

Classes Não Stream • Existem classes de tratamento de ficheiros que não subclasses de

Classes Não Stream • Existem classes de tratamento de ficheiros que não subclasses de Input. Stream ou Output. Stream. Nomeadamente a classe File que trata de ficheiros de texto em disco. Public static void main(String a[]) { File f 1 = new File("c: jdkmysourceexe 1. java"); String nome = f 1. get. Name(); String path = f 1. get. Path(); boolean test 1 = f 1. is. File(); boolean test 2 = f 1. is. Directory(); int comp = f 1. length(); f 1. delete(); } Métodos Programação II 11

Classes Stream • Tratar ficheiros de texto. Por exemplo imprimir as palavras contidas num

Classes Stream • Tratar ficheiros de texto. Por exemplo imprimir as palavras contidas num ficheiros de texto. Usa-se Buffered. Reader que é a classe de leitura de streams de texto com buffer. File. Reader permite ler sucessivas linhas de texto através do método readline(). A situação é análoga com a classe Buffered. Writer. class Parse { Classe de identificação de public static void main(String arg[0]) tokens dentro de uma { string, usando um File. Reader in = new File. Reader(argv[0]); separador. Exemplo: “as; b; ff; hh; 77; a” usando “; ” Buffered. Reader fs = new Buffered. Reader(in); String s = fs. read. Line(); String separador = " "; do { String. Tokenizer st = new String. Tokenizer(s, separador); while(st. has. More. Tokens()) System. out. println(st. next. Token()); } while((s = fs. read. Line()) != null); } Próximo token } Métodos Programação II 12

Classe Print. Writer para ficheiros texto • Exemplo: public static void main(String a[]) {

Classe Print. Writer para ficheiros texto • Exemplo: public static void main(String a[]) { Circulo c = new Circulo(1, 5, 12); Circulo c 2 = new Circulo(1, 1, 9); try{ Print. Writer p = new Print. Writer(“formas. txt”); p. println(c. to. String()); p. println(c 2. to. String()); p. flush(); p. close(); } catch(IOException e) {…. . }; } Métodos Programação II 13

Object. Streams • Em Java é possível gravar objectos numa stream de uma forma

Object. Streams • Em Java é possível gravar objectos numa stream de uma forma transparente. Isto é, sem ter de nos preocupar com o que esse objecto é! Assim podemos ler/escrever para uma stream objectos, arrays e tipos de dados simples ex: int. • As classes Object. Input. Stream e Object. Output. Stream implementam um algoritmo de serialização. Ou seja, implementam um algoritmo que garante que todas as referencias cruzadas existentes entre instâncias de diferentes classes são devidamente repostas aquando da leitura das tais instâncias. • Para garantir que isto aconteça basta que as classes das referidas instâncias que pretendemos gravar implementem a interface Serializable. • Uma classe é Serializable se todas as variáveis de instância por esta definidas pertencerem a classes Serializable. • A maioria das classes que temos vindo a usar são Serializable ex: String, arrays, etc. • Notar no entanto que as variáveis static não serializáveis! Métodos Programação II 14

 • Exemplo: Gravar um conjunto de figuras geométricas. Circulo e Elipse são subclasse

• Exemplo: Gravar um conjunto de figuras geométricas. Circulo e Elipse são subclasse da classe Forma apresentada em aulas anteriores. import java. io. *; public abstract class Forma implements Serializable { public abstract double area(); public abstract double perimetro(); } class test { public static void main(String a[]) { Forma f 1 = new Circulo(); Forma f 2 = new Elipse(); Forma f 3 = new Circulo(); grava(f 1, "figuras"); grava(f 2, "figuras"); grava(f 3, "figuras"); Formas f[] = new Formas[10]; ler("figuras", f); int i = 0; while(f[i] != null) System. out. println(f[i++]. area()); } } Métodos Programação II 15

Método ler(String, Forma[]) public static void ler(String a, Forma ff[]) { try { File.

Método ler(String, Forma[]) public static void ler(String a, Forma ff[]) { try { File. Input. Stream f = new File. Input. Stream(a); Object. Input. Stream in = new Object. Input. Stream(f); int i = 0; while( (ff[i++] = (Forma)in. read. Object()) != null); f. close(); } catch(Class. Not. Found. Exception e) { System. out. println("Classe do objecto lido nao existe !!"); } catch(File. Not. Found. Exception e) { System. out. println("Nome do fx nao esta correcto!! "); } catch(IOException e) { System. out. println("Problemas de I/O. . . "); } Métodos Programação II 16

Método grava(Forma, String) public static void grava(Forma a, String nome) { try { File.

Método grava(Forma, String) public static void grava(Forma a, String nome) { try { File. Output. Stream file = new File. Output. Stream(nome); Object. Output. Stream out = new Object. Output. Stream(file); out. write. Object(a); out. flush(); out. close(); } catch(File. Not. Found. Exception e) { System. out. println("Nome do fx nao esta correcto!! "); } catch(IOException e) { System. out. println("Problemas de I/O. . . "); } } Métodos Programação II 17

Exercícios • Escrever um método que regista num ficheiro texto informação sobre as Estufas,

Exercícios • Escrever um método que regista num ficheiro texto informação sobre as Estufas, nomeadamente código, área, temperaturas mínimas e máximas, e o nome do tipo de estufa. • Escrever métodos para escrita e leitura da informação do estado das estufas. Ou seja, que garante que a informação do programa Gere. Estufas se preserva. • Introduzir no código dos métodos das classes tratamento de excepções. Nomeadamente no código respeitante à escrita/leitura das Streams, inserção de novas estufas, validação do valor da temperatura no método em. Risco(int), etc. Métodos Programação II 18