Mauricio AnicheOO   mauricio.aniche@caelum.com.br            @mauricioaniche
OO
public class Onibus {	 String nome;	 String linha;}
o quê está faltando?
public class Onibus {	 private String nome;	 private String linha;}
public class Onibus {	 private String nome;	 private String linha;	   public void setNome(String nome) {	   	 this.nome = ...
esconder os atributos,    você deve....
mas... por quê?
De volta a programação procedural...
Imagine a implementação      de um Caixa      Eletrônico...
Conta c = autenticaPeloCartao();
Conta c = autenticaPeloCartao();double valor = pegaValorDoTeclado();
Conta c = autenticaPeloCartao();double valor = pegaValorDoTeclado();      c.saldo = c.saldo - valor;
Conta c = autenticaPeloCartao();double valor = pegaValorDoTeclado();      c.saldo = c.saldo - valor;     dinheiroEmEspecie...
Jedis sacam  dinheiro um pouco diferente!
atm-federacao.java Conta c = autenticaPeloCartao(); double valor = pegaValorDoTeclado(); c.saldo = c.saldo - valor; dinhei...
Agora o bancofica com 10 centavos    a cada saque!
Onde preciso mudar?atm-federacao.javaConta c = autenticaPeloCartao();double valor = pegaValorDoTeclado();c.saldo = c.saldo...
Onde preciso mudar?atm-federacao.javaConta c = autenticaPeloCartao();double valor = pegaValorDoTeclado();c.saldo = c.saldo...
Onde preciso mudar?atm-federacao.javaConta c = autenticaPeloCartao();double valor = pegaValorDoTeclado();c.saldo = c.saldo...
Onde preciso mudar?atm-federacao.javaConta c = autenticaPeloCartao();double valor = pegaValorDoTeclado();c.saldo = c.saldo...
Como você sabia?
Como você sabia?  Porque estava na tela! :)
Onde maisprecisamos mudar?
acho sua ideia de reescrever  sistemas perturbadora...
Precisamos diminuir     os pontos   de mudança!
public class PontoDeOnibus {	   private String nome;	   private double latitude;	   private double longitude;	   private A...
public class PontoDeOnibus {	   private String nome;	   private double latitude;	   private double longitude;	   private A...
public class PontoDeOnibus {	   private String nome;	   private double latitude;	   private double longitude;	   private A...
O que acontece seadicionarmos ônibus     repetidos?
main() {	 PontoDeOnibus ponto = new PontoDeOnibus();	 Onibus estrelaDaMorte = new Onibus();	 estrelaDaMorte.setNome(“Tatoo...
pensar onde escrever código, você deve....
public class PontoDeOnibus {	   private String nome;	   private double latitude;	   private double longitude;	   private A...
main() {	 PontoDeOnibus ponto = new PontoDeOnibus();	 Onibus estrelaDaMorte = new Onibus();	 estrelaDaMorte.setNome(“Tatoo...
ponto.adiciona(onibus);
ponto.adiciona(onibus);O QUÊ?
ponto.adiciona(onibus);O QUÊ?         COMO?
ao não saber COMO o  método faz sua tarefa,encapsulado o método          está!
main() {	 PontoDeOnibus ponto = new PontoDeOnibus();	 Onibus estrelaDaMorte = new Onibus();	 estrelaDaMorte.setNome(“Tatoo...
main() {	 PontoDeOnibus ponto = new PontoDeOnibus();	 Onibus estrelaDaMorte = new Onibus();	 estrelaDaMorte.setNome(“Tatoo...
main() {	 PontoDeOnibus ponto = new PontoDeOnibus();	 Onibus estrelaDaMorte = new Onibus();	 estrelaDaMorte.setNome(“Tatoo...
Só vai saber se estámesmo encapsuladoquando usar a classe!
class PontoDeOnibus {	 private ArrayList<Onibus> onibuses;	 // atributos aqui	   public boolean passa(String linha) {	   	...
Outro exemplo! OnibusDao dao = new OnibusDao();       dao.adiciona(onibus);O QUÊ?                 COMO?
Nosso corpoé encapsulado! :)
Não “saber” as coisas  é bom!
“private” é só  um meio!
classes com getters e setters  pra tudo, encapsulado não            está....
public class Onibus {	 private String nome;	 private String linha;	   public void setNome(String nome) {	   	 this.nome = ...
public class Onibus {	 private String nome;	 private String linha;	   public Onibus(String nome, String linha) {	   	 this...
public class PontoDeOnibus {	   private String nome;	   private double latitude;	   private double longitude;	   private A...
public class PontoDeOnibus {	   private String nome;	   private double latitude;	   private double longitude;	   private A...
Código feio não éo verdadeiro vilão!
OO vaimuito além!
Que a força e a OO estejam        com vocês!      mauricio.aniche@caelum.com.br             @mauricioaniche
Upcoming SlideShare
Loading in …5
×

Conexão Java 2012 - Orientação a Objetos das Galáxias

1,445 views

Published on

Minha palestra no Conexão Java 2012 sobre Orientação a Objetos. Discuti o conceito de encapsulamento.

Published in: Technology
1 Comment
5 Likes
Statistics
Notes
No Downloads
Views
Total views
1,445
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
43
Comments
1
Likes
5
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Conexão Java 2012 - Orientação a Objetos das Galáxias

    1. 1. Mauricio AnicheOO mauricio.aniche@caelum.com.br @mauricioaniche
    2. 2. OO
    3. 3. public class Onibus { String nome; String linha;}
    4. 4. o quê está faltando?
    5. 5. public class Onibus { private String nome; private String linha;}
    6. 6. public class Onibus { private String nome; private String linha; public void setNome(String nome) { this.nome = nome; } public String getNome() { return this.nome; } public void setLinha(String linha) { this.linha = linha; } public String getLinha() { return this.linha; }}
    7. 7. esconder os atributos, você deve....
    8. 8. mas... por quê?
    9. 9. De volta a programação procedural...
    10. 10. Imagine a implementação de um Caixa Eletrônico...
    11. 11. Conta c = autenticaPeloCartao();
    12. 12. Conta c = autenticaPeloCartao();double valor = pegaValorDoTeclado();
    13. 13. Conta c = autenticaPeloCartao();double valor = pegaValorDoTeclado(); c.saldo = c.saldo - valor;
    14. 14. Conta c = autenticaPeloCartao();double valor = pegaValorDoTeclado(); c.saldo = c.saldo - valor; dinheiroEmEspecie(valor);
    15. 15. Jedis sacam dinheiro um pouco diferente!
    16. 16. atm-federacao.java Conta c = autenticaPeloCartao(); double valor = pegaValorDoTeclado(); c.saldo = c.saldo - valor; dinheiroEmEspecie(valor); atm-jedi.java Conta c = autenticaPeloSabreDeLuz(); double valor = leValorDaMente(); c.saldo = c.saldo - valor; dinheiroDasGalaxias(valor);
    17. 17. Agora o bancofica com 10 centavos a cada saque!
    18. 18. Onde preciso mudar?atm-federacao.javaConta c = autenticaPeloCartao();double valor = pegaValorDoTeclado();c.saldo = c.saldo - valor;dinheiroEmEspecie(valor);
    19. 19. Onde preciso mudar?atm-federacao.javaConta c = autenticaPeloCartao();double valor = pegaValorDoTeclado();c.saldo = c.saldo - valor - 0.10;dinheiroEmEspecie(valor);
    20. 20. Onde preciso mudar?atm-federacao.javaConta c = autenticaPeloCartao();double valor = pegaValorDoTeclado();c.saldo = c.saldo - valor - 0.10;dinheiroEmEspecie(valor); Onde mais?
    21. 21. Onde preciso mudar?atm-federacao.javaConta c = autenticaPeloCartao();double valor = pegaValorDoTeclado();c.saldo = c.saldo - valor - 0.10;dinheiroEmEspecie(valor); atm-jedi.java Conta c = autenticaPeloSabreDeLuz(); double valor = leValorDaMente(); c.saldo = c.saldo - valor - 0.10; dinheiroDasGalaxias(valor);
    22. 22. Como você sabia?
    23. 23. Como você sabia? Porque estava na tela! :)
    24. 24. Onde maisprecisamos mudar?
    25. 25. acho sua ideia de reescrever sistemas perturbadora...
    26. 26. Precisamos diminuir os pontos de mudança!
    27. 27. public class PontoDeOnibus { private String nome; private double latitude; private double longitude; private ArrayList<Onibus> onibuses; // getters e setters para tudo}
    28. 28. public class PontoDeOnibus { private String nome; private double latitude; private double longitude; private ArrayList<Onibus> onibuses; // getters e setters para tudo}main() { PontoDeOnibus ponto = new PontoDeOnibus(); Onibus estrelaDaMorte = new Onibus(); estrelaDaMorte.setNome(“Tatooine - Galactic City”); estrelaDaMorte.setLinha(“T-123”);}
    29. 29. public class PontoDeOnibus { private String nome; private double latitude; private double longitude; private ArrayList<Onibus> onibuses; // getters e setters para tudo}main() { PontoDeOnibus ponto = new PontoDeOnibus(); Onibus estrelaDaMorte = new Onibus(); estrelaDaMorte.setNome(“Tatooine - Galactic City”); estrelaDaMorte.setLinha(“T-123”); ponto.getOnibuses().add(estrelaDaMorte);}
    30. 30. O que acontece seadicionarmos ônibus repetidos?
    31. 31. main() { PontoDeOnibus ponto = new PontoDeOnibus(); Onibus estrelaDaMorte = new Onibus(); estrelaDaMorte.setNome(“Tatooine - Galactic City”); estrelaDaMorte.setLinha(“T-123”); if(!ponto.getOnibuses().contains(estrelaDaMorte)) { ponto.getOnibuses().add(estrelaDaMorte); }}
    32. 32. pensar onde escrever código, você deve....
    33. 33. public class PontoDeOnibus { private String nome; private double latitude; private double longitude; private ArrayList<Onibus> onibuses; // getters e setters para tudo public void adiciona(Onibus onibus) { if(!this.onibuses.contains(onibus)) { this.onibuses.add(onibus); } }}
    34. 34. main() { PontoDeOnibus ponto = new PontoDeOnibus(); Onibus estrelaDaMorte = new Onibus(); estrelaDaMorte.setNome(“Tatooine - Galactic City”); estrelaDaMorte.setLinha(“T-123”); ponto.adiciona(estrelaDaMorte);} muito melhor!
    35. 35. ponto.adiciona(onibus);
    36. 36. ponto.adiciona(onibus);O QUÊ?
    37. 37. ponto.adiciona(onibus);O QUÊ? COMO?
    38. 38. ao não saber COMO o método faz sua tarefa,encapsulado o método está!
    39. 39. main() { PontoDeOnibus ponto = new PontoDeOnibus(); Onibus estrelaDaMorte = new Onibus(); estrelaDaMorte.setNome(“Tatooine - Galactic City”); estrelaDaMorte.setLinha(“T-123”);} Precisamos saber se um ônibus passa pelo ponto!
    40. 40. main() { PontoDeOnibus ponto = new PontoDeOnibus(); Onibus estrelaDaMorte = new Onibus(); estrelaDaMorte.setNome(“Tatooine - Galactic City”); estrelaDaMorte.setLinha(“T-123”); for(Onibus o : ponto.getOnibuses()) { if(o.getLinha().equals(“T-123”)) { System.out.println(“Onibus passa!”); } }}
    41. 41. main() { PontoDeOnibus ponto = new PontoDeOnibus(); Onibus estrelaDaMorte = new Onibus(); estrelaDaMorte.setNome(“Tatooine - Galactic City”); estrelaDaMorte.setLinha(“T-123”); for(Onibus o : ponto.getOnibuses()) { if(o.getLinha().equals(“T-123”)) { System.out.println(“Onibus passa!”); } }} aqui mesmo?
    42. 42. Só vai saber se estámesmo encapsuladoquando usar a classe!
    43. 43. class PontoDeOnibus { private ArrayList<Onibus> onibuses; // atributos aqui public boolean passa(String linha) { for(Onibus o : this.onibuses) { if(o.getLinha().equals(linha)) { return true; } } return false; }}
    44. 44. Outro exemplo! OnibusDao dao = new OnibusDao(); dao.adiciona(onibus);O QUÊ? COMO?
    45. 45. Nosso corpoé encapsulado! :)
    46. 46. Não “saber” as coisas é bom!
    47. 47. “private” é só um meio!
    48. 48. classes com getters e setters pra tudo, encapsulado não está....
    49. 49. public class Onibus { private String nome; private String linha; public void setNome(String nome) { this.nome = nome; } public String getNome() { return this.nome; } public void setLinha(String linha) { this.linha = linha; } public String getLinha() { return this.linha; }}
    50. 50. public class Onibus { private String nome; private String linha; public Onibus(String nome, String linha) { this.nome = nome; this.linha = linha; } public String getNome() { return this.nome; } public String getLinha() { return this.linha; }}
    51. 51. public class PontoDeOnibus { private String nome; private double latitude; private double longitude; private ArrayList<Onibus> onibuses; // getters e setters para tudo?}
    52. 52. public class PontoDeOnibus { private String nome; private double latitude; private double longitude; private ArrayList<Onibus> onibuses; public PontoDeOnibus(String nome, double latitude, doublelongitude) { this.nome = nome; this.latitude = latitude; this.longitude = longitude; this.onibuses = new ArrayList<Onibus>(); } // getNome(), getLatidude(), getLongitude() // getOnibuses()}
    53. 53. Código feio não éo verdadeiro vilão!
    54. 54. OO vaimuito além!
    55. 55. Que a força e a OO estejam com vocês! mauricio.aniche@caelum.com.br @mauricioaniche

    ×