Mudanças entre as edições de "Design patterns em linguagens dinâmicas"
Linha 54: | Linha 54: | ||
{| |
{| |
||
|- |
|- |
||
− | | Creational|| 1||+ ||6||Abstract Factory||1st class types |
+ | | Creational|| 1||+ ||6||Abstract Factory||+||1st class types||Factory Method, Prototype, Singleton |
|- |
|- |
||
− | | Creational|| 2|| ||1||Builder|| |
+ | | Creational|| 2|| ||1||Builder||+||Multimethods||Abstract Factory, Composite |
|- |
|- |
||
− | | Creational|| 3||+ ||3||Factory Method||1st class types |
+ | | 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|||| |
+ | | 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|| |
+ | | Structural||10||+ ||1||Facade||+||Modules||Abstract Factory, Mediator, Singleton |
|- |
|- |
||
− | | Structural||11|| ||4||Flyweight||1st class types |
+ | | Structural||11|| ||4||Flyweight||||1st class types||Composite, State, Strategy |
|- |
|- |
||
− | | Structural||12||+++||1||Proxy||1st class types |
+ | | Structural||12||+++||1||Proxy||||1st class types||Adapter, Decorator |
|- |
|- |
||
− | | Behavioral||13|| ||1||Chain of Responsibility||1st class types |
+ | | Behavioral||13|| ||1||Chain of Responsibility||||1st class types||Composite |
|- |
|- |
||
− | | Behavioral||14||+ ||1||Command||1st class functions |
+ | | Behavioral||14||+ ||1||Command||||1st class functions||Composite, Memento, Prototype |
|- |
|- |
||
− | | Behavioral||15|| ||1||Interpreter|| |
+ | | Behavioral||15|| ||1||Interpreter||+||Macros||Composite, Flyweight, Iterator, Visitor |
|- |
|- |
||
− | | Behavioral||16||+ ||3||Iterator|| |
+ | | Behavioral||16||+ ||3||Iterator||+||Macros||Composite, Factory Method, Memento |
|- |
|- |
||
− | | Behavioral||17|| ||2||Mediator||Method Combination |
+ | | 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 |
+ | | Behavioral||19||+ ||1||Observer||+||Method Combination||Mediator, Singleton |
|- |
|- |
||
− | | Behavioral||20||+ ||1||State||1st class types |
+ | | Behavioral||20||+ ||1||State||||1st class types||Flyweight, Singleton |
|- |
|- |
||
− | | Behavioral||21||+ ||3||Strategy||1st class functions |
+ | | Behavioral||21||+ ||3||Strategy||+||1st class functions||Flyweight |
|- |
|- |
||
− | | Behavioral||22||+ ||1||Template Method||1st class functions |
+ | | Behavioral||22||+ ||1||Template Method||||1st class functions||Factory Method, Strategy |
|- |
|- |
||
− | | Behavioral||23|| ||2||Visitor||1st class functions |
+ | | 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
- 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
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.