A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos.

Apresentações semelhantes


Apresentação em tema: "Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos."— Transcrição da apresentação:

1 Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

2 PARTE 1 1.Classes e Objetos 2.Encapsulamento 1.Modificadores de acesso 2 Revisão rápida com análise acerca de algumas de suas implicações em Padrões de Projeto

3 Classes e Objetos 3

4 4

5 Praticando: como seria a classe de uma conta corrente? 5

6 Classes e Objetos Praticando: o que acontece na memória? 6 Dicas sobre comparação: ==  compara a referência equals  compara os atributos do objeto (se devidamente sobrescrito)

7 Classes e Objetos Praticando! (15 minutos) – No seu caderno, escreva uma classe ContaCorrente cujos atributos são saldo e cheque especial. Métodos: creditar, debitar – Depois, escreva uma classe chamada Loja. Toda loja tem uma conta corrente. Método: vender – O que queremos simular com esse mini-projeto é uma Loja vendendo um produto a um cliente. Faremos isso no Main. (Isso fica pra depois ) 7

8 Classes e Objetos Discutindo a solução Será que ainda nos lembramos o que significa encapsulamento? Volte ao exemplo anterior e verifique se o seu código utiliza este paradigma de OO. Como seria uma implementação com encapsulamento? 8

9 Encapsulamento 9 class ContaCorrente{//Mau exemplo public int saldo; public int chequeEspecial; public ContaCorrente(int saldo, int chequeEspecial){ this.saldo = saldo; this.chequeEspecial = chequeEspecial; } //Métodos debitar e creditar } class Loja{ public ContaCorrente minhaConta; public Loja(ContaCorrente minhaConta){ this.minhaConta = minhaConta; } //Método vender } class Main{ public static void main(String [] args){ ContaCorrente c1 = new ContaCorrente(500, 100); //... }

10 Encapsulamento O que poderia acontecer no exemplo anterior? – As Lojas poderiam manipular a variável saldo de seus clientes de maneira direta... ao invés de usar creditar e debitar – Toda a responsabilidade fica sobre os programadores das Lojas que vão utilizar esta classe. A classe está desprotegida! – Eventualmente alguma outra classe (programada por um desenvolvedor descuidado) poderia debitar de uma conta mais do que ela realmente teria em saldo... 10

11 Encapsulamento O que é encapsulamento? 11 saldo cheque especial Conta Corrente debita(valor) credita(valor) Loja

12 Encapsulamento Mas como conseguimos encapsulamento? – Mantenha suas variáveis de instância protegida (modificador de acesso private) – Crie métodos de acesso públicos (getters) 12

13 Encapsulamento Modificadores de acesso: – public acesso global; – private acesso restrito aos membros da classe; – protected acesso permitido à todas as classes do mesmo pacote; acesso permitido a todas as sub-classes (herança); – default ou package-private (sem modificador explícito) acesso permitido à todas as classes do mesmo pacote. 13

14 Classes e Objetos Corrija o que você eventualmente fez errado na implementação do exercício anterior. Praticando! (10 minutos) – Escreva uma classe ContaCorrente cujos atributos são saldo e cheque especial. Lembre-se de encapsular estes atributos e permitir manipulação através dos métodos debitar e creditar, e acesso através dos getters. – Depois, escreva uma classe chamada Loja. Toda loja tem uma conta corrente. Lembre-se de encapsular o atributo e permitir manipulação do conteúdo apenas através do método vender, e acesso através dos getters. 14

15 Classes e Objetos Corrija o que você eventualmente fez errado na implementação do exercício anterior. – Para testar nosso mini-projeto, crie uma classe Main que instancie: 1.um objeto cliente: saldo =100 e cheque especial = 100; 2.Um objeto loja: que tem uma conta corrente com saldo = 1000 e cheque especial = 100. – Roteiro de testes: 1.Loja vende um produto que custa R$100. 2.Loja vende um produto que custa R$150. 3.Programa da loja mal implementado: 1.Loja vende um produto que custa R$0. 2.Loja vende um produto que custa R$-10. 15

16 Encapsulamento 16 public class ContaCorrenteComEncapsulamento { private int saldo; private int chequeEspecial; public ContaCorrenteComEncapsulamento(int saldo, int chequeEspecial){ this.saldo = saldo; this.chequeEspecial = chequeEspecial; } public void debita(int valor) throws Exception{ if(valor <= 0) throw new Exception("Nao podemos debitar um valor negativo ou zero! Valor: "+valor); else if(valor > (saldo + chequeEspecial)) throw new Exception("Operacao negada! O cliente nao tem saldo suficiente! Saldo atual: "+(saldo + chequeEspecial)); else saldo -= valor; } //... mostrar código no Eclipse }

17 Encapsulamento PROTEGE os atributos de uma classe contra comportamentos estranhos, que poderiam ser causados por outras classes (em decorrência de programadores descuidados). FLEXIBILIDADE e FACILIDADE DE MANUTENÇÃO – O código relativo a uma funcionalidade não fica espalhado pelo programa. Se futuramente precisarmos alterar essa funcionalidade, basta mudar o código do método que provê manipulação ou acesso desses atributos. Provê ABSTRAÇÃO – Quando sabemos O QUÊ um método faz mas não sabemos exatamente COMO ele faz, dizemos que esse comportamento está encapsulado! 17 Dica: Não é preciso gerar getters e setters de modo irrestrito para todo e qualquer atributo da classe. Para um getter e/ou um setter existir deve haver um motivo: encapsulamento. Algumas variáveis não precisam ser acessadas externamente; Algumas variáveis não devem ser modificadas diretamente através de um setter.

18 Referências Essa aula utilizou alguns exemplos modificados das apostilas caelum além de alguns conceitos e exemplos abordados na apostilas para certificação java (SCJP e OCJP). Ahhh, alguns destes exemplos também saíram da minha cabeça. 18


Carregar ppt "Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos."

Apresentações semelhantes


Anúncios Google