padrões de projeto 2 – revisão de programação orientada a objetos

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

Upload: octavio-araujo-canela

Post on 07-Apr-2016

225 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padrões de Projeto2 – Revisão de Programação Orientada a Objetos

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

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

PROGRAMAÇÃO ORIENTADA A OBJETOS

Revisão rápida com análise acerca de algumas de suas implicações em Padrões de Projeto

2

Page 3: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

PARTE 2

1. Composição, agregação, associação2. Herança3. Reescrita4. Sobrecarga5. Polimorfismo

3

"O homem absurdo é aquele que nunca muda.“- Georges Clemenceau

Page 4: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

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

4

Page 5: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

Herança• Objetivo 1: reuso de código.

• Praticando! (10 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!

5

Page 6: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

Herança

6

• Relacionamento É-UM em java, instanceof

Page 7: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

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

7

Page 8: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

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?

8

Page 9: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

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

• Exemplo: Carro• Imagine que você criou um carro com vários utilitários, ex.: GPS,

direção hidráulica, injeção eletrônica. Então, no seu sistema você percebe que precisa lidar com carros Opala, mas Opala não tem GPS nem inj. eletrônica.

• Como poderíamos resolver isso? Próxima aula aprenderemos uma solução com o nosso 1º padrão de projeto.

9

Page 10: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

Overriding• Outros nomes: sobrescrever (overwriting), reescrever,

sobrepor...

• Praticando! (10 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)

10

Page 11: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

Overriding

11

Page 12: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

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 12

Page 13: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

Overloading• Outro nome: sobrecarregar, ...

13

Page 14: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

Overloading• Objetivo: prover ao usuário a possibilidade de executar uma funcionalidade

do sistema passando diferentes inputs (tipos de dados)

• É basicamente a 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

14

Page 15: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

Polimorfismo

• O que guarda uma variável do tipo Funcionário?• Uma referência para um funcionário...

15

Gerente g = new Gerente();Funcionario f = g;f.setSalario(1000);

Funcionario f

Gerenteg

get/setNome()get/setIdade()

get/setSalario()Senha

numFuncionariosGerenciadosgetBonificacao()

Autentica()

Gerente

Polivárias morfoformas

Page 16: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

Polimorfismo

• O que guarda uma variável do tipo Funcionário?• Uma referência para um funcionário.

16

Gerente g = new Gerente();Funcionario f = g;f.setSalario(1000);

System.out.println(f.getBonificacao());

Funcionario f

Gerenteg

get/setNome()get/setIdade()

get/setSalario()Senha

numFuncionariosGerenciadosgetBonificacao()

Autentica()

GerenteDecidido em tempo de execução

Page 17: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

Polimorfismo• Por que polimorfismo?

17

class ControleDeBonificacoes {private double totalDeBonificacoes = 0;

public void registra(Funcionario funcionario) {this.totalDeBonificacoes += funcionario.getBonificacao();

}

public double getTotalDeBonificacoes() {return this.totalDeBonificacoes;

}}

Page 18: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

Polimorfismo• Por que polimorfismo?• O que acontece se futuramente precisarmos criar outros tipos

de funcionários?

18

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!

Page 19: Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos

Padr

ões d

e Pr

ojet

o - R

evisã

o de

PO

O

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.

19