Vous êtes sur la page 1sur 6

FACULDADE CENECISTA DE SETE LAGOAS

BACHARELADO EM SISTEMAS DE INFORMAO



0|sc|p||na: L|nguagem de Programao | Professor: T||o Te|xe|ra 6ota

O
OOr
rri
iie
een
nnt
tta
aa

o
oo a
aa O
OOb
bbj
jje
eet
tto
oos
ss
p
ppa
aar
rrt
tte
ee 0
002
22:
:: M
MMo
ood
ddi
iif
ffi
iic
cca
aad
ddo
oor
rre
ees
ss d
dde
ee a
aac
cce
ees
sss
sso
oo,
,, c
cco
oon
nns
sst
ttr
rru
uut
tto
oor
rre
ees
ss e
ee
p
ppa
aad
ddr
rr
o
oo J
JJa
aav
vva
aaB
BBe
eea
aan
nn

Modificadores: public e private

Ao colocar um modificador private em um mtodo ou atributo, faz com que os mesmos
sejam acessveis apenas na classe que os contm. Desta forma, outra classe que
desejar acess-los diretamente no conseguir.
Ao colocar um modificador de acesso public em um mtodo ou atributo, faz com que os
mesmos sejam acessveis por qualquer classe do sistema.
Exemplo 1: Classe Conta
Conta.java
public class Conta {
private int numero;
private Cliente cliente;
private double saldo;
private double limite;

public int getNumero() {
return numero;
}
public void setNumero(int n) {
numero = n;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente c) {
cliente = c;
}
public double getSaldo() {
return saldo;
}
public double getLimite() {
return limite;
}
public void setLimite(double valor) {
limite = valor;
}
public void depositar(double valor) {
saldo += valor;
}
public void sacar(double valor) {
saldo -= valor;
}
}



FACULDADE CENECISTA DE SETE LAGOAS
BACHARELADO EM SISTEMAS DE INFORMAO

0|sc|p||na: L|nguagem de Programao | Professor: T||o Te|xe|ra 6ota

Teste.java
public class Teste {
public static void main(String[] args) {

Conta conta = new Conta();
conta.numero = 4563;
conta.saldo = 10000;
/*
* As duas instrues acima so invlidas, pois a classe
* Teste no consegue "enxergar" os atributos numero e
* saldo da classe Conta, que so privados.
*/

conta.setNumero(4563);
conta.depositar(10000);
/*
* As instrues acima so vlidas, uma vez que os mtodos
* setNumero e depositar so pblicos, e, portanto,
* acessveis por outras classes
*/

}
}

Marcando um atributo como privado, fechamos o acesso ao mesmo de todas as outras
classes, fazendo com que o cdigo acima no compile. Tal caracterstica da orientao
a objetos tambm denominada encapsulamento.
Na programao orientada a objetos, prtica quase que obrigatria proteger seus
atributos com private. Assim, cada classe fica responsvel por controlar seus atributos,
portanto ela deve julgar se aquele novo valor vlido ou no! Esta validao no deve
ser controlada por quem est usando a classe e sim por ela mesma, centralizando essa
responsabilidade e facilitando futuras mudanas no sistema.
A palavra chave private tambm pode ser usada para modificar o acesso a um mtodo.
Tal funcionalidade normalmente usada quando existe um mtodo apenas para auxiliar
a prpria classe e no queremos que outras classes o usem.
Encapsular fundamental para que seu sistema seja suscetvel a mudanas: no
precisaremos mudar uma regra de negcio em vrios lugares, mas sim em apenas um
nico lugar, j que essa regra est encapsulada.
Se quisesse alterar o mtodo sacar, por exemplo, para fazer uma validao a fim de
verificar se o valor a ser sacado no ultrapassa o saldo disponvel, poderamos apenas
alterar a classe Conta e todos os objetos teriam o mesmo comportamento. Desta forma,
outros programadores que fossem lidar com objetos deste tipo, no precisariam nem
saber o que acontece quando o mtodo sacar invocado. Bastaria alterar o mtodo da


FACULDADE CENECISTA DE SETE LAGOAS
BACHARELADO EM SISTEMAS DE INFORMAO

0|sc|p||na: L|nguagem de Programao | Professor: T||o Te|xe|ra 6ota

seguinte forma:

public void sacar(double valor) {
if (valor > saldo + limite) {
System.out.println("No posso sacar fora do limite!");
} else {
saldo = saldo - valor;
}
}

Exemplo 2: Classe Pessoa (validao de CPF)
Pessoa.java
public class Pessoa {
private String nome;
private String cpf;

public void setCpf(String c) {
if (validaCpf(c)){
cpf = c;
}
else System.out.println("CPF invlido");
}

private boolean validaCpf(String cpf){

//retorna true se for verdadeiro e false se for falso

}
}

Isso resolve o problema de cadastrar uma pessoa com CPF invlido. Agora, qualquer
pessoa que for criada, ao tentar alterar o CPF, ser realizada a validao antes.
Com o encapsulamento, no precisa de outros programadores terem conhecimento das
regras de validao.
O mtodo validaCpf() privado e, portanto, s pode ser utilizado pela classe Pessoa.

Mtodos getters e setters

Para permitir o acesso aos atributos (j que eles so private) de uma maneira
controlada, a prtica mais comum criar dois mtodos: um que retorna o valor e outro
que altera o valor. O padro para esses mtodos de colocar a palavra get ou set antes
do nome do atributo.



FACULDADE CENECISTA DE SETE LAGOAS
BACHARELADO EM SISTEMAS DE INFORMAO

0|sc|p||na: L|nguagem de Programao | Professor: T||o Te|xe|ra 6ota

Exemplo: Classe Aluno
Aluno.java
public class Aluno {
private String nome;
private int matricula;
private String cpf;

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

public int getMatricula() {
return matricula;
}

public void setMatricula(int matricula) {
this.matricula = matricula;
}

public String getCpf() {
return cpf;
}

public void setCpf(String cpf) {
this.cpf = cpf;
}

}

Desta forma, qualquer objeto que quiser alterar o valor de um atributo dever utilizar os
mtodos setters.
Qualquer objeto que quiser capturar o valor de um atributo dever utilizar os mtodos
getters.
A palavra this faz referncia aos atributos do objeto. Possui o escopo global. Quando
no tem a palavra reservada this, refere-se varivel com o escopo mais interno.

Construtores da classe

O construtor corresponde ao bloco de cdigo que chamado quando um objeto
instanciado (instruo new).
Por default, quando no se especifica um construtor, o Java cria um construtor padro
que no recebe parmetros e no executa qualquer instruo.


FACULDADE CENECISTA DE SETE LAGOAS
BACHARELADO EM SISTEMAS DE INFORMAO

0|sc|p||na: L|nguagem de Programao | Professor: T||o Te|xe|ra 6ota

Quando se declara explicitamente um construtor, o construtor default deixa de existir.
Um construtor pode receber argumentos, podendo assim inicializar algum tipo de
informao.
Um construtor pode receber um ou mais argumentos, mas no pode retornar valor
algum.
Uma classe pode possuir um ou mais construtores.
ATENO: um construtor no um mtodo, apesar de ser bastante semelhante. Note
que ele no possui um tipo de retorno em sua declarao, ao contrrio dos mtodos.
Exemplo: Classe Automovel
Automovel.java
public class Automovel {
private String marca;
private int ano;
private String combustivel;

// Construtor 1: sem argumentos
public Automovel() {
combustivel = "Gasolina";
}

// Construtor 2: inicializa todos os atributos
public Automovel(String marca, int ano, String combustivel) {
this.marca = marca;
this.ano = ano;
this.combustivel = combustivel;
}

//Mtodos getters e setters
}

Chamando um construtor:
Teste.java
public class Teste {
public static void main(String[] args) {
// Chama o construtor sem argumentos
Automovel auto = new Automovel();
//Imprime: Gasolina
System.out.println(auto.getCombustivel());

Automovel auto2 = new Automovel("Ford", 2009, "Flex");
System.out.println(auto2.getMarca()); //Imprime: Ford
System.out.println(auto2.getAno()); //Imprime: 2009
System.out.println(auto2.getCombustivel()); //Imprime: Flex
}
}




FACULDADE CENECISTA DE SETE LAGOAS
BACHARELADO EM SISTEMAS DE INFORMAO

0|sc|p||na: L|nguagem de Programao | Professor: T||o Te|xe|ra 6ota

Padro JavaBean

Existe um padro de criao de classe em Java chamado JavaBean, que
determinado quando criamos uma classe com todos os atributos privados, seus getters
e setters e um construtor vazio (sem parmetros).
Exemplo:
Aluno.java
public class Aluno {
private String nome;
private int matricula;
private String cpf;

public String getNome() {
return nome;
}

public void setNome(String nome) {
this.nome = nome;
}

public int getMatricula() {
return matricula;
}

public void setMatricula(int matricula) {
this.matricula = matricula;
}

public String getCpf() {
return cpf;
}

public void setCpf(String cpf) {
this.cpf = cpf;
}

}

Lembre-se que se no explicitar o construtor, o Java define um construtor padro sem
parmetros.