Mudanças entre as edições de "Design patterns em linguagens dinâmicas"
Linha 90: | Linha 90: | ||
!# !!type !!HF !!R!!name!!PN!!feature!!class="unsortable"|related patterns |
!# !!type !!HF !!R!!name!!PN!!feature!!class="unsortable"|related patterns |
||
|- |
|- |
||
− | | 1||Creational||Abstract Factory||+ ||6 |
+ | | 1||Creational||Abstract Factory||+ ||6||MA||First class types||Factory Method, Prototype, Singleton |
|- |
|- |
||
− | | 2||Creational||Builder|| ||1 |
+ | | 2||Creational||Builder|| ||1||MA||Multimethods||Abstract Factory, Composite |
|- |
|- |
||
− | | 3||Creational||Factory Method||+ ||3 |
+ | | 3||Creational||Factory Method||+ ||3||M||First class types||Abstract Factory, Template Method, Prototypes |
|- |
|- |
||
− | | 4||Creational||Prototype|| ||3 |
+ | | 4||Creational||Prototype|| ||3||||||Abstract Factory, Composite, Decorator |
|- |
|- |
||
− | | 5||Creational||Singleton||+ ||4 |
+ | | 5||Creational||Singleton||+ ||4||A||||Abstract Factory, Builder, Prototype |
|- |
|- |
||
− | | 6||Structural||Adapter||+ ||3 |
+ | | 6||Structural||Adapter||+ ||3||||||Bridge, Decorator, Proxy |
|- |
|- |
||
− | | 7||Structural||Bridge|| ||1 |
+ | | 7||Structural||Bridge|| ||1||||||Abstract Factory, Adapter |
|- |
|- |
||
− | | 8||Structural||Composite||+ ||9 |
+ | | 8||Structural||Composite||+ ||9||||||Chain of Responsibility, Decorator, Flyweight, Iterator, Visitor |
|- |
|- |
||
− | | 9||Structural||Decorator||+ ||4 |
+ | | 9||Structural||Decorator||+ ||4||||||Adapter, Composite, Strategy |
|- |
|- |
||
− | | 10||Structural|Facade||+ ||1 |
+ | | 10||Structural||Facade||+ ||1||MA||Modules||Abstract Factory, Mediator, Singleton |
|- |
|- |
||
− | | 11||Structural||Flyweight|| ||4 |
+ | | 11||Structural||Flyweight|| ||4||M||First class types||Composite, State, Strategy |
|- |
|- |
||
− | | 12||Structural||Proxy||+++||1 |
+ | | 12||Structural||Proxy||+++||1||M||First class types||Adapter, Decorator |
|- |
|- |
||
| 13||Behavioral||Chain of Responsibility|| ||1||M||First class types||Composite |
| 13||Behavioral||Chain of Responsibility|| ||1||M||First class types||Composite |
Edição das 09h27min de 17 de junho de 2013
Proposta
Grupo de estudos e discussão presencial no Garoa Hacker Clube para rever padrões de projeto e sua aplicabilidade e variações em linguagens dinâmicas (Python, Ruby, JavaScript etc.).
Contexto
O livro Design Patterns de Gamma et. al., documenta 23 padrões de projeto. A maioria dos exemplos de código são em C++ e há alguns em Smalltalk.
Em 1996, Peter Norvig fez uma apresentação Design Patterns in Dynamic Languages
Nesta apresentação o slide 10 tem o seguinte conteúdo:
Design Patterns in Dylan or Lisp
16 of 23 patterns are either invisible or simpler, due to:
- First-class types (6): Abstract-Factory, Flyweight, Factory-Method, State, Proxy, Chain-Of-Responsibility
- First-class functions (4): Command, Strategy, Template-Method, Visitor
- Macros (2): Interpreter, Iterator
- Method Combination (2): Mediator, Observer
- Multimethods (1): Builder
- Modules (1): Facade
Proposta detalhada
Considerando que linguagens dinâmicas modernas como Python, Ruby e JavaScript emprestam várias das características dinâmicas de Lisp mencionadas por Norvig, a idéia é rever um subconjunto dos design patterns originais avaliando sua utilidade e alternativas de implementação em uma ou mais dessas linguagens.
- Para cada encontro, escolher 2 padrões para estudo e discussão:
- um dos 16 da lista do Norvig (acima)
- um dos 7 restantes, que não aparecem nesta lista porque devem ser aplicáveis também em linguagens dinâmicas na forma descrita no livro Design Patterns.
- Apresentar código exemplo nas linguagens dinâmicas de preferência dos participantes
Pares de padrões relacionados
- Memento e Visitor
- Proxy e Decorator
- Prototype, Singleton e Borg
Cronograma
Reuniões em 2 quartas-feiras por mês (a cada 2 ou 3 semanas), começando sempre às 19:30.
Datas:
- 3/04 - Iterator e Generator, GRASP, exemplo de Template Method
- 17/04 - Memento e Visitor
- 8/05 - Composite e Flyweight
- 22/05 - Strategy, State e Chain of Responsability. Motivação: Remover uma grande sequência de IFs
- 5/06 - Abstract Factory, Observer, Singleton e Borg*
- 19/06
(*) Borg não é um dos 23 patterns do GoF, mas é um substituto interessante do Singleton em Python
Padrões
# | número do padrão no livro de Gamma et.al. |
---|---|
type | família do padrão |
HF | analisado no livro Head First Design Patterns (+++: três análises) |
R | número de citações como padrão relacionado (v. related patterns) |
name | nome do padrão |
PN | M=mencionado; A=analisado nos slides de Peter Norvig |
feature | característica de linguagens dinâmicas que afeta este padrão |
related patterns | padrões relacionados a este no livro de Gamma et.al. |
# | type | HF | R | name | PN | feature | related patterns |
---|---|---|---|---|---|---|---|
1 | Creational | Abstract Factory | + | 6 | MA | First class types | Factory Method, Prototype, Singleton |
2 | Creational | Builder | 1 | MA | Multimethods | Abstract Factory, Composite | |
3 | Creational | Factory Method | + | 3 | M | First class types | Abstract Factory, Template Method, Prototypes |
4 | Creational | Prototype | 3 | Abstract Factory, Composite, Decorator | |||
5 | Creational | Singleton | + | 4 | A | Abstract Factory, Builder, Prototype | |
6 | Structural | Adapter | + | 3 | Bridge, Decorator, Proxy | ||
7 | Structural | Bridge | 1 | Abstract Factory, Adapter | |||
8 | Structural | Composite | + | 9 | Chain of Responsibility, Decorator, Flyweight, Iterator, Visitor | ||
9 | Structural | Decorator | + | 4 | Adapter, Composite, Strategy | ||
10 | Structural | Facade | + | 1 | MA | Modules | Abstract Factory, Mediator, Singleton |
11 | Structural | Flyweight | 4 | M | First class types | Composite, State, Strategy | |
12 | Structural | Proxy | +++ | 1 | M | First class types | Adapter, Decorator |
13 | Behavioral | Chain of Responsibility | 1 | M | First class types | Composite | |
14 | Behavioral | Command | + | 1 | M | First class functions | Composite, Memento, Prototype |
15 | Behavioral | Interpreter | 1 | MA | Macros | Composite, Flyweight, Iterator, Visitor | |
16 | Behavioral | Iterator | + | 3 | MA | Macros | Composite, Factory Method, Memento |
17 | Behavioral | Mediator | 2 | MA | Method Combination | Facade, Observer | |
18 | Behavioral | Memento | 2 | Command, Iterator | |||
19 | Behavioral | Observer | + | 1 | MA | Method Combination | Mediator, Singleton |
20 | Behavioral | State | + | 1 | M | First class types | Flyweight, Singleton |
21 | Behavioral | Strategy | + | 3 | MA | First class functions | Flyweight |
22 | Behavioral | Template Method | + | 1 | M | First class functions | Factory Method, Strategy |
23 | Behavioral | Visitor | 2 | M | First class functions | Composite, Interpreter |
Grafo de relação entre padrões
Referências
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns: Elements of Reusable Object-Oriented Software (livro)
- Peter Norvig: http://www.norvig.com/design-patterns/index.htm (slides)
- Russ Olsen: Design Patterns in Ruby (livro) http://designpatternsinruby.com/ (site)
- Sherman Alpert, Kyle Brown, Bobby Woolf: The Design Patterns Smalltalk Companion (livro)
- Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra Head First Design Patterns (livro)
Inscrições
Para se inscrever, coloque seu nome aqui (é preciso criar uma conta no wiki para editar a página)
- Luciano Ramalho
- Aylons Hazzud
- Luiz Hespanha
- Erick Müller
- Francisco
- Lucas Emanoel
- Gustavo Fonseca
- Willian Carvalho
- Mario Augusto Mania
- Vinicius Roque (vou com o m3bsd)
- Rafael Novello
- Daniel Stori
- Fabio Batalha
- Jamil Atta
- Tales Cione
- William Espindola
- Claudio Marcos
- Rodrigo Rosa
- Leonardo Rochael Almeida
Mais informações
Dúvidas, comentários e sugestões: inscreva-se e mande sua mensagem para o grupo de discussão do Garoa Hacker Clube em https://groups.google.com/group/hackerspacesp . Coloque Design Patterns no assunto.