padrões de projeto 2 – revisão de programação orientada a objetos
TRANSCRIPT
Padrões de Projeto2 – 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
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
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
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
Padr
ões d
e Pr
ojet
o - R
evisã
o de
PO
O
Herança
6
• Relacionamento É-UM em java, instanceof
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
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
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
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
Padr
ões d
e Pr
ojet
o - R
evisã
o de
PO
O
Overriding
11
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
Padr
ões d
e Pr
ojet
o - R
evisã
o de
PO
O
Overloading• Outro nome: sobrecarregar, ...
13
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
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
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
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;
}}
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!
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