You are on page 1of 24

Programao por Objectos

Java
Parte 2: Classes e objectos

LEEC@IST

Java 1/24

Classes (1)
Sintaxe
Qualif* class Ident
[ extends IdentC] [ implements IdentI [,IdentI]* ] {
[ Atributos | Mtodos ]*
}

Qualif: qualificador (visibilidade, entre outros)


Ident: identificador da classe
extends IdentC: especializao de superclasse
implements IdentI: realizao de interfaces
LEEC@IST

Java 2/24

Classes (2)
Qualificadores de classe:

public: a classe pode ser publicamente acedida


(os membros pblicos da classe so disponibilizados em
todo o programa).
abstract: a classe no pode ser instanciada
(normalmente, porque alguns mtodo so apenas
prottipos).
final: a classe no pode ter subclasses.
Na omisso do qualificador public, uma classe apenas
acessvel no pacote onde est definida.
Uma classe pode ter mais do que um qualificador. Contudo, uma
classe no pode ser ao mesmo tempo abstract e final.

LEEC@IST

Java 3/24

Classes (3)
public class Conta {
/* atributos */
/* mtodos */
}

LEEC@IST

Java 4/24

Atributos (1)
Sintaxe
Qualif* Tipo Ident [ = Expr ] [, Ident = Expr ]* ;

Qualif: qualificador (visibilidade, entre outros)


Ident: identificador do atributo
Tipo: tipo do atributo
Expr: inicializao do atributo

LEEC@IST

Java 5/24

Atributos (2)
Tipos possveis do atributo:
Primitivos:

boolean
char
byte
short
int
long
float
double

Referncias: classes e interfaces definidas pelo Java, por


exemplo, classe String, e classes e interfaces definidas
pelo programador.
LEEC@IST

Java 6/24

Atributos (3)
Qualificadores de atributo:
Visibilidade:
public: atributo acessvel onde quer que a classe seja acessvel.
private: atributo acessvel apenas na classe.
protected: atributo acessvel na classe, subclasses e classes no
mesmo pacote.

static: atributo de classe.


final: atributo constante.
transient: atributo que no vai ser serializado.
No caso de omisso de um qualificador de visibilidade, o atributo
acessvel na classe e classes no mesmo pacote.
Com excepo dos qualificadores de visibilidade, um atributo pode
ter mais do que um qualificador.
LEEC@IST

Java 7/24

Atributos (4)
Princpio de encapsulamento da informao:
Os atributos no devem ser acedidos fora do objecto a que
pertencem, devendo ser apenas alterados por mtodos
(modificadores).
A visibilidade dos atributos deve ser private ou protected.
Evitar, o mais possvel, o qualificador public.

LEEC@IST

Java 8/24

Atributos (5)
Inicializao dos atributos:
Expr pode ser uma constante, um outro atributo, a chamada
a um mtodo, ou uma expresso envolvendo qualquer
destes.
Por omisso, quando um atributo no inicializado -lhe
atribudo um valor inical, dependente do seu tipo:

boolean false
char \u0000
byte, short, int, long 0
float, double +0.0
refernca para um objecto null

Um atributo pode ser (explicitamente) inicializado:


Directamente quando declarado na classe.
Na inicializao da respectiva classe (no caso de atributos
static), ou na construo do respectivo objecto (no caso de
atributos de instncia).
LEEC@IST

Java 9/24

Atributos (6)

Uma constante possui os qualificadores static final.


public static final double PI = 3.141592;

Um atributo final tem de ser sempre explicitamente inicializado.


Quando no inicializado directamente quando declarado
dito atributo final em branco.

LEEC@IST

Java 10/24

Atributos (7)
public class Conta{
/* atributos */
private static long numProxConta = 0;
protected long numConta; // nmero da conta
protected String dono; // proprietrio da conta
protected float quantia; // saldo actual
/* mtodos */
}

LEEC@IST

Java 11/24

Atributos (8)

Um atributo de uma classe acedido pelo operador ponto (.)


na forma referncia.atributo.
A referncia um identificador de:
objecto, se o atributo no tiver qualificador static.
classe, se o atributo tiver qualificador static.
System.out.println(Conta.numProxConta);

LEEC@IST

Java 12/24

Objectos
Sintaxe
Ident = new Classe ([ Expr [ , Expr]* ]);

Ident: referncia para o objecto a ser criado


Classe: classe a que pertence o dito objecto
Expr: parmetros a passar ao construtor

LEEC@IST

Java 13/24

Garbage collector

No Java, um objecto existe enquanto for referenciado.


O garbage collector destri objectos no referenciados.
Se programador pretender destruir explicitamente um objecto
deve:
1. Remover todas as referncias ao objecto a eliminar.
2. Invocar o mtodo System.gc().

LEEC@IST

Java 14/24

Construtores (1)

Um construtor um mtodo executado na criao de objectos.


Tm o mesmo identificador da classe e no podem ser
chamados.
Parmetros so os da instruo new.
Nunca devolvem tipos, nem mesmo void.
Normalmente usados para inicializar os atributos de
instncia.
Uma classe pode ter mais de um construtor.
O tipo e o nmero de argumentos passados a um construtor
determinam o construtor a usar.

LEEC@IST

Java 15/24

Construtores (2)
public class Conta{
/* atributos */
private static long numProxConta = 0;
protected long numConta; // nmero da conta
protected String dono; // proprietrio da conta
protected float quantia; // saldo actual
/* construtores */
Conta() {
numConta = numProxConta++;
}
Conta(String s, float q) {
numConta = numProxConta++;
dono = s;
quantia = q;
}
/* mtodos */
}
LEEC@IST

Java 16/24

Construtores (3)

Quando uma classe no define nenhum construtor (e s neste


caso), o Java providencia uma construtor por omisso (sem
argumentos).
Um construtor por cpia um construtor que recebe como
argumento um objecto do mesmo tipo que o objecto que vai
construir, e constri o novo objecto com o mesmo estado do
objecto recebido.

Normalmente, um construtor por cpia apenas atribui o valor dos


atributos do objecto recebido ao objecto a ser cirado.
/* construtor por cpia */
Conta(Conta c) {
numConta = c.numConta;
dono = c.dono;
quantia = c.quantia;
}

LEEC@IST

Java 17/24

Construtores (4)

Um construtor pode fazer uma chamada explcita de um outro


construtor da classe atravs do this().
Se o construtor a chamar tiver N parmetros, estes devem ser
passados na chamada explcita this(param1,...,paramN).
Se existir, a chamada explcita deve ser a primeira instruo no
construtor.
Qualquer expresso que passada como argumento ao
construtor explcito no deve incluir nem atributos nem mtodos
do objecto a ser criado.

LEEC@IST

Java 18/24

Construtores (5)
public class Conta{
/* atributos */
private static long numProxConta = 0;
protected long numConta; // nmero da conta
protected String dono; // proprietrio da conta
protected float quantia; // saldo actual
/* construtores */
Conta() {
numConta = numProxConta++;
}
Conta(String s, float q) {
this(); /* chamada explcita */
dono = s;
quantia = q;
}
/* mtodos */
}
LEEC@IST

Java 19/24

Inicializao de atributos de
instncia (1)

Um objecto acabado de criar tem um estado inicial:


Inicializao por omisso.
Inicializao dos atributos na declarao dos mesmos.
Quando necessrio mais do que uma inicializao
simples:
Construtores: usados para inicializar um objecto antes da
referncia para o objecto ser retornada pelo new.
Blocos de inicializao: executados como se estivessem
presentes no incio dos construtores da classe.
Vistos como cdigo de construo de objectos (garantia de
correco no tratamento de atributos finais em branco).
teis para definir pedaos comuns de cdigo a executar por todos
os construtores da classe.

LEEC@IST

Java 20/24

Inicializao de atributos de
instncia (2)
O construtor chamado aps:
Inicializao por omisso dos atributos de instncia da
classe.
Inicializao dos atributos de instncia na declarao dos
mesmos.

LEEC@IST

Java 21/24

Inicializao de atributos de
instncia (3)
public class Conta{
/* atributos */
private static long numProxConta = 0;
protected long numConta; // nmero da conta
protected String dono; // proprietrio da conta
protected float quantia; // saldo actual
/* construtores */
Conta() {
numConta = numProxConta++;
}
Conta(String s, float q) {
this();
dono = s;
quantia = q;
}
/* mtodos */
}
LEEC@IST

Java 22/24

Inicializao de atributos de
instncia (4)
public class Conta{
/* atributos */
private static long numProxConta = 0;
{ /* bloco de inicializao */
numConta = numProxConta++;
}
protected long numConta; // nmero da conta
protected String dono; // proprietrio da conta
protected float quantia; // saldo actual
/* construtores */
Conta() {}
Conta(String s, float q) {
dono = s;
quantia = q;
}
/* mtodos */
}
LEEC@IST

Java 23/24

Inicializao de atributos
estticos

Os atributos estticos de uma classe podem ser inicializados:


Na declarao dos mesmo.
Em blocos de inicializao estticos.

Declarados como static.


S podem manipular membros estticos da classe.

A inicializao dos atributos estticos de uma classe feita


depois da classe ser carregada, mas antes de ser de facto
usada.

LEEC@IST

Java 24/24

You might also like