A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos.

Apresentações semelhantes


Apresentação em tema: "Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos."— Transcrição da apresentação:

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


Carregar ppt "Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos."

Apresentações semelhantes


Anúncios Google