Você está na página 1de 12

17-01-2014

AERBP

Jorge
Pina

2013
/
2014

Mdulo 11
Programao Orientada a Objetos Avanada
Curso - Tcnico de Gesto e Programao de Sistemas Informticos
Disciplina - Programao e Sistemas de Informao

Contedos da Disciplina
Modulo XI Programao Orientada a Objectos Avanada
Objectivos
Fazer o tratamento de erros de uma maneira estruturada;
Virtualizar fluxos de dados atravs do conceito de Stream;
AERBP

Jorge
Pina

Manipulao de Streams em diversos contextos;


Estruturar uma soluo usando o paradigma da programao
orientada a objectos.

17-01-2014

Contedos da Disciplina
(40 tempos)

Modulo XI Programao Orientada a Objectos Avanada


Contedos

AERBP

Jorge
Pina

Introduo ao conceito de Excepo;

Manipulao de Excepes;

Criao de Excepes prprias;

I t d ao conceito
Introduo
it de
d Stream;
S

Derivao de Streams.

Excepes (1)

Pode-se assumir que na escrita de um programa nada


de incorrecto ou pouco usual ir acontecer;

Por Exemplo, quando pedido para introduzir um


inteiro, o utilizador ir sempre introduzir um inteiro;

Quando acontece algo estranho, assinalado ou pelo


cdigo ou pelo compilador;

AERBP

Jorge
Pina

O processo de assinalar designado por lanar uma


excepo;

No entanto, nem sempre isto acontece!

possvel introduzir cdigo no programa de forma a


manipular a excepo.

17-01-2014

Excepes (2)

Exception um evento gerado pela JVM (em tempo de


execuo),

que ocorre ao ser identificada uma

condio que impede a execuo normal do Programa;

execuo

de

um

programa

pode

parar

inesperadamente devido a um erro de runtime;

Erro de runtime pode ter vrias causas:

AERBP

Erro de lgica: Diviso por zero, acesso fora dos limites de um array,
l it
leitura
d nmero
de

com formato
f
t invlido
i lid

Jorge
Pina

Erro fsico: Ficheiro removido, ficheiro sem permisses, erro de


comunicaes,

Uma excepo um objecto da classe Exception criado


pelo JRE como resposta a um erro de runtime.

Excepes (3)

O programa abaixo no tem erros de sintaxe. Provoca


uma diviso por zero em tempo de execuo:

AERBP

public class DivZero{


public static void main (String[]args) {
int a=1, b=0;
System.out.println(a/b);
System.out.println("Diviso por Zero");
System.out.println("Fim do Porgrama");
}
}

Esta instruo provoca a diviso


por zero

Excepo uma instanciao de


um objecto que pertence classe
Exception
i e instanciado
i
i
quando
ocorre um erro de runtime

Jorge
Pina

17-01-2014

Excepes (4)

AERBP

Jorge
Pina

Independentemente da causa do erro o Java gera


excepes que so instncias de classes que so
subclasses de Excepcion:

Erro

Instncia da classe

Diviso por zero

ArithmeticException

Acesso a ndice de
array fora dos limites

ArrayIndexOutOfBounds
Exception

Acesso a ficheiro no
existente

FileNotFoundException

Acesso a servidor no
disponvel

SocketException

Excepes (5)

AERBP

Jorge
Pina

Os blocos TryCatch...Finally

Permitem tratar os erros em tempo de execuo e o


programa
g
pelo p
p
programador;
g
;
retomar do controlo do p

A instruo suspeita fica num bloco try;

O corpo try executado at que uma excepo seja


lanada;

Caso nenhuma excepo seja lanada, o try termina


normalmente;

Definir um bloco catch para cada excepo que pode


aparecer;

Cada bloco catch vai tratar do respectivo erro de


runtime;

No bloco Finally coloca-se o cdigo que se quer que


seja sempre executado quer haja ou no excepo.

17-01-2014

Excepes (6)
Tratamento de Excepes

try {
// cdigo a ser executado

Inicia o trecho de cdigo


g a ser
tratado

} catch (ClasseDeExceo instnciaDaExceo) {


// tratamento da exceo
AERBP

} finally {

Codigo que indica o inicio do


tratamento da excepo
Importante para manipulao de
base de dados

// cdigo a ser executado mesmo que uma

Jorge
Pina

exceo seja lanada


}

Excepes (6)
public class DivZero{
public static void main (String[]args) {
int a=1, b=0;
try{
System.out.println(a/b);

e, identifica o objecto
instanciado (Exception)
Provoca diviso por zero

} catch (Exception e){


Trata diviso por zero

y
p
(
p
)
System.out.println("Diviso
por Zero");

AERBP

}
Jorge
Pina

Se a excepo no fosse
tratada, esta instruo no
System.out.println("Fim do Programa"); seria executada

}
10

17-01-2014

Excepes (7)

Os blocos Try...Catch...Finally

A classe Exception derivada da classe Trowable;


A
classe
Exception
possui
subclasses
cujas
propriedades se adaptam ao erro especfico;
Isto permite ter 1 bloco try com vrios blocos catch,
onde cada um trata um erro especfico;

AERBP

Trata qualquer erro (instanciada


num catch)

Jorge
Pina

Tratam erros mais especficos


(instanciadas em blocos catch)
11

Excepes (8)

A classe base Throwable - Fornece uma interface e


implementao comuns para a maioria das
excepes;
Error - Indica problemas graves Que no podem ser
apanhados:

AERBP

Exception - Encabea a hierarquia de condies que


devem ser apanhadas ou especificadas como
atirveis pelo mtodo;

Jorge
Pina

VirtualMachineError
CoderMalfunctionError

Clicar

RuntimeException pode ser Atirada durante o normal


Funcionamento da JVM (no obrigatrio serem
tratadas);

Clicar

12

17-01-2014

Excepes (9)

Os blocos catch so percorridos sequencialmente at


encontrar o erro. Se nenhum se ajustar ao erro mais
especfico ocorrido o programa pra com erro de
execuo;

Por esse motivo no ltimo catch deve ser colocado um


objecto da classe Exception.

AERBP

Jorge
Pina

13

Excepes (10)

AERBP

Jorge
Pina

14

public class TesteCatch


{
public static void main (String[] args){
int a;
Formato de nmero invlido
try {
a=Integer.parseInt("123a");
}catch (NumberFormatException e){
Trata a excepo
System.out.println("NumberFormatException");
}catch (ArithmeticException e){
System.out.println("ArithmeticException");
}catch (Exception e){
System.out.println("Bloco Exception");
}fi ll {
}finally{
System.out.println("Bloco Finally");
Instrues que so sempre executadas
}
quer haja ou no excepes
System.out.println("Fim do Programa");
}
Resultado
}
}

17-01-2014

Excepes (11)

AERBP

Jorge
Pina

15

public class TesteCatch1 {


public static void mais (String[] args){
int[] a=new int[6];
try {
Acesso a posio fora dos limites do array
a[8]=12;
}catch (NumberFormatException e){
System.out.println("NumberFormatException");
}catch (ArithmeticException e){
System.out.println("ArithmeticException");
}catch (Exception e){
System.out.println("Bloco
Sys
e .ou .p
( oco Exception");
cep o );
O erro no encaixa em
nenhuma das excepes.
}finally{
tratado
pelo
objecto
System.out.println("Bloco Finally");
Exception
}
Resultado
System.out.println("Fim do Programa");
}
}

Excepes (12)

erro

atrs

encaixa

na

classe

ArrayIndexOutOfBoundsException;

AERBP

Jorge
Pina

Exemplos de outras excepes pr definidas:

IndexOutOfBoundsException

NegativeArraySizeException

IOException
p

SQLException

Etc.

16

17-01-2014

Excepes (13)

Escalar excepes no tratadas

Em Java as excepes no tratadas so escaladas para


o nvel acima;

A excepo escala at ao bloco main() e, se a no for


tratada a execuo do programa pra;

AERBP

17

Neste caso, o JRE devolve um cdigo de erro ao sistema


operativo;

Quando ocorre uma excepo:

Jorge
Pina

Escalar significa passar o problema para o chefe;


O nvel acima (chefe) o bloco de cdigo chamador;

A primeira
i
i verificao
ifi
tratada
t t d pelo
l mtodo
t d onde
d o bloco
bl
est includo
Se no houver tratamento, a excepo enviada para o
mtodo que a chamou e assim sucessivamente.
Se nunca for tratada, ao chegar a main() o programa
interrompido e o utilizador informado com uma mensagem
de erro.

Excepes (14)

AERBP

/* @author (Jorge Pina)


* @version (1, 03-01-2014) */
public class ExcepcaoEscalada
{
public static void metodoComErro(){
System.out.println((3/0));
}
public static void main(String[] args){
try{
metodoComErro();
}catch (RuntimeException rte){
rte.printStackTrace();
}
System.out.println("Fim de Programa");
}
}

Excepo no tratada e
portanto eacalada para o
metodo
main
().
(Chamador)
Tratamento da Excepo
Imprime o contedo da pilha de
execuo dando informao sobre a
sequncia de invocao de mtodos

Jorge
Pina

Linha 6 com erro


18

Linha 10 onde o erro e tratado

17-01-2014

Excepes (15)
Escalamento de excepes com a directiva Throws;

Existem dois tipos de mtodos no que diz respeito a tratamento


de excepes:

Os mtodos com baixa probabilidade de gerar excepes;

Neste caso o tratamento da excepo opcional. (unchecked


exception);

Os mtodos com alta probabilidade de gerar excepes (como


por exemplo os que operam sobre dispositivos de entrada /
sada IO);

Neste caso o tratamento da excepo obrigatrio(checked

exception);

AERBP

Jorge
Pina

19

O tratamento de excepes pode ser feito por :

Try-Catch (como visto at agora);

Directiva throws - Neste caso no se trata a excepo, limita-se a


escal-la;

Utilizando throws tranquiliza-se o compilador dizendo que se vai


tratar a excepo escalando-a, mas na realidade no se est a
tratar.

Excepes (16)
Escalamento de excepes com a directiva Throws

/** Write a description of class ExcepcaoEscalada2 here.


* @author
@ th (your
(
name))
* @version (a version number or a date)*/
public class ExcepcaoEscalada2

Obrigatrio devido ao mtodo read().


Faz o tratamento da excepo escalando-a.
Informa o compilador que esta vai ser
tratada.

{
public static void main (String[] args) throws java.io.IOException{
int n=0;
AERBP

n=System in read();
n=System.in.read();

Mtodo read() pode lanar uma IOException


qque uma checked exception.
p

System.out.println("n=='a'"+(n=='a'));
Jorge
Pina

System.out.println("n= "+n);
}
}

20

10

17-01-2014

Excepes (17)

AERBP

Jorge
Pina

21

Em vez de escalar, tratar a excepo obrigatria no bloco


try...catch

/** Write
W it a description
d
i ti
off class
l
E
ExcepcaoEscalada2
E
l d 2 here.
h
* @author (your name)
* @version (a version number or a date)*/
public class ExcepcaoEscalada2a
{
public static void main (String[] args) {
int n=0;
try{
n=System.in.read();
}catch (Exception e){
e.printStackTrace();
}finally{
System.out.println("n=='a'"+(n=='a'));
System.out.println("n= "+n);
}
}
}

ArrayList

O ArrayList, que faz parte do Java Collections Framework


(JCF), uma funo bastante til que permite criar Arrays
di i
dinmicos,
e ainda
i d oferecer
f
muitos
it mtodos,
t d
b t t teis,
bastante
t i
para manipular o contedo dos mesmos;

Primeiro, tem que se importar o pacote que contm as


ArrayLists:

AERBP

Agora, dentro da classe, declarar-se o ArrayList:

Jorge
Pina

import java.util.ArrayList;

ArrayList<TipoDados> NomeArray = new ArrayList<TipoDados>();

O ArrayList acima de tamanho infinito (podia-se limitar o


tamanho escrevendo entre os () o nmero mximo de
registos que o ArrayList poderia conter).

22

11

17-01-2014

ArrayList

Para adicionar registos utiliza-se o comando add;

NomeArrays.add("Jorge");

Para verificar qual o tamanho do ArrayList utiliza-se o


comando size;

Para verificar a existncia de um elemento no ArrayList,


utiliza-se o comando contains;

AERBP

Jorge
Pina

int a = NomeArray.size();

23

NomeArray.contains(elemento);

Para eliminar elemenros do ArrayList, utiliza-se:

Comando Clear para apagar tudo NomeArray.clear();

Comando Remove para eliminar um elemento especifico;

NomeArray.remove(elemento).

Referncias Bibliogrficas

CHAN, Mark; GRIFFITH, Steven; IASY, Anthony.


Java 1001 dicas de programao.
M k
MakronBooks
B k So
S Paulo.
P l 1999

SIERRA Kathy; BARTES, Bert. Use a cabea!


Java. Editora Alta Books Rio de Janeiro.
2005

AERBP

Jorge
Pina

24

12