11/11/2010
INICIAO A PADRES
DE PROJETO COM JAVA
Ministrante: Prof Francisco Cassimiro Neto
Introduo
2
Programao orientada a objetos X
procedural
Problema: trocar a lmpada
Procedural
Foco nos procedimentos
Pegar nova lmpada
Pegar escada
Tirar a lmpada queimada
Colocar a nova lmpada ...
Orientada a objetos
Foco nos objetos
Lmpada velha
Lmpada nova
Pessoa
Escada
11/11/2010
Objetos
3
Abstraes de coisas da realidade para
modelagem computacional
Brincar
de Deus Criar as coisas numa realidade
computacional
Possuem estado e comportamento
Definies bsicas
4
Classes
Conjunto de objetos com caractersticas em comum
Ex. Pessoa
Subclasse
uma classe gerada a partir da classe pai
O que ela herda?
Objeto
Instncia de uma classe
Armazena (encapsula) estados pelos atributos
Comportamento pelo mtodos
Ex. Cassimiro
11/11/2010
Definies bsicas
5
nome = Cassimiro
idade = 26
Classe - Moldura
Instancia new Pessoa ( )
Pessoa
Pessoa
Pessoa
nome = Tiago
idade = 30
String nome______
double idade______
....
Pessoa
nome = Leila
idade = 25
E pessoa anda? Se voc colocar o mtodo de andar... Sim ela anda
Objetos
6
Objeto da classe Pessoa
Estado
(Atributos)
Nome:
Joaquim
Peso: 90 Kg
Idade: 33 anos
Estado civil: Casado
Comportamento
(Mtodos)
Geralmente
acessam ou alteram os atributos
Contm a lgica comportamental do objeto
11/11/2010
Exemplo classe Pessoa
7
Pode especificar uma
restrio de acesso !
Dividir para conquistar
8
Um sistema acadmico poderia ser implementado por
um nico objeto?
Objeto sistema acadmico
Imagine o gasto em manuteno
A maioria dos sistemas vivem mais em manuteno
Todos os estados e funes em um objeto
Cdigo macarronada
Ningum sabe onde comea um funo e termina a outra
A quantidade de atributos e mtodos deste objeto
E o trabalho em uma equipe de desenvolvedores
Ento... cada objeto com uma funo especfica dentro do sistema
Quem ficaria com qual parte?
11/11/2010
Dividir para conquistar
9
Ex. de uso
Sistema
acadmico para cadastrar alunos de
uma turma de acordo com disciplinas
ministradas por professores
Herana
10
Necessidade de criar uma classe mais
especializada a partir de outra
Ex. Mais abrangente
Empregado
Dado comum aos empregado
Mtodo comum a empregado
String nome
int salario
float salario
aumentaSalario
Chamada de superclasse
Promove a reutilizao de cdigo (cuidado!!!)
11/11/2010
Herana
11
Ex. Mais especfica
Gerente
Dados
especficos do gerente
secretaria, sala
Mtodo
especfico do gerente
setSecretaria, setSala
Chamada
de subclasse
Gerente um tipo de Empregado
Uso de Herana
12
Classe Empregado
11/11/2010
Uso de Herana
13
Classe Gerente
Gerente
Herda
os campos e mtodos no-privados
Ex. Mtodo aumentaSalario (reutilizao de cdigo)
Adiciona
Campo secretaria e sala, e mtodo setSecretaria
Uso de Herana
14
A palavra super
Ter acesso a mtodos e construtores da superclasse
a partir da subclasse
Quando da execuo de aumentaSalario o mtodo
aumentaSalario da super executado passando o
percentual
11/11/2010
Observaes em Herana
15
O construtor de subclasse sempre chama o
construtor de uma superclasse
O construtor de Gerente chama o de Empregado
Chamada no explicita (super) chama o construtor
vazio
Caso este no exista em Funcionario ir ocorrer erro
public Gerente(int valor)
Toda classe em Java herda da Classe Object
Diagrama de classes
16
11/11/2010
Para pensar
17
Se tivermos vrios tipos de funcionrios
Estagirio
No
voluntrio
seria ideal para ter um mtodo aumentaSalario
Funcionrios
Teria
que agrega duas funes
que ter dois aumentos
Imagine
fazer estas alteraes quando se tem
um sistemas com dezenas de tipos de funcinrios
Construtores
18
So blocos de comandos usados para
inicializar um objeto antes que este seja usado
Possui
o mesmo nome da classe onde foi
declarado
invocado no momento da criao de um objeto
(new)
Como um mtodo, pode receber parmetros.
No
tem tipo de retorno, pois o seu resultado
sempre uma nova instncia da classe
Uma classe pode ter nenhum, um ou vrios
construtores declarados
11/11/2010
Exemplo de construtores
19
No Eclipse
Classes Abstratas e Interfaces
20
Dizem para suas subclasses o que deve ser
feito sem especificar como
As superclasses so como guia de que
mtodos e campos as subclasses devem ter
No podem ser instanciadas!
10
11/11/2010
Classes Abstratas
21
Mtodos abstratos
So
somente declarados no tendo um conjunto
de comandos em seu corpo
Se uma classe possui pelo menos um mtodo
abstrato ela deve ser abstrata
Um subclasse de uma abstrata deve implementar
os mtodos abstratos da superclasse
Uso de Classes Abstratas
22
Considere a classe abstrata Pessoa
O mtodo abstrato no possui corpo
darNome
11
11/11/2010
Uso de Classes Abstratas
23
Uma classe que herda Pessoa
O mtodo abstrato deve ser implementado
24
Garante a implementao
O mtodo no abstrato herdado normalmente
Caso de erro em Classes
Abstratas
Por que do erro?
Um objeto Pessoa no pode ser instanciado
Ele
abstrato !!!
12
11/11/2010
Interfaces
25
Se uma classe tiver todos os mtodos
abstratos ela pode ser uma interface
Todos mtodos da interface so abstratos
Suas implementaes (subclasses) devem implementar
todos os mtodos
No pode ser instanciada
Principal diferena das Classes Abstratas
Qualquer classe pode implementar vrias interfaces
Uso das Interfaces
26
Os dois cdigos tm a mesma funo
13
11/11/2010
Uso das Interfaces
27
Considere as duas interfaces
A classe que implemente as duas interfaces
deve implementar os 3 mtodos
Uso das Interfaces
28
Classe que implementa 2 interfaces
14
11/11/2010
Polimorfismo
29
Permite a manipulao uniforme de objetos
que herdam uma mesma classe
Ex.
um mtodo que recebe parmetro um objeto
tipo Empregado pode receber um Gerente
pois ele um Empregado
Um objeto pode trabalhar com uma instncia de
Gerente sabendo apenas que ele Empregado
No
conhece as especificidades de Gerente
Polimorfismo
30
15
11/11/2010
Uso do Polimorfismo
31
No Eclipse !!!
Exerccio de Fixao
32
Quais seriam os principais objetos em um
sistema de controle de produtos em um
supermercado?
D um bom motivo de usar herana.
Qual a principal diferena entre Classes
Abstratas e Interfaces?
16
11/11/2010
Padres de projeto
33
Agora o bicho vai pegar !!!
Padres
34
Solues de projeto j aprovadas por outros
desenvolvedores
Soluo
de problemas recorrentes
Explora a soluo j disponvel por eles
Lembre-se
Complica
o desenvolvimento
Facilita a manuteno
Flexibilidade
a mudanas e extenses
Reutilizao de cdigo
17
11/11/2010
Exemplo de aplicao
35
Jogo de simulao de um lago com patos
Grande
espcies de patos nadando e produzindo
som
Obs.: Exemplo retirado o livro use a cabea padres de projeto
Alterao
36
Os executivos querem que aos patos voem
Pensamento
inicial
Adicionar
um mtodo voar a classe pato que todos os
patos iro voar
18
11/11/2010
Problema
37
Um acionista liga dizendo que at os patos de
borracha voaram
O
comportamento se propagou mais do que
devia
Possveis solues
38
Poderia sobrescrever o mtodo voar em
PatoBorracha p/ no fazer nada
E se aparecesse um pato de madeira, usado
como isca?
Nem
voa nem grasna
Percebe que o que altera so os
comportamentos
Voar
e grasnar (nos mtodos)
19
11/11/2010
Possvel soluo
39
Poderia criar uma interface Vovel de modo
que s patos que voem a implemente
Como
uma Grasnvel
Possvel soluo
40
O que voc acha desta soluo ?
20
11/11/2010
Possvel soluo
41
No existe reutilizao de cdigo
Fazer
uma mudana no comportamento voo
Alterar
todas as 48 subclasses de Pato que voam?
Resumindo...
42
A herana no foi uma boa soluo
Os
comportamentos dos patos mudam entre as
subclasses
Uso de interface tambm no
No
promove a reutilizao de cdigo
Fica
duplicado nas subclasses com mesmo
comportamento
Se for alterar um comportamento tem que mexer em
TODAS subclasses
21
11/11/2010
Principio de projeto
43
Pegue o que varia e separe (encapsule) do
que permanece igual
O
que varia no nosso exemplo?
Comportamentos dos patos
Voar
e grasnar
Este princpio base de quase todos os
padres
Deixar
independente o que varia !!!
Separando o que varia
44
Criar dois conjuntos de classes
Um
engloba o comportamento de voar e outro de
grasnar
Sabemos que os mtodos voar() e grasnar()
que variam na classe Pato
Tiramos
os dois mtodos da classe
Cria um conjunto de classes para cada
comportamento
22
11/11/2010
Separando o que varia
45
Comportamentos de Patos
Comportamento de
voar
Tira o que varia
Pato
Comportamento
de grasnar
Soluo
46
Poder-se-ia colocar um comportamento
especfico para um pato especfico
Pato
Real-> Voa e Grasna
E se pudesse alterar o comportamento do
pato depois dele ter sido criado
Depois
de instanciado
O pato que no voa pode aprender a voar
Alterao no tempo de execuo
23
11/11/2010
Soluo
47
Utilizar uma interface para representar cada
comportamento
e
ComportamentoGrasnar
Dica: quando queira encapsular alguma coisa,
use interface ou classe abstrata
ComportamentoVoar
No vai ser o a classe Pato que implementa o
comportamento
Ela
delega para um conjunto de outras classes
Outro princpio
48
Programe para uma interface, no para uma
implementao especfica
Utilizao
O comportamento vinha de uma
implementao
Mtodos
do polimorfismo
voar() e grasnar () em Pato
Agora o comportamento vem de uma interface
e
ComportamentoGrasnar
ComportamentoVoar
24
11/11/2010
Soluo
49
Soluo
50
Conjunto de comportamentos
Pato s tem conhecimento das interfaces (abstraes)
No tem conhecimento das classes concretas
Pato esta programado para um interface!!!
25
11/11/2010
Vantagens
51
Qualquer objeto podem reutilizar os
comportamentos
No
esto mais presos na classe Pato
Pode-se adicionar um novo Grasnar ou Voar
sem precisar mexer em Pato
Aberto
a extenso e no a alterao
Cdigo da implementao
52
No eclipse !!!
26
11/11/2010
Cdigo de implementao
53
Pode-se tirar os atributos e mtodos comuns aos
patos (borracha, real, cabea vermelha)
Coloc-los em super classe Pato
Os comportamentos podem ser alterados em
tempo de execuo
A alterao s possvel devido ao polimorfismo
setVoo espera um objeto ComportamentoVoar
ComportamentoVoar pode ser VoarComAsas ou NaoVoar
Houve variao de comportamento sem precisar
alterar o cdigo
Comportamentos
54
Estes algoritmos de comportamento
so intercambiveis
27
11/11/2010
Novo princpio
55
Relao tem-um
Cada
pato tem um ComportamentoVoar e um
ComportamentoGrasnar
Ao invs de herdar os comportamentos os patos
obtm-nos por meio da composio com o objeto
de comportamento
Princpio
Dar
prioridade a composio
Primeiro padro
56
Voc j implementou o primeiro padro
Estratgia
Define
uma famlia de algoritmos, encapsula cada um
deles e os torna intercambiveis. A estratgia deixa o
algoritmo variar independente (sem alterar) dos
clientes (Patos) que o utilizam
28
11/11/2010
Princpios
57
Encapsule o que varia
Deve ser aberto a extenso e fechado para
alterao de cdigo
D prioridade composio em detrimento da
herana
Programe para interfaces, no para
implementaes
Resumo
58
Padres so uma experincia orientadas a
objetos comprovada
J
foi utilizado noutros projetos
A maioria dos padres permite que uma parte
varie dependente das demais
Tenta-se
encapsular o que varia
Padres fornecem uma linguagem
compartilhada
Voc
pode dizer outra linguagem compartilhada?
29
11/11/2010
Resumo
59
Estratgia
Define
uma famlia de algoritmos, encapsula
cada um deles e os torna intercambiveis. A
estratgia deixa o algoritmo variar independente
(sem alterar) dos clientes que o utilizam
Exerccio
60
Organize as classes
Identificar uma classe abstrata, uma interface
e oito classes
Desenhar setas entre as classes
Seta
de herana
Seta de implementa
Linha de composio
Colocar o mtodo setArma() na classe correta
30
11/11/2010
Exerccio
61
Duvido!!!
62
Depois de ter feito o exerccio anterior o
implementar no eclipse
31
11/11/2010
Aprofundamento
63
Existem diversos outros padres de projetos
Quero mais !
64
Aplicao da estratgia em no exemplo de
Funcionrio
O
que varia so os comportamentos de adicional
de frias e o aumento de salrio
32
11/11/2010
Quero mais !
65
Fim
66
S(C)em perguntas ?
[email protected]
33