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

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

2 – Revisão de Programação Orientada a Objetos

Apresentações semelhantes


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

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

2 Programação orientada a objetos
Revisão rápida com análise acerca de algumas de suas implicações em Padrões de Projeto Padrões de Projeto - Revisão de POO Programação orientada a objetos

3 Parte 1 Classes e Objetos Encapsulamento
Padrões de Projeto - Revisão de POO Parte 1

4 Roteiro Classes e objetos Encapsulamento
Modificadores de acesso Composição, agregação e associação Padrões de Projeto - Revisão de POO

5 Classes e Objetos Padrões de Projeto - Revisão de POO

6 Classes e Objetos Padrões de Projeto - Revisão de POO

7 Classes e Objetos Praticando: como seria a classe de uma conta corrente? Padrões de Projeto - Revisão de POO

8 Classes e Objetos Dicas sobre comparação: ==  compara a referência
equals  compara os atributos do objeto (se devidamente sobrescrito) Praticando: o que acontece na memória? Padrões de Projeto - Revisão de POO Ex.: olha a documentação de equals de Object em um site da internet (se não for sobrescrito ele compara por referência)

9 Classes e Objetos Praticando! (15 minutos)
No Eclipse ou Notepad++, escreva uma classe ContaCorrente cujos atributos são saldo e cheque especial. Depois, escreva uma classe chamada Loja. Toda loja tem uma conta corrente. O que queremos simular com esse mini-projeto é uma Loja vendendo um produto a um cliente. Faremos isso no Main. Padrões de Projeto - Revisão de POO

10 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? Padrões de Projeto - Revisão de POO

11 Encapsulamento class ContaCorrente{ //Mau exemplo public int saldo;
public int chequeEspecial; public ContaCorrente(int saldo, int chequeEspecial){ this.saldo = saldo; this.chequeEspecial = chequeEspecial; } class Loja{ public ContaCorrente minhaConta; public Loja(ContaCorrente minhaConta){ this.minhaConta = minhaConta; class Main{ public static void main(String [] args){ ContaCorrente c1 = new ContaCorrente(500, 100); // ... Padrões de Projeto - Revisão de POO

12 Encapsulamento O que poderia acontecer no exemplo anterior?
As Lojas poderiam não ter tomado o cuidado suficiente ao manipular a variável saldo de seus clientes... 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... Padrões de Projeto - Revisão de POO

13 Encapsulamento O que é encapsulamento? Loja saldo cheque especial
Conta Corrente Padrões de Projeto - Revisão de POO  outra explicação interessante debita(valor) credita(valor)

14 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) Padrões de Projeto - Revisão de POO Com as variáveis private e os métodos públicos nós forçamos as classes que utilizam essas variáveis a as acessarem por meio desses métodos de acesso (os chamados getters).

15 Encapsulamento Modificadores de acesso: public private protected
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. Padrões de Projeto - Revisão de POO

16 Classes e Objetos Corrija o que você eventualmente fez errado na implementação do exercício anterior. Praticando! (15 minutos) No Eclipse ou Notepad++, 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 debita e credita, 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 através do método vende, e acesso através dos getters. Padrões de Projeto - Revisão de POO

17 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: um objeto cliente: saldo =100 e cheque especial = 100; Um objeto loja: que tem uma conta corrente com saldo = 1000 e cheque especial = 100. Roteiro de testes: Loja vende um produto que custa R$100. Loja vende um produto que custa R$150. Programa da loja mal implementado: Loja vende um produto que custa R$0. Loja vende um produto que custa R$-10. Padrões de Projeto - Revisão de POO

18 Encapsulamento //... mostrar código no Eclipse
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 Padrões de Projeto - Revisão de POO GoodAccounting  explicação legal

19 Encapsulamento 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. 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! Padrões de Projeto - Revisão de POO

20 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.  Padrões de Projeto - Revisão de POO


Carregar ppt "2 – Revisão de Programação Orientada a Objetos"

Apresentações semelhantes


Anúncios Google