Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Programação Orientada a Objetos com Java

1,188 views

Published on

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).

Published in: Software
  • Be the first to comment

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...

×