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

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
m
Linha 73: Linha 73:
 
|-
 
|-
 
! PN
 
! PN
| analisado nos slides de Peter Norvig
+
| M=mencionado; A=analisado nos slides de Peter Norvig
 
|-
 
|-
 
! feature
 
! feature
Linha 88: Linha 88:
 
!# !!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||+||First class types||Factory Method, Prototype, Singleton
+
| 1||Creational||+ ||6||Abstract Factory||MA||First class types||Factory Method, Prototype, Singleton
 
|-
 
|-
| 2||Creational|| ||1||Builder||+||Multimethods||Abstract Factory, Composite
+
| 2||Creational|| ||1||Builder||MA||Multimethods||Abstract Factory, Composite
 
|-
 
|-
| 3||Creational||+ ||3||Factory Method||||First class types||Abstract Factory, Template Method, Prototypes
+
| 3||Creational||+ ||3||Factory Method||M||First class types||Abstract Factory, Template Method, Prototypes
 
|-
 
|-
 
| 4||Creational|| ||3||Prototype||||||Abstract Factory, Composite, Decorator
 
| 4||Creational|| ||3||Prototype||||||Abstract Factory, Composite, Decorator
 
|-
 
|-
| 5||Creational||+ ||4||Singleton||+||||Abstract Factory, Builder, Prototype
+
| 5||Creational||+ ||4||Singleton||A||||Abstract Factory, Builder, Prototype
 
|-
 
|-
 
| 6||Structural||+ ||3||Adapter||||||Bridge, Decorator, Proxy
 
| 6||Structural||+ ||3||Adapter||||||Bridge, Decorator, Proxy
Linha 106: Linha 106:
 
| 9||Structural||+ ||4||Decorator||||||Adapter, Composite, Strategy
 
| 9||Structural||+ ||4||Decorator||||||Adapter, Composite, Strategy
 
|-
 
|-
| 10||Structural||+ ||1||Facade||+||Modules||Abstract Factory, Mediator, Singleton
+
| 10||Structural||+ ||1||Facade||MA||Modules||Abstract Factory, Mediator, Singleton
 
|-
 
|-
| 11||Structural|| ||4||Flyweight||||First class types||Composite, State, Strategy
+
| 11||Structural|| ||4||Flyweight||M||First class types||Composite, State, Strategy
 
|-
 
|-
| 12||Structural||+++||1||Proxy||||First class types||Adapter, Decorator
+
| 12||Structural||+++||1||Proxy||M||First class types||Adapter, Decorator
 
|-
 
|-
| 13||Behavioral|| ||1||Chain of Responsibility||||First class types||Composite
+
| 13||Behavioral|| ||1||Chain of Responsibility||M||First class types||Composite
 
|-
 
|-
| 14||Behavioral||+ ||1||Command||||First class functions||Composite, Memento, Prototype
+
| 14||Behavioral||+ ||1||Command||M||First class functions||Composite, Memento, Prototype
 
|-
 
|-
| 15||Behavioral|| ||1||Interpreter||+||Macros||Composite, Flyweight, Iterator, Visitor
+
| 15||Behavioral|| ||1||Interpreter||MA||Macros||Composite, Flyweight, Iterator, Visitor
 
|-
 
|-
| 16||Behavioral||+ ||3||Iterator||+||Macros||Composite, Factory Method, Memento
+
| 16||Behavioral||+ ||3||Iterator||MA||Macros||Composite, Factory Method, Memento
 
|-
 
|-
| 17||Behavioral|| ||2||Mediator||||Method Combination||Facade, Observer
+
| 17||Behavioral|| ||2||Mediator||MA||Method Combination||Facade, Observer
 
|-
 
|-
 
| 18||Behavioral|| ||2||Memento||||||Command, Iterator
 
| 18||Behavioral|| ||2||Memento||||||Command, Iterator
 
|-
 
|-
| 19||Behavioral||+ ||1||Observer||+||Method Combination||Mediator, Singleton
+
| 19||Behavioral||+ ||1||Observer||MA||Method Combination||Mediator, Singleton
 
|-
 
|-
| 20||Behavioral||+ ||1||State||||First class types||Flyweight, Singleton
+
| 20||Behavioral||+ ||1||State||M||First class types||Flyweight, Singleton
 
|-
 
|-
| 21||Behavioral||+ ||3||Strategy||+||First class functions||Flyweight
+
| 21||Behavioral||+ ||3||Strategy||MA||First class functions||Flyweight
 
|-
 
|-
| 22||Behavioral||+ ||1||Template Method||||First class functions||Factory Method, Strategy
+
| 22||Behavioral||+ ||1||Template Method||M||First class functions||Factory Method, Strategy
 
|-
 
|-
| 23||Behavioral|| ||2||Visitor||||First class functions||Composite, Interpreter
+
| 23||Behavioral|| ||2||Visitor||M||First class functions||Composite, Interpreter
 
|}
 
|}
   

Edição das 19h49min de 8 de maio de 2013

2º encontro do ciclo "Design Patterns em linguagens dinâmicas"

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

Grafo de relação entre padrões

RelacaoEntreDesignPatterns.png

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.