Sunteți pe pagina 1din 145

Java

PUC-MG Prof. Kecia Aline Marques Ferreira

Conceitos e Tcnicas
Obtendo Java Conceitos Fundamentais Pacotes Operadores e Estruturas de Controle Tipos Bsicos Modificadores Semntica de Referncia Arranjos Composio de Objetos Passagem de Parmetros Herana Classes Abstratas Interfaces Polimorfismo Tratamento de Excees
Kecia Marques 2

Obtendo JAVA

Kecia Marques

Sun Microsystems
Java uma linguagem de programao orientada por objetos amplamente difundida. Foi desenvolvida pela Sun Microsystems por James Gosling.

Na linguagem Java, gerado um cdigo intermedirio, denominado bytecode, a ser interpretado e executado pela JVM (Java Virtual Machine). A vantagem disso o alto grau de portabilidade dos programas.
.java so os arquivos de cdigo fonte .class so os arquivos compilados, os bytecodes.

Kecia Marques

Para utilizar Java


Site oficial de Java: http://java.sun.com/ Para utilizar Java preciso:
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, disponvel em http://java.sun.com/
Kecia Marques 5

Para saber mais sobre Java


Tutorial da Sun:

http://java.sun.com/developer/onlineTraining/
Deitel, H. M.; Deitel, P. J. Java - Como Programar. 6. ed. Prentice-Hall, 2005.

Kecia Marques

Conceitos Fundamentais

Kecia Marques

Classe
Uma classe um conceito OO que encapsula as abstraes de dados e procedimentos necessrios para descrever o contedo e o comportamento de alguma entidade do mundo real. Pressman, 2002. Uma classe a implementao do objeto, seus servios e propriedades destes servios. Uma classe corresponde a um TAD (tipo abstrato de dados)

Kecia Marques

TAD
TAD (Tipo abstrato de dados) a representao encapsulada de um tipo definido pelas suas operaes TAD e uma estrutura de programao na qual uma determinada estrutura de dados conhecida somente via as operaes realizadas sobre os seus elementos de dados, sem que se identifique como a estrutura codificada Staa, 2000 A programao orientada por objetos o resultado do uso da abstrao de dados no desenvolvimento de softwares

Kecia Marques

Objeto
Uma classe descreve uma categoria genrica. Um objeto uma instncia de uma classe. Uma instncia de uma classe uma estrutura de dados que representa um membro especfico da categoria. Exemplo: classe: Aluno so objetos da classes Aluno: Joo, Paulo, Slvia, Marina, Jurema, Felcio. Objeto uma estrutura computacional que representa um objeto do mundo real.
Kecia Marques 10

Membros de uma classe


Uma classe possui: Atributos: tambm denominados membros de dados ou campos. Representam as caractersticas que os objetos da classe possuem. Mtodos: tambm denominados membros de funo ou operaes. Representam o comportamento que os objetos da classe possuem.

Kecia Marques

11

Um exemplo simples Conta Corrente Seja o contexto de automao bancria. Identificam-se as seguintes classes neste contexto: cliente, agncia, conta, conta corrente, conta poupana, dentre outras. A figura a seguir mostra a estrutura da classe ContaCorrente.
Kecia Marques 12

Um exemplo simples Conta Corrente


Atributos: numero, agncia e saldo. Mtodos: depositar, sacar, consultar saldo.

Kecia Marques

13

Um exemplo simples Conta Corrente


O cdigo a seguir mostra uma implementao possvel para esta classe em Java.
public class ContaCorrente { private long numero; private int agencia; private double saldo; public ContaCorrente(long n, int ag) { numero = n; agencia = ag; saldo = 0.0; }

Kecia Marques

14

Um exemplo simples Conta Corrente


public void sacar(double valor){ if (valor > 0) saldo = saldo - valor; } public void depositar(double valor){ if (valor > 0) saldo = saldo + valor; } public double consultarSaldo(){ return (saldo); } }

Kecia Marques

15

Um exemplo simples Conta Corrente


No exemplo, o mtodo ContaCorrente (de mesmo nome da classe) denominado construtor. Um mtodo construtor utilizado para determinar o estado inicial do objeto. Em Java, objetos so criados utilizando-se a palavra reservada new.

Kecia Marques

16

Criao de Objetos
1 ContaCorrente minhaConta; 2 minhaConta = new ContaCorrente(12345, 236);

A linha 1 cria uma rea na memria que uma referncia para um objeto da classe ContaCorrente.

minhaConta

Kecia Marques

17

Criao de Objetos
1 ContaCorrente minhaConta; 2 minhaConta = new ContaCorrente(12345, 236);

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

minhaConta

Numero = 12345 Agencia = 236 Saldo = 0

Kecia Marques

18

Comunicao entre Objetos


Programas orientados por objetos so constitudos por objetos que trocam mensagens entre si. O envio de uma mensagem a um objeto corresponde a invocar um mtodo de tal objeto.

Kecia Marques

19

Comunicao entre Objetos


Em
minhaConta.depositar(350.00);

O mtodo depositar do objeto minhaConta invocado. Em outras palavras, enviada uma mensagem para o objeto minhaConta para que este realize a operao depositar.

Kecia Marques

20

Interface de Classe
Uma classe conhecida externamente por sua interface, que descreve os servios que ela fornece e como eles podem ser utilizados, ocultando a sua implementao. Os membros pblicos de uma classe constituem a sua interface. Informaes que fazem parte da interface da classe: nome da classe; assinatura dos construtores e mtodos pblicos da classe; atributos pblicos da classe.
Kecia Marques 21

Exerccio Para o exemplo de automao bancria citado anteriormente: a) Identifique os atributos e os mtodos das classes Cliente e Conta Poupana. b) Implemente a classe Cliente em Java.

Kecia Marques

22

Pacotes

Kecia Marques

23

Organizao de Classes Em Java classes so organizadas em pacotes. Um pacote um conjunto de classes relacionadas. A palavra package indica o pacote ao qual a classe pertence.
Kecia Marques 24

Organizao de Classes Exemplo:


package rh; 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).

Kecia Marques

25

Organizao 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

Organizao de Classes
Quando uma classe necessita utilizar uma outra classe que no esteja em seu pacote necessrio importar o pacote da classe a ser utilizada. Isso feito incluindo um comando import no incio do cdigo do arquivo .java. Exemplo: se quisermos utilizar a classe Date da API de Java, temos que importar o seu pacote.

import java.util.*;
Kecia Marques 27

Organizao 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:
build: contm os arquivos bytecodes compilados (.class) organizados em pacotes dist: contm o arquivo .jar gerado nbprojetc: contm arquivos de configurao gerados pelo Net Beans. src: onde ficam os arquivos fontes (.java) organizados em pacotes
Kecia Marques 28

Organizao de Classes

Kecia Marques

29

Operadores e Estruturas de Controle

Kecia Marques

30

Operadores
Algumas estruturas utilizadas em Java so muito semelhantes s de C/C++ Incio de fim de blocos so marcados com { } Os operadores utilizados em Java so basicamente os mesmos utilizados em C/C++: Aritmticos: + - / * % ++ -Relacionais: == != >= <= Atribuio: = Lgicos: && || !
Kecia Marques 31

Estruturas de controle
Estruturas de controle Condicional:
if (condio){ comandos; } if (condio){ comandos; } else{ comandos; }
Kecia Marques 32

Estruturas de controle
Escolha: switch (expresso){ case constante1: comandos; break; case constante2: comandos; break; ... default: comandos; }
Kecia Marques 33

Estruturas de controle
Repetio: while (condio){ comandos; } do{ comandos; } while (condio); for (inicializao; condio; passo){ comandos; }
Kecia Marques 34

Tipos Bsicos

Kecia Marques

35

Tipos Bsicos
Tipos bsicos 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 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

Kecia Marques

36

Wrappers (Empacotadoras)
Empacotadoras: h uma classe empacotadora para cada tipo primitivo em Java
boolean: Boolean byte: Byte short: Short char: Character int: Integer long: Long float: Float double: Double
Kecia Marques 37

Wrappers (Empacotadoras)
Servios das classes empacotadoras:
Contrutor: public Integer(int value) 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, lanada uma exceo NumberFormatException.
Kecia Marques 38

Wrappers (Empacotadoras)
public static Integer valueOf(String s) Mtodo 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 obj, que do tipo Integer. public static int parseInt("5") Retorna um valor do tipo primitivo int que corresponde String passada. lanada uma exceo NumberFormatException se a String passada no for do formato de um nmero.
Kecia Marques 39

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; 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);

Kecia Marques

40

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 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 numrico invlido"); } }

Kecia Marques

41

Modificadores

Kecia Marques

42

Modificadores de Mtodos
Modificadores de Mtodos
abstract: mtodo abstrato, sem corpo. final: mtodo no pode ser redefinido. public: mtodo pode ser acessado por outras classes. private: mtodo s pode ser acessado pela prpria classe. protected: mtodo pode ser acessado por classes dentro do mesmo pacote ou pelas subclasses. static: mtodo compartilhado por todos os objetos da classe, com acesso a apenas campos estticos.
Kecia Marques 43

Modificadores de Atributos
Modificadores de Atributos
final: atributo uma constante. public: atributo pode ser acessado por outras classes. private: atributo s pode ser acessado pela prpria classe. protected: atributo pode ser acessado por classes dentro do mesmo pacote ou pelas subclasses. static: atributo compartilhado por todos os objetos da classe.

Kecia Marques

44

Semntica de Referncia

Kecia Marques

45

Semntica de Referncia
Em Java no h ponteiros. Java implementa semntica de referncia. A declarao de um objeto de uma classe C cria uma referncia para um objeto da classe C. C obj; Um objeto criado deve ser associado a uma referncia. obj = new C();

Kecia Marques

46

Semntica de Referncia
A atribuio de uma referncia b a outra a, resulta em a e b referenciando o mesmo objeto.
a = new C(); b = new C(); a = b;
a aps executar a=b b b a

Kecia Marques

47

Semntica de Referncia
O que ocorre com o objeto para o qual no h mais referncia? Java possui o Coletor de Lixo (Garbage Collector) que elimina objetos pendentes na memria de tempos em tempos.

Kecia Marques

48

Exerccio Analise o programa a seguir, escrito em Java e formado pelas classes Principal e ClasseMaluca. O que ele imprime?

Kecia Marques

49

Exerccio
public class ClasseMaluca { private int dado1; private int dado2; public ClasseMaluca(int d1, int d2) { dado1 = d1; dado2 = d2; } public int getDado1(){ return (dado1); } public int getDado2(){ return (dado2); } }

Kecia Marques

50

Exerccio
public class Principal { public static void main (String[] args) { ClasseMaluca objA, objB; objA = new ClasseMaluca(10,20); objB = new ClasseMaluca(50,100); 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()); } }

Kecia Marques

51

Arranjos

Kecia Marques

52

Arranjos Declarao de arranjos:


[] junto ao tipo indica que todos os elementos declarados so arranjos. int[] a, b; // a e b so arranjos [] junto da varivel indica que ela um arranjo int a[], b; // a arranjo, mas b no
Kecia Marques 53

Arranjos Criao de arranjos:


Arranjos devem ser criados: a = new int[4];
a 0 1 2 3

Kecia Marques

54

Arranjos
No caso de arranjo de objetos, cada posio do arranjo deve ser criada para ser ento utilizada. a = new A[4]; a[0] = new A(5,9,8); a[3] = new A(11,23,5);
a 0 1 2 3

Kecia Marques

55

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 compilao // porque d no arranjo a[0] = 10; a[9] = 20; // a[10] = 5; Este comando gera a exceo // ArrayIndexOutOfBoundsException for (int i=0; i < a.length; i++) System.out.print(a[i] + " - ");

Kecia Marques

56

Arranjos
A[] vetorObjetos = new A[5]; vetorObjetos[1] = new A(1,2,3); vetorObjetos[1].ImprimeValores(); // vetorObjetos[2].ImprimeValores(); // Este comando gera a exceo NullPointerException }

Kecia Marques

57

Composio de Objetos

Kecia Marques

58

Composio de Objetos
Uma classe pode possuir um membro de dado que seja um objeto de outra classe. Esse tipo de relacionamento chamado composio. Exemplos:
Um Crculo possui um Ponto como centro. Uma Conta Corrente de um Cliente. Uma Turma tem um Professor. Uma Turma tem muitos Alunos.
Kecia Marques 59

Classe Ponto
public 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){ this.y = y; } public float obterX(){ return x; } public float obterY(){ return y; } }
Kecia Marques 60

Classe Circulo
public 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); } public void alterarRaio(float r){ raio = r; } public float obterCentroX(){ return centro.obterX(); }

Kecia Marques

61

Classe Circulo
public float obterCentroY(){ return centro.obterY(); } public float obterRaio(){ return raio; } }

Kecia Marques

62

Classe Aplicacao
import 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(); 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(""); } }
Kecia Marques 63

Passagem de Parmetros

Kecia Marques

64

Passagem de parmetros
Em Java a passagem de parmetros para mtodos se d sempre por valor. No existe passagem de parmetro por referncia em Java. O que ocorre quando um objeto passado por parmetro?

Kecia Marques

65

Passagem de parmetros
Quando um objeto passado por parmetro, na verdade a sua referncia est sendo passada por parmetro. Alteraes realizadas no objeto dentro do mtodo tem impacto no argumento passado para o mtodo. Por exemplo, se o objeto a for passado como parmetro para um mtodo m(A x) e em m ocorrer alguma alterao em x (enquanto este estiver referenciando o mesmo objeto que a), aps a execuo de m, a estar com as alteraes sofridas por x.
Kecia Marques 66

Passagem de parmetros
Exemplo: considerando as classes Ponto e Circulo mostradas anteriormente, o que a classe Aplicao a seguir gera como sada para entradas 1, 1 e 2?

Kecia Marques

67

Classe Aplicao
public 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 mtodo: **"); 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 mtodo: **"); System.out.println("Raio: " + c.obterRaio()); System.out.println("Centro: (" + c.obterCentroX() + ", " + c.obterCentroY() + ")."); }

Kecia Marques

68

Classe Aplicao
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(); 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() + ")."); //Passando objeto circ como parmetro alteraCirculo(circ);

Kecia Marques

69

Classe Aplicao
System.out.println("\n**Circulo aps execuo do mtodo: **"); System.out.println("Raio: " + circ.obterRaio()); System.out.println("Centro: (" + circ.obterCentroX() + ", " + circ.obterCentroY() + ")."); System.out.println(""); } } Circulo criado: Raio: 2.0 Centro: (1.0, 1.0). **Dados do circulo dentro do mtodo: ** Raio: 5.0 Centro: (10.0, 20.0). **Dados do novo circulo dentro do mtodo: ** Raio: 9.0 Centro: (3.0, 3.0). **Circulo aps execuo do mtodo: ** Raio: 5.0 Centro: (10.0, 20.0).

Kecia Marques

70

Passagem de Arranjos como Parmetros


Para passar um arranjo como parmetro, deve-se indicar o nome do arranjo sem colchetes na chamada do mtodo.
metodo(arranjo);

O mtodo que recebe o arranjo como parmetro deve indicar isso na sua lista de parmetros.
void metodo(int b[])

Kecia Marques

71

Passagem de Arranjos como Parmetros


Quando um arranjo passado como parmetro, o que o mtodo recebe uma cpia da sua referncia. Desta forma, alteraes sofridas pelo arranjo no mtodo refletem no arranjo que foi passado como parmetro.

Kecia Marques

72

Classe Aplicao
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 + " - ");

b = new int[3]; System.out.println("\n**Novo arranjo b**"); for (int valor : b) System.out.print(valor + " - "); }

Kecia Marques

73

Classe Aplicao
public static void main(String[] args){ int[] a = {1,2,3,4,5};

System.out.println("\n**Arranjo a antes da chamada do mtodo**"); for (int valor : a) System.out.print(valor + " - "); alteraArranjo(a); System.out.println("\n**Arranjo a aps a chamada do mtodo**"); for (int valor : a) System.out.print(valor + " - "); } }

Kecia Marques

74

Classe Aplicao
**Arranjo a antes da chamada do mtodo** 1-2-3-4-5 **Arranjo b** 0-2-4-6-8**Novo arranjo b** 0-0-0**Arranjo a aps a chamada do mtodo** 0-2-4-6-8-

Kecia Marques

75

Herana

Kecia Marques

76

Herana
Herana um recurso que permite que novas classes sejam definidas a partir de classes j definidas. Na hierarquia de classes:
Super classes (ou ascendente): so as ascendentes de um classe. Sub classes (ou descendente): so as descendentes de um classe Classe me: a ascendente direta de um classe Classe filha: a descendente direta de uma classe.
Kecia Marques 77

Herana
No exemplo:
Filha descendente ou subclasse de Me e Av. Me e Av so ascendentes ou superclasses de Filha Me descendente ou subclasse de Av. Me filha de Av.

Significa que:
Me herda caractersticas e comportamentos de Av. Filha herda caractersticas e comportamentos de Me e de Av.
Kecia Marques 78

Herana
No exemplo:
Conta superclasse de Conta Corrente e de Conta Poupana. Conta Corrente e Conta Poupana so subclasses de Conta.

Kecia Marques

79

Herana Significa que:


Conta Corrente herda caractersticas e comportamentos de Conta. Conta Poupana herda caractersticas e comportamentos de Conta.

Kecia Marques

80

Herana

Kecia Marques

81

Herana
No exemplo:
Conta Corrente possui como atributos: nmero, saldo e limite, pois herda os dois primeiros da classe Conta. Conta Corrente possui como mtodos: criar, depositar, sacar, consultarSaldo, obterNumero, e consultarSaldoTotal, consultarLimite e alterarLimite, sendo que os cinco primeiros so herdados de Conta.

Kecia Marques

82

Herana

No exemplo:
Conta Poupana possui como atributos: nmero, saldo e rendimento, pois herda os dois primeiros da classe Conta. Conta Poupana possui como mtodos: criar, depositar, sacar, consultarSaldo , obterNumero e atualizarRendimentos , sendo que, os cinco primeiros so herdados de Conta.
Kecia Marques 83

Herana Exemplo de implementao de herana em Java


A palavra chave extends indica herana em Java. public class A extends B Indica que a classe A herda da classe B

Kecia Marques

84

Herana
public class A { protected int x, y; private int z; public A(int a, int b, int c) { x = a; y = b; z = c; } public int obterX(){ return (x); } public int obterY(){ return (y); }
Kecia Marques 85

Herana
public int obterZ(){ return (z); } public void alterarX(int a){ x = a; } public void alterarY(int a){ y = a; } public void alterarZ(int a){ z = a; }

Kecia Marques

86

Herana
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); }
}

public class B extends A{ private int k; public B(int a, int b, int c, int d){ super (a,b,c); k = d; }

Kecia Marques

87

Herana
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 no pertence a esta classe"); System.out.println("O valor de Z da superclasse : " + obterZ()); } }

Kecia Marques

88

Herana
public class TesteHeranca { public static void main (String[] args){ B obj1 = new B(10,20,30,40); obj1.ImprimeValores(); obj1.alterarY(100); obj1.ImprimeValores(); } }

Kecia Marques

89

Herana O exemplo de cdigo a seguir mostra a implementao das classes Conta e ContaCorrente em Java. mostrada tambm uma classe MainBanco para exemplificar o uso das classes criadas.

Kecia Marques

90

Herana
public class Conta { long numero; double saldo; public Conta(long n) { numero = n; saldo = 0; } public void depositar(double v){ if (v > 0) saldo = saldo + v; }
Kecia Marques 91

Herana
public boolean sacar(double v){ if ( (v > 0) && (saldo-v) >= 0){ saldo = saldo - v; return true; } else return false; } public double consultarSaldo(){ return(saldo); }

Kecia Marques

92

Herana
public long obterNumero(){ return(numero); } } // Fim da classe Conta public class ContaCorrente extends Conta{ double limite; public ContaCorrente(long n, double l) { super(n); limite = l; }

Kecia Marques

93

Herana
public void alterarLimite(double l){ if (l > 0) limite = l; } public double consultarLimite(){ return limite; }

Kecia Marques

94

Herana
public boolean sacar(double v){ if ((v > 0) && (saldo + limite - v ) >= 0){ saldo = saldo - v; return true; } else return false; } public double consultarSaldoTotal(){ return(saldo + limite); } } // Fim da classe Conta Corrente.

Kecia Marques

95

Herana
public class MainBanco { public static void main (String[] args){ ContaCorrente minhaConta; minhaConta = new ContaCorrente(12345, 300); System.out.println("Numero da Conta: " + minhaConta.obterNumero()); System.out.println("Saldo: " + minhaConta.consultarSaldo());

Kecia Marques

96

Herana
minhaConta.alterarLimite(200); System.out.println("Limite: " + minhaConta.consultarLimite()); System.out.println("Saldo Total: " + minhaConta.consultarSaldoTotal());

minhaConta.depositar(300); System.out.println("Saldo aps depsito: " + minhaConta.consultarSaldo()); System.out.println("Saldo total aps depsito: " + minhaConta.consultarSaldoTotal());

Kecia Marques

97

Herana

if (minhaConta.sacar(200)) { System.out.println("Saldo aps saque: " + minhaConta.consultarSaldo()); System.out.println("Saldo total aps saque: " + minhaConta.consultarSaldoTotal()); } else System.out.println("No foi possvel realizar operao. Saldo total disponvel de " + minhaConta.consultarSaldoTotal());

Kecia Marques

98

Herana

if (minhaConta.sacar(700)) { System.out.println("Saldo total aps saque: " + minhaConta.consultarSaldoTotal()); } else System.out.println("No foi possvel realizar operao. Saldo total disponvel de " + minhaConta.consultarSaldoTotal()); } }//Fim da classe MainBanco
Kecia Marques 99

Herana Herana prov reuso de classes j construdas. Alguns benefcios do uso de herana:
evitar duplicao de cdigo; reso de cdigo; manuteno mais fcil (desde que no haja abuso do recurso); extensibilidade.
Kecia Marques 100

Herana Exerccio:
Implemente a classe ContaPoupana. Altere a classe MainBanco para criar e realizar operaes sobre a classe ContaPoupana que voc criou. Pesquise: para que servem as seguintes palavras reservadas de Java: protected, public, private, static, final.
Kecia Marques 101

Classes Abstratas

Kecia Marques

102

Classes Abstratas
A linguagem Java possui o recurso de criao de classes abstratas. Caractersticas de uma classe abstrata:
designada pela palavra chave abstract.
abstract class FiguraGeometrica{...}

podem possuir mtodos sem definio de corpo (mtodo abstrato).


public abstract void CalculaArea();

objetos de classes abstratas no podem ser criados. pode haver hierarquias de classes abstratas.
Kecia Marques 103

Classes Abstratas Propsito de uso de classes abstratas: fornecer uma superclasse apropriada da qual outras classes possam herdar interface e/ou implementao. As classes herdeiras de uma classe abstrata so denominadas classes concretas.

Kecia Marques

104

Interface

Kecia Marques

105

Interface
Interface de Java um recurso que permite especificar os servios de uma classe. interface Forma {...} Uma interface declara: mtodos pblicos sem definio de corpo (mtodos no podem ser estticos); campos pblicos, estticos e finais. Objetos no podem ser criados diretamente a partir de uma interface.
Kecia Marques 106

Exemplo
Classes que implementam uma interface devem implementar todos os mtodos daquela interface e todos eles devem ser pblicos. class Circulo implements Forma {...} Uma interface pode ser implementada por vrias classes. Uma classe pode implementar vrias interfaces. Interface um caso especial de classe abstrata.

Kecia Marques

107

Polimorfismo

Kecia Marques

108

Polimorfismo
Verificao de Tipos: atividade que garante que os operandos utilizados com um operador sejam de tipos compatveis. Tipo Compatvel: um tipo cujos valores so adequados para a realizao da operao designada pelo operador ou que pode ser convertido implicitamente em um tipo cujos valores sejam adequados.
Varejo, 2004.

Kecia Marques

109

Polimorfismo
LP fracamente tipada: somente parte dos erros de tipos so verificados. Ex.: C. Em C, um ponteiro para float pode acessar um posio de memria ocupada por um char, por exemplo. LP fortemente tipada: realizam uma verificao extremamente ampla de tipos. Ex.: Java

Kecia Marques

110

Polimorfismo
Polimorfismo a caracterstica que possibilita a criao de cdigo capaz de operar sobre valores distintos. Por exemplo, onde se espera um dado de um tipo de X, possvel receber um dado de um tipo Y. Polimorfismo = muitas formas

Kecia Marques

111

Polimorfismo
Coerso: a converso implcita de tipos. Quando um operao realizada sobre um operando de tipo diferente do esperado, o compilador verifica se possvel realizar a converso. Por exemplo, em C, um valor char pode ser convertido implicitamente para um valor int.
int a; char c = k; a = c;
Kecia Marques 112

Polimorfismo
Sobrecarga (ou Overloading): um identificador ou operador sobrecarregado quando pode ser utilizado para designar duas ou mais operaes distintas. Ex.: O operador + em Java.
int a, b; a = 10; b = a + 20; System.out.println(Resutaldo = + b );

+ utilizado para realizar a operao de soma entre


valores numricos e para realizar concatenao de strings.
Kecia Marques 113

Polimorfismo
Incluso: o polimorfismo decorrente de herana. Um subtipo S de um tipo T formado por um subconjunto dos valores de T. Assim, todo valor de S deve ser tambm um valor de T.

Kecia Marques

114

Polimorfismo
Ex.: Considere as classes A e B do exemplo de herana dado anteriormente. A classe a seguir exemplifica uma situao polimrfica.

Kecia Marques

115

Polimorfismo
Exemplo 1) public class TesteHeranca { public static void main (String[] args){ 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(); } }

Kecia Marques

116

Polimorfismo
O programa anterior imprime:
O valor de X : 200 O valor de Y : 300 O valor de Z : 400 O valor de X : 10 O valor de Y : 20 O valor de K : 40 Z no pertence a esta classe O valor de Z da superclasse : 30

Kecia Marques

117

Tratamento de Excees

Kecia Marques

118

Tratamento de Excees
Conceito Ausncia de mecanismos para excees em LP Mecanismos para excees em LP Lanamento de Excees Tratamento de Excees Propagao de Excees Relanamento de Excees Continuao aps o Tratamento de Excees

Kecia Marques

119

Conceito
Robustez: a capacidade de um software continuar em operao corretamente mesmo em condies anormais. Problemas: Como prevenir-se de erros em tempo de execuo? Como contornar situaes anormais? Exemplos de situaes anormais: diviso por zero, fim de arquivo, overflow, utilizao de um objeto no inicializado, acesso a um ndice invlido de um vetor.
Kecia Marques 120

Conceito
Exceo:
um evento ocorrido durante a execuo de um programa que desvia o fluxo normal de instrues. uma condio provocada por uma situao excepcional que requer uma ao especfica imediata. Varejo, 2004.
Kecia Marques 121

Ausncia de Mecanismos para Excees


Quando a LP utilizada no fornece mecanismos para excees, o programador usa recursos como:
Abortar o programa. Utilizar cdigos de erro.
Ex.: uma funo para ler dados de entrada. Caso algum dos dados seja invlido, a funo retorna 1.
Kecia Marques 122

Ausncia de Mecanismos para Excees


Testar a condio anormal antes que ela ocorra.
Ex.: if (x!=0)
div = y/x; else cout << Diviso por zero;

Conseqncias:
Programas menos confiveis. Programas com legibilidade prejudicada.

Exemplos de LP sem mecanismos para excees: C e Pascal.


Kecia Marques 123

LP com Mecanismos para Excees


Promovem os seguintes benefcios: A diminuio da sobrecarga do texto do programa. Desta forma, os programas tm melhor legibilidade. Os programas obtidos so mais confiveis. Isso ocorre por que fica mais fcil tratar as condies anormais. Exemplos de LP com esses mecanismos: ADA, Java e Eiffel.
Kecia Marques 124

LP com Mecanismos para Excees


Excees predefinidas: so parte da prpria linguagem ou de sua biblioteca padro. Excees criadas pelo programador: so aquelas definidas pelo programador para um aplicao ou uma biblioteca.

Kecia Marques

125

LP com Mecanismos para Excees


Exemplos de excees em Java: NullPointerException: ocorre quando a operao realizada gera um acesso a uma rea no definida (nula). IndexOutOfBoundsException: ocorre quando realizado um acesso a um vetor por ndice que est fora dos seus limites.

Kecia Marques

126

Lanamento de Excees
O lanamento (ou sinalizao) de excees pode ser realizado:
Automaticamente: o prprio mecanismo de exceo o responsvel pelo lanamento da exceo. Esta situao pode surgir em qualquer ponto do programa passvel de ocorrncia de situao anormal.

Kecia Marques

127

Lanamento de Excees
Explicitamente: o programador realiza o lanamento de uma exceo. O exemplo a seguir mostra um lanamento explcito de exceo em Java. Para tal, empregase a palavra reservada throw.
try{
throw new Exception(); }

Kecia Marques

128

Tratamento de Excees
Tratadores de excees so trechos de cdigos responsveis por tomar atitudes em resposta ocorrncia de uma exceo. Em Java: os comandos do bloco try so os tratados; os comandos das clusulas catch correspondem ao tratamento das excees ocorridas no bloco try correspondente;
Kecia Marques 129

Tratamento de Excees
podem ser includas vrias clusulas catch aps o try; a cada catch corresponde um classe de excees.

Kecia Marques

130

Tratamento de Excees
Ex.:
... String n, d; ... try{ int num = Integer.valueOf(n).intValue(); int den = Integer.valueOf(d).intValue(); int div = num / den; } catch(NumberFormatException x){ System.out.println(Erro na formatao.); }

Kecia Marques

131

Tratamento de Excees
catch(ArithmeticException y){ System.out.println(Diviso por zero); } catch(Exception z){ System.out.println(Ocorreu um erro durante a operao); }

No exemplo: a clusula catch(NumberFormatException x) captura excees de formato de nmeros. O comando dentro do bloco deste catch o tratamento dado a este tipo de exceo.

Kecia Marques

132

Tratamento de Excees
a clusula catch(ArithmeticException y) captura excees de ocorridas em operaes aritmticas. Neste caso, serve para tratar divises por zero. O comando dentro do bloco deste catch o tratamento dado a este tipo de exceo. a clusula catch(Exception z) captura qualquer tipo de excees de ocorridas dentro do bloco try. O comando dentro do bloco deste catch o tratamento genrico dado a qualquer outra exceo que ocorra dentro do bloco try, que no sejam dos tipos ArithmeticException ou NumberFormatException.

Kecia Marques

133

Propagao de Excees
Quando um exceo ocorre, busca-se pela clusula catch associada ao seu tipo. A sequncia para realizar esta busca a que aparece no cdigo. Quando um exceo no tratada no bloco em que ocorreu, ela retornada para o bloco mais externo. No caso de chamadas de mtodos, retornada para o mtodo chamador.
Kecia Marques 134

Propagao de Excees
Se o bloco ou mtodo para o qual a exceo foi retornada no fizer o seu tratamento, ela retornada para o bloco (ou mtodo chamador) mais externo a este. Se a exceo chegar ao mtodo principal sem que seja tratada, o programa abortado.

Kecia Marques

135

Relanamento de Excees
Em algumas situaes, pode ser necessrio que o local onde ocorreu a exceo a trate de maneira parcial, deixando o restante de seu tratamento para um dos blocos mais externo (ou para um dos mtodos na seqncia de chamada). Neste caso, utiliza-se o recurso de relanamento de excees.

Kecia Marques

136

Relanamento de Excees
Ex.:
... try{ try{ ... throw new IOException(); ... } catch(IOException e){ ... //tratamento parcial da exceo e throw e; //relanamento da exceo e } } catch(IOException e){ ...// restante do tratamento da exceo. }
Kecia Marques 137

Continuao aps o Tratamento de Excees


A execuo de um programa sem a ocorrncia de excees segue o fluxo normal determinado no programa. O que ocorre na presena de um exceo? Qual ser o fluxo do programa nesta situao?

Kecia Marques

138

Continuao aps o Tratamento de Excees


Em geral, as LP adotam a abordagem de terminao. Terminao: quando ocorre um exceo, o erro considerado como crtico e a execuo no retorna ao ponto no qual foi gerada. A execuo desviada para um ponto externo e so encerradas as unidades na pilha de execuo, a partir do ponto onde ocorreu a exceo at a unidade anterior a que o tratador de exceo foi executado. A execuo continua na unidade na qual o tratador foi encontrado.

Kecia Marques

139

Continuao aps o Tratamento de Excees


A clusula finally de Java: Em algumas situaes, pode ser necessria a execuo de um conjunto de comandos, independente do tipo de exceo ocorrida.

A clusula finally de Java prov este recurso. Em geral, este recurso utilizado quando deseja-se restabelecer o estado de algum objeto de forma independente da ocorrncia e da propagao de excees. Por exemplo, quando deseja-se encerrar conexes com banco de dados ou fechar arquivos quando ocorrer uma exceo qualquer.
Kecia Marques 140

Continuao aps o Tratamento de Excees


O bloco finally de Java executa quando:
uma exceo for lanada no bloco try correspondente ou em um de seus blocos catch; o seu bloco try fechar utilizando return, break ou continue.

Kecia Marques

141

Continuao aps o Tratamento de Excees


possvel a existncia de bloco try sem a associao de uma clusula catch. Mas, no possvel a existncia de um bloco try sem pelo menos um clusula catch ou finally. Em outras palavras, um bloco try pode no possuir clusulas catch, mas, neste caso, deve possuir ento uma clusula finally.

Kecia Marques

142

Continuao aps o Tratamento de Excees


Exemplo:
... try { System.out.println(Primeiro try); try{ System.out.println(Segundo try); ... //aqui ocorreu uma exceo qualquer } finally{ System.out.println(Finally do segundo try); } }

Kecia Marques

143

Continuao aps o Tratamento de Excees


catch(Exception p){ System.out.println(Tratamento para a exceo no primeiro try); } finally{ System.out.println(Finally do primeiro try); }

No exemplo, os comandos das duas clusulas finally sero executadas, assim como os comandos da clusula catch.
Kecia Marques 144

Bibliografia
Barnes, David e Klling, M. Programao Orientada a Objetos com Java. So Paulo: Pearson Prentice Hall, 2004. Bigonha, R. S. e Bigonha, M. A. S. Programao Modular. Apostila. Belo Horizonte: DCC-UFMG, 2001. Deitel, H. M.; Deitel, P. J. Java - Como Programar. 6. ed. PrenticeHall, 2005. HORSTMANN,CAY. Big Java. Bookman, 2004. HORSTMANN, C.; Cornell, G. Core Java 2: Fundamentos - vol. 1 . 7.ed. Alta Books. 2005.
Kecia Marques 145

S-ar putea să vă placă și