Professional Documents
Culture Documents
Assuntos
Especialização
Construtores
1
Java Beans
2
Créditos
• Autor: Alessandro Cerqueira
• Revisão: Professores da Escola de Informática
da Unigranrio.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
3
Especialização
• Utilizamos palavra reservada extends para indicar
que uma classe é especialização de outra.
• Em Java não há herança múltipla; ou seja, uma
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
public Aluno(
Aluno(String cpf,
cpf, String nome, String matr)matr)
{
super(
super(cpf,
cpf, nome);
nome); // chamada ao construtor de Pessoa
this.
this.matr = matr;
matr;
}
Pessoa
public String getMatr()
getMatr() cpf
{ nome
return this.
this.matr;
matr; Pessoa(String, String)
} getCpf()
getCpf()
} getNome()
getNome()
Aluno
matr
Aluno(String, String, String)
getMatr()
getMatr()
6
Construtores
• Sabemos que o método construtor é um método que promoverá a
inicializaç
inicialização de um objeto assim que for criado.
• Para ser um construtor, o nome do mé
método deverá
deverá ser exatamente igual
ao da classe e não deve apresentar indicaç
indicação de tipo de retorno.
public class A { public class A { public class A {
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
Construtores
• Estratégia de Programação: Toda vez que
formos codificar uma classe devemos escrever
um ou mais construtores.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
– A estraté
estratégia a ser adotada é verificar para cada atributo
da classe quais devem ser inicializados no momento de
sua instanciaç
instanciação.
– Todos os atributos que precisarem ser inicializados (com
padrões diferentes do proposto pela inicializaç
inicialização default)
deverão ser manipulados no construtor.
construtor.
– Na maioria das vezes, os valores que utilizaremos para a
inicializaç
inicialização precisam ser recebidos atravé
através de
parâmetros no construtor.
construtor.
8
Construtores
• Regra: Quando estabelecermos uma especialização,
todos construtores das subclasses sempre deverão
chamar um construtor de sua superclasse na primeira
linha de código.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
Super
• Se um mé
método for redefinido em uma subclasse, mas
desejarmos chamar na subclasse a implementaç
implementação presente em
sua superclasse,
superclasse, utilizamos a instruç
instrução:
super.
super.<nome do mé método>(...)
todo>(...)
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
• Exemplo:
– Considere que adicionamos na classe Pessoa o mé
método toString
com a seguinte implementaç
implementação:
public String toString()
toString()
{
return this.
this.nome;
}
– Veja as consideraç
considerações abaixo:
this.
this.toString();
toString(); // Chama a implementaç
implementação de Pessoa
super.
super.toString();
toString(); // Chama a implementaç
implementação de Object
10
Construtores
• Se não colocarmos pelo menos um construtor na
classe, o compilador colocará um construtor
default.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
Construtores - Exemplo
Código Original Código Processado pelo Compilador
public class A public class A extends Object {
{ public A() {
} super();
super();
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
}
}
public class B extends A { public class B extends A {
public B(int x) { public B(int x) {
super();
super();
}
}
}
}
public class C extends B public class C extends B {
{ public C() {
} super();
super(); // Erro!!!
}
OBS: Todo texto que não foi }
escrito em verde corresponde
a coisas que foram acrescentadas // Teremos um erro neste caso pois a classe
pelo compilador. // B não tem um construtor com assinatura
// vazia
12
Construtores - Exemplo
• Considere a classe Disciplina (có
(código, nome e numCré
numCréditos).
ditos).
• Não faz sentido termos um objeto desta classe sem a determinaç
determinação
imediata de seu có
código, nome e numCré
numCréditos.
ditos. Assim estes deverão ser
manipulados pelo construtor e os valores destes deverão ser
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
informados atravé
através do envio de parâmetros.
package dominio;
dominio;
public class Disciplina
{
private String código;
digo;
private String nome;
nome;
private int numCré
numCréditos;
ditos;
public Disciplina(
Disciplina(String código,
digo, String nome, int numCré
numCréditos)
ditos)
{
this.
this.setCó
setCódigo(c
digo(có
ódigo);
this.
. setNome(nome);
this setNome (nome);
this.
this.setNumCré
setNumCréditos(
ditos(numCré
numCréditos);
ditos);
}
Construtores - Exemplo
public final String getCódigo()
{
return this.
this.código;
}
public final void setNome(String
setNome(String nome)
{
this.
this.nome = nome;
}
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
new Disciplina(“
Disciplina(“EIN226”
EIN226”, “Sistemas Distribuí
Distribuídos I”
I”, 4);
14
Construtores
• Quando houver sobrecarga de construtores e desejarmos evitar
que dois ou mais construtores tenham que repetir um trecho de
código, podemos utilizar a instruç
instrução this(
this( ... ) para chamar um
construtor a partir de outro.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
• Exemplo:
public Disciplina(
Disciplina(String código,
digo, String nome, int numCré
numCréditos)
ditos)
{
this.
this.setCó
setCódigo(c
digo(có
ódigo);
this.
this.setNome(nome);
setNome(nome);
this.
this.setNumCré
setNumCréditos(
ditos(numCré
numCréditos);
ditos);
}
public Disciplina(
Disciplina(String código,
digo, String nome)
nome)
{
this(c
this(có
ódigo, nome, 4); // Se não passarmos o númCré
mCréditos,
ditos,
// inicializaremos com o 4.
}
15
Método finalize()
• Método presente na classe Object e que pode
ser redefinido nas classes.
• Teoricamente, este método é chamado
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
Classe Abstrata
• Para indicarmos que uma classe é abstrata, utilizamos
o modificador abstract.
– A determinaç
determinação se uma classe é ou não abstrata depende
do domí
domínio.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
package dominio;
dominio;
Método Abstrato
• Método que colocamos na interface da classe mas
que não apresenta implementação
– Provavelmente não conseguimos colocar a codificaç
codificação pois não conseguimos
definir um có
código que valha para a classe e para as suas especializaç
especializações.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
• Exemplo:
package dominio;
dominio;
Método Abstrato
• Figura com esquema ônibus, trem, bicicleta,
carro.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
19
Classe java.lang.Class
• Um objeto da classe Class descreve os metadados de
uma classe
– Metadados:
Metadados: dados que descrevem como os dados estão
estruturados.
estruturados.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
Bloco static
• O bloco static é executado sempre que uma classe for
carregada pelo Class Loader.
• Só poderá manipular com atributos e métodos estáticos:
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
package dominio;
dominio;
public Aluno()
{
Aluno.
Aluno.listaAlunos[
listaAlunos[Aluno.
Aluno.numTotalAlunos++]
numTotalAlunos++] = this;
this;
...
}
...
}
21
Late Binding
• Para termos polimorfismo, é necessário que a
linguagem ofereça Late Binding.
– Verificaç
Verificação realizada em tempo de execuç
execução para se
descobrir o mé
método a ser executado.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
Colisões
• Se com as várias cláusulas import tivermos duas ou
mais classes com o mesmo nome, é necessário
colocar a sua descrição (com pacote) completa.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
• Ex:
import java.
java.util.Date
util.Date;
; // Date do pacote java.
java.util
import java.sql.Date
java.sql.Date;
; // Date do pacote java.sql
java.sql
...
Date umaData;
umaData; // Erro! Qual Date queremos?
java.sql.Date
java.sql.Date novaData;
novaData; // Ok!
Ok! Escrevemos de forma
// completa pois há
há colisão
// de nomes de classe no import
23
Atribuições na
Declaração de Atributos
• Ao declararmos um atributo em uma classe, podemos
fazer a atribuição de um valor de inicialização para
ele.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
– Estas atribuiç
atribuições são executadas imediatamente antes da
execuç
execução do mémétodo construtor.
private int voltagem = 110;
– A atribuiç
atribuição pode utilizar o new ou métodos está
estáticos.
ticos.
private Button btSair = new Button(
Button(“Sair”
Sair”);
private JanelaPrincipal janelaPai =
JanelaPrincipal.
JanelaPrincipal.getSingleton();
getSingleton();
– É útil quando tivermos vá
vários construtores para evitar de
reescrevermos a mesma inicializaç
inicialização nestes mé
métodos
24
Atribuições na
Declaração de Atributos
public class CelularPrePago
{
private String numTel;
numTel;
private int numMinutosDisponí
numMinutosDisponíveis = 5; //atributo com inicializaç
inicialização!
ão!
private double precoMinuto = 1.0; //atributo com inicializaç
inicialização!
ão!
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
public CelularPrePago(
CelularPrePago(String numTel)
numTel)
{
this.
this.numTel = numTel;
numTel; // Antes de executar esta linha teremos:
// this.
this.numMinutosDisponí
numMinutosDisponíveis = 5 e
// this.
this.precoMinuto = 1.0;
}
public CelularPrePago(
CelularPrePago(String numTel,
numTel, double precoMinuto)
precoMinuto)
{
this(
this(numTel);
numTel); // Antes de executar esta linha també
também teremos:
// this.
this.numMinutosDisponí
numMinutosDisponíveis = 5 e
// this.
this.precoMinuto = 1.0;
this.
this.precoMinuto = precoMinuto;
precoMinuto;
}
...
}
25
Documentação Javadoc
• Para consultar a documentação das Java Platform Core Classes, temos
que descompactar o arquivo jdk-
jdk-1_5_0-
1_5_0-doc.zip e abrir a pá
página
index.html.
index.html. Lá
Lá, acesse o link “API & Language”
Language”.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
26
Documentação Javadoc
• Este link faz com que você permaneç
permaneça na pápágina index.html,
index.html, poré
porém
irá
irá posicioná
posicioná-lo na âncora “#api”
api”. Clique no link “Java 2 Platform API
Specification”
Specification”.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
27
Documentação Javadoc
• Na nova pá
página, temos um frame com a visão dos pacotes e a visão
de todas as classes.
classes. Acesse o pacote java.
java.lang.
lang.
Relaç
Relação de
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
Pacotes
Relaç
Relação de
Classes
28
{
// có
código opcional de inicializaç
inicialização
}
• Propriedades
– Propriedades são definidas por atributos e métodos get/
get/set.
set. Na maioria dos
casos, declara-
declara-se os atributos como private e os mé
métodos get e set como
public;
public; por exemplo:
private String nome;
public String getNome()
getNome()
{
return this.nome;
this.nome;
}
public void setNome(String
setNome(String nome)
{
this.nome
this.nome = nome;
}
29
• Propriedades Booleanas
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
Visibilidade
• Para cada propriedade da classe (atributo ou método)
associamos um tipo de visibilidade. Os modificadores de
visibilidade indicam o nível de acesso ao método ou
atributo.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
– Private:
Private: a propriedade só
só pode ser utilizada dentro do escopo da
classe onde foi declarada.
– Sem modificador:
modificador: a propriedade sósó pode ser utilizada nas
classes do mesmo pacote (visibilidade package)
package).
– Protected:
Protected: a propriedade só
só pode ser utilizada nas classes do
mesmo pacote e em suas subclasses
– Public:
Public: a propriedade pode ser utilizada em qualquer classe.
Visibilidade
• Na declaração da classe podemos associar um
aspecto de visibilidade que pode ser public ou
“package” (não podemos utilizar protected nem
private, a não ser que sejam classes internas).
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
Visibilidade
• Como os atributos devem ser privados, é
necessária a implementação de métodos que
permitam o acesso de leitura e escrita a estes
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
métodos.
– No padrão JavaBeans são implementados os métodos
get e set.
Exemplo de Visibilidade
pacoteUm
A
private int x
protected int y
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
(package)
package) int z
public A() C
public int getX()
getX()
public void setX(int)
setX(int) public B()
B
public B()
pacoteDois
D
public D()
34
Exemplo de Visibilidade
package pacoteUm;
pacoteUm;
public class A
{
// A visibilidade de x é private,
private, o que indica que o atributo x
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
// só
só pode ser manipulado no có
código dentro do escopo da classe A.
private int x;
// A visibilidade de y é protected,
protected, o que indica que o atributo y
// pode ser manipulado no có
código dentro do escopo da classe A,
// dentro do escopo de suas especializaç
especializações e dentro do escopo das
// classes de seu pacote (pacoteUm
(pacoteUm)
)
protected int y;
// A visibilidade de z é package,
package, o que indica que o atributo z
// pode ser manipulado no có
código dentro do escopo da classe A e
// dentro do escopo das classes de seu pacote (pacoteUm
(pacoteUm)
)
int z;
(continua...)
35
Exemplo de Visibilidade
(continuação da classe A)
public A()
{
this.
this.x = 10;
this.
this.y = 20;
this.
this.z = 30;
}
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
Exemplo de Visibilidade
package pacoteUm;
public class B extends A
{
public B()
{
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
Exemplo de Visibilidade
package pacoteUm;
public class C
{
public A criaObjetoA()
criaObjetoA()
{
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
Exemplo de Visibilidade
package pacoteDois;
import pacoteUm.*;
pacoteUm.*;
public class D extends A
{
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
public D()
{
// Não posso pois x na classe A é private
// this.x
this.x = 10;
// Posso pois y na classe A é protected.
protected. Como D é especializaç
especialização
// de A esta manipulaç
manipulação é possí
possível
this.
this.y = 20;
// Não posso pois z na classe A é package e, apesar de ser
// especializaç
especialização de A, D não pertence ao mesmo pacote que A
// this.z
this.z = 30;
}
}
39
Classes Internas
• Classe que é declarada dentro do escopo de outra classe.
• Assim, dentro do escopo de uma classe podemos ter atributos, mé
métodos
e/ou classes internas.
• Geralmente utilizamos uma classe interna quando criar uma pequena
pequena
classe que (a princí
princípio) só
só precisa ser utilizada no có
código de outra.
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
class Endereç
Endereço {
private String rua;
private String número;
private String complemento;
...
}
...
}
A classe Endereç
Endereço foi declarada dentro do escopo da classe Pessoa.
40
Classe Interna
• Apesar da classe Endereço ter sido declarada
dentro da classe Pessoa, outras classes podem
utilizá-la. Neste caso, as declarações deverão
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
{
System.
System.exit(0);
exit(0);
}
} ) ;
...
• O que é isto????
isto????
– Indico quem é o WindowListener da janela
– Instancio um objeto de WindowAdapter.
WindowAdapter. Apesar de ser uma classe abstrata, isto é
permitido pois juntamente com a instanciaç
instanciação, estamos redefinindo o mé
método
windowClosing.
windowClosing.
– Na prá
prática, o compilador cria com esta declaraç
declaração uma classe interna “ sem nome”
nome”
(o nome é dado automaticamente). A geraç
geração do bytecode é semelhante ao caso
da classe Interna com nome.
43
private class No
{
/** Ponteiro para o Nó
Nó anterior */
public No anterior = null;
null;
/** Ponteiro para o pró
próximo Nó
Nó */
public No proximo = null;
null;
/** Ponteiro para o elemento vinculado ao Nó
Nó */
public Object elemento = null;
null;
}
(continua...)
45
{
if(elemento == null)
if(elemento null)
return false;
false;
No novoNo = new No();
No();
novoNo.elemento = elemento;
novoNo.elemento
novoNo.anterior = this.ultimo;
novoNo.anterior this.ultimo;
if(this.ultimo != null)
if(this.ultimo null)
this.ultimo. proximo = novoNo;
this.ultimo.proximo novoNo;
else
this.primeiro = novoNo;
this.primeiro novoNo;
this.ultimo = novoNo;
this.ultimo novoNo;
this.tamanho++;
this.tamanho
return true;
true;
}
(continua...)
46
Implementa
/**
ção de Listas Encadeadas
* Remove um elemento da lista encadeada
* @param elemento ponteiro para o elemento a ser removido
* @return Se o elemento foi encontrado na lista e foi removido.
*/
public boolean remover(Object
remover(Object elemento) {
No corrente = this.primeiro;
this.primeiro;
while(corrente != null)
while(corrente null) {
Elementos da Linguagem Java - Alessandro Cerqueira - 20/8/2007
if(corrente.elemento == elemento) {
if(corrente.elemento
if(corrente.anterior != null)
if(corrente.anterior null)
corrente.anterior.proximo
corrente.anterior.proximo = corrente.proximo
corrente.proximo;
;
else
this.primeiro = corrente.proximo
this.primeiro corrente.proximo;;
if(corrente. proximo != null)
if(corrente.proximo null)
corrente.proximo .anterior = corrente.anterior;
corrente.proximo.anterior
else
this.ultimo = corrente.anterior;
this.ultimo
this.tamanho--;
this.tamanho
return true;
true;
}
corrente = corrente.proximo
corrente.proximo;;
}
return false;
false;
} (continua...)
47
{
if(posicao >= tamanho)
if(
return null;
null;
No corrente = this.primeiro;
this.primeiro;
for(int i = 0; i < posicao;
for( posicao; i++)
corrente = corrente.proximo
corrente.proximo; ;
return corrente.elemento;
}
/**
* Informa o nú
número de elementos presentes na lista encadeada
* @return número de elementos
*/
public int tamanho()
{
return this.tamanho;
this.tamanho;
}
}