DSL Encoder - Uma ferramenta web para desenvolvimento de linguagens específicas de domínio (Apresentação)
Short Description
Artigo apresentado como pré-requisito para conclusão do Mestrado Profissional em Engenharia de Software do...
Description
DSL Encoder Uma ferramenta web para desenvolvimento de linguagens específicas de domínio
Mestrado Profissional em Engenharia de Software Bruno Falcão Leão Maia Ph.D. Vinicius Cardoso Garcia (orientador) M.Sc. Leandro Marques do Nascimento (co-orientador)
Agenda Domain-Specific Languages
Web Programável DSL Encoder Uso da Ferramenta Um Caso Prático Conclusões Trabalhos Futuros
Domain-Specific Languages O Que é? Década de 50 (APT)
Linguagem Pequena Declarativa Notações Específicas
Domínio do Problema SQL, HTML, LaTeX
“linguagem pequena, usualmente declarativa, que oferece poder expressivo focado em um domínio de um problema particular” [2].
Domain-Specific Languages Motivações
Quando Utilizar
Reuso de Software
Notação
Geração de Código
Automação de Tarefas
Aumento da Abstração
Linhas de Produto
Produtividade
Estrutura de Dados
Confiabilidade
Representação Intercâmbio
Manutenabilidade Portabilidade
Interfaces do Usuário
Domain-Specific Languages Fases Análise do Domínio
Projeto Desenvolvimento
Domain-Specific Languages Análise
Resultado Formal
Coleta de Informações
Metodologias
Noções Semânticas Operações Informalmente
ODM – Organization Domain Modeling FODA – Feature-Oriented Domain Analysis DSSA – Domain-Specific Software Architetures
Domain-Model Vocabulário e Ontologia Conceitos Feature-Models
Domain-Specific Languages Projeto Informal
Piggyback Extension Specialization
“objetivo geral de uma DSL, como com em qualquer escrita, é a clareza para o leitor” [6].
Domain-Specific Languages Implementação Compilação e Interpretação
Incorporação Processamento e Macro-processamento Compilador ou Interpretador Extensível
Ferramentas Especializadas Verificador de Inconsistências IDE “desenvolvimento de DSL é difícil, exigindo tanto conhecimento do domínio quanto experiência no desenvolvimento de linguagens” [3].
Domain-Specific Languages Ferramentas Gratuita
Sistemas Operacionais Suportados
MetaEdit+ (MetaCase)
Não
Windows, Linux e Mac OS X
GME (Vanderbilt University)
Sim
Windows
Ferramenta
Dependências
DSL Tools (Microsoft)
Visual Studio 2005 Professional Edition
Não
Windows
MPS (JetBrains)
Java Virtual Machine (JVM)
Sim
Windows, Linux e Mac OS X
Eclipse Modeling Project (Eclipse)
Java Virtual Machine (JVM)
Sim
Windows, Linux e Mac OS X
Domain-Specific Languages Ferramentas
DSL Encoder
Web Programável Web 2.0
Web como plataforma Inteligência Coletiva Co-desenvolvedores
Beta Perpétuo Rich Internet Applications AJAX
Software Acima do Nível de um Único Dispositivo
Web Programável Web Programável
RSS
Protocolos usados por APIs
Mashups APIs
Simple Object Access Protocol (SOAP)
Representational State Transfer (REST)
SOAP 23%
OUTROS 2% JavaScript 5% XML-RPC 2%
REST 68%
Smartphones JSON “Existe uma grande chance que qualquer aplicativo no seu telefone faça alguma coisa interessante usando uma API” [12].
Fonte: Programmable Web
Web Programável Porcentagem de novas APIs com suporte somente a JSON 25% 20% 15% 10% 5% 0% 2006
2007
2008
2009
2010
2011
Fonte: Programmable Web
Web Programável Que tecnologia você usou em 2012?
REST
85.40%
JSONP
35.40%
OAuth 2
34.60%
SOAP
29.20%
RSS/Atom feeds
13.10%
WebSockets
12.30%
CORS
11.50%
WS-*
10.00%
Webhooks OAuth 1.0a PubSubHubbub
8.50% 6.90% 2.30%
Fonte: Programmable Web
Web Programável JSON
JSONP
DSL Encoder
DSL Encoder Características IDE Web como plataforma Código Aberto HTML5 JavaScript JSON Extensível Linguagens, Templates e Plug-ins.
DSL Encoder
DSL Encoder Código Aberto New BSD
Co-desenvolvedores Detecção e Correção de Erros
Melhoria da Qualidade Estrutura Modularizada Crescimento e Evolução
“dados olhos suficientes, todos os erros são triviais” [21].
DSL Encoder Web como plataforma Multiplataforma
“Instant Deploy World Wide” HTML5, CSS3, WebGL + AJAX e JSONP
FileSystem Offline Applications Local Storage “aplicações binárias convencionais estão em maior desvantagem comparadas a software baseado na web porque este pode ser implantado instantaneamente ao redor do mundo” [18].
DSL Encoder
JavaScript
DSL Encoder Clientes
Servidor de Aplicação DSL Encoder
Internet
Servidor de API de Terceiros
Servidor de API de Terceiros Comunicação com a Ferramenta Comunicação com API de terceiros
DSL Encoder Sistema de Arquivos
Filesystem
Local Storage
HTML5 Filesystem API SQLite
Web Database SQLIte
IndexedDB Local Storage
IndexedDB
Local Storage Cloud Storage SQLite
Dsle.Filestorage IndexedDB
Local Storage Local Storage
DSL Encoder Editor de Texto Open Source
New BSD JavaScript Syntax highlighting
Indentação Automática Live syntax checker “Apesar do interesse crescente em interfaces icônicas e métodos de programação visual, o texto é onipresente no ambiente de computador e sua importância não diminui” [26].
“Ele combina as características e performance de editores nativos como Sublime, Vim e TextMate” [27].
DSL Encoder DSL Processor IDE
DSL.JS (Componente)
Analisa a Linguagem
Gerar
DSL Sistema Processo de r Arquivos Obter Linguagem
org.dsle.Math.json Linguagem Obter Templates
Instancia a Linguagem
Templates
Valida o Programa DSL
Salvar Arquivos Gerados
Executa o Programa DSL Arquivos Gerados
DSL Encoder Template Engine JSON Template
JavaScript Template Registro de Engines
DSL Encoder Code Generator Qualidade
Consistência
“gerador de código é um autô mato que acessa modelos, extrai informações a partir deles, e transforma-os em produção em uma sintaxe específica” [1].
Produtividade Abstração
“Geração de código é outro elo na cadeia evolutiva da crescente abstração. Com ela, você vai produzir rapidamente código de maior qualidade, e assim ser capaz de responder as necessidades de mudança com facilidade” [32].
DSL Encoder Console Log
Info Warning Success
Error
DSL Encoder Hot-Spots
Extensions
FileTypes
Tree
Extensível Languages
Toolbar
Reutilizável Plug-ins
Templates
IDE
Tabs
Framework Plugins
Dialog
FileStorage
Ajax
Console
LocalStorage
DSL Encoder Plug-ins JavaScript
Extensibilidade Reuso Adaptação
Configuração Tempo de Execução
Uso da Ferramenta Linguagens JSON
DslTemplateOptions DslType DslTypeItem
Uso da Ferramenta Templates JSON Template
JavaScript Template {% %}
Uso da Ferramenta Plug-ins JavaScript
Id, name load(); #noplugins
Uso da Ferramenta Programa DSL JSON
language main Validate
Generate
Um Caso Prático Elementos de Formulário Label
Textfield Textarea Select
Checkbox Slider Button
Um Caso Prático org.dsle.FormUI.dsl DslTypes
Templates org.dsle.formUi.jQueryMobile.tpl .html org.dsle.formUi.Titanium.tpl .js
Um Caso Prático { "language":"org.dsle.FormUI", "main": { "id":"winCreateAccount", "title": "Create Account", "form": { "id": "frmCreateAccount", "formItems": [{ "type":"label", "id": "lblEmail", "text":"E-mail:", "for": "email" },{ "type":"textfield", "id":"email", "hint": "enter your e-mail" },{ "type":"label", "id": "lblPassword", "text":"Password:", "for": "password" },{ "type":"textfield", "id":"password", "hint": "enter your password", "password": true },{ "type":"checkbox", "id":"accept", "text": "I accept this terms.", "checked": false },{ "type":"button", "id":"btCreateAccount", "text": "create account" } ] } }
Front-End E-Mail (Textfield)
Password (Textfield)
I Accept This Terms. (Checkbox) Create Account (Button)
}
Um Caso Prático
Um Caso Prático Designer Fullname (Textfield)
E-Mail (Textfield) Password (Textfield)
{ "language":"org.dsle.FormUI", "main": { "id":"winCreateAccount", "title": "Create Account", "form": { "id": "frmCreateAccount", "formItems": [{ "type":"label", "id": "lblFullname", "text":"Full Name:", "for": "fullname" },{ "type":"textfield", "id":"fullname", "hint": "enter your fullname" },{ "type":"label", "id": "lblEmail", "text":"E-mail:", "for": "email" },{ "type":"textfield", "id":"email", "hint": "enter your e-mail" },{ "type":"label", "id": "lblPassword", "text":"Password:", "for": "password" } ...
I Accept This Terms. (Checkbox)
Create Account (Button)
Um Caso Prático
Um Caso Prático Resultado Aumento da Abstração
Fácil Utilização por Conhecedores do Domínio
Geração de Código jQuery Mobile Appcelerator Titanium
Conclusões DSL
DSL Encoder
Aumenta Abstração
Ferramenta Alternativa
Aumenta Produtividade
Web como plataforma
Necessita de Ferramentas
Inteligência Coletiva
Especializadas
Extensível
Reutilizável
Trabalhos Futuros DSL Encoder Realizar Estudo Formal
Realizar Comparativo Melhoria do Framework Cloud Storage
Versionamento
Dúvidas?
Obrigado!
View more...
Comments