Smalltalk Presenter First – Parte 1

Lendo o artigo Big Complex, and tested? Just say “When” me animei a escrever código em Smalltalk para exercitar as idéias relativas ao método Presenter First e organização do código no estilo Model, View, Presenter. Iniciei um projeto simples para evitar me meter com complicações da interface gráfica com Morphs. A idéia é exibir um quadrado (um Morph) que vá mostrando as cores na sequência de cores red, green, blue, conforme se clica com o botão esquerdo do mouse (red button no jargão dos smalltalkers).

Começando com o Presenter primeiro

rgbsquarepresentercreation.png

O presenter mantém referências para model e view.

A classe RGBSquarePresenter conterá apenas a inicialização conforme abaixo:

rgbsquarepresenter-initializeevents1.png

O código acima expressa a user story até agora (quando o botão esquerdo for pressionado mudar a cor na interface do usuário para a próxima cor na sequência red green blue) , no estilo idiomático “say when”, decomposta em dois eventos:

  • Quando o botão esquerdo for pressionado mudar a cor no modelo para a próxima cor na sequência red green blue;
  • Quando a cor no modelo for alterada atualizar a cor na interface do usuário.

Nota: Os eventos nas user stories devem ser denominados com nomes de alto nível. No código na interface do usuário será feita a tradução dos eventos de baixo nível para os de alto nível: #redButtonPressed para #nextColor, como veremos adiante.

Podemos extrair os eventos e as interfaces necessários para a view e o model inspecionando initializeEvents.

Criando os testes do model primeiro

Dentro da filosofia test first vamos criar os testes para a classe do model:

presenterfirstmodeltestcase.png

testcoloraftercreation.png

testfirstnextcolorcall.png

testsecondnextcolorcall.png

testthirdnextcolorcall.png

Escrevendo o model para passar nos testes

O model para passar nos testes é o seguinte:

rgbsquaremodel.png

rgbsquaremodel-initialize.png

rgbsquaremodel-nextcolor.png

Nota: Omitiremos os accessors enquanto forem triviais.

Criando um trait para o idioma “say when”

Agora vamos instalar o sistema de eventos do idioma when: do:. Como na construção da interface do usuário usaremos herança da classe Morph não vamos poder usar o mesmo mecanismo para herdar os métodos necessários para os eventos. Usaremos então traits. Vamos definir o seguinte trait:

twhenidiom.png

twhenidiom-when-do.png

twhenidiom-fireevent.png

twhenidiom-events.png

Nota: O método revisit, que serve para colocação de comentários que podem ser revistados posteriormente, é baseado em Leaving Notes In Your Code do tutorial A Development Example for Squeak 3.9. Para descobrir onde foram colocadas chamadas para o método revisit basta usar a ferramenta Messages Names e obter os senders de revisit.

Nota: Para conhecer a tese sobre traits leia Traits — Composing Classes from Behavioral Building Blocks.

Usando o trait no model

Vamos incluir o trait criado no model (veja a segunda linha):

rgbsquaremodel-with-trait.png

Agora é necessário fazer override do glue method events, que é requerido:

rgbsquaremodel-events.png

Nota: O model, com o uso do trait, também está livre para usar herança em qualquer ponto da hierarquia de classes.

Encerramos a parte 1 aqui. Na parte 2 vamos tratar da interface gráfica do usuário.

Anúncios

Uma resposta para “Smalltalk Presenter First – Parte 1

  1. Pingback: SmallFBP: a Smalltalk framework for Flow-Based Programming – Part 3 | Crab Log

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s