SlideShare a Scribd company logo
1 of 55
Mauricio Aniche
OO   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 = nome;
	

   }
	

   public String getNome() {
	

   	

 return this.nome;
	

   }
	

   public void setLinha(String linha) {
	

   	

 this.linha = linha;
	

   }
	

   public String getLinha() {
	

   	

 return this.linha;
	

   }
}
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(valor);
Jedis sacam
  dinheiro
 um pouco
 diferente!
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);
Agora o banco
fica com 10 centavos
    a cada saque!
Onde preciso mudar?
atm-federacao.java
Conta c = autenticaPeloCartao();
double valor = pegaValorDoTeclado();
c.saldo = c.saldo - valor;
dinheiroEmEspecie(valor);
Onde preciso mudar?
atm-federacao.java
Conta c = autenticaPeloCartao();
double valor = pegaValorDoTeclado();
c.saldo = c.saldo - valor - 0.10;
dinheiroEmEspecie(valor);
Onde preciso mudar?
atm-federacao.java
Conta c = autenticaPeloCartao();
double valor = pegaValorDoTeclado();
c.saldo = c.saldo - valor - 0.10;
dinheiroEmEspecie(valor);



                     Onde mais?
Onde preciso mudar?
atm-federacao.java
Conta 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);
Como você sabia?
Como você sabia?
  Porque estava na tela! :)
Onde mais
precisamos 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 ArrayList<Onibus> onibuses;

	

 // getters e setters para tudo
}
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”);
}
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);
}
O que acontece se
adicionarmos ônibus
     repetidos?
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);
	

 }
}
pensar onde escrever
 código, você deve....
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);
	

   	

 }
	

   }
}
main() {
	

 PontoDeOnibus ponto = new PontoDeOnibus();
	

 Onibus estrelaDaMorte = new Onibus();
	

 estrelaDaMorte.setNome(“Tatooine - Galactic City”);
	

 estrelaDaMorte.setLinha(“T-123”);

	

 ponto.adiciona(estrelaDaMorte);
}



                         muito melhor!
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(“Tatooine - Galactic City”);
	

 estrelaDaMorte.setLinha(“T-123”);

}


           Precisamos saber se um ônibus
                  passa pelo ponto!
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!”);
	

   	

 }
	

   }
}
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?
Só vai saber se está
mesmo encapsulado
quando usar a classe!
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;
	

   }
}
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 = nome;
	

   }
	

   public String getNome() {
	

   	

 return this.nome;
	

   }
	

   public void setLinha(String linha) {
	

   	

 this.linha = linha;
	

   }
	

   public String getLinha() {
	

   	

 return this.linha;
	

   }
}
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;
	

   }
}
public class PontoDeOnibus {

	

   private String nome;
	

   private double latitude;
	

   private double longitude;
	

   private ArrayList<Onibus> onibuses;

	

 // getters e setters para tudo?

}
public class PontoDeOnibus {

	

   private String nome;
	

   private double latitude;
	

   private double longitude;
	

   private ArrayList<Onibus> onibuses;

	

 public PontoDeOnibus(String nome, double latitude, double
longitude) {
	

 	

 this.nome = nome;
	

 	

 this.latitude = latitude;
	

 	

 this.longitude = longitude;
	

 	

 this.onibuses = new ArrayList<Onibus>();
	

 }
	

	

 // getNome(), getLatidude(), getLongitude()
	

 // getOnibuses()

}
Código feio não é
o verdadeiro vilão!
OO vai
muito além!
Que a força e a OO estejam
        com vocês!




      mauricio.aniche@caelum.com.br
             @mauricioaniche

More Related Content

What's hot

Grafos e Algoritimos - Dr. Julio Cesar de Araujo Menezes
Grafos e Algoritimos - Dr. Julio Cesar de Araujo MenezesGrafos e Algoritimos - Dr. Julio Cesar de Araujo Menezes
Grafos e Algoritimos - Dr. Julio Cesar de Araujo MenezesJulio Menezes
 
Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05thomasdacosta
 
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoria
8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoriaRicardo Bolanho
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Elaine Cecília Gatto
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Elaine Cecília Gatto
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Alamo Saravali
 
Manual winplot
Manual winplotManual winplot
Manual winplotFranbfk
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em PythonLuciano Ramalho
 
Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Odair Bonin Borges
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04thomasdacosta
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etcLuciano Ramalho
 

What's hot (20)

Metodos de ordenação em c#
Metodos de ordenação em c#Metodos de ordenação em c#
Metodos de ordenação em c#
 
Grafos e Algoritimos - Dr. Julio Cesar de Araujo Menezes
Grafos e Algoritimos - Dr. Julio Cesar de Araujo MenezesGrafos e Algoritimos - Dr. Julio Cesar de Araujo Menezes
Grafos e Algoritimos - Dr. Julio Cesar de Araujo Menezes
 
Design OO
Design OODesign OO
Design OO
 
Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05Algoritmos e Estrutura de Dados - Aula 05
Algoritmos e Estrutura de Dados - Aula 05
 
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoria
8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria8   ponteiros,  ponteiros e vetores e alocacao dinamica de memoria
8 ponteiros, ponteiros e vetores e alocacao dinamica de memoria
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
programação c 13
programação c 13programação c 13
programação c 13
 
Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1Vetores, Matrizes e Strings em C Parte 1
Vetores, Matrizes e Strings em C Parte 1
 
Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3Vetores, Matrizes e Strings em C Parte 3
Vetores, Matrizes e Strings em C Parte 3
 
Aprendendo objective c - parte 1
Aprendendo objective c - parte 1Aprendendo objective c - parte 1
Aprendendo objective c - parte 1
 
Manual winplot
Manual winplotManual winplot
Manual winplot
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2Oficina Android - Games com AndEngine - Dia 2
Oficina Android - Games com AndEngine - Dia 2
 
programação c 10 aula
programação c 10 aulaprogramação c 10 aula
programação c 10 aula
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
MIPS 32 BITS
MIPS 32 BITSMIPS 32 BITS
MIPS 32 BITS
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Estruturas
EstruturasEstruturas
Estruturas
 
Derivadas
DerivadasDerivadas
Derivadas
 

Viewers also liked

Какой ИТ бюджет у Газпрома?
Какой ИТ бюджет у Газпрома?Какой ИТ бюджет у Газпрома?
Какой ИТ бюджет у Газпрома?Michael Kozloff
 
Indian Premier League - Overall Perspective
Indian Premier League - Overall PerspectiveIndian Premier League - Overall Perspective
Indian Premier League - Overall PerspectiveAdesh Nahar
 
FDI Powerpoint presentation 01 2011
FDI Powerpoint presentation 01 2011FDI Powerpoint presentation 01 2011
FDI Powerpoint presentation 01 2011Dennis Wellman
 
Ifs Virtual Map Solution Overview
Ifs Virtual Map Solution OverviewIfs Virtual Map Solution Overview
Ifs Virtual Map Solution OverviewIFS
 
Telesperience customer-experience-benchmark-2013 asi8-d3sd
Telesperience customer-experience-benchmark-2013 asi8-d3sdTelesperience customer-experience-benchmark-2013 asi8-d3sd
Telesperience customer-experience-benchmark-2013 asi8-d3sdLithium
 
Lenmana Island Travel Special
Lenmana Island Travel SpecialLenmana Island Travel Special
Lenmana Island Travel SpecialGeminiasp
 
Statistical Report Of The 2008 Iblce Examination
Statistical Report Of The 2008 Iblce ExaminationStatistical Report Of The 2008 Iblce Examination
Statistical Report Of The 2008 Iblce ExaminationBiblioteca Virtual
 
War Crimes In Congo
War Crimes In CongoWar Crimes In Congo
War Crimes In Congoleresh
 
Rule Evaluation on a Motorola SIMD
Rule Evaluation on a Motorola SIMDRule Evaluation on a Motorola SIMD
Rule Evaluation on a Motorola SIMDMeltin Bell
 
Mountain Birdwatch Phase 2: Monitoring High-elevation birds in the Atlantic N...
Mountain Birdwatch Phase 2: Monitoring High-elevation birds in the Atlantic N...Mountain Birdwatch Phase 2: Monitoring High-elevation birds in the Atlantic N...
Mountain Birdwatch Phase 2: Monitoring High-elevation birds in the Atlantic N...Julie Hart
 
Hcm 8.9 Setup Manager
Hcm 8.9 Setup ManagerHcm 8.9 Setup Manager
Hcm 8.9 Setup Managerguestb6b62d22
 
Virtual humanitarian cluster rev 2
Virtual humanitarian cluster rev 2Virtual humanitarian cluster rev 2
Virtual humanitarian cluster rev 2Jeffrey Kleinpeter
 
Birds and Butterflies of the Alpine: Pipits, Arctics, and Fritillaries on Mou...
Birds and Butterflies of the Alpine: Pipits, Arctics, and Fritillaries on Mou...Birds and Butterflies of the Alpine: Pipits, Arctics, and Fritillaries on Mou...
Birds and Butterflies of the Alpine: Pipits, Arctics, and Fritillaries on Mou...Julie Hart
 
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)Maurício Aniche
 
Taxi Call Center Whitepaper (rus)
Taxi Call Center Whitepaper (rus)Taxi Call Center Whitepaper (rus)
Taxi Call Center Whitepaper (rus)Michael Bochkaryov
 
Complementary Feeding Practices To Children During
Complementary Feeding Practices To Children DuringComplementary Feeding Practices To Children During
Complementary Feeding Practices To Children DuringBiblioteca Virtual
 

Viewers also liked (20)

Какой ИТ бюджет у Газпрома?
Какой ИТ бюджет у Газпрома?Какой ИТ бюджет у Газпрома?
Какой ИТ бюджет у Газпрома?
 
Indian Premier League - Overall Perspective
Indian Premier League - Overall PerspectiveIndian Premier League - Overall Perspective
Indian Premier League - Overall Perspective
 
FDI Powerpoint presentation 01 2011
FDI Powerpoint presentation 01 2011FDI Powerpoint presentation 01 2011
FDI Powerpoint presentation 01 2011
 
Ifs Virtual Map Solution Overview
Ifs Virtual Map Solution OverviewIfs Virtual Map Solution Overview
Ifs Virtual Map Solution Overview
 
Telesperience customer-experience-benchmark-2013 asi8-d3sd
Telesperience customer-experience-benchmark-2013 asi8-d3sdTelesperience customer-experience-benchmark-2013 asi8-d3sd
Telesperience customer-experience-benchmark-2013 asi8-d3sd
 
Cim 20070301 mar_2007
Cim 20070301 mar_2007Cim 20070301 mar_2007
Cim 20070301 mar_2007
 
Lenmana Island Travel Special
Lenmana Island Travel SpecialLenmana Island Travel Special
Lenmana Island Travel Special
 
Statistical Report Of The 2008 Iblce Examination
Statistical Report Of The 2008 Iblce ExaminationStatistical Report Of The 2008 Iblce Examination
Statistical Report Of The 2008 Iblce Examination
 
War Crimes In Congo
War Crimes In CongoWar Crimes In Congo
War Crimes In Congo
 
Rule Evaluation on a Motorola SIMD
Rule Evaluation on a Motorola SIMDRule Evaluation on a Motorola SIMD
Rule Evaluation on a Motorola SIMD
 
Mountain Birdwatch Phase 2: Monitoring High-elevation birds in the Atlantic N...
Mountain Birdwatch Phase 2: Monitoring High-elevation birds in the Atlantic N...Mountain Birdwatch Phase 2: Monitoring High-elevation birds in the Atlantic N...
Mountain Birdwatch Phase 2: Monitoring High-elevation birds in the Atlantic N...
 
Hcm 8.9 Setup Manager
Hcm 8.9 Setup ManagerHcm 8.9 Setup Manager
Hcm 8.9 Setup Manager
 
Virtual humanitarian cluster rev 2
Virtual humanitarian cluster rev 2Virtual humanitarian cluster rev 2
Virtual humanitarian cluster rev 2
 
Europe 2020
Europe 2020Europe 2020
Europe 2020
 
Birds and Butterflies of the Alpine: Pipits, Arctics, and Fritillaries on Mou...
Birds and Butterflies of the Alpine: Pipits, Arctics, and Fritillaries on Mou...Birds and Butterflies of the Alpine: Pipits, Arctics, and Fritillaries on Mou...
Birds and Butterflies of the Alpine: Pipits, Arctics, and Fritillaries on Mou...
 
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
 
dada
dadadada
dada
 
Taxi Call Center Whitepaper (rus)
Taxi Call Center Whitepaper (rus)Taxi Call Center Whitepaper (rus)
Taxi Call Center Whitepaper (rus)
 
Complementary Feeding Practices To Children During
Complementary Feeding Practices To Children DuringComplementary Feeding Practices To Children During
Complementary Feeding Practices To Children During
 
Ppt caperucita
Ppt caperucitaPpt caperucita
Ppt caperucita
 

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

Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010rafaelferreira
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando CVinícius Hax
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaEduardo Bregaida
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Willian Magalhães
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoPaulo Morgado
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OracleAndré Reis
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003elliando dias
 
Exemplos registros e funções
Exemplos registros e funçõesExemplos registros e funções
Exemplos registros e funçõesCarla Lee
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 

Similar to Conexão Java 2012 - Orientação a Objetos das Galáxias (20)

Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010Palestra Mocks - AgileBrazil 2010
Palestra Mocks - AgileBrazil 2010
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
 
Refatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completaRefatoração de código com Capitão Nascimento versão completa
Refatoração de código com Capitão Nascimento versão completa
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
Sobrecarga operadores
Sobrecarga operadoresSobrecarga operadores
Sobrecarga operadores
 
As Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPontoAs Novidades Do C# 4.0 - NetPonto
As Novidades Do C# 4.0 - NetPonto
 
Javascript Ilegível
Javascript IlegívelJavascript Ilegível
Javascript Ilegível
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e Oracle
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003
 
Exemplos registros e funções
Exemplos registros e funçõesExemplos registros e funções
Exemplos registros e funções
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Falando "Postgrês"
Falando "Postgrês"Falando "Postgrês"
Falando "Postgrês"
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Apostila aed
Apostila aedApostila aed
Apostila aed
 

More from Maurício Aniche

Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)Maurício Aniche
 
Tracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to PracticeTracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to PracticeMaurício Aniche
 
Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019Maurício Aniche
 
Software Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and StroopwafelsSoftware Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and StroopwafelsMaurício Aniche
 
Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)Maurício Aniche
 
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017Maurício Aniche
 
Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016Maurício Aniche
 
A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016Maurício Aniche
 
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...Maurício Aniche
 
DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?Maurício Aniche
 
Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Maurício Aniche
 
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações WebProposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações WebMaurício Aniche
 
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...Maurício Aniche
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Maurício Aniche
 
O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?Maurício Aniche
 
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013Maurício Aniche
 
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...Maurício Aniche
 
Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Maurício Aniche
 
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary StudyMTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary StudyMaurício Aniche
 

More from Maurício Aniche (20)

Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)Can ML help software developers? (TEQnation 2022)
Can ML help software developers? (TEQnation 2022)
 
Tracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to PracticeTracing Back Log Data to its Log Statement: From Research to Practice
Tracing Back Log Data to its Log Statement: From Research to Practice
 
Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019Pragmatic software testing education - SIGCSE 2019
Pragmatic software testing education - SIGCSE 2019
 
Test Automation Day 2018
Test Automation Day 2018Test Automation Day 2018
Test Automation Day 2018
 
Software Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and StroopwafelsSoftware Testing with Caipirinhas and Stroopwafels
Software Testing with Caipirinhas and Stroopwafels
 
Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)Code smells in MVC applications (Dutch Spring meetup)
Code smells in MVC applications (Dutch Spring meetup)
 
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
A Collaborative Approach to Teach Software Architecture - SIGCSE 2017
 
Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016Code quality in MVC systems - BENEVOL 2016
Code quality in MVC systems - BENEVOL 2016
 
A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016A Validated Set of Smells for MVC Architectures - ICSME 2016
A Validated Set of Smells for MVC Architectures - ICSME 2016
 
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
SATT: Tailoring Code Metric Thresholds for Different Software Architectures (...
 
DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?DNAD 2015 - Métricas de código, pra que te quero?
DNAD 2015 - Métricas de código, pra que te quero?
 
Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?Como eu aprendi que testar software é importante?
Como eu aprendi que testar software é importante?
 
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações WebProposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
Proposta: Métricas e Heurísticas para Detecção de Problemas em Aplicações Web
 
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
Efeitos da Prática de Revisão de Código na Caelum: Um Estudo Preliminar em Du...
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?O que estamos temos feito com mineração de repositório de código no IME?
O que estamos temos feito com mineração de repositório de código no IME?
 
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
MetricMiner: Supporting Researchers in Mining Software Repositories - SCAM 2013
 
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
Does the Act of Refactoring Really Make Code Simpler? A Preliminary Study - W...
 
Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011
 
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary StudyMTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
MTD2014 - Are The Methods In Your DAOs in the Right Place? A Preliminary Study
 

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

  • 1. Mauricio Aniche OO mauricio.aniche@caelum.com.br @mauricioaniche
  • 2. OO
  • 3. public class Onibus { String nome; String linha; }
  • 4. o quê está faltando?
  • 5. public class Onibus { private String nome; private String linha; }
  • 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. esconder os atributos, você deve....
  • 9. De volta a programação procedural...
  • 10. Imagine a implementação de um Caixa Eletrônico...
  • 11. Conta c = autenticaPeloCartao();
  • 12. Conta c = autenticaPeloCartao(); double valor = pegaValorDoTeclado();
  • 13. Conta c = autenticaPeloCartao(); double valor = pegaValorDoTeclado(); c.saldo = c.saldo - valor;
  • 14. Conta c = autenticaPeloCartao(); double valor = pegaValorDoTeclado(); c.saldo = c.saldo - valor; dinheiroEmEspecie(valor);
  • 15. Jedis sacam dinheiro um pouco diferente!
  • 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. Agora o banco fica com 10 centavos a cada saque!
  • 18. Onde preciso mudar? atm-federacao.java Conta c = autenticaPeloCartao(); double valor = pegaValorDoTeclado(); c.saldo = c.saldo - valor; dinheiroEmEspecie(valor);
  • 19. Onde preciso mudar? atm-federacao.java Conta c = autenticaPeloCartao(); double valor = pegaValorDoTeclado(); c.saldo = c.saldo - valor - 0.10; dinheiroEmEspecie(valor);
  • 20. Onde preciso mudar? atm-federacao.java Conta c = autenticaPeloCartao(); double valor = pegaValorDoTeclado(); c.saldo = c.saldo - valor - 0.10; dinheiroEmEspecie(valor); Onde mais?
  • 21. Onde preciso mudar? atm-federacao.java Conta 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);
  • 23. Como você sabia? Porque estava na tela! :)
  • 25. acho sua ideia de reescrever sistemas perturbadora...
  • 26. Precisamos diminuir os pontos de mudança!
  • 27. public class PontoDeOnibus { private String nome; private double latitude; private double longitude; private ArrayList<Onibus> onibuses; // getters e setters para tudo }
  • 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. 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. O que acontece se adicionarmos ônibus repetidos?
  • 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. pensar onde escrever código, você deve....
  • 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. main() { PontoDeOnibus ponto = new PontoDeOnibus(); Onibus estrelaDaMorte = new Onibus(); estrelaDaMorte.setNome(“Tatooine - Galactic City”); estrelaDaMorte.setLinha(“T-123”); ponto.adiciona(estrelaDaMorte); } muito melhor!
  • 38. ao não saber COMO o método faz sua tarefa, encapsulado o método está!
  • 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. 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. 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. Só vai saber se está mesmo encapsulado quando usar a classe!
  • 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. Outro exemplo! OnibusDao dao = new OnibusDao(); dao.adiciona(onibus); O QUÊ? COMO?
  • 46. Não “saber” as coisas é bom!
  • 48. classes com getters e setters pra tudo, encapsulado não está....
  • 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. 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. public class PontoDeOnibus { private String nome; private double latitude; private double longitude; private ArrayList<Onibus> onibuses; // getters e setters para tudo? }
  • 52. public class PontoDeOnibus { private String nome; private double latitude; private double longitude; private ArrayList<Onibus> onibuses; public PontoDeOnibus(String nome, double latitude, double longitude) { this.nome = nome; this.latitude = latitude; this.longitude = longitude; this.onibuses = new ArrayList<Onibus>(); } // getNome(), getLatidude(), getLongitude() // getOnibuses() }
  • 53. Código feio não é o verdadeiro vilão!
  • 55. Que a força e a OO estejam com vocês! mauricio.aniche@caelum.com.br @mauricioaniche

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n