Introdução à análise orientada a objetos parte 2

1.488 visualizações

Publicada em

0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

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

Nenhuma nota no slide
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à Análise Orientada a Objetos Parte 2
  • Introdução à análise orientada a objetos parte 2

    1. 1. Introdução à Análise Orientada a Objetos Prof. Ariovaldo Dias de Oliveira Parte 2
    2. 2. Solução da Atividade 1 <ul><li>class Funcionário { </li></ul><ul><li>String nome; </li></ul><ul><li>String departamento; </li></ul><ul><li>private double salário; </li></ul><ul><li>String admissão; </li></ul><ul><li>String rg; </li></ul><ul><li>boolean ativo; </li></ul>Segue... Atributos
    3. 3. Funcionário (String nome, String departamento, double salário, String admissão, String rg) { this.nome = nome; this.departamento = departamento; this.salário = salário; this.admissão = admissão; this.rg = rg; ativo = true; } Construtor Segue... O construtor da classe é um bloco declarado com o mesmo nome da classe. Quando não se declara nenhum construtor, um construtor default é ativado. Ele não recebe nenhum argumento e o corpo dele é vazio. A partir do momento que se declara um construtor, o construtor default não é mais fornecido.
    4. 4. void bonifica(double valor) { salário = salário + valor; } void demite(){ ativo = false; } double getSalário() { return salário; } } Métodos Segue...
    5. 5. Programa para testar a classe Funcionário <ul><li>class TestaFuncionário { </li></ul><ul><li>public static void main (String [ ] args) { </li></ul><ul><li>Funcionário f = new Funcionário (&quot;João&quot;, &quot;RH&quot;, 123.45, &quot;23/03/2011&quot;, &quot;123456-x&quot;); </li></ul><ul><li> System.out.println(&quot;nome...............&quot; + f.nome); </li></ul><ul><li> System.out.println(&quot;departamento...&quot; +f.departamento); </li></ul><ul><li> System.out.println(&quot;salário............ &quot; + f.getSalário()); </li></ul><ul><li> System.out.println(&quot;admissão.........&quot; +f.admissão); </li></ul><ul><li> System.out.println(&quot;RG..................&quot; + f.rg); </li></ul><ul><li> System.out.println(&quot;ativo................&quot; + f.ativo); </li></ul><ul><li> f.bonifica(100); </li></ul><ul><li> System.out.println(&quot;novo salário.....&quot; + f.getSalário()); </li></ul><ul><li> f.demite(); </li></ul><ul><li> System.out.println(&quot;ativo................&quot; + f.ativo); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
    6. 6. UML da Atividade 1 Funcionário +nome: String +departamento: String -salário: double +admissão: String +rg: String +ativo: boolean +Funcionário (nome: String, departamento: String, salário: double, admissão: String, rg: String): +bonifica( valor: double ): +demite ( ): +getSalário ( ): double
    7. 7. Herança <ul><li>A herança é um relacionamento pelo qual uma classe, chamada de subclasse, herda todos comportamentos e estados possíveis de outra classe, chamada de superclasse ou classe base </li></ul>
    8. 8. Exemplo de Herança <ul><li>import java.util.Scanner; </li></ul><ul><li>class Funcionário { </li></ul><ul><li>String nome; </li></ul><ul><li>private double salário; </li></ul><ul><li>double getSalário() { </li></ul><ul><li>return salário; </li></ul><ul><li>} </li></ul><ul><li>void setSalário(double salário) { </li></ul><ul><li>this.salário = salário; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Segue...
    9. 9. class Gerente extends Funcionário { int senha; boolean autentica(int senha) { if (this.senha == senha) { return true; } else { return false; } } } Em todo momento que criarmos um objeto do tipo Gerente , este objeto também possuirá os atributos e métodos de Funcionário Segue...
    10. 10. class TestaGerente { public static void main (String [ ] args) { Gerente gestor = new Gerente ( ); gestor.nome = &quot;João&quot;; gestor.setSalário(8000.0); Scanner input = new Scanner(System.in); System.out.println (&quot;Informe a senha para criar esse gerente: &quot;); int senha = input.nextInt(); gestor.senha = senha; System.out.println (&quot;Informe a senha para acessar esse gerente: &quot;); int senhaAcesso = input.nextInt(); boolean permite = gestor.autentica(senhaAcesso); if (permite) { System.out.println(&quot;Permitido&quot;); } else { System.out.println(&quot;Negado&quot;); } } }
    11. 11. Para dar aumento ao Gerente, não podemos comandar (na subclasse Gerente) a ação Salário = Salário + valor , pois esta subclasse não tem acesso ao atributo salário, que é private na superclasse Funcionário: class Gerente extends Funcionário { int senha; boolean autentica(int senha) { if (this.senha == senha) { return true; } else { return false; } } void daAumento (double valor) { salário = salário + valor; } } Vai dar erro de compilação!
    12. 12. Para não dar erro, mudamos o atributo de salário (em Funcionário) de private para protected import java.util.Scanner; class Funcionário { String nome; protected double salário; double getSalário() { return salário; } void setSalário(double salário) { this.salário = salário; } }
    13. 13. Para discussão: <ul><li>O que aconteceria se comandássemos no programa TestaGerente um acesso direto ao atributo salário do gerente, como na codificação abaixo? </li></ul>..... boolean permite = gestor.autentica(senhaAcesso); if (permite) { System.out.println(&quot;Permitido&quot;); } else { System.out.println(&quot;Negado&quot;); } System.out.println(gestor.salário);
    14. 14. Funcionário +bonifica (valor: double ): +demite ( ): +getSalário ( ): double Gerente +nome: String +departamento: String # salário: double +admissão: String +rg: String +ativo: boolean +senha: int +autentica (senha: int): boolean
    15. 15. Sobrescrita (ou Reescrita) de Método <ul><li>Ocorre quando uma sobclasse define um método idêntico(*) a um método de sua superclasse </li></ul><ul><li>Utilizado quando o comportamento da superclasse não corresponde ao desejado para o método da subclasse </li></ul><ul><li>(*) Métodos idênticos possuem o mesmo nome, tipo de retorno e lista de parâmetros </li></ul>
    16. 16. Exemplo de Sobrescrita <ul><li>class Produto { </li></ul><ul><li>int cod; </li></ul><ul><li>String desc; </li></ul><ul><li>protected double preço; </li></ul><ul><li>void setPreço(double preço) { </li></ul><ul><li>this.preço = preço; </li></ul><ul><li>} </li></ul><ul><li>void aumenta (double valor){ </li></ul><ul><li>preço = preço + valor; </li></ul><ul><li>} </li></ul><ul><li>double getPreço() { </li></ul><ul><li>return preço; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Segue...
    17. 17. <ul><li>class Importado extends Produto { </li></ul><ul><li>int codImportação; </li></ul><ul><li> </li></ul><ul><li>void setPreço(double preço) { </li></ul><ul><li>this.preço = preço * 1.7; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
    18. 18. class TestaProduto { public static void main (String [ ] args) { Produto prod1= new Produto ( ); prod1.cod = 123; prod1.desc = &quot;Borracha&quot;; prod1.setPreço(2.5); prod1.aumenta(0.5); System.out.println(prod1.desc + &quot; preço = &quot; + prod1.getPreço()); Importado prod2 = new Importado(); prod2.cod = 456; prod2.desc = &quot;Lápis&quot;; prod2.codImportação = 12345; prod2.setPreço(3); prod2.aumenta(1); System.out.println(prod2.desc + &quot; preço = &quot; + prod2.getPreço()); } } Sem o Método setPreço na classe Importado , o valor exibido para o produto 2 seria 4 e não 6.1 Segue...
    19. 19. Sobrecarga <ul><li>Sobrecarregar um método ou um construtor significa prover mais de uma versão desse mesmo Método (ou Construtor). </li></ul><ul><li>As versões devem, necessariamente, possuir </li></ul><ul><li>listas de parâmetros diferentes, seja no tipo </li></ul><ul><li>ou no número desses parâmetros (o tipo do </li></ul><ul><li>valor de retorno pode ser igual). </li></ul>
    20. 20. Exemplo de Sobrecarga de um Construtor <ul><li>class Produto { </li></ul><ul><li>int cod; </li></ul><ul><li>String desc; </li></ul><ul><li> </li></ul><ul><li>Produto (String desc, int cod) { </li></ul><ul><li>this.cod = cod; </li></ul><ul><li>this.desc = desc; </li></ul><ul><li>} </li></ul><ul><li>Produto (int cod, String desc) { </li></ul><ul><li>this.cod = cod; </li></ul><ul><li>this.desc = desc; </li></ul><ul><li>} </li></ul><ul><li>Produto (int cod) { </li></ul><ul><li>this.cod = cod; </li></ul><ul><li>desc = &quot;descrição padrão&quot;; </li></ul><ul><li>} </li></ul><ul><li>Produto (String desc) { </li></ul><ul><li>this.cod = 999; </li></ul><ul><li>this.desc = desc; </li></ul><ul><li>} </li></ul><ul><li>Produto () { </li></ul><ul><li>this.cod = 999; </li></ul><ul><li>this.desc = &quot;descrição padrão&quot;; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Segue...
    21. 21. class TestaSobrecarga { public static void main (String [ ] args) { Produto prod1= new Produto (&quot;produto 1&quot;, 1111 ); System.out.println(prod1.desc + &quot; &quot; + prod1.cod); Produto prod2= new Produto ( 2222, &quot;produto 2&quot;); System.out.println(prod2.desc + &quot; &quot; + prod2.cod); Produto prod3= new Produto (3333 ); System.out.println(prod3.desc + &quot; &quot; + prod3.cod); Produto prod4= new Produto (&quot;produto 4&quot;); System.out.println(prod4.desc + &quot; &quot; + prod4.cod); Produto prod5= new Produto ( ); System.out.println(prod5.desc + &quot; &quot; + prod5.cod); } }
    22. 22. Exemplo de Sobrecarga de um Método <ul><li>class Produto { </li></ul><ul><li>int cod; </li></ul><ul><li>String desc; </li></ul><ul><li> </li></ul><ul><li>Produto (String desc, int cod) { </li></ul><ul><li>this.cod = cod; </li></ul><ul><li>this.desc = desc; </li></ul><ul><li>} </li></ul><ul><li>String getInfo () { </li></ul><ul><li>String resposta = &quot;Produto: &quot; + desc + &quot;, código = &quot; + cod; </li></ul><ul><li>return resposta; </li></ul><ul><li>} </li></ul><ul><li>String getInfo (int n) { </li></ul><ul><li>String resposta; </li></ul><ul><li>if (n == 1 ) { </li></ul><ul><li>resposta = &quot;Product name: &quot; + desc + &quot;, code = &quot; + cod; </li></ul><ul><li>} else { </li></ul><ul><li>resposta = &quot;Product code: &quot; + cod + &quot;, name = &quot; + desc; </li></ul><ul><li>} </li></ul><ul><li>return resposta; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Segue...
    23. 23. class TestaSobrecarga { public static void main (String [ ] args) { Produto prod= new Produto (&quot;tijolo&quot;, 1111 ); String texto; texto = prod.getInfo(); System.out.println(texto); texto = prod.getInfo(1); System.out.println(texto); texto = prod.getInfo(2); System.out.println(texto); } }
    24. 24. Polimorfismo <ul><li>É quando existem várias formas de um método ser ativado. </li></ul><ul><li>As mais usuais são: </li></ul><ul><ul><li>Polimorfismo por herança - Quando ocorre a sobreposição de um método de uma subclasse em cima do método da superclasse. </li></ul></ul><ul><ul><li>Polimorfismo por Sobrecarga - Quando em uma classe, um mesmo método (de mesmo nome) pode ser chamado de várias maneiras diferentes, onde a diferença está na quantidade e no tipo de parâmetros passados. </li></ul></ul>
    25. 25. <ul><li>Faça a modelagem em um diagrama UML. </li></ul><ul><li>Criar, em Java, as classes Produto, Alimento e o programa Atividade2 de acordo com o especificado abaixo: </li></ul><ul><li>Um produto tem os seguintes atributos: código, descrição, setor e preço. </li></ul><ul><li>Significado de setor: 1 = alimento, 2 = higiene e 3 = roupas. </li></ul><ul><li>Esses atributos não podem ser acessados diretamente pelo programa </li></ul><ul><li>Atividade2. </li></ul><ul><li>  </li></ul><ul><li>Um Alimento é um produto, com a diferença que ele tem um atributo a mais, </li></ul><ul><li>que é o código da vigilância sanitária. </li></ul><ul><li>  </li></ul><ul><li>Um produto pode ser criado passando-se todos os atributos, ou omitindo-se o </li></ul><ul><li>atributo de setor, e nesse caso assume-se setor 3 (roupas). </li></ul><ul><li>  </li></ul>Atividade 2
    26. 26. <ul><li>Para criar-se um alimento, é necessário passar todos os atributos, exceto o setor, que será assumido como 1. </li></ul><ul><li>  </li></ul><ul><li>Os produtos tem um valor de ICMS de 15%, porém para alimentos deve-se calcular 10% para alimentos nacionais ou 20% para alimentos importados. Os alimentos nacionais são aqueles cujo código de Vigilância começa com “55”. </li></ul><ul><li>  </li></ul><ul><li>OBS: </li></ul><ul><li>Não há necessidade,nesta atividade, de validar os valores dos atributos. Assumiremos que os atributos para os Construtores serão sempre válidos. </li></ul><ul><li>O programa Atividade2 deve criar vários produtos para cobrir todas as possibilidades do enunciado </li></ul>
    27. 27. <ul><li>Faça a modelagem em um diagrama UML. </li></ul><ul><li>Criar, em Java, algumas classes relacionadas, aplicando os conceitos de encapsulamento, herança, sobrecarga e reescrita. </li></ul>Atividade 3
    28. 28. Referências <ul><li>Orientação a objetos. Disponível em <http : //www.softechnetwork.com.br/java/CursoOO.pdf >. Acesso em :11 mar. 2011. </li></ul><ul><li>Java e Orientação a Objetos. Disponível em <www. caelum.com.br> Acesso em 15 fev. 2009. </li></ul><ul><li>RUMBAUGH, James et al. Modelagem e Projetos baseados e Objetos. Rio de Janeiro: Campus, 1997. </li></ul>

    ×