Mudanças entre as edições de "Design patterns em linguagens dinâmicas"
(79 revisões intermediárias por 25 usuários não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
+ | [[Arquivo:Turing_Clube_20130417_201558.jpg|thumb|right|600px|2º encontro do ciclo "Design Patterns em linguagens dinâmicas", edição 2013]] |
||
+ | |||
== Proposta == |
== 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.). |
+ | 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.). |
+ | |||
+ | Na edição '''2014''' o foco é na linguagem '''Python'''. |
||
+ | |||
+ | '''Atenção: não é preciso se inscrever! Esta atividade é aberta e gratuita. Basta aparecer!''' |
||
== Contexto == |
== Contexto == |
||
Linha 30: | Linha 36: | ||
** 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''. |
** 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 |
* 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 == |
== Cronograma == |
||
+ | === Edição 2014 === |
||
− | Reuniões em 2 quartas-feiras por mês (a cada 2 ou 3 semanas) |
||
+ | |||
+ | Reuniões em 2 quartas-feiras por mês (normalmente a cada 2 semanas), começando sempre às '''19:30'''. |
||
Datas: |
Datas: |
||
− | * |
+ | * 12/mar |
+ | * 26/mar *pausa*: Seven Masters |
||
− | * 17/04 |
||
+ | * 9/abr *pausa*: palestra [[Voltando a gostar de GUIs com Go e QML]] com Gustavo Niemeyer |
||
− | * 8/05 |
||
+ | * 16/abr: Strategy, Multiton(*) ([http://pt.slideshare.net/djsbellini/20140416-garoa-hc-strategy slides] e [https://github.com/danilobellini/design_patterns código]) |
||
− | * 22/05 |
||
+ | * 5/mai: Abstract Factory, Factory Method (apresentado por Hilton Fernandes) |
||
− | * 5/06 |
||
+ | * 19/mai: Builder (apresentado por Leonardo Leite ([https://github.com/leonardofl/design_patterns/blob/master/builder/invoker.py apresentação])) |
||
− | * 19/06 |
||
+ | * 9/jun: Interpreter (apresentado por Guto Maia) |
||
+ | * 23/jun: State (apresentado por Luciano Ramalho) |
||
+ | |||
+ | (*) Multiton não é um dos patterns citados no GoF, exceto como "registry of singletons". |
||
+ | |||
+ | === Edição 2013 === |
||
+ | |||
+ | Datas: |
||
+ | |||
+ | * 3/abr - Iterator e Generator, GRASP, exemplo de Template Method |
||
+ | * 17/abr - Memento e Visitor |
||
+ | * 8/mai - Composite e Flyweight |
||
+ | * 22/mai - Strategy, State e Chain of Responsability. Motivação: Remover uma grande sequência de IFs |
||
+ | * 5/jun - Abstract Factory, Observer, Singleton e Borg* |
||
+ | * 19/jun |
||
+ | |||
+ | (*) Borg não é um dos 23 patterns do GoF, mas é um substituto interessante do Singleton em Python |
||
+ | |||
+ | == Padrões == |
||
+ | |||
+ | [[Arquivo:Core-patterns.jpeg|400px|thumb|right|Ralph Johnson em seminário no CCSL-USP]] |
||
+ | |||
+ | {| border="1" class="wikitable" |
||
+ | |+ Legenda |
||
+ | |- |
||
+ | ! # |
||
+ | | número do padrão no livro de ''Gamma et.al.'' |
||
+ | |- |
||
+ | ! type |
||
+ | | família do padrão |
||
+ | |- |
||
+ | ! C |
||
+ | | ''Core pattern'' conforme Ralph Johnson (C=sublinhado na foto ao lado) |
||
+ | |- |
||
+ | ! name |
||
+ | | nome do padrão |
||
+ | |- |
||
+ | ! V |
||
+ | | visto nos encontros do Turing Clube em 2013 |
||
+ | |- |
||
+ | ! 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''') |
||
+ | |- |
||
+ | ! 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.'' |
||
+ | |} |
||
+ | |||
+ | |||
+ | |||
+ | {| class="wikitable sortable" |
||
+ | |- |
||
+ | !# !!type !!C!!name!!V!!HF !!R!!PN!!feature!!class="unsortable"|related patterns |
||
+ | |- |
||
+ | | 1||Creational|| ||Abstract Factory||v||+ ||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||v||+ ||4||A||||Abstract Factory, Builder, Prototype |
||
+ | |- |
||
+ | | 6||Structural||C||Adapter||||+ ||3||||||Bridge, Decorator, Proxy |
||
+ | |- |
||
+ | | 7||Structural|| ||Bridge|||| ||1||||||Abstract Factory, Adapter |
||
+ | |- |
||
+ | | 8||Structural||c||Composite||v||+ ||9||||||Chain of Responsibility, Decorator, Flyweight, Iterator, Visitor |
||
+ | |- |
||
+ | | 9||Structural||c||Decorator||||+ ||4||||||Adapter, Composite, Strategy |
||
+ | |- |
||
+ | | 10||Structural||c||Façade||v||+ ||1||MA||Modules||Abstract Factory, Mediator, Singleton |
||
+ | |- |
||
+ | | 11||Structural|| ||Flyweight||v|| ||4||M||First class types||Composite, State, Strategy |
||
+ | |- |
||
+ | | 12||Structural||c||Proxy||||+++||1||M||First class types||Adapter, Decorator |
||
+ | |- |
||
+ | | 13||Behavioral|| ||Chain of Responsibility||v|| ||1||M||First class types||Composite |
||
+ | |- |
||
+ | | 14||Behavioral||c||Command||||+ ||1||M||First class functions||Composite, Memento, Prototype |
||
+ | |- |
||
+ | | 15||Behavioral|| ||Interpreter|||| ||1||MA||Macros||Composite, Flyweight, Iterator, Visitor |
||
+ | |- |
||
+ | | 16||Behavioral||C||Iterator||v||+ ||3||MA||Macros||Composite, Factory Method, Memento |
||
+ | |- |
||
+ | | 17||Behavioral||C||Mediator|||| ||2||MA||Method Combination||Facade, Observer |
||
+ | |- |
||
+ | | 18||Behavioral|| ||Memento||v|| ||2||||||Command, Iterator |
||
+ | |- |
||
+ | | 19||Behavioral||C||Observer||v||+ ||1||MA||Method Combination||Mediator, Singleton |
||
+ | |- |
||
+ | | 20||Behavioral||c||State||v||+ ||1||M||First class types||Flyweight, Singleton |
||
+ | |- |
||
+ | | 21||Behavioral||c||Strategy||v||+ ||3||MA||First class functions||Flyweight |
||
+ | |- |
||
+ | | 22||Behavioral||c||Template Method||v||+ ||1||M||First class functions||Factory Method, Strategy |
||
+ | |- |
||
+ | | 23||Behavioral|| ||Visitor||v|| ||2||M||First class functions||Composite, Interpreter |
||
+ | |} |
||
+ | |||
+ | === Grafo de relação entre padrões === |
||
+ | |||
+ | [[Arquivo:RelacaoEntreDesignPatterns.png|thumb|center|left|900px]] |
||
== Referências == |
== Referências == |
||
Linha 52: | Linha 178: | ||
* Sherman Alpert, Kyle Brown, Bobby Woolf: [http://www.amazon.com/Design-Patterns-Smalltalk-Companion/dp/0201184621 The Design Patterns Smalltalk Companion] (livro) |
* Sherman Alpert, Kyle Brown, Bobby Woolf: [http://www.amazon.com/Design-Patterns-Smalltalk-Companion/dp/0201184621 The Design Patterns Smalltalk Companion] (livro) |
||
* Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra [http://shop.oreilly.com/product/9780596007126.do Head First Design Patterns] (livro) |
* Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra [http://shop.oreilly.com/product/9780596007126.do Head First Design Patterns] (livro) |
||
+ | * WikiBook [http://en.wikibooks.org/wiki/Computer_Science_Design_Patterns Computer Science Design Patterns] |
||
− | == |
+ | == Participantes == |
+ | |||
+ | === Grupo de 2014 === |
||
+ | |||
+ | * [[Usuário:LucianoRamalho|Luciano Ramalho]] |
||
+ | * [[Usuário:danilobellini|Danilo Bellini]] |
||
+ | * Kemel Zaidan |
||
+ | * Raquel Lira |
||
+ | * Wilson Freitas |
||
+ | * Astrobaldo a.k.a. Diego |
||
+ | * [[Usuário:hgfernan|Hilton Fernandes]] |
||
+ | === Grupo de 2013 === |
||
− | Para se inscrever, coloque seu nome aqui (é preciso criar uma conta no wiki para editar a página) |
||
* [[Usuário:LucianoRamalho|Luciano Ramalho]] |
* [[Usuário:LucianoRamalho|Luciano Ramalho]] |
||
* [[Usuário:Aylons|Aylons Hazzud]] |
* [[Usuário:Aylons|Aylons Hazzud]] |
||
* [[Usuário:lavh|Luiz Hespanha]] |
* [[Usuário:lavh|Luiz Hespanha]] |
||
+ | * [[Usuário:Erickmlr|Erick Müller]] |
||
+ | * [[Usuário:Francisco|Francisco]] |
||
+ | * [[Usuário:Lucascfk|Lucas Emanoel]] |
||
+ | * [[Usuário:gustavo.fonseca|Gustavo Fonseca]] |
||
+ | * [[Usuário:chambs|Willian Carvalho]] |
||
+ | * [[Usuário:m3bsd|Mario Augusto Mania]] |
||
+ | * Vinicius Roque (vou com o m3bsd) |
||
+ | * [[Usuário:rafael.novello|Rafael Novello]] |
||
+ | * [[Usuário:dstori|Daniel Stori]] |
||
+ | * [[Usuário:fabiobatalha|Fabio Batalha]] |
||
+ | * [[Usuário:atta.jamil|Jamil Atta]] |
||
+ | * [[Usuário:tales|Tales Cione]] |
||
+ | * [[Usuário:William_Espindola|William Espindola]] |
||
+ | * [[Usuário:Claudiomarcos | Claudio Marcos ]] |
||
+ | * [[Usuário:rmrosa | Rodrigo Rosa]] |
||
+ | * [[Usuário:LeoRochael | Leonardo Rochael Almeida]] |
||
+ | * [[Usuário:pirolla | pirolla]] |
||
+ | * [[Usuário:lucasmagnum | Lucas Magnum]] |
||
== Mais informações == |
== Mais informações == |
||
Linha 67: | Linha 222: | ||
[[Categoria:Turing Clube]] |
[[Categoria:Turing Clube]] |
||
− | [[Categoria:Eventos |
+ | [[Categoria:Eventos]] |
+ | [[Categoria:Python]] |
Edição atual tal como às 18h37min de 15 de maio de 2020
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.).
Na edição 2014 o foco é na linguagem Python.
Atenção: não é preciso se inscrever! Esta atividade é aberta e gratuita. Basta aparecer!
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
Edição 2014
Reuniões em 2 quartas-feiras por mês (normalmente a cada 2 semanas), começando sempre às 19:30.
Datas:
- 12/mar
- 26/mar *pausa*: Seven Masters
- 9/abr *pausa*: palestra Voltando a gostar de GUIs com Go e QML com Gustavo Niemeyer
- 16/abr: Strategy, Multiton(*) (slides e código)
- 5/mai: Abstract Factory, Factory Method (apresentado por Hilton Fernandes)
- 19/mai: Builder (apresentado por Leonardo Leite (apresentação))
- 9/jun: Interpreter (apresentado por Guto Maia)
- 23/jun: State (apresentado por Luciano Ramalho)
(*) Multiton não é um dos patterns citados no GoF, exceto como "registry of singletons".
Edição 2013
Datas:
- 3/abr - Iterator e Generator, GRASP, exemplo de Template Method
- 17/abr - Memento e Visitor
- 8/mai - Composite e Flyweight
- 22/mai - Strategy, State e Chain of Responsability. Motivação: Remover uma grande sequência de IFs
- 5/jun - Abstract Factory, Observer, Singleton e Borg*
- 19/jun
(*) 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 |
C | Core pattern conforme Ralph Johnson (C=sublinhado na foto ao lado) |
name | nome do padrão |
V | visto nos encontros do Turing Clube em 2013 |
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) |
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 | C | name | V | HF | R | PN | feature | related patterns |
---|---|---|---|---|---|---|---|---|---|
1 | Creational | Abstract Factory | v | + | 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 | v | + | 4 | A | Abstract Factory, Builder, Prototype | ||
6 | Structural | C | Adapter | + | 3 | Bridge, Decorator, Proxy | |||
7 | Structural | Bridge | 1 | Abstract Factory, Adapter | |||||
8 | Structural | c | Composite | v | + | 9 | Chain of Responsibility, Decorator, Flyweight, Iterator, Visitor | ||
9 | Structural | c | Decorator | + | 4 | Adapter, Composite, Strategy | |||
10 | Structural | c | Façade | v | + | 1 | MA | Modules | Abstract Factory, Mediator, Singleton |
11 | Structural | Flyweight | v | 4 | M | First class types | Composite, State, Strategy | ||
12 | Structural | c | Proxy | +++ | 1 | M | First class types | Adapter, Decorator | |
13 | Behavioral | Chain of Responsibility | v | 1 | M | First class types | Composite | ||
14 | Behavioral | c | Command | + | 1 | M | First class functions | Composite, Memento, Prototype | |
15 | Behavioral | Interpreter | 1 | MA | Macros | Composite, Flyweight, Iterator, Visitor | |||
16 | Behavioral | C | Iterator | v | + | 3 | MA | Macros | Composite, Factory Method, Memento |
17 | Behavioral | C | Mediator | 2 | MA | Method Combination | Facade, Observer | ||
18 | Behavioral | Memento | v | 2 | Command, Iterator | ||||
19 | Behavioral | C | Observer | v | + | 1 | MA | Method Combination | Mediator, Singleton |
20 | Behavioral | c | State | v | + | 1 | M | First class types | Flyweight, Singleton |
21 | Behavioral | c | Strategy | v | + | 3 | MA | First class functions | Flyweight |
22 | Behavioral | c | Template Method | v | + | 1 | M | First class functions | Factory Method, Strategy |
23 | Behavioral | Visitor | v | 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)
- WikiBook Computer Science Design Patterns
Participantes
Grupo de 2014
- Luciano Ramalho
- Danilo Bellini
- Kemel Zaidan
- Raquel Lira
- Wilson Freitas
- Astrobaldo a.k.a. Diego
- Hilton Fernandes
Grupo de 2013
- 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
- pirolla
- Lucas Magnum
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.