Escolar Documentos
Profissional Documentos
Cultura Documentos
A Inspirao
A idia de padres foi apresentada por Christopher Alexander em 1977 no contexto de Arquitetura (de prdios e cidades): Cada padro descreve um problema que ocorre repetidamente de novo e de novo em nosso ambiente, e ento descreve a parte central da soluo para aquele problema de uma forma que voc pode usar esta soluo um milho de vezes, sem nunca implementa-la duas vezes da mesma forma.
3
Catlogo de solues
Um padro encerra o conhecimento de uma pessoa muito experiente em um determinado assunto de uma forma que este conhecimento pode ser transmitido para outras pessoas menos experientes. Outras cincias (p.ex. qumica) e engenharias possuem catlogos de solues. Desde 1995, o desenvolvimento de software passou a ter o seu primeiro catlogo de solues para projeto de software: o livro GoF.
4
O Formato de um padro
Todo padro inclui o mnimo:
Nome Problema Soluo Conseqncias / Foras Exemplo
10
11
Exemplo:
Fbrica Abstrata (Abstract Factory (87)) - padro de Criao de objetos
12
Objetivo: prover uma interface para criao de famlias de objetos relacionados sem especificar sua classe concreta.
13
Abstract Factory
- Motivao
Considere uma aplicao com interface grfica que implementada para plataformas diferentes (Motif para UNIX e outros ambientes para Windows e MacOS). As classes implementando os elementos grficos no podem ser definidas estaticamente no cdigo. Precisamos de uma implementao diferente para cada ambiente. At em um mesmo ambiente, gostaramos de dar a opo ao usurio de implementar diferentes aparncias (look-and-feels). Podemos solucionar este problema definindo uma classe abstrata para cada elemento grfico e utilizando diferentes implementaes para cada aparncia ou para cada ambiente. Ao invs de criarmos as classes concretas com o operador new, utilizamos uma Fbrica Abstrata para criar os objetos em tempo de execuo. O cdigo cliente no sabe qual classe concreta utilizamos.
14
Abstract Factory -
Aplicabilidade
Use uma fbrica abstrata quando: um sistema deve ser independente da forma como seus produtos so criados e representados; um sistema deve poder lidar com uma famlia de vrios produtos diferentes; voc quer prover uma biblioteca de classes de produtos mas no quer revelar as suas implementaes, quer revelar apenas suas interfaces.
15
Abstract Factory -
Estrutura
Client AbstractProductA
ProductA2
ConcreteFactory1 ConcreteFactory2
ProductA1
CreatProductA() CreatProductB()
CreatProductA() CreatProductB()
AbstractProductB
ProductB2
ProductB1
16
Abstract Factory -
Participantes
AbstractFactory (WidgetFactory) ConcreteFactory (MotifWidgetFactory, WindowsWidgetFactory) AbstractProduct (Window, ScrollBar) ConcreteProduct (MotifWindow, MotifScrollBar, WindowsWindow, WindowsScrollBar) Client - usa apenas as interfaces declaradas pela AbstractFactory e pelas classes AbstratProduct
17
Abstract Factory -
Colaboraes
Normalmente, apenas uma instncia de ConcreteFactory criada em tempo de execuo. Esta instncia cria objetos atravs das classes ConcreteProduct correspondentes a uma famlia de produtos. Uma AbstractFactory deixa a criao de objetos para as suas subclasses ConcreteFactory.
18
Abstract Factory -
Conseqncias
O padro 1. isola as classes concretas dos clientes; 2. facilita a troca de famlias de produtos (basta trocar uma linha do cdigo pois a criao da fbrica concreta aparece em um nico ponto do programa); 3. promove a consistncia de produtos (no h o perigo de misturar objetos de famlias diferentes); 4. dificulta a criao de novos produtos ligeiramente diferentes (pois temos que modificar a fbrica abstrata e todas as fbricas concretas). 19
Abstract Factory 1. 2.
Implementao
3.
Fbricas abstratas em geral so implementadas como (127). Na fbrica abstrata, cria-se um mtodo fbrica para cada tipo de produto. Cada fbrica concreta implementa o cdigo que cria os objetos de fato. Se tivermos muitas famlias de produtos, teramos um excesso de classes fbricas concretas. Para resolver este problema, podemos usar o Prototype (117): criamos um dicionrio mapeando tipos de produtos em instncias prototpicas destes produtos. Ento, sempre que precisarmos criar um novo produto pedimos sua instncia prototpica que crie um clone (usando um mtodo como clone() ou copy()).
20
Abstract Factory 4.
Implementao
5.
Em linguagens dinmicas como Smalltalk onde classes so objetos de primeira classe, no precisamos guardar uma instncia prototpica, guardamos uma referncia para a prpria classe e da utilizamos o mtodo new para construir as novas instncias. Definindo fbricas extensveis. normalmente, cada tipo de produto tem o seu prprio mtodo fbrica; isso torna a incluso de novos produtos difcil. soluo: usar apenas um mtodo fbrica Product make (string thingToBeMade) isso aumenta a flexibilidade mas torna o cdigo menos seguro (no teremos verificao de tipos pelo 21 compilador).
Abstract Factory -
Usos Conhecidos
InterViews usa fbricas abstratas para encapsular diferentes tipos de aparncias para sua interface grfica ET++ usa fbricas abstratas para permitir a fcil portabilidade para diferentes ambientes de janelas (XWindows e SunView, por exemplo) Sistema de captura e reproduo de vdeo feito na UIUC usa fbricas abstratas para permitir portabilidade entre diferentes placas de captura de vdeo. Em linguagens dinmicas como Smalltalk (e talvez em POO em geral) classes podem ser vistas como fbricas de objetos.
22
Abstract Factory -
Padres Relacionados
Fbricas abstratas so normalmente implementadas com mtodos fbrica (FactoryMethod (107)) mas podem tambm ser implementados usando Prototype (117). O uso de prottipos particularmente importante em linguagens no dinmicas como C++ e em linguagens "semi-dinmicas" como Java. Em Smalltalk, no to relevante. Curiosidade: a linguagem Self no possui classes, toda criao de objetos feita via clonagem. Uma fbrica concreta normalmente um Singleton (127) 23
Os 23 Padres do GoF
Criao
Abstract Factory Builder Factory Method Prototype Singleton
24
Os 23 Padres do GoF
Estruturais
Adapter Bridge Composite Decorator Faade Flyweight Proxy
25
Os 23 Padres do GoF
Comportamentais
Observer State Strategy Template Method Visitor
26
Prxima aula
Em grupos de 3 alunos devero estudar um tipo de padro do Gof e apresentar em sala de aula para os outros.
27
Recapitulando
Voltando ao Christopher Alexander:
Cada padro descreve um problema que ocorre repetidamente de novo e de novo em nosso ambiente, e ento descreve a parte central da soluo para aquele problema de uma forma que voc pode usar esta soluo um milho de vezes, sem nunca implement-la duas vezes da mesma forma.
28