Você está na página 1de 89

LEDS

PADRES DE PROJETO
Aula: Conceitos da Orientao a Objetos Paulo Srgio dos Santos Jnior
Professor: E-mail: paulossjunior@ucl.br

PADRES DE PROJETO
A maioria dos projeAstas capaz de compreender conceitos como classes, objetos, interfaces e herana; O desao reside em aplic-los para construir soJware exvel e reuAlizvel; Os projeAstas experientes sabem que no se deve resolver todo e qualquer problema parAndo de princpios bsicos (classes, objetos, herana, relacionamentos, agregao,...); Devem buscar reuAlizar solues que funcionaram no passado (Padro de Projeto, Design Pa*erns);

PADRES DE PROJETO
O objeAvo de um design pa*ern registrar uma experincia no projeto de soJware OO, na forma de um padro passvel de ser efeAvamente uAlizado por projeAstas. Um projeAsta familiarizado com padres de projeto pode aplic-los diretamente a problemas de projeto sem ter que redescobrir abstraes e os objetos que as capturam. Uma vez que um padro aplicado, muitas decises de projeto decorrem automaAcamente.

PADRES DE PROJETO

PADRES DE PROJETO
Padro Cria>vo: abstrai o processo de instanciao (criao) de objetos, ajudando a tornar um sistema independente de como seus objetos so criados, compostos e representados.

PADRES DE PROJETO
Padro Cria>vo: abstrai o processo de instanciao (criao) de objetos, ajudando a tornar um sistema independente de como seus objetos so criados, compostos e representados.

PADRES DE PROJETO
Padro Cria>vo: abstrai o processo de instanciao (criao) de objetos, ajudando a tornar um sistema independente de como seus objetos so criados, compostos e representados.

PADRES DE PROJETO
Padro Estrutural: diz respeito a como classes e objetos so compostos para formar estruturas maiores.

PADRES DE PROJETO
Padro Estrutural: diz respeito a como classes e objetos so compostos para formar estruturas maiores.

H + H+ O ?

PADRES DE PROJETO
Padro Estrutural: diz respeito a como classes e objetos so compostos para formar estruturas maiores.

H + H+ O

PADRES DE PROJETO
Padro Comportamental: diz respeito a algoritmos e a atribuio de responsabilidades e comportamentos entre objetos.

Exemplo U>lizado

PADRES DE PROJETO
Contexto:
Desenvolver um sistema para a Foobar Motor Company; A Foobar Motor Company fabrica: Carros; Vans; Motores dos veculos;

PADRES DE PROJETO
Diagrama de classes:

PADRES DE PROJETO
Princpios comuns de padres de projeto:
1. Programe para uma interface e no para uma implementao; 2. Prera fazer composio de objetos do que herana; 3. Mantenha baixo acoplamento entre os objetos; 4. Realize encapsulamento para caractersAcas que mudam;

PADRES CRIATIVOS

PADRES DE PROJETO
Padres CriaAvos:
Fabrica Abstrata: prover uma interface para criar uma famlia de objetos sem especicar as classes concretas; Builder: permite criar diversos objetos semelhantes, uAlizando o mesmo algoritmo; Mtodo Fabrica: dene uma interface para criar um objeto, mas deixa a deciso de instanciao para as subclasses; Prot>po: especica os Apos de objetos que sero criados atravs de protApos e cria um novo objeAvo copiando um protApo; Singleton: garante que apenas um objeto ser criado e prover um nico ponto de acesso para a esse objeto;

PADRES CRIATIVOS Fabrica Abstrata

PADRES DE PROJETO
Fabrica Abstrata:
Proposito: prover uma interface para criar uma famlia de objetos sem especicar as classes concretas; Problema: A Foobar Motor Company fabrica os carros e vans com a lateria, chassi e suporte para os vidros. Embora os carros e vans precisem dos mesmo Apos de componentes, a especicao de cada Apo difere se ser usado em uma van ou em um carro.

PADRES DE PROJETO
Fabrica Abstrata:
Para construirmos um veiculo devemos pensar que os componentes devem vim de diferentes famlias!

PADRES DE PROJETO
Fabrica Abstrata:
Para construirmos um veiculo devemos pensar que os componentes devem vim de diferentes famlias!

PADRES DE PROJETO
Fabrica Abstrata:

PADRES DE PROJETO
Fabrica Abstrata:
Como iremos instanciar a famlia correta de componentes sem explicitar os componentes para o cliente?

PADRES DE PROJETO
Fabrica Abstrata:
Como iremos instanciar a famlia correta de componentes sem explicitar os componentes para o cliente? R.: Atravs de uma fabrica de classes!

PADRES DE PROJETO
Fabrica Abstrata:

PADRES DE PROJETO
Fabrica Abstrata:
Fabrica Abstrata

Fabrica de Vans!

Fabrica dos carros!

PADRES DE PROJETO
Fabrica Abstrata:
A Classe AbstractVehicleFactory a responsvel por denir o s m t o d o s : c r e a t e B o d y ( ) , c r e a t e C h a s s i s ( ) e createWindows();

PADRES DE PROJETO
Fabrica Abstrata:
A Classe CarFactory a responsvel por retornar os objeAvo da famlia do Apo carro.

PADRES DE PROJETO
Fabrica Abstrata:
A Classe VanFactory a responsvel por retornar os objeAvo da famlia do Apo Van.

PADRES DE PROJETO
Fabrica Abstrata:
Como eu uso isso em cdigo?

PADRES DE PROJETO
Fabrica Abstrata:
Como eu uso isso em cdigo?

PADRES DE PROJETO
Fabrica Abstrata:
Qual a desvantagem de uAlizar o Fabrica Abstrata?

PADRES DE PROJETO
Fabrica Abstrata:
Qual a desvantagem de uAlizar o Fabrica Abstrata? A principal desvantagem quando necessrio adicionar novas caractersAcas na fabrica. Imaginem o problema que teremos ao adicionar o farol no fabrica.

PADRES CRIATIVOS Builder

PADRES DE PROJETO
Builder:
Proposito: permite criar diversos objetos semelhantes, uAlizando o mesmo algoritmo; Problema: A Foobar Motor Company fabrica os carros e vans. Porm, o processo de construo difere em detalhes para cada veiculo:
Van: possui uma cabine e uma grande rea de carga reforada; Saloon: possui uma rea dos passageiros e uma rea de malas;

PADRES DE PROJETO
Builder:
Problema: A Foobar Motor Company fabrica os carros e vans. Porm, o processo de construo difere em detalhes para cada veiculo:
Van: possui uma cabine e uma grande rea de carga reforada; Saloon: possui uma rea dos passageiros e uma rea de malas;

Como construir diferentes carros com o mesmo material e usando o mesmo processo?

PADRES DE PROJETO
Builder:
O padro Builder facilita a construo de objetos complexos da seguinte forma: 1. Separando os mtodos uAlizados em hierarquia de Builder; 2. Usando um Director (diretor) que especica quais etapas so requeridas e a ordem; 3. Builder retorna o objeto construdo;

PADRES DE PROJETO
Builder:

PADRES DE PROJETO
Builder:

Builder!

Diretor!

PADRES DE PROJETO
Builder:
VehicleBuilder possui todos os mtodos necessrios para construir os veculos; VehicleBuilder tambm possui os mtodo getVehicle() que retorna o veculo construdo;

PADRES DE PROJETO
Builder:
CarBuilder responsvel por construir as partes do carro;

PADRES DE PROJETO
Builder:
CarBuilder responsvel por construir as partes do carro;

Repare que o mtodo buildReinforcedStorageArea() no foi sobreescrito! PQ?

PADRES DE PROJETO
Builder:
VanDirector responsvel por denir o passo-a-passo do processo da construo de uma Van;

PADRES DE PROJETO
Builder:
Como eu uso isso em cdigo?

PADRES DE PROJETO
Builder:
Como eu uso isso em cdigo?

PADRES DE PROJETO
Builder:
Qual a desvantagem de uAlizar o Builder?

PADRES CRIATIVOS Mtodo Fabrica

PADRES DE PROJETO
Mtodo Fabrica:
Proposito: dene uma interface para criar um objeto, mas deixa a deciso de instanciao para as subclasses; Problema: Precisamos instanciar um Apo parAcular de veiculo (por exemplo, Coupe) com um certa frequncia; Quero que uma classe seja responsvel por gerenciar a instanciao; Como faremos isso?

PADRES DE PROJETO
Mtodo Fabrica:

Quero um mtodo que retorne uma instncia dessas classes!!

PADRES DE PROJETO
Mtodo Fabrica:
Dene uma classe abstrata que server com uma fabrica e que possui mtodos abstratos responsveis por instanciar as classes.

PADRES DE PROJETO
Mtodo Fabrica:

PADRES DE PROJETO
Mtodo Fabrica:

PADRES DE PROJETO
Mtodo Fabrica:

Fabrica de Carros!

PADRES DE PROJETO
Mtodo Fabrica:

PADRES DE PROJETO
Mtodo Fabrica:

Fabrica de Van!

PADRES DE PROJETO
Mtodo Fabrica:

PADRES DE PROJETO
Mtodo Fabrica:
Existe uma variao do mtodo fabrica chamado: mtodo fabrica est>co. O uso dela comum: pois no necessrio instanciar um classe do Apo fabrica;

PADRES DE PROJETO
Mtodo Fabrica:

PADRES DE PROJETO
Mtodo Fabrica:

UAlizando mtodo fabrica estAco!

UAlizando mtodo fabrica normal!

PADRES CRIATIVOS Prot>po

PADRES DE PROJETO
ProtApo:
Proposito: especica os Apos de objetos que sero criados atravs de protApos e cria um novo objeAvo copiando um protApo; Problema: Imagine que seja necessrio criar um carro e uma van em tempo de execuo e da maneira mais rpida possvel. Como faremos isso ?

PADRES DE PROJETO
ProtApo:
Problema: Imagine que seja necessrio criar um carro e uma van em tempo de execuo e da maneira mais rpida possvel. Como faremos isso ? Uma abordagem que melhora a instanciao em tempo de execuo o ProtApo. No Java a tcnica que mais se adequa ao padro ProtApo o clone();

PADRES DE PROJETO
ProtApo:

PADRES DE PROJETO
ProtApo:
Modicao na Classe AbstractVehicle

PADRES DE PROJETO
ProtApo:
Modicao na Classe AbstractVehicle
Mtodo responsvel por clonar!

PADRES DE PROJETO
ProtApo:
Agora devemos criar uma classe que responsvel por gerenciar as instncias: VechileManager.

PADRES DE PROJETO

PADRES DE PROJETO

Criando os clones!

PADRES DE PROJETO
ProtApo:
UAlizando a Classe VehicleManager:

PADRES DE PROJETO
ProtApo:
necessrio instanciar todas as classes ao mesmo tempo para realizar o clone ?

PADRES DE PROJETO
ProtApo:
necessrio instanciar todas as classes ao mesmo tempo para realizar o clone ? R.: No. Podemos fazer uma instanciao tardia.

PADRES CRIATIVOS Singleton

PADRES DE PROJETO
Singleton:
Proposito: garante que apenas um objeto ser criado e prover um nico ponto de acesso para a esse objeto; Problema: Os carros somente podem ter um nico serial; Querem se assegurar que existe apenas um local onde esse serial obAdo;

PADRES DE PROJETO
Singleton:
Como garanAr que exista apenas uma instncia de uma classe?

PADRES DE PROJETO
Singleton:
Como garanAr que exista apenas uma instncia de uma classe? R: Na abordagem tradicional: cria um mtodo construtor private; Prover um mtodo public sta=c para retornar um objeto est)co da classe;

PADRES DE PROJETO
Singleton:

PADRES DE PROJETO
Singleton:

Instncia est>ca do objeto

PADRES DE PROJETO
Singleton:

U>lizou o synchronized para concorrncia entre threads!

PADRES DE PROJETO
Singleton:

Construtor privado!

PADRES DE PROJETO
Singleton:
Executando o singleton;

PADRES DE PROJETO
Singleton:
Ser que existe um modo mais elegante de aplicar o padro singleton?

PADRES DE PROJETO
Singleton:
Ser que existe um modo mais elegante de aplicar o padro singleton? R.: No Java 1.5 feito atravs de ENUM.

PADRES DE PROJETO
Singleton:
Ser que existe um modo mais elegante de aplicar o padro singleton? R.: No Java 1.5 feito atravs de ENUM. COMO??

PADRES DE PROJETO
Singleton:

Como eu uso isso?

PADRES DE PROJETO
Singleton:

PADRES DE PROJETO
Singleton:
Problema: A Foobar motor quer usar um idenAcador nico para os motores tambm. Como faremos o cdigo sem precisar criar uma classe com o padro Siglenton para o numerador do motor?

PADRES DE PROJETO
Singleton:

PADRES DE PROJETO
Singleton:

Licena para Uso e Distribuio

Este material est disponvel para uso no-comercial e pode ser derivado e/ ou distribudo, desde que uAlizando uma licena equivalente. Maiores informaes: hpp://creaAvecommons.org/licenses/by-nc-sa/2.5/ deed.pt Voc pode copiar, distribuir, exibir e executar a obra, alm de criar obras derivadas, sob as seguintes condies: (a) voc deve dar crdito ao autor original, da forma especicada pelo autor ou licenciante; (b) voc no pode uAlizar esta obra com nalidades comerciais; (c) Se voc alterar, transformar, ou criar outra obra com base nesta, voc somente poder distribuir a obra resultante sob uma licena idnAca a esta.