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

Edição das 01h37min 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

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