Linguagem Java - Conceitos e Técnicas

brenovit 48,224 views 145 slides Nov 14, 2009
Slide 1
Slide 1 of 145
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78
Slide 79
79
Slide 80
80
Slide 81
81
Slide 82
82
Slide 83
83
Slide 84
84
Slide 85
85
Slide 86
86
Slide 87
87
Slide 88
88
Slide 89
89
Slide 90
90
Slide 91
91
Slide 92
92
Slide 93
93
Slide 94
94
Slide 95
95
Slide 96
96
Slide 97
97
Slide 98
98
Slide 99
99
Slide 100
100
Slide 101
101
Slide 102
102
Slide 103
103
Slide 104
104
Slide 105
105
Slide 106
106
Slide 107
107
Slide 108
108
Slide 109
109
Slide 110
110
Slide 111
111
Slide 112
112
Slide 113
113
Slide 114
114
Slide 115
115
Slide 116
116
Slide 117
117
Slide 118
118
Slide 119
119
Slide 120
120
Slide 121
121
Slide 122
122
Slide 123
123
Slide 124
124
Slide 125
125
Slide 126
126
Slide 127
127
Slide 128
128
Slide 129
129
Slide 130
130
Slide 131
131
Slide 132
132
Slide 133
133
Slide 134
134
Slide 135
135
Slide 136
136
Slide 137
137
Slide 138
138
Slide 139
139
Slide 140
140
Slide 141
141
Slide 142
142
Slide 143
143
Slide 144
144
Slide 145
145

About This Presentation

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


Slide Content

Java
PUC-MG
Prof.ª Kecia Aline Marques Ferreira

Conceitos e Técnicas

Obtendo Java

Conceitos Fundamentais

Pacotes

Operadores e Estruturas de Controle

Tipos Básicos

Modificadores

Semântica de Referência
Kecia Marques2

Semântica de Referência

Arranjos

Composição de Objetos

Passagem de Parâmetros

Herança

Classes Abstratas

Interfaces

Polimorfismo

Tratamento de Exceções

Obtendo JAVA
Kecia Marques3

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 Marques4

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.
.javasão os arquivos de código fonte
.classsão os arquivos compilados, os bytecodes.

Para utilizar Java
Site oficial de Java:
http://java.sun.com/

Para utilizar Java é preciso:
Kecia Marques5

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/

Para saber mais sobre Java
Tutorial da Sun:
http://java.sun.com/developer/onlineTraining/
Kecia Marques6

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

Conceitos Fundamentais
Kecia Marques7

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 Marques8

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)

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 Marques9
identifique como a estrutura é codificada”
Staa, 2000

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

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 Marques10

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.

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 Marques11

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

Métodos: também denominados membros de função ou operações.
Representam o comportamentoque os objetos da classe
possuem.

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 Marques12
conta corrente, conta poupança
,
dentre outras.
A figura a seguir mostra a estrutura da classe
ContaCorrente.

Um exemplo simples –Conta Corrente Atributos: numero, agência e saldo.
Métodos: depositar, sacar, consultar saldo.
Kecia Marques13

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 Marques14
private double saldo; public ContaCorrente(long n, int ag) {
numero = n;
agencia = ag;
saldo = 0.0;
}

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 Marques15
if (valor > 0)
saldo = saldo + valor;
}
public double consultarSaldo(){
return (saldo);
}
}

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 Marques16
estado inicial do objeto.

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

Criação de Objetos 1
ContaCorrente minhaConta;
2
minhaConta = newContaCorrente(12345, 236);
A linha 1 cria uma área na memória que é uma referência para um
objeto
da
classe
ContaCorrente
.
Kecia Marques17
objeto
da
classe
ContaCorrente
.
minhaConta

Criação de Objetos 1
ContaCorrente minhaConta;
2
minhaConta = newContaCorrente(12345, 236);
A linha 2 cria cria um objeto da classeContaCorrentee o atribui a
minhaConta
;
Kecia Marques18
minhaConta
;
minhaConta
Numero = 12345
Agencia = 236
Saldo = 0

Comunicação entre Objetos
Programas orientados por objetos são
constituídos por objetos que trocam
mensagens entre si.
Kecia Marques19

O envio de uma mensagema um objeto
corresponde a invocar um métodode tal
objeto.

Comunicação entre Objetos Em
minhaConta.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 Marques20
para que este realize a operação
depositar
.

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 Marques21

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 c lasse;

atributos públicos da classe.

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 Marques22
classes Cliente e Conta Poupança.
b)
Implemente a classe Cliente em Java.

Pacotes
Kecia Marques23

Organização de Classes
Em Java classes são organizadas em
pacotes.
Um
pacote
é um conjunto de classes
Kecia Marques24

Um
pacote
é um conjunto de classes
relacionadas.

A palavra packageindica o pacote ao qual a
classe pertence.

Organização de Classes
Exemplo:
package rh;
Kecia Marques25
public class Funcionario {
//corpo da classe funcionario
}
(A classe Funcionarioestá dentro de um pacote chamado rh. No
Windows, um pacote corresponde a uma pasta onde ficam armazenadas
as suas classes).

Organização de Classes
Exemplo: o JUnit (uma biblioteca open sourcepara realizar testes
em software Java) possui os pacotes extensions, framework, runner
e textui.
Kecia Marques26

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 Marques27

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.*;

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 Marques28

build: contém os arquivos bytecodes compilados (.cl ass)
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) organiza dos em
pacotes

Organização de Classes
Kecia Marques29

Operadores e Estruturas de
Kecia Marques30
Controle

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 Marques31

Os operadores utilizados em Java são basicamente os mesmos
utilizados em C/C++:
Aritméticos: + - / * % ++ --
Relacionais: == != >= <=
Atribuição: =
Lógicos: && || !

Estruturas de controle
Estruturas de controle
Condicional:
if(condição){
comandos;
Kecia Marques32
}
if(condição){
comandos;
}
else{
comandos;
}

Estruturas de controle

Escolha:
switch(expressão){
caseconstante1: comandos;
break;
Kecia Marques33
break;
caseconstante2: comandos;
break;
...
default: comandos;
}

Estruturas de controle

Repetição:
while (condição){
comandos;
}
Kecia Marques34
do{
comandos;
} while (condição);
for (inicialização; condição; passo) {
comandos;
}

Tipos Básicos
Kecia Marques35

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 Marques36

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

Wrappers (Empacotadoras)
Empacotadoras: há uma classe empacotadora para
cada tipo primitivo em Java

boolean: Boolean
Kecia Marques37

byte: Byte

short: Short

char: Character

int: Integer

long: Long

float: Float

double: Double

Wrappers (Empacotadoras)
Serviços das classes empacotadoras:
Contrutor: public Integer(int value)
Integer numero = new Integer(5);
Kecia Marques38
Integer numero = new Integer(5);
Contrutor: public Integer(String s)
Integer numero = new Integer(“5”);
Se o valor passado estiver no formato incorreto, po r exemplo
uma letra, é lançada uma exceção
NumberFormatException.

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 p elo objeto
Kecia Marques39
Retorna um valor do tipo primitivo int empacotado p elo objeto
obj, que é do tipo Integer.

public static int parseInt("5")
Retorna um valor do tipo primitivo int que correspo nde à
String passada. É lançada uma exceção
NumberFormatException se a String passada não for do
formato de um número.

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

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 Marques41
//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");
}
}

Modificadores
Kecia Marques42

Modificadores de Métodos
Modificadores de Métodos
abstract: método abstrato, sem corpo.

final
: método não pode ser redefinido.
Kecia Marques43
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.

Modificadores de Atributos
Modificadores de Atributos
final: atributo é uma constante.

public
: atributo pode ser acessado por outras classes.
Kecia Marques44
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.

Semântica de Referência
Kecia Marques45

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 Ccria uma referência para um objeto da classe
C
.
Kecia Marques46
referência para um objeto da classe
C
.
C obj;

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

Semântica de Referência
A atribuição de uma referência ba outra a, resulta em a
e breferenciando o mesmo objeto.
a = new C();
b = new C();
a = b;
Kecia Marques47
a = b;
a b
após executar a=b
a b

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 Marques48
elimina objetos pendentes na memória de tempos em tempos.

Exercício
Analise o programa a seguir, escrito em Java
e formado pelas classes Principale
ClasseMaluca.
Kecia Marques49
O que ele imprime?

Exercício
public class ClasseMaluca {
private int dado1;
private int dado2;
public ClasseMaluca(int d1, int d2) {
dado1 = d1;
dado2 = d2;
}
Kecia Marques50
public int getDado1(){
return (dado1);
}
public int getDado2(){
return (dado2);
}
}

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 Marques51
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());
}
}

Arranjos
Kecia Marques52

Arranjos
Declaração de arranjos:
[] junto ao tipo indica que todos os elementos declarados são arranjos.
Kecia Marques53
declarados são arranjos. int[] a, b; // a e b são arranjos

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

Arranjos
Criação de arranjos:
Arranjos devem ser criados:
a = new int[4];
Kecia Marques54
a = new int[4];
a
012 3

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 Marques55
a[0] = new A(5,9,8); a[3] = new A(11,23,5);
a
012 3

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 Marques56
//
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] + " - ");

Arranjos
A[] vetorObjetos = new A[5];
vetorObjetos[1] = new A(1,2,3);
vetorObjetos[1].ImprimeValores();
// vetorObjetos[2].ImprimeValores();
Kecia Marques57
// vetorObjetos[2].ImprimeValores(); //Este comando gera a exceção NullPointerException
}

Composição de Objetos
Kecia Marques58

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 Marques59

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.

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){
Kecia Marques60
public void alterarY(float y){
this.y = y;
}
public float obterX(){
return x;
}
public float obterY(){
return y;
}
}

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

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

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();
Kecia Marques63
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("");
}
}

Passagem de Parâmetros
Kecia Marques64

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 Marques65
Java.

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

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 Marques66
impacto no argumento passado para o método.

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

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 Marques67

Classe Aplicação 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 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 Marques68
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() + ").");
}

Classe Aplicação
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);
Kecia Marques69
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);

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.0
Centro: (1.0, 1.0).
Kecia Marques70
**Dados do circulo dentro do método: **
Raio: 5.0
Centro: (10.0, 20.0).
**Dados do novo circulo dentro do método: **
Raio: 9.0
Centro: (3.0, 3.0).
**Circulo após execução do método: **
Raio: 5.0
Centro: (10.0, 20.0).

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 Marques71

O método que recebe o arranjo como parâmetro deve
indicar isso na sua lista de parâmetros.
void metodo(int b[])

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 Marques72

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 Marques73
b = new int[3];
System.out.println("\n**Novo arranjo b**");
for (int valor : b)
System.out.print(valor + " - ");
}

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 Marques74
System.out.print(valor + "
-
");
}
}

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 Marques75

Herança
Kecia Marques76

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

Na hierarquia de classes:
Kecia Marques77

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.

Herança

No exemplo:
Filhaé descendente ou subclasse de Mãee
Avó.
Mãee Avósão ascendentes ou
superclasses de Filha
Mãe
é descendente ou subclasse de
Avó
.
Kecia Marques78

Mãe
é descendente ou subclasse de
Avó
.

Mãeé filha de Avó.

Significa que:
Mãeherda características e comportamentos
de Avó.
Filhaherda características e
comportamentos de Mãee de Avó.

Herança

No exemplo:
Contaé superclasse de Conta Correntee de Conta
Poupança.
Conta CorrenteeConta Poupançasão subclasses de
Conta.
Kecia Marques79
de
Conta.

Herança
Significa que:
Conta Correnteherda características e comportamentos de
Conta
.
Kecia Marques80
comportamentos de
Conta
.

Conta Poupançaherda características e
comportamentos de Conta.

Herança
Kecia Marques81

Herança
No exemplo:
Conta Correntepossui como atributos: número, saldo
e limite, pois herda os dois primeiros da classe Conta.
Kecia Marques82

Conta Correntepossui como métodos: criar,
depositar, sacar, consultarSaldo,
obterNumero, e consultarSaldoTotal,
consultarLimitee alterarLimite, sendo que os
cinco primeiros são herdados de Conta.

Herança
No exemplo:
Conta Poupançapossui como atributos:
número, saldo e rendimento, pois herda os dois
primeiros da classe Conta.
Kecia Marques83

Conta Poupançapossui como métodos:
criar, depositar, sacar,
consultarSaldo , obterNumero e
atualizarRendimentos, sendo que, os cinco
primeiros são herdados de Conta.

Herança
Exemplo de implementação de herança em
Java
A palavra chave extendsindica herança em Java.
Kecia Marques84
public class A extends B
Indica que a classe A herda da classe B

Herança
public class A {
protected int x, y;
private int z;
public A(int a, int b, int c) {
x = a;
Kecia Marques85
x = a; y = b;
z = c;
}
public int obterX(){
return (x);
}
public int obterY(){
return (y);
}

Herança
public int obterZ(){
return (z);
}
public void alterarX(int a){
x = a;
}
Kecia Marques86
public void alterarY(int a){
y = a;
}
public void alterarZ(int a){
z = a;
}

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 Marques87
public class B extendsA{
private int k;
public B(int a, int b, int c, int d){
super (a,b,c);
k = d;
}

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

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

Herança
O exemplo de código a seguir mostra a
implementação das classesContae
ContaCorrenteem Java. É mostrada
também
uma
classe
MainBanco
para
Kecia Marques90
também
uma
classe
MainBanco
para
exemplificarousodasclassescriadas.

Herança public class Conta {
long numero;
double saldo;
public Conta(long n) {
numero = n;
Kecia Marques91
numero = n; saldo = 0;
}
public void depositar(double v){
if (v > 0)
saldo = saldo + v;
}

Herança
public boolean sacar(double v){
if ( (v > 0) && (saldo-v) >= 0){
saldo = saldo - v;
return true;
}
else
Kecia Marques92
else
return false;
}
public double consultarSaldo(){
return(saldo);
}

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

Herança
public void alterarLimite(double l){
if (l > 0)
limite = l;
}
Kecia Marques94
} public double consultarLimite(){
return limite;
}

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

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

Herança
minhaConta.alterarLimite(200);
System.out.println("Limite: " +
minhaConta.consultarLimite());
System.out.println("Saldo Total: " +
minhaConta.consultarSaldoTotal());
Kecia Marques97
minhaConta.depositar(300);
System.out.println("Saldo após depósito: " +
minhaConta.consultarSaldo());
System.out.println("Saldo total após depósito: "
+ minhaConta.consultarSaldoTotal());

Herança
if (minhaConta.sacar(200)) {
System.out.println("Saldo após saque: " +
minhaConta.consultarSaldo());
System.out.println("Saldo total após saque: "
Kecia Marques98
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());

Herança
if (minhaConta.sacar(700)) {
System.out.println("Saldo total após saque: "
+ minhaConta.consultarSaldoTotal());
}
Kecia Marques99
}else
System.out.println("Não foi possível realizar
operação. Saldo total disponível é de " +
minhaConta.consultarSaldoTotal());
}
}//Fim da classe MainBanco

Herança

Herança provê reusode classes já
construídas.

Alguns benefícios do uso de herança:
Kecia Marques100

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.

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

Altere a classe MainBanco para criar e realizar
Kecia Marques101

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.

Classes Abstratas
Kecia Marques102

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 Marques103

é designada pela palavra chave
abstract.
abstractclass FiguraGeometrica{...}

podem possuir métodos sem definição de corpo (método
abstrato).
public abstractvoid CalculaArea();

objetos de classes abstratas não podem ser criados.

pode haver hierarquias de classes abstratas.

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 Marques104
implementação.

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

Interface
Kecia Marques105

Interface
Interfacede Java é um recurso que permite especificar os
serviços de uma classe.
interfaceForma {...}
Kecia Marques106

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.

Exemplo
Classes que implementam uma interface devem implementar
todos os métodos daquela interface e todos eles dev em ser
públicos.
class Circulo implementsForma {...}
Kecia Marques107

Uma interface pode ser implementada por várias classes.

Uma classe pode implementar várias interfaces.

Interface é um caso especial de classe abstrata.

Polimorfismo
Kecia Marques108

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 Marques109

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.

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 Marques110
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

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 Marques111
é possível receber um dado de um tipo Y.
Polimorfismo = “muitas formas”

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 Marques112
possível realizar a conversão.
Por exemplo, em C, um valor charpode ser
convertido implicitamente para um valor int.
int a;
char c = ‘k’;
a = c;

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 Marques113
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.

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 Marques114
deve ser também um valor de T.”

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 Marques115

Polimorfismo
Exemplo 1)
public class TesteHeranca {
public static void main (String[] args){
B obj1 = new B(10,20,30,40);
Kecia Marques116
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();
}
}

Polimorfismo O programa anterior imprime:
O valor de X é: 200
O valor de Y é: 300
O valor de Z é: 400
Kecia Marques117
O valor de X é: 10
O valor de Y é: 20
O valor de K é: 40
Z não pertence a esta classe
O valor de Z da superclasse é: 30

Tratamento de Exceções
Kecia Marques118

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 Marques119

Tratamento de Exceções

Propagação de Exceções

Relançamento de Exceções

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

Conceito

Robustez: é a capacidade de um software continuar
em operação corretamente mesmo em condições
anormais.
Problemas
:
Como
prevenir
-
se
de
erros
em
tempo
de
Kecia Marques120

Problemas
:
Como
prevenir
-
se
de
erros
em
tempo
de
execução?Comocontornarsituaçõesanormais?

Exemplos de situações anormais: divisão por zero,
fim de arquivo,overflow, utilização de um objeto não
inicializado,acessoaumíndiceinválidodeumvetor.

Conceito
Exceção:
“é um evento ocorrido durante a execução de um programa que desvia o fluxo normal de
Kecia Marques121
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.

Ausência de Mecanismos para
Exceções

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

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.

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 Marques123

Conseqüências:
Programas menos confiáveis.

Programas com legibilidade prejudicada.

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

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 Marques124

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.

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 Marques125
definidas pelo programador para um aplicação ou uma biblioteca.

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 Marques126
(nula).
IndexOutOfBoundsException: ocorre quando é realizado
um acesso a um vetor por índice que está fora dos seus
limites.

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

Automaticamente
: o próprio mecanismo de
Kecia Marques127

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.

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 Marques128
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();
}

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 Marques129

Em Java:
oscomandosdoblocotrysãoostratados;

os comandos das cláusulascatchcorrespondem ao
tratamento das exceções ocorridas no blocotry
correspondente;

Tratamento de Exceções

podem ser incluídas várias cláusulas catchapós
o try;
a cada
catch
corresponde um classe de
Kecia Marques130

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

Tratamento de Exceções Ex.:
...
String n, d;
...
try{
int num = Integer.valueOf(n).intValue();
Kecia Marques131
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.”);
}

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 Marques132
}
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.

Tratamento de Exceções
a cláusula catch(ArithmeticException y) captura exceções de
ocorridas em operações aritméticas. Neste caso, ser ve 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 Marques133

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
ArithmeticExceptionou NumberFormatException.

Propagação de Exceções
Quando um exceção ocorre, busca-se pela cláusula
catchassociada ao seu tipo. A sequência para
realizar esta busca é a que aparece no código.
Kecia Marques134

Quando um exceção não é tratada no bloco em que
ocorreu, ela é retornadapara o bloco mais externo.
No caso de chamadas de métodos, é retornada
para o método chamador.

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 Marques135

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

Relançamento de Exceções
Em algumas situações, pode ser necessário que o local
onde ocorreu a exceção a trate de maneira parcial,
deixando o restante de seu tratamento para um dos
blocos mais externo (ou para um dos métodos na
seqüência
de
chamada)
.
Neste
caso,
utiliza
-
se
o
recurso
Kecia Marques136
seqüência
de
chamada)
.
Neste
caso,
utiliza
-
se
o
recurso
derelançamentodeexceções.

Relançamento de Exceções
Ex.:
...
try{
try{
...
throw new IOException();
Kecia Marques137
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.
}

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

A execução de um programa sem a
ocorrênciadeexceçõessegueofluxonormal
determinadonoprograma.
Kecia Marques138
O que ocorre na presença de um exceção?
Qual será o fluxo do programa nesta
situação?

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çãonãoretorna ao ponto
no
qual
foi
gerada
.
A
execução
é
desviada
para
um
ponto
externo
e
são
encerradas
as
unidades
na
pilha
de
execução,
Kecia Marques139
no
qual
foi
gerada
.
A
execução
é
desviada
para
um
ponto
externo
e
são
encerradas
as
unidades
na
pilha
de
execução,
a partir do ponto onde ocorreu a exceção até a unidade
anterior a que o tratador de exceção foi executado. A
execução continua na unidade na qual o tratador foi
encontrado.

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

A cláusula finallyde Java:
Em algumas situações, pode ser necessária a
execução de um conjunto de comandos, independente
do tipo de exceção ocorrida.
Kecia Marques140

Acláusulafinallyde Java provê este recurso.

Em geral, este recurso é utilizado quando deseja-se
restabelecer o estado de algum objeto de forma
independente da ocorrência e da propagação de
exceções. Por exemplo, quando deseja-se encerrar
conexões com banco de dados ou fechar arquivos
quando ocorrer uma exceção qualquer.

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

O bloco finallyde Java executa quando:
uma exceção for lançada no bloco trycorrespondente ou em um de seus blocos
catch
;
Kecia Marques141
em um de seus blocos
catch
;

o seu bloco tryfechar utilizando return, breakou continue.

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

É possível a existência de blocotrysem a
associação de uma cláusulacatch. Mas, não é
possível a existência de um blocotrysem pelo
menosumcláusulacatchoufinally.
Kecia Marques142

Em outras palavras, um blocotrypode não
possuir cláusulascatch, mas, neste caso, deve
possuirentãoumacláusulafinally.

Continuação após o Tratamento
de Exceções
Exemplo:
...
try {
System.out.println(“Primeiro try”);
try{
System.out.println(“Segundo try”);
Kecia Marques143
System.out.println(“Segundo try”); ... //aqui ocorreu uma exceção qualquer
}
finally{
System.out.println(Finally do segundo try);
}
}

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 Marques144
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.

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 Marques145

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.