44
DSL Tools Nancy Lyra

DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Embed Size (px)

Citation preview

Page 1: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

DSL Tools

Nancy Lyra

Page 2: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Introdução

• Imaginem um mundo em que:– Desenvolvedores não são limitados a lidar com

conceitos de programação (classes, interfaces, structs, namespaces, etc.)

– Domínio da aplicação a ser desenvolvida utilize conceitos específicos do domínio• Ex: “fase do jogo”, “personagem principal”, “inimigo” no

domínio de jogos– Possibilidade de criação de diagramas visuais que

geram o código fonte da aplicação

Page 3: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Visualization and Modeling SDK (DSL Tools) – Visual Studio

• Permite definir conceitos a serem utilizados em um domínio

• Além disso:– Como os conceitos se relacionam– Representação gráfica para eles– Geração de código

Page 4: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Nosso Demo

• Jogo: Quiz Language– Perguntas e Respostas

• Permitir que um desenvolvedor use a DSL criada para construir jogos de perguntas e respostas

Page 5: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Algo assim

Page 6: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Curiosidade

• Alguém do time do VSTS (Visual Studio Team System) observou que muitas DSL visuais precisariam ser desenvolvidas– Criou um framework – DSL Tools

• Microsoft não restringiu o uso aos seus desenvolvedores e disponibilizou o plug in

• Então vocês devem instalar o plug in e o T4 editor (nesta ordem) de acordo com a versão do Visual Studio instalado.

Page 7: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Papéis

• Projetista– Define conceitos e representação gráfica da DSL

• Desenvolvedor– Utiliza a DSL para criar aplicações

• Usuário– Utiliza as aplicações

Maior partedo tempo

Page 8: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Importante• As regras que compõem o domínio precisam ser

claramente descritas.

• Regras para o nosso DEMO:– Um jogo (quiz game) é composto por uma sequência de quizzes– Uma quiz contém uma pergunta e um conjunto de respostas

(choices), que pode ser única ou mais de uma– Cada quiz vale uma quantidade de pontos (score)

• Se tiver mais de uma alternativa correta, o ponto só será considerado se todas as respostas corretas forem assinaladas

– Placar final equivale a soma dos pontos das quizzes acertadas– É possível associar dicas (hints) às quizzes

Page 9: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Nosso alvo (com a QuizLanguage implantada no VS)

Toolbox com conceitos do domínioConceitos com representação visual distintaError List (Validação em alto nível)

Propriedades específicas ao elemento do domínio selecionadoElementos visualizados de maneira hierárquica

Page 10: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Criando um Projeto DSL Designer

Page 11: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Minimal Language - contém os elementos básicos de uma DSL, que você pode estender para criar a sua própria

Page 12: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Extensão dos arquivos que vão conter os diagramas da DSL

Page 13: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,
Page 14: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Contém informações sobre os conceitos e a representação visual de sua DSL

Utilizado para registrar a DSL no VS.NET. A princípio, você não deve se preocupar com este último.

Abra este

Page 15: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Conceitos (ou Classes) e Relacionamentos Como os conceitos serão exibidos graficamente

A idéia do DSL Tools é prover, aos usuários mais experientes, elementos básicos prontos para uso e modificação, permitindo que uma DSL possa ser minimamente construída (isso justifica o nome Minimal Language do template) – por isso o editor já vem preenchido

Page 16: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Instâncias poderão ter nome.

Ex: Conceito “Cidade”Instâncias como: Recife, Olinda, etc

Faz mais sentido pro nosso Demo

Page 17: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Conceitos e Propriedades do Demo

Page 18: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Criando tipos• Adicionando uma enumeração

• Adicione uma nova propriedade ao conceito Quiz:– Com o botão direito “Add New Domain Enumeration”– Altere o nome do domain type– Com o botão direito “Add new Enumeration Literal”

Page 19: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Definindo Relacionamentos

Relacionamento ForteEx: Quiz e ChoiceSó existe Choice se existir Quiz

Relacionamento FracoEx: Hint e QuizExiste Quiz sem Hint

HerançaEx: IllustratedQuiz herdaria de Quiz

Page 20: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Papéis

• Quiz tem papel “Quiz” em Choice• Choice tem papel “Choices” em Quiz

Nem todo papel recebe o nome do conceito.EX: Professor e Universidade. Um professor pode ser Reitor, Vice-Reitor, Coordenador, Professor, etc.

Page 21: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

No nosso Demo

Page 22: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Representação Gráfica

• Até agora definimos – Conceitos– Propriedades– Relacionamentos

Nada informado como os desenvolvedores vão criar os modelos (diagramas) através dessa

linguagem QuizLanguage

Page 23: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Projetando Representação Gráfica – Sintaxe Visual

• Nem todo conceito está associado a uma imagem. – Ex: Conceito “Quiz” será associado a uma forma gráfica pré-

existente

Arquivos de imagem

Page 24: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Adicionando Diagrama

• Antes de adicionar formas, criar um diagrama (um conjunto de mapeamentos entre conceitos/relacionamentos e formas gráficas.)

QuizLanguageDiagram

Page 25: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Uma vez definido um Diagram para a DSL e o conceito da linguagem por ele representado, é hora de modelar as formas gráficas (shapes).

Page 26: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Modelando Formas Gráficas• Hint

– Imagem (Image Shape)– Name: HintShape– Image: HintImage– Outline Color: Transparent– Initial Height: 0,4– Initial Width: 0,4

• Informações sobre o conceito associado à forma:Obs. É preciso habilitar a associação (Diagram Element Map da Toolbox)

– Associar Hint a HintShapeExibir/Ocultar linhas de mapeamento

Page 27: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

• Quiz– Forma gráfica pré-definida Compartment Shape– Name: QuizShape– Geometry: RoundedRectangle– Fill Color: Qualquer uma, ex: Sky Blue– Associar Quiz à QuizShape– Adicionar um Compartment chamado Choices

• Title Fill: Lime• Fill Color: Yellow• Title: Choices

Page 28: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

• Apesar do conceito Quiz estar associado ao QuizShape, em nenhum momento você informou ao DSL Tools que o conceito Choice está relacionado ao compartimento Choices do Quiz Shape.

• Para fazer isso, clique na linha cinza de mapeamento entre Quiz e QuizShape, e exiba a janela DSL Details

Indica que estamos acessandoo papel Choices desse relacionamento. E “/!Choice” que o caminho termina com o elemento Choice ao qual o papel Choices se refere

Page 29: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Adicionando Decoradores Textuais e Gráficos

• Hint até agora só tem imagem– Add new Text Decorator• Name: ContentDecorator• Position: OuterTopCenter

– Associar Hint a ContentDecorator• Mesmo esquema (clica na linha de mapeamento e abre

o DSL Details)

Page 30: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

• Text decorator ao QuizShape– Name: QuestionDecorator– VerticalOffset: 0,3

• Mapear Question a Quiz

• São 2 Icon Decorators ao QuizShape:– indicar se um Quiz é SingleChoice ou MultiChoice– associar imagens correspondentes– Position: InnerTopRight

• Mapeamento Quiz-QuizShape

Page 31: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Representação Gráfica de Relacionamentos

• Como aparecerão conectados (Connector) os conceitos na DSL gráfica

• No nosso Demo– Uma quiz a outra quiz– Uma dica a uma quiz– Connector

• Name: HintLinkConnector• Dash Style: Dot• Thickness: 0,01

– Mapear este conector ao relacionamento HintReferencesQuizzes– Fazer a mesma coisa para o connector NextQuizConnector

Page 32: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Customizar Toolbox• Quiz

– Toolbox Icon: QuizIcon– Class: Quiz

• Hint (Idem)

• Somente estes dois pois:– QuizGame: é o próprio QuizLanguageDiagram– Choice: tem um mapeamento dentro do QuizShape

• Os elementos da toolbox não são apenas conceitos, há relacionamentos:– Add New Connection Tool– Name: HintLink– Toolbox Icon: HintLinkIcon– ConnectionBuilder: HintReferencesQuizzesBuilder

• Relacionamento entre duas quizzes: idem (name QuizLink)• SALVAR o DslDefinition.dsl sem erros

Add New Element Tool

Root Class: QuizGame

Pode apagar!

Page 33: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Testando a DSL

• Ctrl + F5 (ou acesse a opção Debug>Start Without Debugging)

Page 34: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Testando

Page 35: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Validadores Semânticos

• A definição de uma DSL – Conceitos– Relacionamentos– Especificação de seu comportamento gráfico– Regras de negócio, dependendo do domínio

modelado.– EX: • qualquer texto da pergunta de uma quiz precisa terminar

ou com o caractere de interrogação (‘?’) ou com o caractere de dois pontos (‘:’).

Page 36: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Adicionando Validadores

• Adicionar ao projeto Dsl, uma classe parcial

Page 37: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Lógica da Validação• Método que contém a lógica de validação. 3 Restrições:

– Retornar void;– Possuir como parâmetro um objeto do tipo ValidationContext;– Possuir um atributo de método do tipo ValidationMethod.

• parâmetro do tipo ValidationCategories (Custom, Load, Menu, Open e Save)

Page 38: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Habilitar Validações

Page 39: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Testando Tudo

Page 40: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Transformadores

• De limitada utilidade seriam os diagramas se eles servissem apenas para documentação

• Solução:– Usar diagrama como input de algum transformador (ex.:

gerador de código)

• Consequência:– Criação automática de artefatos de desenvolvimento (ex.:

código-fonte, scripts, arquivos de configuração...)

Page 41: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Transformadores [2]

• São especificados através de uma linguagem de script baseada em C#

• Na versão experimental do VS2010– Abra o arquivo QuizLanguageReport.tt• <#@ #> => Diretivas (características do transf.)• <# #> => Código contendo lógica de programação• <#= #> => Expressões cujo resultado é copiado

para output do transformador• Qualquer texto fora das tags dos itens acima é copiado

automaticamente para o output do transformador

Page 42: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Geração de Código

Page 43: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Geração Código (QuizFramework)

Page 44: DSL Tools Nancy Lyra. Introdução Imaginem um mundo em que: – Desenvolvedores não são limitados a lidar com conceitos de programação (classes, interfaces,

Geração Código (QuizFramework)