• Nenhum resultado encontrado

Aula14 ModificadoresAcessoEncapsulamento

N/A
N/A
Protected

Academic year: 2021

Share "Aula14 ModificadoresAcessoEncapsulamento"

Copied!
33
0
0

Texto

(1)

Programação Orientada a Objetos

em Java

Carlos Andrés Ferrero

(2)

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

(3)

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.

(4)

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?

(5)

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.

(6)

Problema

6

(7)

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...

(8)

Problema

8

• Melhoramos bem!

• Porém, o mesmo usuário de classe decide criar uma outra classe:

(9)

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.

(10)

Problema

(11)

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.

(12)

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

(13)

Problema

13

• O mesmo usuário de classe, maldoso, decide testar o acesso direto à classe.

(14)

Problema

14

• O mesmo usuário de classe, maldoso, decide testar o acesso direto à classe.

(15)

Problema

15

• O mesmo usuário de classe, maldoso, decide testar o acesso direto à classe.

(16)

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

(17)

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;

(18)

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

(19)

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;

(20)

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

(21)

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

(22)

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

(23)

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.

(24)

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.

(25)

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.

(26)

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

(27)

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

(28)

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?

(29)

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!

(30)

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.

(31)

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.

(32)

• E-mail – [email protected] • Website – http://sites.google.com/site/anfer86/ Contato 32

(33)

• 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

Referências

Documentos relacionados

Com relação à germinação das sementes armazenadas em câmara fria, aos três meses de armazenamento (Tabela 10), observou-se em sementes tratadas ou não com fungicidas e

Os autores relatam a primeira ocorrência de Lymnaea columella (Say, 1817) no Estado de Goiás, ressaltando a importância da espécie como hospedeiro intermediário de vários parasitos

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

Note on the occurrence of the crebeater seal, Lobodon carcinophagus (Hombron & Jacquinot, 1842) (Mammalia: Pinnipedia), in Rio de Janeiro State, Brazil.. On May 12, 2003,

* Movement based refers to any Creative work, from any artistic area, using the movement as basis of work, research or critical approach. Movement understood as the movement of

Esta degradação, é de difícil avaliação, por isso para cada caverna realiza-se uma análise da capacidade de carga, ou seja, o quanto uma área pode agüentar as

Já agora não se me dá de confessar que sentia umas tais ou quais cócegas de curiosidade, por saber onde ficava a origem dos séculos, se era tão misteriosa como a origem do Nilo, e

Ninguém quer essa vida assim não Zambi.. Eu não quero as crianças