Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduo
Projetar software OO reusvel e de boa qualidade uma tarefa
difcil;
Para realizar essa tarefa a contento, projetistas experientes usam
solues de sucesso com as quais j trabalharam no passado;
Isso leva descoberta de padres de projeto;
Durante duas dcadas, a comunidade de padres vem se desenvolvendo
de acordo com essa dinmica.
O que um padro?
Maneira testada ou documentada de alcanar um objetivo qualquer;
O que um padro?
O que um padro?
Catlogos de padres
Um catlogo de padres um grupo de padres que esto relacionados
de uma certa forma e podem ser usados juntos ou independentemente:
Core JEE(Java Enterprise Edition);
PoEAA(PatternsofEnterprise Application Architecture);
POSA(Pattern-OrientedSoftware Architecture)
GRASP(General Responsibility Assignment Software
Patterns/Principles)
GoF(Gang ofFour)
Catlogo - GoF
Padres de Criao
fornecem um guia de como instanciar objetos. Esta ao
normalmente envolve decises dinmicas para escolher, por
exemplo, qual classe instanciar ou a quais objetos delegar
responsabilidade. Esse padro nos mostra como estruturar e
encapsular essas decises. H cinco padres de criao GoF:
Abstract Factory, Builder, Factory Method, Prototype e Singleton.
Factory method
"Definir uma interface para criar um objeto mas deixar que subclasses
decidam que classe instanciar. Factory Method permite que uma classe
delegue a responsabilidade de instanciamento s subclasses."
[GoF]
Propsito
Definir uma interface ou classe abstrata para a criao de um
objeto, permitindo decidir qual das implementaes ou subclasses
devem ser instanciadas; deixa uma classe deferir instanciao para
subclasses [Gamma et al, 1994].
Retornar uma instncia dentre muitas possveis classes, dependendo
dos dados providos a ele [Destro, 2004].
Motivao
til para se construir objetos individuais, para um propsito
especfico, sem que a construo requeira conhecimento das classes
especficas sendo instanciadas [Destro, 2004].
Uma classe de abstrao criada, contendo um mtodo em que
decide qual das opes de classe retornar. Ento, apenas este
mtodo invocado, sem conhecer a classe que ser retornada por
ele [Destro, 2004]. Por isso, este padro chamado de Factory
Method (traduzindo: mtodo-fbrica): um mtodo responsvel
pela fabricao de um objeto [Gamma et al, 1994].
Quando Usar
Quando uma classe no pode antecipar ou conhecer a classe dos
objetos que deve criar;
Quando uma classe quer suas subclasses para especificar os objetos
que cria;
Quando classes delegam responsabilidade alguma das vrias
subclasses ajudantes, e deseja-se localizar qual a subclasse
ajudante acessada.
Estrutura
Vantagens
Elimina a necessidade de acoplar classes especficas para aplicao
em nvel de cdigo [Gamma et al, 1994] na programao, lida-se
apenas com a superclasse ou interface, para conhecer os mtodos e
atributos de uma forma genrica, o que permite manipular as
subclasses ou implementaes de maneira particular.
D maior flexibilidade para as classes criar objetos numa classe
que possui o mtodo-fbrica sempre mais flexvel que faz-lo
em separado, assim o mtodo-fbrica funciona como uma
conexo para que uma das subclasses possa prover uma verso
estendida de um objeto.
Desvantagens
Exemplo
Continuao Exemplo
Abstract Factory
Propsito
Prover interfaces ou superclasses para a criao de objetos
relacionados ou dependentes, sem especificar a sua classe concreta
ou implementao [Gamma et al, 1994].
Retornar uma das muitas classes de objetos relacionadas, onde cada
uma delas pode retornar diferentes objetos quando requisitados
[Destro, 2004].
Motivao
Usada na criao de famlias de classes dependentes de uma interface ou
superclasse, com a estrutura bsica do padro Factory Method para fazer o
relacionamento entre as classes dependentes as suas respectivas
superclasses ou interfaces.
Da mesma maneira em que aparece no Factory Method, uma classe
criada contendo um mtodo que decide qual das opes de classes de
domnio retornar; entretanto no sero as classes simples a serem
escolhidas como opes, mas sim as famlias dessas classes, nas quais,
pode-se optar por quais classes internas a cada uma dessas famlias se
quer retornar.
Motivao
Em resumo, um nvel maior de abstrao criado [Destro, 2004]: no se
escolhe a classe de retorno dentro de uma famlia. Opta-se por uma das
classes de retorno e a sua famlia automaticamente retornada. Ou seja,
com base nos parmetros de retorno, uma classe buscada dentro de uma
das famlias disponveis, sem conhecer as estruturas de relacionamento
entre as classes e suas famlias.
Por isso, o mtodo tem o nome de Abstract Factory (fbrica abstrata),
pois pode atuar como uma fbrica de objetos genrica, recebendo um
grupo qualquer de objetos relacionados, que sero criados de maneira
transparente ao seu relacionamento.
Quando Usar
Situaes em que um sistema deve ser independente da maneira
como seus produtos so criados, relacionados e representados;
Quando necessria uma configurao utilizando uma das vrias
famlias de produtos;
No projeto de produtos que devem ser, obrigatoriamente, agrupados
em famlias e seu uso inerente a essa condio;
No fornecimento de uma biblioteca de classes de produtos, e devese revelar apenas suas interfaces ou superclasses, e no suas
implementaes ou subclasses.
Estrutura
Participantes
Super1: a classe abstrata (ou superclasse) dos objetos integrantes das
famlias.
Super2: a classe abstrata (ou superclasse) dos objetos representantes
das famlias.
Sub[1..4]: representam as diferentes classes sobre as quais se deve decidir
instanciar, normalmente indicados como produtos.
Sub[5,6]: representam as famlias, ou seja, classes que possuem
determinados produtos relacionados de maneira intrnseca elas.
AbstractFactory: nesta classe reside o mtodo decisrio, que avalia o
parmetro passado na sua invocao, para buscar um determinado produto
ou objeto, dentro das famlias, representadas por Sub5 e Sub6; ou seja
representa a fbrica abstrata.
PADRES ESTRUTURAIS GOF AULA RAV1
Vantagens
Isola as classes concretas (subclasses ou implementaes) das suas
famlias e da fbrica abstrata, dessa maneira pode-se criar
produtos e associa-los famlia mais apropriada, alm de poder
acess-lo atravs da fbrica abstrata de forma transparente e
independente aos clientes do sistema;
Maior agilidade para alternar entre diferentes famlias de produtos:
possvel alternar entre diferentes famlias de produtos numa
aplicao, independente do nmero de produtos de cada famlia,
pois a fbrica de produtos cria uma famlia de produtos por
completo, podendo-se em seguida utilizar um ou vrios produtos
dessa famlia.
PADRES ESTRUTURAIS GOF AULA RAV1
Vantagens
Maior segurana para trabalhar com produtos de uma mesma
famlia: como a classe fbrica abstrata instanciada uma nica
vez, assegura-se ao cliente da aplicao que se trabalhe com apenas
uma famlia de produtos por vez, pois uma fbrica abstrata pode
alternar entre vrias famlias de produtos, mas cria apenas uma
destas famlias por vez.
Desvantagens
O suporte a novos tipos de produtos se torna mais complicado
[Gamma, et al 1994], pois a fbrica abstrata somente suporta
famlias de produtos, ou seja, para a criao de novos produtos duas
alternativas de projeto podem ser seguidas: A criao de uma
famlia para suportar o novo produto, o que pode ser altamente
desfavorvel no caso de um nmero reduzido de novos produtos por
famlia criada.
A adaptao da fbrica abstrata para suportar um produto-solo,
que no integra nenhuma das famlias disponveis; entretanto isso
implica na modificao da fbrica abstrata e na inutilizao da
estrutura das famlias, o que descaracterizaria este padro.
PADRES ESTRUTURAIS GOF AULA RAV1
Desvantagens
A interface grfica, quando houver, dever ser criada de maneira a
receber os produtos de forma genrica, o que cria impedimentos para
o tratamento grfico especializado dos produtos pela aplicao, pois
esta no deve saber qual dos produtos receber.
Exemplo
Continuao Exemplo
Continuao Exemplo
Selecionada a opo, FabricanteFactory, a fbrica abstrata,
instanciada. A opo escolhida em FabricanteFrame passada como
parmetro para a seleo do produto a ser instanciado, assim como
sua famlia, contendo as informaes a serem consultadas. As
famlias correspondem aos fabricantes (Volkswagen e Chevrolet) e
os produtos aos carros (Gol, Golf, Vectra ou mega); cada famlia
conta com dois produtos (Volkswagen: Gol e Golf, Chevrolet: Vectra
e mega). FabricanteFactory conhece apenas a interface das
famlias e esta, por sua vez, conhece apenas a interface dos
produtos.
Continuao Exemplo
Essas caractersticas acarretam algumas utilizaes recorrentes de
outros padres em AbstratctFactory:
Como a fbrica abstrata deve ser instanciada somente uma vez,
ela criada como um Singleton;
Para escolher os produtos, cada famlia conta com um mtodo
fbrica, pois conhece apenas a superclasse ou interface dos
produtos e no suas implementaes ou subclasses, o que denota a
utilizao do padro Factory Method;
Builder
Propsito
Separar a construo de um objeto de sua respectiva representao,
e desta maneira, a partir dessa mesma construo, produzir
representaes diferentes [Gamma, et al, 1994].
Mover a lgica de construo de uma classe para um objeto externo,
a fim de reduzir a complexidade da mesma e permitir a construo
gradual de objetos-alvo a partir dessa classe [Metsker, 2004].
Motivao
Nem sempre fcil coletar os requisitos que movem a criao de
uma classe. Mais trabalhoso , porm, instanciar objetos de uma
classe que variem de acordo com os requisitos apresentados. Por
exemplo, mudar o layout de uma tela, em tempo de execuo,
quando o usurio seleciona uma opo condizente.
Mas, se fosse possvel separar da classe os seus mtodos
representam o comportamento e a construo dessa classe numa
estrutura de dados a parte, seria possvel tambm, utilizar essa
estrutura para coletar as opes de um cliente e construir objetos
diferentes, conhecendo apenas os parmetros necessrios para esta
construo, provenientes dos atributos que compem a classe em
questo.
PADRES ESTRUTURAIS GOF AULA RAV1
Motivao
Desta maneira se apresenta o padro Builder, um construtor de
objetos, baseado nos mtodos de criao e comportamento de uma
classe, que pode instanciar objetos diferentes, conhecendo apenas
os atributos que compem a classe em questo.
Isto um pouco mais do que uma classe Factory, pois no retornam
objetos que so simplesmente descendentes de uma base, mas que
podem ser totalmente diferentes uns dos outros (por exemplo: telas
diferentes). Builder constri um nmero de objetos, de vrios
modos, dependendo dos dados recebidos [Destro, 2004].
Motivao
Para tal finalidade deve-se separar os atributos (que permanecem
residindo na estrutura da classe) dos seus mtodos (que passam a
integrar objetos em separado) [Destro, 2004], para que o corpo de
mtodos funcione como um captador de dados, e a classe como
um receptor, para instanciar um novo objeto, de acordo com o
que for recebido.
Quando Usar
Quando o algoritmo de criao de um objeto deve ser independente
das suas partes constituintes e da maneira como ele montado;
Para
que
processo
de
construo
permita
diferentes
Estrutura
Participantes
uilder : a interface ou superclasse que contm os mtodos e atributos a
serem redefinidos. Ela oferece a parte da classe que deve ser comum s
construes que vo se seguir.
Participantes
roduto : o elemento que os construtores Sub[n] podem gerar, podendo ser
de um tipo nico, ou podem ser diferenciados, de acordo com a construo
que lhe inerente. O mais interessante e o que diferencia o padro
Builder do Abstract Factory que Produto no precisa ser uma instncia
das classes Sub[n]: pode se tratar de um objeto parte, sem nenhuma
relao classe-objeto com Sub[n] ou mesmo com a classe Builder.
Vantagens
Reduo da extenso e da complexidade de uma classe;
Independncia entre a representao de um objeto e a sua
construo;
Criao de regras graduais de construo para um objeto;
Gerao de construes diversificadas de um tipo de objeto, ou de
construes de objetos diversificados entre si, a partir de um
construtor-base;
Desvantagens
Por ser bastante flexvel, este padro s apresentar desvantagem se
o seu construtor-base for mal planejado, o que poderia resultar em
construes redundantes ou com baixo aproveitamento operacional.
Exemplo
Emisso de ordens de produo, baseadas em polticas de produo
variadas (adaptado [Metsker, 2004]).
Numa montadora de veculos, o processo de montagem de veculos
organizado com base em quatro parmetros especficos: modelo
(qual carro ser produzido), custo unitrio (custo de produo de
cada carro), quantidade (de modelos a ser produzida) e data de
entrega. Esses parmetros representam um documento: a ordem de
produo que orienta o processo de montagem dos veculos.
Exemplo
essa montadora, trabalha-se com o conceito de polticas de produo: a
maneira como se pode estabelecer regras para aceitar ou no uma ordem
de produo; so duas:
ormal: no aceita alteraes na ordem de produo, se ela no atende aos
requisitos mnimos.
lexvel: caso o nmero de carros e/ou o custo de produo sejam inferiores
ao mnimo estabelecido, eles so ajustados para que a ordem de produo
seja aceita.
PADRES ESTRUTURAIS GOF AULA RAV1
Exemplo
essa montadora, trabalha-se com o conceito de polticas de produo: a
maneira como se pode estabelecer regras para aceitar ou no uma ordem
de produo; so duas:
ormal: no aceita alteraes na ordem de produo, se ela no atende aos
requisitos mnimos.
lexvel: caso o nmero de carros e/ou o custo de produo sejam inferiores
ao mnimo estabelecido, eles so ajustados para que a ordem de produo
seja aceita.
PADRES ESTRUTURAIS GOF AULA RAV1
Exemplo
Exemplo
interface OPConstantes apenas disponibiliza constantes que so utilizadas
de maneira recorrente na aplicao, de maneira que podem ser acessadas
pelas classes que a implementam.
classe Principal, ilustrada na Figura 2, inicializa o aplicativo e
PrincipalFrame a interface de entrada do sistema. Em BuilderFrame
apresentada a tela para a insero de parmetros. OPAnalisador analisa os
parmetros e s permite a criao da ordem de produo se data e modelo
estiverem corretos, e conforme a poltica escolhida, instancia um dos
construtores de ordem de produo, que por sua vez criam uma ordem de
produo, que pode ser cadastrada ou no, conforme a maneira como cada
PADRES ESTRUTURAIS GOF AULA RAV1
Exemplo
PBuilder a superclasse que disponibiliza para suas classes-filho as
caractersticas comuns de uma ordem de produo (quantidade de carros,
valor unitrio, etc.). OPBuilderInflex e OPBuilderFlex correspondem,
respectivamente construo da ordem de servio apenas com parmetros
completos e com alguns dos parmetros ausentes, dependendo do
parmetro passado em BuilderFrame, pelo usurio
Prototype
Propsito
Especificar os tipos de objetos a serem criados, usando uma instncia
prototpica, criando novos objetos atravs da cpia desse prottipo
[Gamma et al, 1994].
Substituir a gerao de instncias no-inicializadas de uma classe,
fornecendo novos objetos a partir de uma classe-exemplo [Metsker,
2004].
Motivao
criao de classes se faz mais simples quando possvel partir de um
exemplo, para ento criar as especializaes condizentes com as
necessidades do domnio da aplicao.
Motivao
ntretanto, essa alternativa apresenta um problema de ordem prtica: a
gerao excessiva de classes especializadas (ou subclasses), para cada
necessidade especfica, pode inchar o sistema, fazendo com que essas
classes sempre sejam carregadas, mesmo que o seu uso seja reduzido
[Metsker, 2004].
Motivao
ara sistemas remotos, nem sempre isso possvel: na maioria das
situaes, um servidor de classes fica isolado dos clientes, e estes no
podem conhecer a estrutura da superclasse; apenas podem saber dos
parmetros a serem informados em chamadas de mtodos que
participam da criao de produtos (que no caso, seriam as subclasses).
Motivao
lm de reduzir sensivelmente o nmero de classes [Gamma et al, 1994],
o uso desse padro isola o usurio da estrutura do objeto, ou a classeexemplo de seus produtos [Metsker, 2004] o que ainda facilita a criao
de novas classes-exemplo, quando for estritamente necessrio.
Quando Usar
Quando as classes para instanciao so especificadas em tempo de
execuo ou carregadas dinamicamente;
Para evitar a construo de uma hierarquia de classes-exemplo
estritamente especializada ou demasiadamente ligada a um tipo de
produto;
Quando as instncias de uma classe podem ter apenas uma ou
poucas maneiras de manifestar seu estado.
Estrutura
Participantes
Sub [1..4]: representam as diferentes classes-exemplo sobre as
quais se deve decidir copiar. Elas implementaro uma interface
com o mtodo de clonagem, o que possibilita que a responsabilidade
do mtodo, e a deciso sobre o que clonar, fiquem isoladas.
InterfaceClonavel : interface Java que estende a classe Cloneable,
ou seja, oferece um mtodo de clonagem para ser redefinido
(duplicate), com um tipo de retorno que ser comum s classes que
a implementarem.
Participantes
Prototype : a classe que propriamente faz as cpias dos elementos
escolhidos; como o tipo de retorno proveniente da implementao de
uma interface padro, o objeto dessa classe faz as cpias de maneira
genrica, ou seja, sem conhecer o tipo de objeto que estar clonando.
Vantagens
Isolamento entre os produtos (subclasses ou implementaes) e suas
classes-exemplo [Metsker, 2004]; esta vantagem se d por dois
fatores:
Facilita a criao de novas classes-exemplo quando for
devidamente necessrio menos acopladas, o que apropriado
para classes que diferem apenas em seus atributos, mas no em
seus comportamentos [Gamma et al, 1994];
Fornece de forma transparente e independente acesso ao
sistema, apenas pelo conhecimento dos parmetros necessrios
para a criao das cpias, a partir das classes exemplo.
Vantagens
Reduo do nmero de subclasses: as cpias podem suprir as
especializaes sejam elas por herana ou por implementao de
interfaces pois uma vez criadas com um formato padro, podem
ser modificadas dentro de cada contexto e necessidade inerentes
aplicao.
Configurao para o carregamento dinmico de novas classes: com
este padro, possvel configurar a instanciao de classes que
originalmente no estavam ligadas ao programa, pois ao invs de
invocar um construtor esttico, d suporte criao de instncias
em tempo de execuo, assim que sua respectiva classe carregada
[Gamma et al, 1994].
PADRES ESTRUTURAIS GOF AULA RAV1
Desvantagens
nica desvantagem encontrada foi a da utilizao do mtodo Clone:
Este mtodo cria uma cpia exata de um objeto que lhe for passado
como parmetro. Uma cpia exata carrega consigo uma espcie de
fotografia
do
objeto:
no
apenas
seu
comportamento
Desvantagens
ssim, o programador deve ter em mente esta diferena ao implementar
este padro, pois objetos clonados podem apresentar problemas de
incluso
de
classes
no
existentes
e/ou
referencias
circulares
Exemplos
Linha de montagem de uma fbrica, onde um modelo de carro
especificado para a sua produo em srie [Tadarguila, 2005].
Exemplo
classe Principal, ilustrada na Figura 2 a classe Java que inicializa a
execuo do aplicativo. PrincipalFrame a interface de entrada e em
PrototypeFrame as opes de produo so exibidas.
elecionadas
as
opes,
classe
Prototype
instanciada
por
Exemplo
instncia de Protoytpe no sabe que classe de modelo ser clonada, e
nem como cada classe ser clonada. Essas responsabilidades so
inerentes s classes dos modelos (Gol, Golf, Vectra e Omega; Carro
apenas a superclasse para generalizar as caractersticas comuns dos
veculos, ela no participa desse Padro) isso feito pela maneira como
essas classes implementam a interface CarroClonavel, que por sua vez,
estende a classe nativa Cloneable que oferece um mtodo genrico de
cpia de objetos garantindo que as classes-exemplos (ou seja, as
classes dos modelos) no fiquem acopladas ao cliente (nesse caso, o
objeto da classe Prototype requisita as cpias, com base nos parmetros
passados).
PADRES ESTRUTURAIS GOF AULA RAV1
Exemplo
rototype aciona o mtodo de clonagem, no objeto da classe-exemplo
passado como parmetro (isto significa o modelo) retornando um vetor
dinmico com o nmero de clones do modelo especificado. A classe Carro
no participa do padro, serve apenas como classe-pai das classesexemplo (o que caracteriza classes com o mesmo comportamento, mas
com atributos diferentes, j comentadas anteriormente)
Exemplo
ssas caractersticas acarretam algumas utilizaes recorrentes de outros
padres em conjunto com Prototype:
Apesar de serem muito parecidos, e, de certa maneira, parecerem
mtodos concorrentes, Prototype e AbstractFactory podem ser usados em
conjunto: uma fbrica abstrata pode ter um conjunto de prottipos,
dos quais pode obter cpias e retorna-las como produtos aos clientes
[Gamma et al, 1994];
Para a criao de interfaces grficas como em conjuntos de
visualizao e layout, por exemplo, um LookAndFeel Java Prototype
PADRES ESTRUTURAIS GOF AULA RAV1
Singleton
"Garantir que uma classe s tenha uma nica instncia, e prover um ponto
de acesso global a ela."
[GoF]
Propsito
Padro de projeto simples que ilustra vrias caractersticas
necessrias aos padres de projeto. Classificado criacional, pois est
relacionado com processo de criao de objetos, possuindo
inmeras aplicaes e implementao bastante direta.
Tem como propsito garantir a existncia de uma instncia nica de
uma classe especfica, que possa ser acessada de maneira global e
uniforme.
Motivao
O que motiva sua existncia que muitas aplicaes necessitam
garantir a ocorrncia de uma instncia de classes especficas, pois
tais objetos podem fazer uso de recursos cuja utilizao deve ser
exclusiva, ou porque se deseja que os demais elementos do sistema
compartilhem um nico objeto particular.
Estas situaes ocorrem quando vrios subsistemas utilizam um
nico
arquivo
de
configurao,
permitindo
sua
modificao
Motivao
Ao mesmo tempo no se quer que os usurios destas classes zelem
por esta condio de unicidade, mas se deseja oferecer acesso
simples instncia nica que dever existir, portanto se adiciona
estas responsabilidades s classes que devero constituir um
Singleton.
Quando Usar
Haver uma nica instncia de uma classe e esta deve ser acessada a
partir de um ponto de acesso bem-conhecido
A instncia nica deve ser extensvel atravs de subclasses e
clientes podem usar instncias diferentes polimorficamente, sem
modificao de cdigo.
Estrutura
Vantagens
cesso controlado instncia nica;
Singleton tem controle sobre como e quando clientes acessam a instncia;
spao de nomes reduzido;
Singleton melhor que variveis globais, j que as "globais" podem ser
encapsuladas na instncia nica, deixando um nico nome externo visvel;
ermite refinamento de operaes e de representao;
PADRES ESTRUTURAIS GOF AULA RAV1
Exemplo
exemplo (adaptado [Destro, 2004]) utiliza um campo privado e esttico do
tipo da prpria classe para armazenar a referncia da nica instncia
permitida, o qual deve ser inicializado de modo a indicar a inexistncia de
tal instncia. Um mtodo esttico, cujo tipo de retorno tambm a prpria
classe, prov o ponto nico de acesso a tal instncia.
criao
ocorrer
quando
estritamente
necessrio
(lazy
instantiation).
PADRES ESTRUTURAIS GOF AULA RAV1
Exemplo
Exemplo
Figura 3 ilustra a implementao do Padro de Projeto Singleton. A classe
DBConexao destinada a fornecer uma conexo nica para o Banco de
Dados especfico. Pelo uso desta classe pode-se reduzir a quantidade de
recursos utilizados por uma aplicao durante o acesso ao banco de dados,
garantindo uma nica conexo. Apenas por meio do mtodo getConexao()
possvel obter a referncia para a conexo nica. Existe um mtodo
adicional Shutdown() criado para garantir que a conexo seja encerrada
adequadamente. Note que so arbitrrias as definies de campos e
mtodos adicionais dentro de uma classe que pretende ser um Singleton,
devendo atender aos requisitos especficos da aplicao.
PADRES ESTRUTURAIS GOF AULA RAV1
Exemplo
elo mtodo getConexao() da classe DBConexao obtm uma conexo para
o banco de dados (cujas strings referentes ao driver e url de conexo foram
inclusas diretamente no cdigo da classe). Por esta conexo, podem ser
estabelecidas sesses com o banco de dados, o que permite a execuo de
comandos SQL e processamento dos resultados obtidos. Tentativas de novas
conexes retornaro uma referncia para o mesmo objeto, reduzindo a
quantidade de recursos tomados do sistema.
Exemplo
classe BDTela responsvel pela interface com o usurio, ela oferece os
quatro botes para conexo e um para desconexo. Todos os botes para
conexo tm a mesma finalidade, ou seja, conectar com o BD, mas caso j
exista um driver carregado para aquele BD, o mesmo somente ser
atualizado.
Padres Estruturais
definem caminhos comuns para a organizao de diferentes tipos de
objetos, facilitando sua integrao e colaborao mutua. H sete
padres estruturais GoF: ?? Bridge, Composite, Decorator, Facade,
Flyweight e Proxy
Decorator
"Anexar
responsabilidades
adicionais
a um
objeto
dinamicamente.
Propsito
Agregar responsabilidades adicionais a um objeto dinamicamente.
Classes decoradoras oferecem uma alternativa flexvel ao uso de
herana para estender uma funcionalidade [Silva, 2005].
Motivao
Adicionar responsabilidades a um objeto, mas no sua classe.
Acontece, por exemplo, com criao de interfaces grficas, quando
se deseja acrescentar uma borda a um componente qualquer ou
uma barra de rolagem a uma rea de texto. Uma abordagem mais
flexvel inserir o componente em outro objeto que adiciona a
borda, um Decorator [Silva, 2005].
Quando Usar
Utilizado para adicionar responsabilidades a objetos individuais de
forma dinmica e transparente, isto , sem afetar outros objetos,
da mesma forma, quando se quer retirar responsabilidades.
[Faerman,
2005],
alm
de
outras
Estrutura
Estrutura
Participantes
Componente : define a interface para objetos que podem ter
responsabilidades acrescentadas a eles dinamicamente.
ComponenteConcreto
define
um
objeto
para
qual
DecoratorConcretoB:
acrescenta
responsabilidades ao componente
Vantagens
Fornece uma flexibilidade maior do que a herana esttica.
Evita a necessidade de colocar classes sobrecarregadas de recursos
em uma posio mais alta da hierarquia.
Simplifica a codificao permitindo que voc desenvolva uma srie
de classes com funcionalidades especficas, em vez de codificar
todo o comportamento no objeto.
Aprimora a extensibilidade do objeto, pois as alteraes so feitas
codificando novas classes.
Exemplos
Exemplos
O exemplo ilustrado na Figura 21, visa gerar janelas com caractersticas que
podem variar de uma janela para outra. Por exemplo, o cliente pode decidir
entre construir uma janela com barra de menus ou no. Desta forma
consegue-se aumentar o nmero de possibilidades de janelas diferentes
apresentadas com um pequeno nmero de classes.
JanelaBarraStatus
JanelaBarraFerramenta
herdam
de
Composite
Propsito
Compe objetos em estruturas do tipo rvore para representar
hierarquias todo-parte. Faz tambm com que o tratamento dos
objetos individuais e de suas composies seja uniforme.
Motivao
Aplicaes grficas como editores de desenho e sistemas de captura
de esquema deixam os usurios construrem diagramas complexos a
partir
de
Componentes
simples.
usurio
pode
agrupar
Quando Usar
Quiser representar hierarquias parte-todo de objetos;
Deseja que os clientes sejam capazes de ignorar as diferenas entre
composio de objetos e objetos individuais. Clientes trataro todos os
objetos uniformemente na estrutura Composite.
Estrutura
Participantes
Componente:
Declara a interface para objetos na composio;
Implementa comportamento default para interface comum a todas as
classes, como apropriado;
Declara uma interface para acessar ou gerenciar seus Componentes
filhos;
Folha:
Representa objetos folhas na composio. Uma folha no tem filhos;
Define comportamento para objetos primitivos na composio.
PADRES ESTRUTURAIS GOF AULA RAV1
Participantes
Composio:
Define comportamento para Componentes que tm filhos;
Armazena Componentes filhos;
Implementa operaes relacionadas com filhos na interface do
Componente.
Cliente:
Manipula objetos na composio atravs da interface Componente.
Vantagens
Define a consistncia das hierarquias de classes de objetos primitivos e
objetos composio.
Clientes podem tratar estruturas compostas e objetos individuais
uniformemente. Clientes normalmente no sabem (e no deveriam se
preocupar) se eles esto tratando com uma folha ou uma composio;
Torna
mais
fcil
adicionar
novos
tipos
de
Componentes.
Novas
Desvantagens
Quando uma composio tem apenas alguns Componentes, voc ter de
usar uma checagem em tempo de execuo para isto.
Adapter
Propsito
O principal objetivo do Adapter facilitar a converso da interface
de uma classe para outra interface mais interessante para o cliente,
fazendo com que vrias classes possam trabalhar em conjunto
independentemente das interfaces originais. s vezes preciso
modificar uma classe que no pode ser alterada adequadamente
devido falta do cdigo fonte (alguma biblioteca de classes
comercial), ou por alguma outra razo. O Adapter uma das formas
de modificar classes nestas circunstncias, sendo classificado com a
de finalidade estrutural e abrange tanto escopo de classe quanto de
objeto.
Motivao
Uma classe j existente e sua interface no combinam com a
esperada pelo cliente;
Se quer criar uma classe reutilizvel que coopera com classes no
relacionadas
ou
no
previstas,
isto
classes
que
no
Quando Usar
Desejar usar uma classe existente e sua interface no corresponde ao que
voc precisa;
Desejar criar uma classe reutilizvel que coopera com classes imprevistas
ou no relacionveis, isto , classes que no tem necessariamente
interfaces compatveis
Estrutura
Participantes
Vantagens
Exemplo
Exemplo
Bridge
Propsito
Desacopla uma abstrao de sua implementao de maneira que
ambas possam variar independentemente.
Motivao
O que motiva a utilizao do padro Bridge a necessidade de um
driver, permitindo implementaes especficas para tratar objetos
em diferentes meios persistentes.
Quando Usar
Quando
implementaes
so
compartilhadas
entre
objetos
desconhecidos do cliente
Estrutura
Participantes
Vantagens
Eliminao
de
dependncias
em
tempo
de
compilao
das
implementaes.
Exemplo
Exemplo
Proxy
Quando usar
antagens
Transparncia: mesma sintaxe usada na comunicao entre o cliente e
sujeito real usada no proxy
Permite o tratamento inteligente dos dados no cliente
Permite maior eficincia com caching no cliente
esvantagens
Possvel impacto na performance
Transparncia nem sempre 100% (fatores externos como queda da
rede podem tornar o proxy inoperante ou desatualizado)
PADRES ESTRUTURAIS GOF AULA RAV1
Problema
istema quer utilizar objeto real...
Faade
Propsito
ferecer uma interface nica para um conjunto de interfaces de um
subsistema.
efinir uma interface de nvel mais elevado que torna o subsistema mais
fcil de usar [Silva, 2005].
eduzir a complexidade do relacionamento entre uma classe relativa ao
cliente e as demais classes utilitrias [Junior, 2004].
Motivao
ma grande vantagem da programao orientada a objetos que ela ajuda a
evitar que as aplicaes se tornem programas monolticos, com pedaos
incorrigivelmente entrelaados. No entanto, a aplicabilidade variada das
classes em um subsistema orientado a objetos pode oferecer uma
variedade expressiva de opes [Metsker, 2004].
xistem circunstncias onde necessrio utilizar diversas classes diferentes
para que uma tarefa possa ser completada, caracterizando uma situao
onde uma classe cliente necessita utilizar objetos de um conjunto
especfico de classes utilitrias que, em conjunto, compem um subsistema
PADRES ESTRUTURAIS GOF AULA RAV1
particular ou que representam o acesso a diversos
subsistemas distintos
Motivao
Quando usar?
riao de interfaces mais simples para um ou mais subsistemas complexos.
eduo de dependncia entre o cliente e as classes existentes nos
subsistemas, ocasionando a reduo da coeso do sistema
riao de sistemas em camadas. Este padro prov o ponto de entrada para
cada camada (nvel) do subsistema.
Vantagens
rotege os clientes da complexidade dos componentes do subsistema;
romove acoplamento fraco entre o subsistema e seus clientes;
eduz dependncias de compilao, possivelmente complexas ou circulares;
acilita a portabilidade do sistema [Junior, 2004];
eduz a unio entre subsistemas desde que cada subsistema utilize seu
prprio padro Facade e outras partes do sistema utilizem o padro Facade
PADRES ESTRUTURAIS GOF AULA RAV1
para comunicar-se com o subsistema [Allen e Bambara,
2003];
Flyweight
Prs e contras
uando usar Flyweight
Quando o tamanho do conjunto de objetos for significativamente
menor que a quantidade de vezes em que eles so usados na aplicao
Quando objetos podem ser usados em diferentes contextos ao mesmo
tempo (agindo sempre como um objeto independente)
uando no usar
Quando o estado dos objetos no for imutvel ( preciso passar o
estado mutvel como parmetro e isto pode ser impraticvel se o
estado consistir de vrios objetos)
Quando for necessrio elaborar um algoritmo
ouESTRUTURAIS
algo complicado
PADRES
GOF AULApara
RAV1
Problema
Padres Comportamentais
so projetados para organizar, gerenciar e combinar diferentes
comportamentos. H 11 padres comportamentais GoF: Chain of
Responsibility, Command, Interpreter, Iterator, Mediator, Memento,
Observer, State, Strategy, Template Method e Visitor.
Interpreter
"Dada uma linguagem, definir uma representao para sua gramtica junto
com um interpretador que usa a representao para interpretar sentenas
na linguagem.
[GoF]
Interpreter
Template Method
Template Method
ornece uma estrutura fixa, de um algoritmo, esta parte fixa deve estar
presente na superclasse, sendo obrigatrio uma classeAbstrata que possa
conter um mtodo concreto, pois em uma interface s possvel conter
mtodos abstratos que definem um comportamento, esta a vantagem de
ser uma Classe Abstrata porque tambm ir fornecer mtodos abstratos s
suas subclasses, que por sua vez herdam este mtodo, por Herana
(programao), e devem implementar os mtodos abstratos fornecendo um
comportamento concreto aos mtodos que foram definidos como abstratos.
Com
isso
certas
partes,
do
algoritmo,
sero
preenchidos
por
Quando usar
Estrutura
Chain of Responsability
Propsito
Evitar a unio entre o remetente de uma solicitao e seu receptor, dando aos
diversos objetos uma chance de tratar da solicitao [Allen & Bambara, 2003].
Motivao
interface
visvel
do
objeto
permanecerem
isolados
de
detalhes
de
Quando usar
Mais de um objeto pode tratar de uma solicitao e este desconhecido.
Uma solicitao deve ser emitida para um entre os vrios objetos e o
receptor, no sendo especificado explicitamente.
O conjunto de objetos capaz de tratar da solicitao deve ser especificado
dinamicamente.
Estrutura
Participantes
limentador : define a interface para tratar as solicitaes e implementa a
referncia ao sucessor (opcional).
limentadorConcretoA, ..., AlimentadorConcretoN : trata as solicitaes
pelas
quais
responsvel.
Pode
acessar
seu
sucessor.
Se
Vantagens
vita acoplamento do transmissor de um requisio com seus receptores,
fazendo com que mais de um projeto tenha a chance de manipular a
requisio.
ncadeia os objetos receptores e passa a requisio ao longo dessa cadeia
at que um objeto possa manipul-lo.
eduz a vinculao.
diciona flexibilidade.
PADRES ESTRUTURAIS GOF AULA RAV1
Exemplo
o exemplo ilustrado na Figura 2, a implementao relacionada a uma
mquina de refrigerantes, na qual vai-se adicionando moedas at o valor
do refrigerante ser alcanado para a sua aquisio.
classes
contidas
dentro
do
pacote
moedas
so
os
Exemplo
Exemplo
omo existem infinitos tipos de moedas, pois possvel encontrar moedas
tanto as que esto em circulao em nosso pas, como as que esto em
circulao nas mais de outras duzentas naes, alm das moedas que j so
antigas e no possui mais validade monetria, a mquina de refrigerantes
tem que descobrir qual moeda entrou atravs de possveis padres, como
por exemplo, a espessura, raio e peso.
este exemplo, a cada moeda que entra - a cada requisio - uma classe
alimentadora analisa a moeda e busca ver se est dentro dos seus padres,
caso no esteja, vai passar para alguma outra classe alimentadora at que
seja descoberta qual moeda entrou. Caso no se encaixe em nenhuma das
PADRES ESTRUTURAIS GOF AULA RAV1
Bibliografia
Utilizando UML e Padres: uma introduo anlise e ao
projeto orientados a objetos - 3 Edio
Autor: Larman, Craig