Mudanças entre as edições de "Design patterns em linguagens dinâmicas"

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
Linha 86: Linha 86:
 
!# !!type !!HF !!R!!name!!PN!!feature!!class="unsortable"|related patterns
 
!# !!type !!HF !!R!!name!!PN!!feature!!class="unsortable"|related patterns
 
|-
 
|-
| 1||Creational||+ ||6||Abstract Factory||+||1<sup>st</sup> class types||Factory Method, Prototype, Singleton
+
| 1||Creational||+ ||6||Abstract Factory||+||First class types||Factory Method, Prototype, Singleton
 
|-
 
|-
 
| 2||Creational|| ||1||Builder||+||Multimethods||Abstract Factory, Composite
 
| 2||Creational|| ||1||Builder||+||Multimethods||Abstract Factory, Composite
 
|-
 
|-
| 3||Creational||+ ||3||Factory Method||||1<sup>st</sup> class types||Abstract Factory, Template Method, Prototypes
+
| 3||Creational||+ ||3||Factory Method||||First class types||Abstract Factory, Template Method, Prototypes
 
|-
 
|-
 
| 4||Creational|| ||3||Prototype||||||Abstract Factory, Composite, Decorator
 
| 4||Creational|| ||3||Prototype||||||Abstract Factory, Composite, Decorator
Linha 106: Linha 106:
 
| 10||Structural||+ ||1||Facade||+||Modules||Abstract Factory, Mediator, Singleton
 
| 10||Structural||+ ||1||Facade||+||Modules||Abstract Factory, Mediator, Singleton
 
|-
 
|-
| 11||Structural|| ||4||Flyweight||||1<sup>st</sup> class types||Composite, State, Strategy
+
| 11||Structural|| ||4||Flyweight||||First class types||Composite, State, Strategy
 
|-
 
|-
| 12||Structural||+++||1||Proxy||||1<sup>st</sup> class types||Adapter, Decorator
+
| 12||Structural||+++||1||Proxy||||First class types||Adapter, Decorator
 
|-
 
|-
| 13||Behavioral|| ||1||Chain of Responsibility||||1<sup>st</sup> class types||Composite
+
| 13||Behavioral|| ||1||Chain of Responsibility||||First class types||Composite
 
|-
 
|-
| 14||Behavioral||+ ||1||Command||||1<sup>st</sup> class functions||Composite, Memento, Prototype
+
| 14||Behavioral||+ ||1||Command||||First class functions||Composite, Memento, Prototype
 
|-
 
|-
 
| 15||Behavioral|| ||1||Interpreter||+||Macros||Composite, Flyweight, Iterator, Visitor
 
| 15||Behavioral|| ||1||Interpreter||+||Macros||Composite, Flyweight, Iterator, Visitor
Linha 124: Linha 124:
 
| 19||Behavioral||+ ||1||Observer||+||Method Combination||Mediator, Singleton
 
| 19||Behavioral||+ ||1||Observer||+||Method Combination||Mediator, Singleton
 
|-
 
|-
| 20||Behavioral||+ ||1||State||||1<sup>st</sup> class types||Flyweight, Singleton
+
| 20||Behavioral||+ ||1||State||||First class types||Flyweight, Singleton
 
|-
 
|-
| 21||Behavioral||+ ||3||Strategy||+||1<sup>st</sup> class functions||Flyweight
+
| 21||Behavioral||+ ||3||Strategy||+||First class functions||Flyweight
 
|-
 
|-
| 22||Behavioral||+ ||1||Template Method||||1<sup>st</sup> class functions||Factory Method, Strategy
+
| 22||Behavioral||+ ||1||Template Method||||First class functions||Factory Method, Strategy
 
|-
 
|-
| 23||Behavioral|| ||2||Visitor||||1<sup>st</sup> class functions||Composite, Interpreter
+
| 23||Behavioral|| ||2||Visitor||||First class functions||Composite, Interpreter
 
|}
 
|}
   

Edição das 08h07min de 16 de abril 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
  • 22/05
  • 5/06
  • 19/06

Padrões

Legenda
# 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 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 + 6 Abstract Factory + First class types Factory Method, Prototype, Singleton
2 Creational 1 Builder + Multimethods Abstract Factory, Composite
3 Creational + 3 Factory Method First class types Abstract Factory, Template Method, Prototypes
4 Creational 3 Prototype Abstract Factory, Composite, Decorator
5 Creational + 4 Singleton + Abstract Factory, Builder, Prototype
6 Structural + 3 Adapter Bridge, Decorator, Proxy
7 Structural 1 Bridge Abstract Factory, Adapter
8 Structural + 9 Composite Chain of Responsibility, Decorator, Flyweight, Iterator, Visitor
9 Structural + 4 Decorator Adapter, Composite, Strategy
10 Structural + 1 Facade + Modules Abstract Factory, Mediator, Singleton
11 Structural 4 Flyweight First class types Composite, State, Strategy
12 Structural +++ 1 Proxy First class types Adapter, Decorator
13 Behavioral 1 Chain of Responsibility First class types Composite
14 Behavioral + 1 Command First class functions Composite, Memento, Prototype
15 Behavioral 1 Interpreter + Macros Composite, Flyweight, Iterator, Visitor
16 Behavioral + 3 Iterator + Macros Composite, Factory Method, Memento
17 Behavioral 2 Mediator Method Combination Facade, Observer
18 Behavioral 2 Memento Command, Iterator
19 Behavioral + 1 Observer + Method Combination Mediator, Singleton
20 Behavioral + 1 State First class types Flyweight, Singleton
21 Behavioral + 3 Strategy + First class functions Flyweight
22 Behavioral + 1 Template Method First class functions Factory Method, Strategy
23 Behavioral 2 Visitor First class functions Composite, Interpreter

Referências

Inscrições

Para se inscrever, coloque seu nome aqui (é preciso criar uma conta no wiki para editar a página)

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.