Anda di halaman 1dari 26

Programação Orientada a Objetos

Modificadores de Acesso –
Parte 1 (public e private)

Fernando Kenji Kamei


fkenjikamei@gmail.com
O que vimos na aula passada...

} O que são Arrays de referências


} Como se beneficiar do uso dos Arrays de referências

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 2 de 26


O que veremos hoje...

} A “casa da mãe Joana”


} Encapsulamento
} O que é um modificador de acesso
} A importância dos modificadores de acesso
} Onde e como usá-los
} Os tipos public e private
} Atributos de Classe utilizando o static

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 3 de 26


A “casa da mãe Joana”

} Já imaginou uma casa onde todos pode acessá-la, sem


ao menos saber as regras que nela possui?
} Será que tem limpar os pés antes de entrar?
} Será que cada um é responsável por lavar os pratos,
copos e talheres que utilizou?

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 4 de 26


A “casa da mãe Joana”

} Se não soubermos como funcionam as regras de


convivência dessa casa, podemos ter problemas
graves!!!!

} E o mesmo pode acontecer com nossas classes em


Java.

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 5 de 26


Classe Conta Bancaria
O problema

} Imagine um simples sistema de Contas, onde possui o


método sacar, depositar.

class Conta {
int numero;
Cliente titular;
double saldo;
double limite;
// ..

void sacar(double valorSaque) {


this.saldo = this.saldo - valorSaque;
}
}

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 6 de 26


Classe Conta Bancaria
O problema

class TestaContaEstouro1 {
public static void main(String args[]) {
Conta minhaConta = new Conta();
minhaConta.saldo = 1000.0;
minhaConta.limite = 1000.0;
minhaConta.saca(50000);
} Como pode acontecer,
se o saldo + limite é só
} 2000 ??

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 7 de 26


Classe Conta Bancaria
A “solução” (analisando)…

Incluir dentro do método sacar( ) um if para evitar um


saque que deixe o saldo abaixo do limite.

void sacar(double valorSaque) {


if(valorSaque – (this.saldo+this.limite)
this.saldo = this.saldo - valorSaque;
}

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 8 de 26


Classe Conta Bancaria
A “solução” (outro problema encontrado)…

Mas quem garante que todo programador vai


sempre utilizar o método sacar( ) para alterar o
saldo da conta. Veja…

class TestaContaEstouro2 {
public static void main(String args[]) {
Conta minhaConta = new Conta();
minhaConta.limite = 100;
Foi atribuído o valor do
minhaConta.saldo = -200; saldo abaixo do limite
} permitido.
}

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 9 de 26


Classe Conta Bancaria
Como evitar o problema?

Uma ideia simples seria testar se não estamos


ultrapassando o limite toda vez que formos alterar o
saldo:

double novoSaldo = -200;

if (novoSaldo < -minhaConta.limite) {


System.out.println("Não posso mudar para esse saldo");
}
else {
minhaConta.saldo = novoSaldo;
}

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 10 de 26


Classe Conta Bancaria
Como evitar o problema?

} Outro problema: como garantir que todos irão fazer


a comparação ao alterar o saldo da conta?

} A melhor forma é conhecermos alguns


modificadores de acesso em Java, que servem para
os métodos e atributos.

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 11 de 26


A importância dos modificadores de acesso

} O modificador de acesso diz como os atributos, ou


métodos de uma classe podem ser vistos.

} Vamos conhecer o private e o public.

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 12 de 26


Modificadores de acesso
Private

} Para resolver o problema da classe Conta,


atribuíremos acesso privado ao atributo saldo.

class Conta {
int numero;
Cliente titular;
private double saldo;
double limite;

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 13 de 26


Modificadores de acesso
Private

} Marcando um atributo como privado, fechamos o


acesso ao mesmo em relação a todas as outras
classes, fazendo com que o seguinte código não
compile:

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 14 de 26


Modificadores de acesso
Private

class TestaAcessoDireto {
public static void main(String args[]) {
Conta minhaConta = new Conta();
Não compila! Não
minhaConta.saldo = 1000; podemos acessar o
} atributo privado de
outra classe
}

TesteAcessoDireto.java:5 saldo has private access in


Conta
minhaConta.saldo = 1000;
^
1 error

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 15 de 26


Modificadores de acesso

} Geralmente colocaremos nossos atributos como


private, para que possamos protegê-los, e deixar a
responsabilidade para a própria classe por controlá-
los.

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 16 de 26


Modificadores de acesso

} Podemos ainda utilizar o modificador de acesso


private em métodos. Ou seja, estaremos dizendo
quem um método só pode ser utilizado na própria
classe.Veremos mais a frente isso.

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 17 de 26


Modificadores de acesso
Public

} Vimos que o modificador private só permite acesso à


própria classe. E ao contrário existe o public, que
permite todos acessarem um determinado atributo
ou método.

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 18 de 26


Modificadores de acesso
Static

} Static ... Diz que um método ou atributo pertence à


Classe, ou seja, à toda e qualquer instância.

} Para criar uma instância então de Conta, teríamos que


possuir um método estático que retorne a instância da
classe.

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 19 de 26


Modificadores de acesso
Static

Outra situação em que podemos utilizar um atributo


da classe:
Um banco quer controlar a quantidade de classes criadas.
Ou seja, saber a quantidade de instâncias da classe Conta.

Assim, poderíamos criar um atributo estático:

static int totalDeContas;

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 20 de 26


Modificadores de acesso
Static

E modificar o construtor da classe:

Conta() {
this.totalDeContas = this.totalDeContas + 1;
}

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 21 de 26


Modificadores de acesso
Static

class ContaStatic {
static double saldo;

public static void main(String[] args) {


ContaStatic c1 = new ContaStatic();
ContaStatic c2 = new ContaStatic();
c1.saldo = 10.0;
System.out.println("Saldo Conta 1: "+c1.saldo);
System.out.println("Saldo Conta 2: "+c2.saldo);

}
}

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 22 de 26


Modificadores de acesso
Static

O que aconteceu? Percebe que em ambas as situações os


valores foram iguais?

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 23 de 26


Praticando…

} Já pensou na situação em que colocamos um construtor


de uma classe como private? Como então criar uma
instância de uma classe?

class Conta {

private Conta() {}

}

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 24 de 26


Praticando…

Criar um método estático que retorna a instância da


classe.

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 25 de 26


Perguntas?

Não esqueçam de
ler os slides da
próxima aula

Programação Orientada a Objetos | Prof. Fernando Kenji Kamei 26 de 26

Anda mungkin juga menyukai