Programação Orientada a Objetos com Java

857 visualizações

Publicada em

Segunda parte do curso introdutório ao Java, onde são apresentados conceitos de objetos, classes, atributos, métodos, coesão, acoplamento, interfaces, elementos estáticos e abstratos, exceções, tratamento excepcional, estruturas básicas como lista (List), conjunto (Set) e mapa (Map).

Publicada em: Software
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
857
No SlideShare
0
A partir de incorporações
0
Número de incorporações
7
Ações
Compartilhamentos
0
Downloads
61
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Programação Orientada a Objetos com Java

  1. 1. Programação Orientada a Objetos com Java 19/09/2014
  2. 2. Direitos Autorais Você está autorizado e incentivado a distribuir este material. Copie, compartilhe e modifique, apenas cite a fonte.
  3. 3. Direitos Autorais Luiz Ricardo luizricardo.org facebook.com/StateOfTheArtBlog
  4. 4. Objetos • Estado • Atributos e Características • Comportamento • Ações
  5. 5. Classe • Tipo base para objetos, um “Molde” class Classe { } objeto = new Classe()
  6. 6. Classe class Carro { } Carro meuCarro = new Carro();
  7. 7. Estrutura da Classe Classe Atributos Métodos
  8. 8. Atributos class Carro { String marca; String cor; int ano; int velocidade = 0; }
  9. 9. Acesso a Atributos carro.velocidade = 1; int velocidade = carro.velocidade;
  10. 10. Métodos class Carro { void acelerar() { velocidade++; } }
  11. 11. Parâmetros class Carro { void quadrado(double numero){ return numero * numero; } }
  12. 12. Parâmetros class Carro { int velocidade = 0; void mudarVelocidade(int velocidade){ ??? } }
  13. 13. Parâmetros class Carro { int velocidade = 0; void mudarVelocidade(int velocidade){ this.velocidade = velocidade; } }
  14. 14. Retorno class Carro { int lerVelocidade() { return velocidade; } }
  15. 15. Execução de Métodos carro.aumentarVelocidade(2); int v = carro.lerVelocidade();
  16. 16. Exercícios 1. Implemente uma classe chamada Cliente que tenha um código, nome, idade, CPF e e-mail. 2. Implemente um método que: – Receba dois clientes; e – Retorne os seus respectivos e-mails separados por vírgula.
  17. 17. Sobrecarga class Carro { void aumentarVelocidade(int quantidade) { this.velocidade += quantidade; } void aumentarVelocidade() { this.velocidade++; } }
  18. 18. Sobrecarga carro.aumentarVelocidade(10); carro.aumentarVelocidade();
  19. 19. Exercícios 3. Continue do exercício 2, mas agora implemente um método que receba três clientes e retorna seus e-mails. 4. Faça o mesmo para um array de clientes
  20. 20. Encapsulamento Você não quer outras pessoas fuxicando nos atributos da sua classe, não é?
  21. 21. Encapsulamento public class Carro { int velocidade = 0; } meuCarro.velocidade = 1000000000; meuCarro.velocidade = -7;
  22. 22. Métodos de Acesso • Padrão Java Bean – Getters, para recuperar valores – Setters, para definir ou alterar valores
  23. 23. Getter e Setter public class Carro { int velocidade = 0; void setVelocidade(int velocidade) { this.velocidade = velocidade; } int getVelocidade() { return velocidade; } }
  24. 24. Modificadores de Acesso public class Carro { private int velocidade = 0; public void setVelocidade(int velocidade) { this.velocidade = velocidade; } public int getVelocidade() { return velocidade; } }
  25. 25. Modificadores de Acesso public class Carro { private int velocidade = 0; public void setVelocidade(int velocidade) { if (velocidade >= 0 && velocidade < 160) this.velocidade = velocidade; } }
  26. 26. Acoplamento É a interdependência entre as classes
  27. 27. Coesão Envolve a divisão de responsabilidades entre as classes
  28. 28. Acoplamento e Coesão • Acoplamento forte, baixa coesão – Ruim • Acoplamento fraco, alta coesão – Bom
  29. 29. Exercícios 5. Altere a classe Cliente e as demais classes dos exercícios anteriores aplicando os conceitos de encapsulamento, acoplamento e coesão. Dica: crie uma outra classe MailUtil com os respectivos métodos. 6. Implemente uma classe Bicicleta, crie duas instância de cores e marcas diferentes, faça elas correrem a 20 e 30km/hora.
  30. 30. Instanciação Carro carro = new Carro();
  31. 31. Construtores public class Carro { private int velocidade; public Carro(int velocidadeInicial) { this.velocidade = velocidadeInicial; } }
  32. 32. Instanciação Carro carro = new Carro(10);
  33. 33. Exercício 7 Modifique o Cliente criado anteriormente de forma que os valores dos atributos sejam definidos através de um construtor.
  34. 34. Atributos estáticos public class Carro { private String marca; public Carro(String marca) { this.marca = marca; } public void imprimeMarca() { System.out.println(marca); } } Atributo “comum” de instância
  35. 35. Atributos estáticos Qual o resultado? Carro gol = new Carro("Gol"); Carro palio = new Carro("Palio"); gol.imprimeMarca(); palio.imprimeMarca();
  36. 36. Atributos estáticos public class Carro { private static String marca; public Carro(String marca) { Carro.marca = marca; } public void imprimeMarca() { System.out.println(marca); } } Atributo estático
  37. 37. Atributos estáticos Qual o resultado? Carro gol = new Carro("Gol"); Carro palio = new Carro("Palio"); gol.imprimeMarca(); palio.imprimeMarca();
  38. 38. Métodos estáticos public class ConexaoComBanco { public static Conexao abrirConexao() { return new Conexao( servidor, usuario, senha); } }
  39. 39. Exercícios 8. Crie um método estático que calcule a raiz quadrada de um número. Utilize o método estático sqrt da classe Math. 9. Altera a classe MailUtil do exercício 5 para que os métodos sejam estáticos 10. Crie uma classe que conte o número de instâncias criadas dela mesma.
  40. 40. Herança Variação Veiculo Carro Motocicleta
  41. 41. Herança Especialização Carro CarroDePasseio CarroDeCorrida
  42. 42. Herança class Veiculo { private int velocidade = 0; void acelerar() { velocidade++; } void frear() { velocidade--; } } Superclasse
  43. 43. Herança class Carro extends Veiculo { private boolean vidrosAbertos; void abaixarVidros() { vidrosAbertos = true; } void levantarVidros() { vidrosAbertos = false; } } Subclasse (1)
  44. 44. Herança class Motocicleta extends Veiculo { boolean cavaleteAbaixado = false; void apoiarCavelete() { cavaleteAbaixado = true; } } Subclasse (2)
  45. 45. Herança Carro é um Veículo Carro c = new Carro(); c.abaixarVidros(); c.acelerar();
  46. 46. Herança Motocicleta é um Veículo Motocicleta m = new Motocicleta(); m.acelerar(); m.frear(); m.apoiarCavalete();
  47. 47. Herança class Veiculo { public int velocidade; protected int velocidade; private int velocidade; } class Carro extends Veiculo { void acelerar() { velocidade++; } } Visibilidade nas Subclasses
  48. 48. Herança class Carro{ protected int velocidade; public void acelerar() { velocidade++; } } class CarroDeCorrida extends Veiculo { @Override public void acelerar() { velocidade += 10; } } Sobrescrita de Métodos
  49. 49. Herança Executando um Método Sobrescrito class Carro{ private int velocidade; public void acelerar() { velocidade++; } } class CarroDeCorrida extends Veiculo { @Override public void acelerar() { super.acelerar(); } }
  50. 50. Herança Vários Níveis de Herança Veiculo Carro Gol
  51. 51. Herança Vários Níveis de Herança class Veiculo { } class Carro extends Veiculo { } class Gol extends Carro { }
  52. 52. Herança class Carro extends Veiculo, MeioDeTransporte { } Herança Múltipla Não Existe
  53. 53. Exercício 11 • Crie uma hierarquia de pessoas. • A superclasse deve chamar-se Pessoa. • Crie algumas subclasses para diferentes tipos de pessoas (PF, PJ?). • Defina atributos e comportamentos gerais e especializados para cada tipo de pessoa.
  54. 54. Classes e Métodos Abstratos abstract class Veiculo { abstract void acelerar(); } class Carro extends Veiculo { private int velocidade; void acelerar() { velocidade++; } }
  55. 55. Exercício 12 • Altere a classe Pessoa do exercício 11 de forma que ela seja abstrata.
  56. 56. Classes e Métodos Abstratos abstract class Ordenacao { abstract int comparar( Object a, Object b); void ordenar(Object[] v) { //bubble sort } } Strategy Pattern
  57. 57. Exercício 13 • Use o método de ordenação Bolha e implemente uma classe concreta usando o Strategy Pattern, conforme proposto no slide anterior. for (int i = 0; i < v.length; i++) { for (int x = 1; x < v.length - i; x++) { if (comparar(v[x - 1], v[x]) > 0) { Object aux = v[x - 1]; v[x - 1] = v[x]; v[x] = aux; } } }
  58. 58. Herança? Tem algo podre no reino da Dinamarca
  59. 59. Herança? Ave void voar() Beija-flor Pardal
  60. 60. Herança? Ave Beija-flor Pardal void voar() Avestruz ???
  61. 61. Herança? ???
  62. 62. Interfaces Ao resgate! • Contrato de comportamento • Todos os métodos abstratos • É uma classe 100% abstrata
  63. 63. Interfaces interface Veiculo { void acelerar(); void frear(); } Declarando
  64. 64. Interfaces interface Veiculo { void acelerar(); void frear(); } public Carro implements Veiculo { public void acelerar() { } public void frear() { } } Implementando
  65. 65. Interfaces interface Voador { void voar(); } interface Corredor { void correr(); } interface Falador { void falar(); }
  66. 66. Interfaces class Papagaio implements Voador, Falador { public void voar() { } public void falar() { System.out.printlmn("Loro!"); } } class Cachorro implements Corredor, Falador { public void correr() { } public void falar() { System.out.println("Au! Au!"); } } Implementando várias Interfaces
  67. 67. Exercício 14 Trabalhando com Abstração • Crie a interface ContaCliente, com métodos para consultar o saldo, debitar e creditar dinheiro. • Implemente um método transferencia que receba duas contas e um valor e execute a transação necessária.
  68. 68. Polimorfismo • A capacidade de um mesmo objeto de se apresentar de várias formas Papagaio papagaio = new Papagaio(); Voador bichoQueVoa = papagaio; Falador bichoQueFala = new Papagaio();
  69. 69. Polimorfismo • Um tipo mais específico sempre pode ser atribuído a uma variável de tipo mais genérico, nunca o contrário. Voador bichoQueVoa = papagaio; Papagaio papagaio = bichoQueVoa;
  70. 70. Polimorfismo Cast • Força uma “conversão” • Não afeta o objeto • Pode resultar em erro se não for do mesmo tipo Papagaio papagaio = (Papagaio) bichoQueVoa;
  71. 71. Polimorfismo Verificando o Tipo if (bichoQueVoa instanceof Papagaio) { System.out.println("Sim, é um papagaio!"); } else { System.out.println("Não é um papagaio!"); }
  72. 72. Exercício 15 • Usando o exemplo de polimorfismo com animais, Implemente um método que receba um Voador e descubra se ele é um Papagaio. • Execute o método duas vezes, uma passando uma instância de Papagaio e depois outra subclasse de Voador.
  73. 73. Exceções • Classes que representam erros de execução • Criadas pelo Java ou manualmente • Objeto contém informações do erro – Descrição, Mensagem, Local
  74. 74. Exceções Lançando uma Exceção throw new Exception("Meu próprio erro")
  75. 75. Exceções Novas Exceções class ErroPersonalizadoException extends Exception { }
  76. 76. Exceções Hierarquia de Classes Throwable Error Exception RuntimeException SQLException IOException ArrayIndexOutOfBoundsException NumberFormatException NullPointerException Verificadas e Não Verificadas
  77. 77. Exceções • Exception Categorias – Erros esperados pelo programa • RuntimeException – Erros inesperados do programa • Error – Erros anormais, totalmente inesperados
  78. 78. Exceções Tratar uma Exceção void verificarNome(String nome) throws Exception { if (nome == null) { throw new Exception("Nome não preenchido!"); } } void meuMetodo() { try { verificarNome(null); } catch(Exception e) { e.printStackTrace(); } }
  79. 79. Exceções Repassar uma Exceção void verificarNome(String nome) throws Exception { if (nome == null) { throw new Exception("Nome não preenchido!"); } } void meuMetodo() throws Exception { verificarNome(null); }
  80. 80. Exceções Ignorar uma Exceção Não Verificada void verificarNome(String nome) { if (nome == null) { throw new RuntimeException( "Nome não preenchido!"); } } void meuMetodo() { verificarNome(null); }
  81. 81. Exceções Exceções “Inesperadas” • Por que ocorrem? • Causas frequentes: – Casos não previstos – Falta de atenção ao codificar – Suposições “ingênuas” sobre inputs
  82. 82. Exceções Exceções “Inesperadas” void criarVeiculo(char tipo) { Veiculo veiculo = null; if (tipo == 'C') { veiculo = new Carro(); } else (tipo == 'M') { veiculo = new Motocicleta(); } veiculo.acelerar(); } !?
  83. 83. Exercício 16 • Crie duas novas exceções: – ValidacaoException (verificada) – ParametroInvalidoException (não verificada) • Implemente um método validarCPF que receba uma String e lance a exceção verificada no caso dela não ter 11 caracteres e lance a exceção não-verificada se o parâmetro for nulo • Implemente outro método que chame a validação e trate apenas a exceção verificada
  84. 84. Coleções Listas List<String> minhaLista = new ArrayList<String>(); minhaLista.add("Arroz"); minhaLista.add("Feijão"); minhaLista.add("Farinha"); System.out.println( minhaLista.get(0) );
  85. 85. Coleções Listas List minhaLista = new ArrayList(); minhaLista.add("Arroz"); minhaLista.add("Feijão"); minhaLista.add("Farinha"); System.out.println( minhaLista.get(0) );
  86. 86. Coleções Conjuntos Set<Integer> meuConjunto = new HashSet<Integer>(); meuConjunto.add(1); meuConjunto.add(2); meuConjunto.add(3); meuConjunto.add(1); System.out.println(meuConjunto);
  87. 87. Coleções Mapas Map<Integer, String> alunosPorMatricula = new HashMap<Integer, String>(); alunosPorMatricula.put(1, "João"); alunosPorMatricula.put(2, "Maria"); alunosPorMatricula.put(3, "José"); System.out.println( alunosPorMatricula.get(1) );
  88. 88. Exercícios 17. Implemente uma classe Carrinho, contendo um carrinho de compras. Use uma lista e tenha métodos para adicionar itens no carrinho e contabilizar o total. 18. Implemente uma classe que receba dados estatísticos contendo a idade de N pessoas e totalize as idades por faixas etárias (0 a 10 anos, 11 a 20 anos, etc.). A classe deve ter um método para recuperar o total de pessoas de uma determinada faixa etária.
  89. 89. Dúvidas? Não tenha medo...

×