Programação Orientada a Objetos
em Java
Carlos Andrés Ferrero
Problema
2
• Você está iniciando o desenvolvimento de um sistema para agência bancaria. No inicio do desenvolvimento você identificou duas
entidades:
– Cliente: nome, endereco, cpf e idade; – Conta: Titular, saldo e limite
Problema
3
• Na classe Conta, devemos permitir a transação de saque, que permite retirar um determinado valor do saldo de uma conta específica.
Problema
4
• Quem é a figura do Usuário da Classe?
Usuário da Classe é algum programador
que irá fazer uso da classe em questão ou bem outra Classe que faz uso dessa.
• Por exemplo:
– Se criarmos uma classe para testar conta
(TestaConta) ou uma classe Agência, estaríamos fazendo uso da classe Conta, correto?
Problema
5
• Um usuário da classe conta, maldoso, cria e executa a seguinte classe:
• Que evidencia que é possível ultrapassar o valor do saldo e limite definido inicialmente.
Problema
6
Problema
7
• Uma forma seria incluir no nosso método saca um if, que verifique se o valor que o usuário da classe deseja sacar colocaria o objeto num
estado inconsistente; • Implementemos...
Problema
8
• Melhoramos bem!
• Porém, o mesmo usuário de classe decide criar uma outra classe:
Problema
9
• Um ajuste que poderíamos fazer é o usuário de classe verificar se todas vez que formos alterar o saldo, não estará ultrapassando o limite.
Problema
Problema
11
• No entanto, esse código iria ser repetido por toda a aplicação, por todas as classes que
instanciam objetos da classe Conta.
• Em termos de manutenção de código... isso é péssimo.
• O melhor seria forçar quem usa a classe a
executar o método saca e não permitir acesso direto ao atributo saldo.
Problema
12
• Para fazer isso no Java, devemos colocar a palavra reservada private logo antes da declaração do atributo.
• Private é um modificador de acesso, muitas
Problema
13
• O mesmo usuário de classe, maldoso, decide testar o acesso direto à classe.
Problema
14
• O mesmo usuário de classe, maldoso, decide testar o acesso direto à classe.
Problema
15
• O mesmo usuário de classe, maldoso, decide testar o acesso direto à classe.
Contexto
16
• Na Orientação a Objetos é ótima prática, e quase obrigatória, proteger os atributos com private
• A classe não pode delegar responsabilidades que lhe competem, como a verificação do saldo.
• Cada classe é responsável por controlar o seus atributos, inclusive seus valores válidos ou não
Contexto
17
• Em algumas situação não queremos que o
usuário de classe saiba exatamente como está organizada nossa classe internamente,
escondendo os atributos por completo • Exemplo:
– Codificação do valor de data e hora;
– Apresentação do saldo mais o limite, para iludir o cliente do banco;
Contexto
18 O que o usuário de classe deve saber é o que
a classe que ele quer usar é capaz de fazer; ele não está interessado em
Contexto
19
• O modificador de visibilidade private, também pode ser utilizado em métodos para:
– Quando um método que não deve estar visível para o usuário de classe (por exemplo, cálculo do Delta na classe de equação de segundo grau);
– Quando um trecho de código é repetido duas ou mais vezes dentro de uma mesma classe, em que separamos ele para uso interno;
Contexto
20
• O modificador de visibilidade private, também pode ser utilizado em métodos para:
– Quando um método que não deve estar visível para o usuário de classe (por exemplo, cálculo do Delta na classe de equação de segundo grau)
– Quando um trecho de código é repetido duas ou mais vezes dentro de uma mesma classe, em que separamos ele para uso interno
• Assim, agora conhecemos dois modificadores de acesso: public e private
Contexto
21
• Encapsulamento:
Significa esconder todos os membros de uma classe, além de esconder como o funcionamento do
métodos.
• Interface de uma Classe:
– A interface de uma classe é o conjunto de métodos públicos disponibilizados a um usuário de classe
– É a forma como outra classe pode se comunica com a classe em questão
Contexto
22
• Encapsulamento:
Significa esconder todos os membros de uma classe, além de esconder como o funcionamento do
métodos.
• Interface de uma Classe:
– A interface de uma classe é o conjunto de métodos públicos disponibilizados a um usuário de classe
– É a forma como outra classe pode se comunica com a classe em questão
Contexto
23
• Analogias:
– Ao dirigir um carro, utilizamos o volante e os pedais. É essa nossa forma de comunicação com o carro, de forma geral. Um motor mais potente nos dará
melhores resultados, mas não precisamos
reaprender a dirigir pelo fato do moto ser mais ou menos potente, a gasolina, álcool ou flex.
Contexto
24
• Analogias:
– Os celulares possuem métodos para discar, ligar, desligar e atender, no entanto, para o usuário comum pouco interessa se o celular é GSM ou CDMA, o que é uma questão de implementação desses métodos.
Problema
25
• O modificador private faz com que ninguém consiga modificar, nem mesmo ler, o valor de determinado atributo
• Ou seja, não conseguimos alterar o valor do
saldo na conta, mas também não conseguimos consultar o saldo
Para isso utilizam-se métodos públicos para alterar e consultar o valor dos atributos.
Solução
26
• Esses métodos são denominados de getters e
setters:
• Método get serve para obter o valor do atributo • Método set serve para mudar o valor do atributo
Solução
27
• A classe Conta que já desenvolvimos possui três atributos: titular, saldo e limite.
• Cada um desses três atributos pode ter seus métodos set e get
Solução
28
• De qualquer forma devemos sempre refletir se todos os métodos getters e setters fazem
sentido.
• Na prática criam-se todos esses métodos
automaticamente, no entanto, se pensarmos no caso de setSaldo() parece estranho pensar que alguém pode colocar um saldo na conta, o que deveria fazer são saques e depósitos, não é isso?
Solução
29
• E também nem todos os métodos get são implementados da mesma forma
• Por exemplo, o banco quer que o sistema
sempre mostre como saldo o valor do limite somado ao saldo (uma prática comum dos bancos que costuma iludir seus clientes) • Vamos implementar!
Problema
30
• Implementemos os métodos saca e deposita
fazendo as verificações adequadas para que não haja erros na transferência de valores.
Problema
31
• Implementemos os métodos saca e deposita
fazendo as verificações adequadas para que não haja erros na transferência de valores.
• E-mail – [email protected] • Website – http://sites.google.com/site/anfer86/ Contato 32
• Treinamentos K19. Orientação a Objetos em Java. 2012. Disponível em:
http://www.k19.com.br/downloads/apostilas/jav a/k19-k11-orientacao-a-objetos-em-java2012
• ASCENCIO, A. F.; CAMPOS, E. A. V. Fundamentos da Programação de Computadores, 3. ed., São Paulo: Pearson Education do Brasil, 2012.
Referências