145
Java PUC-MG Prof.ª Kecia Aline Marques Ferreira

Linguagem Java - Conceitos e Técnicas

Embed Size (px)

DESCRIPTION

Aprender a linguagem Java e conceitos de POO (Programação Orientada a Objetos)

Citation preview

Page 1: Linguagem Java - Conceitos e Técnicas

Java

PUC-MGProf.ª Kecia Aline Marques Ferreira

Page 2: Linguagem Java - Conceitos e Técnicas

Conceitos e Técnicas� Obtendo Java� Conceitos Fundamentais� Pacotes� Operadores e Estruturas de Controle� Tipos Básicos� Modificadores� Semântica de Referência

Kecia Marques 2

� Semântica de Referência� Arranjos� Composição de Objetos� Passagem de Parâmetros� Herança� Classes Abstratas� Interfaces� Polimorfismo� Tratamento de Exceções

Page 3: Linguagem Java - Conceitos e Técnicas

Obtendo JAVA

Kecia Marques 3

Page 4: Linguagem Java - Conceitos e Técnicas

Sun Microsystems

� Java é uma linguagem de programação orientada por objetos amplamente difundida.

� Foi desenvolvida pela Sun Microsystems por James Gosling.

Na linguagem Java, é gerado um código intermediário,

Kecia Marques 4

� Na linguagem Java, é gerado um código intermediário, denominado bytecode, a ser interpretado e executado pela JVM (Java Virtual Machine). A vantagem disso é o alto grau de portabilidade dos programas.

.java são os arquivos de código fonte

.class são os arquivos compilados, os bytecodes.

Page 5: Linguagem Java - Conceitos e Técnicas

Para utilizar Java

� Site oficial de Java: http://java.sun.com/

� Para utilizar Java é preciso:

Kecia Marques 5

� Baixar e instalar o JDK: Java SE Development Kit � Preferencialmente baixar e instalar uma

ferramenta IDE. Exemplos de IDE free:� Eclipse: www.eclipse.org� NetBeans: da Sun, disponível em http://java.sun.com/

Page 6: Linguagem Java - Conceitos e Técnicas

Para saber mais sobre Java

� Tutorial da Sun:

http://java.sun.com/developer/onlineTraining/

Kecia Marques 6

� Deitel, H. M.; Deitel, P. J. Java - Como

Programar. 6. ed. Prentice-Hall, 2005.

Page 7: Linguagem Java - Conceitos e Técnicas

Conceitos Fundamentais

Kecia Marques 7

Page 8: Linguagem Java - Conceitos e Técnicas

Classe

� “Uma classe é um conceito OO que encapsula as abstrações de dados e procedimentos necessários para descrever o conteúdo e o comportamento de alguma entidade do mundo real”.

Pressman, 2002.

Uma classe é a implementação do objeto, seus serviços e

Kecia Marques 8

� Uma classe é a implementação do objeto, seus serviços e propriedades destes serviços.

� Uma classe corresponde a um TAD (tipo abstrato de dados)

Page 9: Linguagem Java - Conceitos e Técnicas

TAD

� TAD (Tipo abstrato de dados) é a representação encapsulada de um tipo definido pelas suas operações

� TAD e “uma estrutura de programação na qual uma determinada estrutura de dados é conhecida somente via as operações realizadas sobre os seus elementos de dados, sem que se identifique como a estrutura é codificada”

Kecia Marques 9

identifique como a estrutura é codificada”Staa, 2000

� A programação orientada por objetos é o resultado do uso da abstração de dados no desenvolvimento de softwares

Page 10: Linguagem Java - Conceitos e Técnicas

Objeto

� Uma classe descreve uma categoria genérica.

� Um objeto é uma instância de uma classe.

� Uma instância de uma classe é uma estrutura de dados que

Kecia Marques 10

� Uma instância de uma classe é uma estrutura de dados que representa um membro específico da categoria.Exemplo: classe: Aluno

são objetos da classes Aluno: João, Paulo, Sílvia, Marina, Jurema, Felício.

� Objeto é uma estrutura computacional que representa um objeto do mundo real.

Page 11: Linguagem Java - Conceitos e Técnicas

Membros de uma classe

Uma classe possui:

� Atributos: também denominados membros de dados ou campos.

� Representam as características que os objetos da classe

Kecia Marques 11

� Representam as características que os objetos da classe possuem.

� Métodos: também denominados membros de função ou operações.

� Representam o comportamento que os objetos da classe possuem.

Page 12: Linguagem Java - Conceitos e Técnicas

Um exemplo simples – Conta Corrente

Seja o contexto de automação bancária. Identificam-se as seguintes classes neste contexto: cliente, agência, conta, conta corrente, conta poupança,

Kecia Marques 12

conta corrente, conta poupança, dentre outras.

A figura a seguir mostra a estrutura da classe ContaCorrente.

Page 13: Linguagem Java - Conceitos e Técnicas

Um exemplo simples – Conta Corrente

Atributos: numero, agência e saldo.

Métodos: depositar, sacar, consultar saldo.

Kecia Marques 13

Page 14: Linguagem Java - Conceitos e Técnicas

Um exemplo simples – Conta Corrente

O código a seguir mostra uma implementação possível para esta classe em Java.

public class ContaCorrente {

private long numero;

private int agencia;

private double saldo;

Kecia Marques 14

private double saldo;

public ContaCorrente(long n, int ag) {

numero = n;

agencia = ag;

saldo = 0.0;

}

Page 15: Linguagem Java - Conceitos e Técnicas

Um exemplo simples – Conta Corrente

public void sacar(double valor){

if (valor > 0)

saldo = saldo - valor;

}

public void depositar(double valor){

if (valor > 0)

Kecia Marques 15

if (valor > 0)

saldo = saldo + valor;

}

public double consultarSaldo(){

return (saldo);

}

}

Page 16: Linguagem Java - Conceitos e Técnicas

Um exemplo simples – Conta Corrente

� No exemplo, o método ContaCorrente (de mesmo nome da classe) é denominado construtor.

� Um método construtor é utilizado para determinar o estado inicial do objeto.

Kecia Marques 16

estado inicial do objeto.

� Em Java, objetos são criados utilizando-se a palavra reservada new.

Page 17: Linguagem Java - Conceitos e Técnicas

Criação de Objetos

1 ContaCorrente minhaConta;

2 minhaConta = new ContaCorrente(12345, 236);

A linha 1 cria uma área na memória que é uma referência para umobjeto da classe ContaCorrente.

Kecia Marques 17

objeto da classe ContaCorrente.

minhaConta

Page 18: Linguagem Java - Conceitos e Técnicas

Criação de Objetos

1 ContaCorrente minhaConta;

2 minhaConta = new ContaCorrente(12345, 236);

A linha 2 cria cria um objeto da classe ContaCorrente e o atribui aminhaConta;

Kecia Marques 18

minhaConta;

minhaConta

Numero = 12345

Agencia = 236

Saldo = 0

Page 19: Linguagem Java - Conceitos e Técnicas

Comunicação entre Objetos

� Programas orientados por objetos são constituídos por objetos que trocam mensagens entre si.

Kecia Marques 19

� O envio de uma mensagem a um objeto corresponde a invocar um método de tal objeto.

Page 20: Linguagem Java - Conceitos e Técnicas

Comunicação entre Objetos

EmminhaConta.depositar(350.00);

O método depositar do objeto minhaConta é invocado. Em outras palavras, é enviada uma mensagem para o objeto minhaConta

para que este realize a operação depositar.

Kecia Marques 20

para que este realize a operação depositar.

Page 21: Linguagem Java - Conceitos e Técnicas

Interface de Classe

� Uma classe é conhecida externamente por sua interface, que descreve os serviços que ela fornece e como eles podem ser utilizados, ocultando a sua implementação.

� Os membros públicos de uma classe constituem a sua

Kecia Marques 21

� Os membros públicos de uma classe constituem a sua interface.

� Informações que fazem parte da interface da classe:� nome da classe;� assinatura dos construtores e métodos públicos da classe;� atributos públicos da classe.

Page 22: Linguagem Java - Conceitos e Técnicas

Exercício

Para o exemplo de automação bancária citado anteriormente:

a) Identifique os atributos e os métodos das classes Cliente e Conta Poupança.

Kecia Marques 22

classes Cliente e Conta Poupança.b) Implemente a classe Cliente em Java.

Page 23: Linguagem Java - Conceitos e Técnicas

Pacotes

Kecia Marques 23

Page 24: Linguagem Java - Conceitos e Técnicas

Organização de Classes

� Em Java classes são organizadas em pacotes.

Um pacote é um conjunto de classes

Kecia Marques 24

� Um pacote é um conjunto de classes relacionadas.

� A palavra package indica o pacote ao qual a classe pertence.

Page 25: Linguagem Java - Conceitos e Técnicas

Organização de Classes

� Exemplo:

package rh;

Kecia Marques 25

public class Funcionario {

//corpo da classe funcionario

}

(A classe Funcionario está dentro de um pacote chamado rh. No Windows, um pacote corresponde a uma pasta onde ficam armazenadas as suas classes).

Page 26: Linguagem Java - Conceitos e Técnicas

Organização de Classes

� Exemplo: o JUnit (uma biblioteca open source para realizar testes em software Java) possui os pacotes extensions, framework, runner e textui.

Kecia Marques 26

Page 27: Linguagem Java - Conceitos e Técnicas

Organização de Classes

� Quando uma classe necessita utilizar uma outra classe que não esteja em seu pacote é necessário importar o pacote da classe a ser utilizada.

Isso é feito incluindo um comando import no início do

Kecia Marques 27

� Isso é feito incluindo um comando import no início do código do arquivo .java.

Exemplo: se quisermos utilizar a classe Date da API de Java, temos que importar o seu pacote.

import java.util.*;

Page 28: Linguagem Java - Conceitos e Técnicas

Organização de Classes

� Cada ferramenta IDE tem uma estrutura particular para armazenar os arquivos de um projeto.

� Por exemplo, o Net Beans organiza os arquivos de acordo com a estrutura a seguir:

Kecia Marques 28

� build: contém os arquivos bytecodes compilados (.class) organizados em pacotes

� dist: contém o arquivo .jar gerado� nbprojetc: contém arquivos de configuração gerados pelo Net

Beans.� src: onde ficam os arquivos fontes (.java) organizados em

pacotes

Page 29: Linguagem Java - Conceitos e Técnicas

Organização de Classes

Kecia Marques 29

Page 30: Linguagem Java - Conceitos e Técnicas

Operadores e Estruturas de

Kecia Marques 30

Controle

Page 31: Linguagem Java - Conceitos e Técnicas

Operadores

� Algumas estruturas utilizadas em Java são muito semelhantes às de C/C++

� Início de fim de blocos são marcados com { }

Kecia Marques 31

� Os operadores utilizados em Java são basicamente os mesmos utilizados em C/C++:

Aritméticos: + - / * % ++ --Relacionais: == != >= <= Atribuição: =Lógicos: && || !

Page 32: Linguagem Java - Conceitos e Técnicas

Estruturas de controle

� Estruturas de controle� Condicional:

if (condição){comandos;

Kecia Marques 32

}

if (condição){comandos;

}else{

comandos;

}

Page 33: Linguagem Java - Conceitos e Técnicas

Estruturas de controle

� Escolha:

switch (expressão){case constante1: comandos;

break;

Kecia Marques 33

break;case constante2: comandos;

break;...default: comandos;

}

Page 34: Linguagem Java - Conceitos e Técnicas

Estruturas de controle

� Repetição:

while (condição){comandos;

}

Kecia Marques 34

do{comandos;

} while (condição);

for (inicialização; condição; passo){comandos;

}

Page 35: Linguagem Java - Conceitos e Técnicas

Tipos Básicos

Kecia Marques 35

Page 36: Linguagem Java - Conceitos e Técnicas

Tipos Básicos

� Tipos básicos de Java:

� boolean: true ou false� byte: inteiro de oito bits com sinal.� short: inteiro de 16 bits com sinal.

char: caracter de 16 bits

Kecia Marques 36

� char: caracter de 16 bits� int: inteiro de 32 bits com sinal.� long: inteiro de 64 bits com sinal.� float: valor em ponto flutuante de 32 bits� double: valor em ponto flutuante de 64 bits

Page 37: Linguagem Java - Conceitos e Técnicas

Wrappers (Empacotadoras)

� Empacotadoras: há uma classe empacotadora para cada tipo primitivo em Java

� boolean: Boolean

Kecia Marques 37

� byte: Byte� short: Short� char: Character� int: Integer� long: Long� float: Float� double: Double

Page 38: Linguagem Java - Conceitos e Técnicas

Wrappers (Empacotadoras)

� Serviços das classes empacotadoras:

� Contrutor: public Integer(int value)Integer numero = new Integer(5);

Kecia Marques 38

Integer numero = new Integer(5);

� Contrutor: public Integer(String s)Integer numero = new Integer(“5”);

Se o valor passado estiver no formato incorreto, por exemplo uma letra, é lançada uma exceção NumberFormatException.

Page 39: Linguagem Java - Conceitos e Técnicas

Wrappers (Empacotadoras)

� public static Integer valueOf(String s)Método que retorna um objeto Integer que empacota um inteiro

cujo valor é dado por s.

� obj.intValue()Retorna um valor do tipo primitivo int empacotado pelo objeto

Kecia Marques 39

Retorna um valor do tipo primitivo int empacotado pelo objeto obj, que é do tipo Integer.

� public static int parseInt("5")Retorna um valor do tipo primitivo int que corresponde à

String passada. É lançada uma exceção NumberFormatException se a String passada não for do formato de um número.

Page 40: Linguagem Java - Conceitos e Técnicas

Wrappers (Empacotadoras)

public void testaWrapper(){

boolean b = true;

byte bt = 5;

char c = 'k';

short s = 10;

long l = 50;

int i = 20;

float f = 3.4f;

Kecia Marques 40

float f = 3.4f;

double d = 5.8;

Boolean B = new Boolean(b);

Byte BT = new Byte(bt);

Character C = new Character(c);

Short S = new Short(s);

Long L = new Long(l);

Integer I = new Integer(i);

Float F = new Float(f);

Double D = new Double(d);

Page 41: Linguagem Java - Conceitos e Técnicas

Wrappers (Empacotadoras)

//imprime o valor inteiro armazenado em I

System.out.println("Valor inteiro de I: " + I.intValue());

//imprime o valor inteiro armazenado em I2

Integer I2 = Integer.valueOf("700");

System.out.println("Valor inteiro de I2: " + I2.intValue());

//imprime o valor de i3

Kecia Marques 41

//imprime o valor de i3

int i3 = Integer.parseInt("500");

System.out.println("Valor de i3: " + i3);

try{

int i4 = Integer.parseInt("cinco");

System.out.println("Valor de i4: " + i4);

}

catch (NumberFormatException e){

System.out.println("Formato numérico inválido");

}

}

Page 42: Linguagem Java - Conceitos e Técnicas

Modificadores

Kecia Marques 42

Page 43: Linguagem Java - Conceitos e Técnicas

Modificadores de Métodos

� Modificadores de Métodos

� abstract: método abstrato, sem corpo. � final: método não pode ser redefinido.

Kecia Marques 43

final: método não pode ser redefinido.� public: método pode ser acessado por outras classes.� private: método só pode ser acessado pela própria classe.� protected: método pode ser acessado por classes dentro

do mesmo pacote ou pelas subclasses.� static: método compartilhado por todos os objetos da

classe, com acesso a apenas campos estáticos.

Page 44: Linguagem Java - Conceitos e Técnicas

Modificadores de Atributos

� Modificadores de Atributos

� final: atributo é uma constante.� public: atributo pode ser acessado por outras classes.

Kecia Marques 44

public: atributo pode ser acessado por outras classes.� private: atributo só pode ser acessado pela própria classe.� protected: atributo pode ser acessado por classes dentro

do mesmo pacote ou pelas subclasses.� static: atributo compartilhado por todos os objetos da

classe.

Page 45: Linguagem Java - Conceitos e Técnicas

Semântica de Referência

Kecia Marques 45

Page 46: Linguagem Java - Conceitos e Técnicas

Semântica de Referência

� Em Java não há ponteiros. Java implementa semântica de referência.

� A declaração de um objeto de uma classe C cria uma referência para um objeto da classe C.

Kecia Marques 46

referência para um objeto da classe C.C obj;

� Um objeto criado deve ser associado a uma referência.obj = new C();

Page 47: Linguagem Java - Conceitos e Técnicas

Semântica de Referência

� A atribuição de uma referência b a outra a, resulta em ae b referenciando o mesmo objeto.

a = new C();

b = new C();

a = b;

Kecia Marques 47

a = b;

a

b

após executar a=b

a

b

Page 48: Linguagem Java - Conceitos e Técnicas

Semântica de Referência

� O que ocorre com o objeto para o qual não há mais referência?

� Java possui o Coletor de Lixo (Garbage Collector) que elimina objetos pendentes na memória de tempos em

Kecia Marques 48

elimina objetos pendentes na memória de tempos em tempos.

Page 49: Linguagem Java - Conceitos e Técnicas

Exercício

Analise o programa a seguir, escrito em Java e formado pelas classes Principal e ClasseMaluca.

Kecia Marques 49

O que ele imprime?

Page 50: Linguagem Java - Conceitos e Técnicas

Exercício

public class ClasseMaluca {

private int dado1;

private int dado2;

public ClasseMaluca(int d1, int d2) {

dado1 = d1;

dado2 = d2;

}

Kecia Marques 50

public int getDado1(){

return (dado1);

}

public int getDado2(){

return (dado2);

}

}

Page 51: Linguagem Java - Conceitos e Técnicas

Exercício

public class Principal {

public static void main (String[] args) {

ClasseMaluca objA, objB;

objA = new ClasseMaluca(10,20);

objB = new ClasseMaluca(50,100);

Kecia Marques 51

System.out.println(objA.getDado1() + " " + objA.getDado2());

System.out.println(objB.getDado1() + " " + objB.getDado2());

objA = new ClasseMaluca(30,60);

System.out.println(objA.getDado1() + " " + objA.getDado2());

objB = objA;

System.out.println(objB.getDado1() + " " + objB.getDado2());

}

}

Page 52: Linguagem Java - Conceitos e Técnicas

Arranjos

Kecia Marques 52

Page 53: Linguagem Java - Conceitos e Técnicas

Arranjos

� Declaração de arranjos:

� [] junto ao tipo indica que todos os elementos declarados são arranjos.

Kecia Marques 53

declarados são arranjos.int[] a, b; // a e b são arranjos

� [] junto da variável indica que ela é um arranjoint a[], b; // a é arranjo, mas b não

Page 54: Linguagem Java - Conceitos e Técnicas

Arranjos

� Criação de arranjos:

� Arranjos devem ser criados:a = new int[4];

Kecia Marques 54

a = new int[4];

a 0 1 2 3

Page 55: Linguagem Java - Conceitos e Técnicas

Arranjos

� No caso de arranjo de objetos, cada posição do arranjo deve ser criada para ser então utilizada.

a = new A[4];

a[0] = new A(5,9,8);

Kecia Marques 55

a[0] = new A(5,9,8);

a[3] = new A(11,23,5);

a 0 1 2 3

Page 56: Linguagem Java - Conceitos e Técnicas

Arranjos

public static void exemploArranjo(){

int[] a = new int[10], b;

int c[], d;

b = new int[10];

c = new int[5];

// d = new int[3]; Este comando dá erro de compilação

//

Kecia Marques 56

// porque d não é arranjo

a[0] = 10;

a[9] = 20;

// a[10] = 5; Este comando gera a exceção

// ArrayIndexOutOfBoundsException

for (int i=0; i < a.length; i++)

System.out.print(a[i] + " - ");

Page 57: Linguagem Java - Conceitos e Técnicas

Arranjos

A[] vetorObjetos = new A[5];

vetorObjetos[1] = new A(1,2,3);

vetorObjetos[1].ImprimeValores();

// vetorObjetos[2].ImprimeValores();

Kecia Marques 57

// vetorObjetos[2].ImprimeValores();

// Este comando gera a exceção NullPointerException

}

Page 58: Linguagem Java - Conceitos e Técnicas

Composição de Objetos

Kecia Marques 58

Page 59: Linguagem Java - Conceitos e Técnicas

Composição de Objetos

� Uma classe pode possuir um membro de dado que seja um objeto de outra classe.

� Esse tipo de relacionamento é chamado composição.

Kecia Marques 59

� Exemplos:� Um Círculo possui um Ponto como centro.� Uma Conta Corrente é de um Cliente.� Uma Turma tem um Professor.� Uma Turma tem muitos Alunos.

Page 60: Linguagem Java - Conceitos e Técnicas

Classe Pontopublic class Ponto {

private float x, y;

public Ponto(float x, float y){

this.x = x;

this.y = y;

}

public void alterarX(float x){

this.x = x;

}

public void alterarY(float y){

Kecia Marques 60

public void alterarY(float y){

this.y = y;

}

public float obterX(){

return x;

}

public float obterY(){

return y;

}

}

Page 61: Linguagem Java - Conceitos e Técnicas

Classe Circulopublic class Circulo {

private float raio;

private Ponto centro;

public Circulo(float x, float y, float r){

raio = r;

centro = new Ponto(x,y);

}

public void alterarCentro(float x, float y){

centro.alterarX(x);

centro.alterarY(y);

Kecia Marques 61

centro.alterarY(y);

}

public void alterarRaio(float r){

raio = r;

}

public float obterCentroX(){

return centro.obterX();

}

Page 62: Linguagem Java - Conceitos e Técnicas

Classe Circulopublic float obterCentroY(){

return centro.obterY();

}

public float obterRaio(){

return raio;

}

}

Kecia Marques 62

Page 63: Linguagem Java - Conceitos e Técnicas

Classe Aplicacaoimport java.util.Scanner;

public class Aplicacao {

public static void main(String[] args){

float x, y, raio;

Circulo circ;

Scanner in = new Scanner (System.in);

System.out.println("Digite as coordenadas do centro: ");

x = in.nextFloat();

Kecia Marques 63

x = in.nextFloat();

y = in.nextFloat();

System.out.println("Digite o raio: ");

raio = in.nextFloat();

circ = new Circulo (x, y, raio);

System.out.println("Circulo criado: ");

System.out.println("Raio: " + circ.obterRaio());

System.out.println("Centro: (" + circ.obterCentroX() + ", " +

circ.obterCentroY() + ").");

System.out.println("");

}

}

Page 64: Linguagem Java - Conceitos e Técnicas

Passagem de Parâmetros

Kecia Marques 64

Page 65: Linguagem Java - Conceitos e Técnicas

Passagem de parâmetros

� Em Java a passagem de parâmetros para métodos se dá sempre por valor.

� Não existe passagem de parâmetro por referência em Java.

Kecia Marques 65

Java.

� O que ocorre quando um objeto é passado por parâmetro?

Page 66: Linguagem Java - Conceitos e Técnicas

Passagem de parâmetros

� Quando um objeto é passado por parâmetro, na verdade a sua referência está sendo passada por parâmetro.

� Alterações realizadas no objeto dentro do método tem impacto no argumento passado para o método.

Kecia Marques 66

impacto no argumento passado para o método.

� Por exemplo, se o objeto a for passado como parâmetro para um método m(A x) e em m ocorrer alguma alteração em x (enquanto este estiver referenciando o mesmo objeto que a), após a execução de m, a estará com as alterações sofridas por x.

Page 67: Linguagem Java - Conceitos e Técnicas

Passagem de parâmetros

� Exemplo: considerando as classes Ponto e Circulo mostradas anteriormente, o que a classe Aplicação a seguir gera como saída para entradas 1, 1 e 2?

Kecia Marques 67

Page 68: Linguagem Java - Conceitos e Técnicas

Classe Aplicaçãopublic class Aplicacao {

public static void alteraCirculo(Circulo c){

c.alterarCentro(10, 20);

c.alterarRaio(5);

System.out.println("\n\n**Dados do circulo dentro do método: **");

System.out.println("Raio: " + c.obterRaio());

System.out.println("Centro: (" + c.obterCentroX() + ", " +

c.obterCentroY() + ").");

c = new Circulo(3,3,9);

System.out.println("\n\n**Dados do novo circulo dentro do método:

Kecia Marques 68

System.out.println("\n\n**Dados do novo circulo dentro do método:

**");

System.out.println("Raio: " + c.obterRaio());

System.out.println("Centro: (" + c.obterCentroX() + ", " +

c.obterCentroY() + ").");

}

Page 69: Linguagem Java - Conceitos e Técnicas

Classe Aplicaçãopublic static void main(String[] args){

float x, y, raio;

Circulo circ;

Scanner in = new Scanner (System.in);

System.out.println("Digite as coordenadas do centro: ");

x = in.nextFloat();

y = in.nextFloat();

System.out.println("Digite o raio: ");

raio = in.nextFloat();

circ = new Circulo (x, y, raio);

Kecia Marques 69

circ = new Circulo (x, y, raio);

System.out.println("Circulo criado: ");

System.out.println("Raio: " + circ.obterRaio());

System.out.println("Centro: (" + circ.obterCentroX() + ", " +

circ.obterCentroY() + ").");

//Passando objeto circ como parâmetro

alteraCirculo(circ);

Page 70: Linguagem Java - Conceitos e Técnicas

Classe Aplicação

System.out.println("\n**Circulo após execução do método: **");

System.out.println("Raio: " + circ.obterRaio());

System.out.println("Centro: (" + circ.obterCentroX() + ", " +

circ.obterCentroY() + ").");

System.out.println("");

}

}

Circulo criado:Raio: 2.0Centro: (1.0, 1.0).

Kecia Marques 70

**Dados do circulo dentro do método: **Raio: 5.0Centro: (10.0, 20.0).

**Dados do novo circulo dentro do método: **Raio: 9.0Centro: (3.0, 3.0).

**Circulo após execução do método: **Raio: 5.0Centro: (10.0, 20.0).

Page 71: Linguagem Java - Conceitos e Técnicas

Passagem de Arranjos como Parâmetros

� Para passar um arranjo como parâmetro, deve-se indicar o nome do arranjo sem colchetes na chamada do método.

metodo(arranjo);

Kecia Marques 71

� O método que recebe o arranjo como parâmetro deve indicar isso na sua lista de parâmetros.

void metodo(int b[])

Page 72: Linguagem Java - Conceitos e Técnicas

Passagem de Arranjos como Parâmetros

� Quando um arranjo é passado como parâmetro, o que o método recebe é uma cópia da sua referência. Desta forma, alterações sofridas pelo arranjo no método refletem no arranjo que foi passado como parâmetro.

Kecia Marques 72

Page 73: Linguagem Java - Conceitos e Técnicas

Classe Aplicação

public class TesteArranjo {

public static void alteraArranjo(int b[]){

for(int i=0; i<b.length; i++){

b[i] = i*2;

}

System.out.println(“\n**Arranjo b**");

for (int valor : b)

System.out.print(valor + " - ");

Kecia Marques 73

b = new int[3];

System.out.println("\n**Novo arranjo b**");

for (int valor : b)

System.out.print(valor + " - ");

}

Page 74: Linguagem Java - Conceitos e Técnicas

Classe Aplicação

public static void main(String[] args){

int[] a = {1,2,3,4,5};

System.out.println("\n**Arranjo a antes da chamada do método**");

for (int valor : a)

System.out.print(valor + " - ");

alteraArranjo(a);

System.out.println("\n**Arranjo a após a chamada do método**");

for (int valor : a)

System.out.print(valor + " - ");

Kecia Marques 74

System.out.print(valor + " - ");

}

}

Page 75: Linguagem Java - Conceitos e Técnicas

Classe Aplicação

**Arranjo a antes da chamada do método**1 - 2 - 3 - 4 - 5 –**Arranjo b**0 - 2 - 4 - 6 - 8 -**Novo arranjo b**0 - 0 - 0 -**Arranjo a após a chamada do método**0 - 2 - 4 - 6 - 8 -

Kecia Marques 75

Page 76: Linguagem Java - Conceitos e Técnicas

Herança

Kecia Marques 76

Page 77: Linguagem Java - Conceitos e Técnicas

Herança

� Herança é um recurso que permite que novas classes sejam definidas a partir de classes já definidas.

� Na hierarquia de classes:

Kecia Marques 77

� Na hierarquia de classes:� Super classes (ou ascendente): são as ascendentes de

um classe.� Sub classes (ou descendente): são as descendentes de

um classe� Classe mãe: é a ascendente direta de um classe� Classe filha: é a descendente direta de uma classe.

Page 78: Linguagem Java - Conceitos e Técnicas

Herança

� No exemplo:� Filha é descendente ou subclasse de Mãe e

Avó.� Mãe e Avó são ascendentes ou

superclasses de Filha

Mãe é descendente ou subclasse de Avó.

Kecia Marques 78

� Mãe é descendente ou subclasse de Avó.� Mãe é filha de Avó.

� Significa que:� Mãe herda características e comportamentos

de Avó.� Filha herda características e

comportamentos de Mãe e de Avó.

Page 79: Linguagem Java - Conceitos e Técnicas

Herança

� No exemplo:� Conta é superclasse de Conta Corrente e de Conta

Poupança.

� Conta Corrente e Conta Poupança são subclasses de Conta.

Kecia Marques 79

de Conta.

Page 80: Linguagem Java - Conceitos e Técnicas

Herança

� Significa que:

� Conta Corrente herda características e comportamentos de Conta.

Kecia Marques 80

comportamentos de Conta.

� Conta Poupança herda características e comportamentos de Conta.

Page 81: Linguagem Java - Conceitos e Técnicas

Herança

Kecia Marques 81

Page 82: Linguagem Java - Conceitos e Técnicas

Herança

� No exemplo:� Conta Corrente possui como atributos: número, saldo

e limite, pois herda os dois primeiros da classe Conta.

Kecia Marques 82

� Conta Corrente possui como métodos: criar, depositar, sacar, consultarSaldo,

obterNumero, e consultarSaldoTotal,

consultarLimite e alterarLimite, sendo que os cinco primeiros são herdados de Conta.

Page 83: Linguagem Java - Conceitos e Técnicas

Herança

� No exemplo:� Conta Poupança possui como atributos:

número, saldo e rendimento, pois herda os dois primeiros da classe Conta.

Kecia Marques 83

� Conta Poupança possui como métodos: criar, depositar, sacar,

consultarSaldo , obterNumero e

atualizarRendimentos , sendo que, os cinco primeiros são herdados de Conta.

Page 84: Linguagem Java - Conceitos e Técnicas

Herança

� Exemplo de implementação de herança em JavaA palavra chave extends indica herança em Java.

Kecia Marques 84

public class A extends B

Indica que a classe A herda da classe B

Page 85: Linguagem Java - Conceitos e Técnicas

Herança

public class A {

protected int x, y;

private int z;

public A(int a, int b, int c) {

x = a;

Kecia Marques 85

x = a;

y = b;

z = c;

}

public int obterX(){

return (x);

}

public int obterY(){

return (y);

}

Page 86: Linguagem Java - Conceitos e Técnicas

Herança

public int obterZ(){

return (z);

}

public void alterarX(int a){

x = a;

}

Kecia Marques 86

public void alterarY(int a){

y = a;

}

public void alterarZ(int a){

z = a;

}

Page 87: Linguagem Java - Conceitos e Técnicas

Herança

public void ImprimeValores(){

System.out.println("O valor de X é: " + x);

System.out.println("O valor de Y é: " + y);

System.out.println("O valor de Z é: " + z);

}

}

Kecia Marques 87

public class B extends A{

private int k;

public B(int a, int b, int c, int d){

super (a,b,c);

k = d;

}

Page 88: Linguagem Java - Conceitos e Técnicas

Herança

public void ImprimeValores(){

System.out.println("O valor de X é: " + x);

System.out.println("O valor de Y é: " + y);

System.out.println("O valor de K é: " + k);

System.out.println("Z não pertence a esta

Kecia Marques 88

System.out.println("Z não pertence a esta

classe");

System.out.println("O valor de Z da superclasse

é: " + obterZ());

}

}

Page 89: Linguagem Java - Conceitos e Técnicas

Herança

public class TesteHeranca {

public static void main (String[] args){

B obj1 = new B(10,20,30,40);

obj1.ImprimeValores();

Kecia Marques 89

obj1.alterarY(100);

obj1.ImprimeValores();

}

}

Page 90: Linguagem Java - Conceitos e Técnicas

Herança

O exemplo de código a seguir mostra aimplementação das classes Conta eContaCorrente em Java. É mostradatambém uma classe MainBanco para

Kecia Marques 90

também uma classe MainBanco paraexemplificar o uso das classes criadas.

Page 91: Linguagem Java - Conceitos e Técnicas

Herança

public class Conta {

long numero;

double saldo;

public Conta(long n) {

numero = n;

Kecia Marques 91

numero = n;

saldo = 0;

}

public void depositar(double v){

if (v > 0)

saldo = saldo + v;

}

Page 92: Linguagem Java - Conceitos e Técnicas

Herança

public boolean sacar(double v){

if ( (v > 0) && (saldo-v) >= 0){

saldo = saldo - v;

return true;

}

else

Kecia Marques 92

else

return false;

}

public double consultarSaldo(){

return(saldo);

}

Page 93: Linguagem Java - Conceitos e Técnicas

Herança

public long obterNumero(){

return(numero);

}

} // Fim da classe Conta

public class ContaCorrente extends Conta{

Kecia Marques 93

public class ContaCorrente extends Conta{

double limite;

public ContaCorrente(long n, double l) {

super(n);

limite = l;

}

Page 94: Linguagem Java - Conceitos e Técnicas

Herança

public void alterarLimite(double l){

if (l > 0)

limite = l;

}

Kecia Marques 94

}

public double consultarLimite(){

return limite;

}

Page 95: Linguagem Java - Conceitos e Técnicas

Herança

public boolean sacar(double v){

if ((v > 0) && (saldo + limite - v ) >= 0){

saldo = saldo - v;

return true;

}

else

Kecia Marques 95

return false;

}

public double consultarSaldoTotal(){

return(saldo + limite);

}

} // Fim da classe Conta Corrente.

Page 96: Linguagem Java - Conceitos e Técnicas

Herança

public class MainBanco {

public static void main (String[] args){

ContaCorrente minhaConta;

Kecia Marques 96

minhaConta = new ContaCorrente(12345, 300);

System.out.println("Numero da Conta: " +

minhaConta.obterNumero());

System.out.println("Saldo: " +

minhaConta.consultarSaldo());

Page 97: Linguagem Java - Conceitos e Técnicas

HerançaminhaConta.alterarLimite(200);

System.out.println("Limite: " +

minhaConta.consultarLimite());

System.out.println("Saldo Total: " +

minhaConta.consultarSaldoTotal());

Kecia Marques 97

minhaConta.depositar(300);

System.out.println("Saldo após depósito: " +

minhaConta.consultarSaldo());

System.out.println("Saldo total após depósito: "

+ minhaConta.consultarSaldoTotal());

Page 98: Linguagem Java - Conceitos e Técnicas

Herança

if (minhaConta.sacar(200)) {

System.out.println("Saldo após saque: " +

minhaConta.consultarSaldo());

System.out.println("Saldo total após saque: "

Kecia Marques 98

System.out.println("Saldo total após saque: "

+ minhaConta.consultarSaldoTotal());

}

else

System.out.println("Não foi possível realizar

operação. Saldo total disponível é de " +

minhaConta.consultarSaldoTotal());

Page 99: Linguagem Java - Conceitos e Técnicas

Herança

if (minhaConta.sacar(700)) {

System.out.println("Saldo total após saque: "

+ minhaConta.consultarSaldoTotal());

}

Kecia Marques 99

}

else

System.out.println("Não foi possível realizar

operação. Saldo total disponível é de " +

minhaConta.consultarSaldoTotal());

}

}//Fim da classe MainBanco

Page 100: Linguagem Java - Conceitos e Técnicas

Herança

� Herança provê reuso de classes já construídas.

� Alguns benefícios do uso de herança:

Kecia Marques 100

� Alguns benefícios do uso de herança:� evitar duplicação de código;� reúso de código;� manutenção mais fácil (desde que não haja

abuso do recurso);� extensibilidade.

Page 101: Linguagem Java - Conceitos e Técnicas

Herança

� Exercício:� Implemente a classe ContaPoupança.

� Altere a classe MainBanco para criar e realizar

Kecia Marques 101

� Altere a classe MainBanco para criar e realizar operações sobre a classe ContaPoupança que você criou.

� Pesquise: para que servem as seguintes palavras reservadas de Java: protected, public, private, static, final.

Page 102: Linguagem Java - Conceitos e Técnicas

Classes Abstratas

Kecia Marques 102

Page 103: Linguagem Java - Conceitos e Técnicas

Classes Abstratas

� A linguagem Java possui o recurso de criação de classes abstratas.

� Características de uma classe abstrata:é designada pela palavra chave abstract.

Kecia Marques 103

� é designada pela palavra chave abstract.abstract class FiguraGeometrica{...}

� podem possuir métodos sem definição de corpo (método abstrato).

public abstract void CalculaArea();

� objetos de classes abstratas não podem ser criados.� pode haver hierarquias de classes abstratas.

Page 104: Linguagem Java - Conceitos e Técnicas

Classes Abstratas

� Propósito de uso de classes abstratas: fornecer uma superclasse apropriada da qual outras classes possam herdar interface e/ou implementação.

Kecia Marques 104

implementação.

� As classes herdeiras de uma classe abstrata são denominadas classes concretas.

Page 105: Linguagem Java - Conceitos e Técnicas

Interface

Kecia Marques 105

Page 106: Linguagem Java - Conceitos e Técnicas

Interface

� Interface de Java é um recurso que permite especificar os serviços de uma classe.

interface Forma {...}

Kecia Marques 106

� Uma interface declara:� métodos públicos sem definição de corpo (métodos não podem

ser estáticos);� campos públicos, estáticos e finais.

� Objetos não podem ser criados diretamente a partir de uma interface.

Page 107: Linguagem Java - Conceitos e Técnicas

Exemplo

� Classes que implementam uma interface devem implementar todos os métodos daquela interface e todos eles devem ser públicos.

class Circulo implements Forma {...}

Kecia Marques 107

� Uma interface pode ser implementada por várias classes.

� Uma classe pode implementar várias interfaces.

� Interface é um caso especial de classe abstrata.

Page 108: Linguagem Java - Conceitos e Técnicas

Polimorfismo

Kecia Marques 108

Page 109: Linguagem Java - Conceitos e Técnicas

Polimorfismo

� Verificação de Tipos: “atividade que garante que os operandos utilizados com um operador sejam de tipos compatíveis.”

Tipo Compatível: “é um tipo cujos valores são

Kecia Marques 109

� Tipo Compatível: “é um tipo cujos valores são adequados para a realização da operação designada pelo operador ou que pode ser convertido implicitamente em um tipo cujos valores sejam adequados.”

Varejão, 2004.

Page 110: Linguagem Java - Conceitos e Técnicas

Polimorfismo

� LP fracamente tipada: somente parte dos erros de tipos são verificados.

Ex.: C.Em C, um ponteiro para float pode acessar um posição

Kecia Marques 110

Em C, um ponteiro para float pode acessar um posição de memória ocupada por um char, por exemplo.

� LP fortemente tipada: realizam uma verificação extremamente ampla de tipos.

Ex.: Java

Page 111: Linguagem Java - Conceitos e Técnicas

Polimorfismo

� Polimorfismo é a característica que possibilita a criação de código capaz de operar sobre valores distintos.

� Por exemplo, onde se espera um dado de um tipo de X, é possível receber um dado de um tipo Y.

Kecia Marques 111

é possível receber um dado de um tipo Y.Polimorfismo = “muitas formas”

Page 112: Linguagem Java - Conceitos e Técnicas

Polimorfismo

� Coersão: é a conversão implícita de tipos.

Quando um operação é realizada sobre um operando de tipo diferente do esperado, o compilador verifica se é possível realizar a conversão.

Kecia Marques 112

possível realizar a conversão.

� Por exemplo, em C, um valor char pode ser convertido implicitamente para um valor int.

int a;

char c = ‘k’;

a = c;

Page 113: Linguagem Java - Conceitos e Técnicas

Polimorfismo

� Sobrecarga (ou Overloading): um identificador ou operador é sobrecarregado quando pode ser utilizado para designar duas ou mais operações distintas.

Ex.: O operador + em Java.

Kecia Marques 113

int a, b; a = 10; b = a + 20; System.out.println(“Resutaldo = ” + b );

+ é utilizado para realizar a operação de soma entre valores numéricos e para realizar concatenação de strings.

Page 114: Linguagem Java - Conceitos e Técnicas

Polimorfismo

� Inclusão: é o polimorfismo decorrente de herança.

“Um subtipo S de um tipo T é formado por um subconjunto dos valores de T. Assim, todo valor de S deve ser também um valor de T.”

Kecia Marques 114

deve ser também um valor de T.”

Page 115: Linguagem Java - Conceitos e Técnicas

Polimorfismo

Ex.: Considere as classes A e B do exemplo de herança dado anteriormente. A classe a seguir exemplifica uma situação polimórfica.

Kecia Marques 115

Page 116: Linguagem Java - Conceitos e Técnicas

Polimorfismo

Exemplo 1)

public class TesteHeranca {

public static void main (String[] args){

B obj1 = new B(10,20,30,40);

Kecia Marques 116

B obj1 = new B(10,20,30,40);

A obj2 = new A (200, 300, 400);

testePolimorfismo(obj2);

testePolimorfismo(obj1);

}

public static void testePolimorfismo(A obj){

obj.ImprimeValores();

}

}

Page 117: Linguagem Java - Conceitos e Técnicas

Polimorfismo

O programa anterior imprime:O valor de X é: 200O valor de Y é: 300O valor de Z é: 400

Kecia Marques 117

O valor de X é: 10O valor de Y é: 20O valor de K é: 40Z não pertence a esta classeO valor de Z da superclasse é: 30

Page 118: Linguagem Java - Conceitos e Técnicas

Tratamento de Exceções

Kecia Marques 118

Page 119: Linguagem Java - Conceitos e Técnicas

Tratamento de Exceções

� Conceito� Ausência de mecanismos para exceções em LP� Mecanismos para exceções em LP� Lançamento de Exceções

Kecia Marques 119

� Tratamento de Exceções� Propagação de Exceções� Relançamento de Exceções� Continuação após o Tratamento de Exceções

Page 120: Linguagem Java - Conceitos e Técnicas

Conceito

� Robustez: é a capacidade de um software continuarem operação corretamente mesmo em condiçõesanormais.

Problemas: Como prevenir-se de erros em tempo de

Kecia Marques 120

� Problemas: Como prevenir-se de erros em tempo deexecução? Como contornar situações anormais?

� Exemplos de situações anormais: divisão por zero,fim de arquivo, overflow, utilização de um objeto nãoinicializado, acesso a um índice inválido de um vetor.

Page 121: Linguagem Java - Conceitos e Técnicas

Conceito

� Exceção:

� “é um evento ocorrido durante a execução de um programa que desvia o fluxo normal de

Kecia Marques 121

programa que desvia o fluxo normal de instruções. ”

� “É uma condição provocada por uma situação excepcional que requer uma ação específica imediata.”

Varejão, 2004.

Page 122: Linguagem Java - Conceitos e Técnicas

Ausência de Mecanismos para Exceções

� Quando a LP utilizada não fornece mecanismos para exceções, o programador usa recursos como:

Kecia Marques 122

� Abortar o programa.

� Utilizar códigos de erro.Ex.: uma função para ler dados de entrada. Caso algum dos dados seja inválido, a função retorna –1.

Page 123: Linguagem Java - Conceitos e Técnicas

Ausência de Mecanismos para Exceções

� Testar a condição anormal antes que ela ocorra.Ex.: if (x!=0) div = y/x;

else cout << “Divisão por zero”;

� Conseqüências:

Kecia Marques 123

� Conseqüências: � Programas menos confiáveis.� Programas com legibilidade prejudicada.

� Exemplos de LP sem mecanismos para exceções: C e Pascal.

Page 124: Linguagem Java - Conceitos e Técnicas

LP com Mecanismos para Exceções

� Promovem os seguintes benefícios:

� A diminuição da sobrecarga do texto do programa. Desta forma, os programas têm melhor legibilidade.

Kecia Marques 124

� Os programas obtidos são mais confiáveis. Isso ocorre por que fica mais fácil tratar as condições anormais.

� Exemplos de LP com esses mecanismos: ADA, Java e Eiffel.

Page 125: Linguagem Java - Conceitos e Técnicas

LP com Mecanismos para Exceções

� Exceções predefinidas: são parte da própria linguagem ou de sua biblioteca padrão.

� Exceções criadas pelo programador: são aquelas definidas pelo programador para um aplicação ou uma

Kecia Marques 125

definidas pelo programador para um aplicação ou uma biblioteca.

Page 126: Linguagem Java - Conceitos e Técnicas

LP com Mecanismos para Exceções

� Exemplos de exceções em Java:

NullPointerException: ocorre quando a operação realizada gera um acesso a uma área não definida (nula).

Kecia Marques 126

(nula).

IndexOutOfBoundsException: ocorre quando é realizado um acesso a um vetor por índice que está fora dos seus limites.

Page 127: Linguagem Java - Conceitos e Técnicas

Lançamento de Exceções

� O lançamento (ou sinalização) de exceções pode ser realizado:

� Automaticamente: o próprio mecanismo de

Kecia Marques 127

� Automaticamente: o próprio mecanismo de exceção é o responsável pelo lançamento da exceção. Esta situação pode surgir em qualquer ponto do programa passível de ocorrência de situação anormal.

Page 128: Linguagem Java - Conceitos e Técnicas

Lançamento de Exceções

� Explicitamente: o programador realiza o lançamento de uma exceção.

O exemplo a seguir mostra um lançamento

Kecia Marques 128

O exemplo a seguir mostra um lançamento explícito de exceção em Java. Para tal, emprega-se a palavra reservada throw.

try{

throw new Exception();

}

Page 129: Linguagem Java - Conceitos e Técnicas

Tratamento de Exceções

� Tratadores de exceções são trechos de códigos responsáveis por tomar atitudes em resposta à ocorrência de uma exceção.

Em Java:

Kecia Marques 129

� Em Java:

� os comandos do bloco try são os tratados;� os comandos das cláusulas catch correspondem ao

tratamento das exceções ocorridas no bloco trycorrespondente;

Page 130: Linguagem Java - Conceitos e Técnicas

Tratamento de Exceções

� podem ser incluídas várias cláusulas catch após o try;

� a cada catch corresponde um classe de

Kecia Marques 130

� a cada catch corresponde um classe de exceções.

Page 131: Linguagem Java - Conceitos e Técnicas

Tratamento de Exceções

Ex.:...

String n, d;

...

try{

int num = Integer.valueOf(n).intValue();

Kecia Marques 131

int num = Integer.valueOf(n).intValue();

int den = Integer.valueOf(d).intValue();

int div = num / den;

}

catch(NumberFormatException x){

System.out.println(“Erro na formatação.”);

}

Page 132: Linguagem Java - Conceitos e Técnicas

Tratamento de Exceções

catch(ArithmeticException y){

System.out.println(“Divisão por zero”);

}

catch(Exception z){

System.out.println(“Ocorreu um erro durante a

operação”);

Kecia Marques 132

}

No exemplo:

� a cláusula catch(NumberFormatException x) captura exceções de formato de números. O comando dentro do bloco deste catché o tratamento dado a este tipo de exceção.

Page 133: Linguagem Java - Conceitos e Técnicas

Tratamento de Exceções

� a cláusula catch(ArithmeticException y) captura exceções de ocorridas em operações aritméticas. Neste caso, serve para tratar divisões por zero. O comando dentro do bloco deste catché o tratamento dado a este tipo de exceção.

� a cláusula catch(Exception z) captura qualquer tipo de

Kecia Marques 133

� a cláusula catch(Exception z) captura qualquer tipo de exceções de ocorridas dentro do bloco try. O comando dentro do bloco deste catch é o tratamento genérico dado a qualquer outra exceção que ocorra dentro do bloco try, que não sejam dos tipos ArithmeticException ou NumberFormatException.

Page 134: Linguagem Java - Conceitos e Técnicas

Propagação de Exceções

� Quando um exceção ocorre, busca-se pela cláusula catch associada ao seu tipo. A sequência para realizar esta busca é a que aparece no código.

Kecia Marques 134

� Quando um exceção não é tratada no bloco em que ocorreu, ela é retornada para o bloco mais externo.

� No caso de chamadas de métodos, é retornada para o método chamador.

Page 135: Linguagem Java - Conceitos e Técnicas

Propagação de Exceções

� Se o bloco ou método para o qual a exceção foi retornada não fizer o seu tratamento, ela é retornada

para o bloco (ou método chamador) mais externo a este.

Se a exceção chegar ao método principal sem que seja

Kecia Marques 135

� Se a exceção chegar ao método principal sem que seja tratada, o programa é abortado.

Page 136: Linguagem Java - Conceitos e Técnicas

Relançamento de Exceções

� Em algumas situações, pode ser necessário que o localonde ocorreu a exceção a trate de maneira parcial,deixando o restante de seu tratamento para um dosblocos mais externo (ou para um dos métodos naseqüência de chamada). Neste caso, utiliza-se o recurso

Kecia Marques 136

seqüência de chamada). Neste caso, utiliza-se o recursode relançamento de exceções.

Page 137: Linguagem Java - Conceitos e Técnicas

Relançamento de Exceções

Ex.:...

try{

try{

...

throw new IOException();

Kecia Marques 137

throw new IOException();

...

}

catch(IOException e){

... //tratamento parcial da exceção e

throw e; //relançamento da exceção e

}

}

catch(IOException e){

...// restante do tratamento da exceção.

}

Page 138: Linguagem Java - Conceitos e Técnicas

Continuação após o Tratamento de Exceções

� A execução de um programa sem aocorrência de exceções segue o fluxo normaldeterminado no programa.

Kecia Marques 138

O que ocorre na presença de um exceção?Qual será o fluxo do programa nesta

situação?

Page 139: Linguagem Java - Conceitos e Técnicas

Continuação após o Tratamento de Exceções

� Em geral, as LP adotam a abordagem de terminação.

� Terminação: quando ocorre um exceção, o erro éconsiderado como crítico e a execução não retorna ao pontono qual foi gerada. A execução é desviada para um pontoexterno e são encerradas as unidades na pilha de execução,

Kecia Marques 139

no qual foi gerada. A execução é desviada para um pontoexterno e são encerradas as unidades na pilha de execução,a partir do ponto onde ocorreu a exceção até a unidadeanterior a que o tratador de exceção foi executado. Aexecução continua na unidade na qual o tratador foiencontrado.

Page 140: Linguagem Java - Conceitos e Técnicas

Continuação após o Tratamento de Exceções

� A cláusula finally de Java:� Em algumas situações, pode ser necessária a

execução de um conjunto de comandos, independentedo tipo de exceção ocorrida.

Kecia Marques 140

� A cláusula finally de Java provê este recurso.

� Em geral, este recurso é utilizado quando deseja-serestabelecer o estado de algum objeto de formaindependente da ocorrência e da propagação deexceções. Por exemplo, quando deseja-se encerrarconexões com banco de dados ou fechar arquivosquando ocorrer uma exceção qualquer.

Page 141: Linguagem Java - Conceitos e Técnicas

Continuação após o Tratamento de Exceções

� O bloco finally de Java executa quando:

� uma exceção for lançada no bloco try correspondente ou em um de seus blocos catch;

Kecia Marques 141

em um de seus blocos catch;

� o seu bloco try fechar utilizando return, break ou continue.

Page 142: Linguagem Java - Conceitos e Técnicas

Continuação após o Tratamento de Exceções

� É possível a existência de bloco try sem aassociação de uma cláusula catch. Mas, não épossível a existência de um bloco try sem pelomenos um cláusula catch ou finally.

Kecia Marques 142

� Em outras palavras, um bloco try pode nãopossuir cláusulas catch, mas, neste caso, devepossuir então uma cláusula finally.

Page 143: Linguagem Java - Conceitos e Técnicas

Continuação após o Tratamento de Exceções

Exemplo:...

try {

System.out.println(“Primeiro try”);

try{

System.out.println(“Segundo try”);

Kecia Marques 143

System.out.println(“Segundo try”);

... //aqui ocorreu uma exceção qualquer

}

finally{

System.out.println(Finally do segundo try);

}

}

Page 144: Linguagem Java - Conceitos e Técnicas

Continuação após o Tratamento de Exceções

catch(Exception p){

System.out.println(“Tratamento para a

exceção no primeiro try”);

}

finally{

System.out.println(“Finally do primeiro try”);

Kecia Marques 144

System.out.println(“Finally do primeiro try”);

}

� No exemplo, os comandos das duas cláusulas finally serão executadas, assim como os comandos da cláusula catch.

Page 145: Linguagem Java - Conceitos e Técnicas

Bibliografia

� Barnes, David e Kölling, M. Programação Orientada a Objetos com Java. São Paulo: Pearson Prentice Hall, 2004.

� Bigonha, R. S. e Bigonha, M. A. S. Programação Modular. Apostila. Belo Horizonte: DCC-UFMG, 2001.

Kecia Marques 145

� Deitel, H. M.; Deitel, P. J. Java - Como Programar. 6. ed. Prentice-Hall, 2005.

� HORSTMANN,CAY. Big Java. Bookman, 2004.

� HORSTMANN, C.; Cornell, G. Core Java 2: Fundamentos - vol. 1 . 7.ed. Alta Books. 2005.