Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouThereza Maranhão Veiga Alterado mais de 8 anos atrás
1
Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos
2
PARTE 2 1.Composição, agregação, associação 2.Herança 3.Reescrita 4.Sobrecarga 5.Polimorfismo "O homem absurdo é aquele que nunca muda.“ - Georges Clemenceau 2
3
Composição, Agregação e Associação Composição – Um trem é formado por 1 locomotiva e n vagões; – Relacionamento tem-um; Agregação – Uma locomotiva (todo) tem um farol (parte), mas não deixa de existir se não o tiver; Associação – Um trem usa uma estrada de ferro (a estrada não faz parte do trem, mas ele depende dela). 3
4
Herança Objetivo 1: reuso de código. Praticando! (5 minutos) Imagine o sistema de um banco... Nesse sistema precisamos armazenar dados de funcionários (que podem exercer diferentes funções, ex.: secretário ou gerente) e clientes. – Vamos modelar essa parte do sistema! 4
5
Herança Relacionamento É-UM em java, instanceof 5
6
Herança Objetivos: 1.Reuso de código; 2.Polimorfismo. Palavras-chave: – extends: para herdar as caraterísticas de uma classe; – Instanceof: para testar relacionamentos É-UM entre objetos 6
7
Se não houvesse herança em Java, como você poderia reaproveitar o código de outra classe? Quais seriam as implicações dessa nova abordagem? 7
8
Herança vs Composição Herança: quando uma classe herda a outra, ela está muito ligada à outra Composição: estende uma classe através da delegação de trabalho a ela Como poderíamos resolver isso? – Aprenderemos um padrão de projeto baseado no princípio de “preferir composição à herança”. 8
9
Overriding Outros nomes: sobrescrever (overwriting), reescrever, sobrepor... Praticando! (5 minutos) – No exemplo anterior, suponha que os funcionários, de modo geral, ganhem uma bonificação de 10%. Mas, devido o fato do gerente ter mais responsabilidade, seria justo que ele ganhasse uma bonificação de 20% de seu salário. Como nós alteraríamos o nosso modelo para satisfazer essa nova especificação? (modele/implemente apenas as classes Funcionário e Gerente) 9
10
Overriding public double getBonificacao(){ return 0.1*this.salario; } public double getBonificacao(){ return 0.2*this.salario; } 10
11
Overriding Objetivo: especializar um método herdado. Regras para sobrescrever um método: 1.A assinatura deve ser igual ou bem similar: 1.Lista de argumentos exatamente igual; 2.Tipo de retorno deve ser “igual” (lembrar da relação É-UM, pois subtipos também são aceitos); 3.Modificador de acesso pode ser menos restritivo; 2.Para haver reescrita deve, primeiramente, haver herança. Mais regras em: Livro de Certificação Java SCJP Sun Certified Programmer for Java 6 OCP Java SE 6 Programmer 11
12
Overloading Outro nome: sobrecarregar,... 12
13
Overloading Objetivo: prover ao usuário a possibilidade de executar uma funcionalidade do sistema passando diferentes inputs (tipos de dados) É basicamente uma outra implementação de um método já existente mas com argumentos diferentes. Regras para sobrecarregar um método... 1.Os métodos sobrecarregados devem alterar a lista de argumentos; 2.Os métodos sobrecarregados podem alterar o tipo de retorno; 3.Os métodos sobrecarregados podem alterar o modificador de acesso; 4.Um método pode ser sobrecarregado na mesma classe ou em uma subclasse. Também é possível sobrecarregar um construtor. Mais regras em: Livro de Certificação Java SCJP Sun Certified Programmer for Java 6 OCP Java SE 6 Programmer 13
14
Polimorfismo O que guarda uma variável do tipo Funcionário? – Uma referência para um funcionário... Gerente g = new Gerente(); Funcionario f = g; f.setSalario(1000); Funcionario f Gerente g get/setNome() get/setIdade() get/setSalario() Senha numFuncionariosGerenciados getBonificacao() Autentica() Gerente Poli várias morfo formas 14
15
Polimorfismo O que guarda uma variável do tipo Funcionário? – Uma referência para um funcionário. Gerente g = new Gerente(); Funcionario f = g; f.setSalario(1000); System.out.println(f.getBonificacao()); Funcionario f Gerente g get/setNome() get/setIdade() get/setSalario() Senha numFuncionariosGerenci ados getBonificacao() Autentica() Gerente Decidido em tempo de execução 15
16
Polimorfismo Por que polimorfismo? class ControleDeBonificacoes { private double totalDeBonificacoes = 0; public void registra(Funcionario funcionario) { this.totalDeBonificacoes += funcionario.getBonificacao(); } public double getTotalDeBonificacoes() { return this.totalDeBonificacoes; } 16
17
Polimorfismo Por que polimorfismo? O que acontece se futuramente precisarmos criar outros tipos de funcionários? ControleDeBonificacoes controle = new ControleDeBonificacoes(); Gerente funcionario1 = new Gerente(); funcionario1.setSalario(1000); controle.registra(funcionario1); Funcionario funcionario2 = new Funcionario(); funcionario2.setSalario(1000); controle.registra(funcionario2); System.out.println(controle.getTotalDeBonificacoes()); Dicas sobre polimorfismo: Não importa como nos referenciamos a um objeto, o método que será invocado é sempre o do objeto em questão. Programe sempre pra uma superclasse! 17
18
Polimorfismo 18 Implemente o seguinte modelo: (5 minutos)
19
Polimorfismo 19 Crie uma classe Zoologico composta por 5 jaulas (array), onde cada uma terá um animal diferente. Depois percorra cada jaula e “cutuque o animal” (emitirSom) e, se o animal souber correr, dê uma carreira nele (correr). (7 minutos)
20
Referências Essa aula utilizou alguns exemplos modificados das apostilas caelum além de alguns conceitos e exemplos abordados na apostilas para certificação java (SCJP e OCJP). Ahhh, alguns destes exemplos também saíram da minha cabeça. 20
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.