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)
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
Reuso de Software
Geração de Código
Aumento da Abstração
Produtividade
Confiabilidade
Manutenabilidade
Portabilidade
Notação
Automação de Tarefas
Linhas de Produto
Estrutura de Dados Representação Intercâmbio
Interfaces do UsuárioQuando Utilizar
Domain-Specific Languages
Fases
Análise do Domínio
ProjetoDomain-Specific Languages
Análise
Coleta de Informações
Noções Semânticas
Operações
InformalmenteResultado Formal
Metodologias 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
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”
Domain-Specific Languages
Ferramentas
Ferramenta Dependências Gratuita
Sistemas Operacionais
Suportados
MetaEdit+ (MetaCase) Não Windows, Linux e
Mac OS X GME (Vanderbilt
University) Sim Windows
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
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 DispositivoWeb Programável
Web Programável
RSS
Mashups
APIs
Simple Object Access Protocol (SOAP)
Representational State Transfer (REST)
Smartphones
JSON REST 68% XML-RPC 2% JavaScript 5% OUTROS 2% SOAP 23%Protocolos usados por APIs
Fonte: Programmable Web
“Existe uma grande chance que qualquer aplicativo no seu telefone faça alguma coisa interessante
Web Programável
Fonte: Programmable Web 0% 5% 10% 15% 20% 25% 2006 2007 2008 2009 2010 2011
Porcentagem de novas APIs
com suporte somente a JSON
Web Programável
2.30% 6.90% 8.50% 10.00% 11.50% 12.30% 13.10% 29.20% 34.60% 35.40% 85.40% PubSubHubbub OAuth 1.0a Webhooks WS-* CORS WebSockets RSS/Atom feeds SOAP OAuth 2 JSONP RESTQue tecnologia você usou em 2012?
Web Programável
JSON
JSONP
DSL Encoder
Características
IDE
Web como plataforma
Código Aberto HTML5 JavaScript JSON Extensível Linguagens, Templates e Plug-ins.
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
JavaS
DSL Encoder
Clientes
Servidor de Aplicação DSL Encoder
Servidor de API de Terceiros
Internet
Comunicação com a Ferramenta Comunicação com API de terceiros
Servidor de API de Terceiros
DSL Encoder
Sistema de Arquivos
HTML5 Filesystem API
Web Database
SQLIte
IndexedDB
Local Storage
Cloud Storage
Dsle.Filestorage IndexedDB SQLite IndexedDB SQLite Filesystem Local Storage Local Storage Local Storage Local StorageDSL Encoder
Editor de Texto
Open Source
New BSD
JavaScript
Syntax highlighting
Indentação Automática
Live syntax checker“Ele combina as características e performance de editores nativos como Sublime, Vim e TextMate” [27].
“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].
DSL Encoder
DSL Processor
DSL.JS (Componente)
Analisa a Linguagem
Instancia a Linguagem
Valida o Programa DSL
Executa o Programa DSL IDE DSL Processo r Sistema de Arquivos Gerar Obter LinguagemLinguagem Obter Templates
Templates
Salvar Arquivos Gerados
Arquivos Gerados org.dsle.Math.json
DSL Encoder
Template Engine
JSON Template
JavaScript Template
Registro de EnginesDSL Encoder
Code Generator
Qualidade
Consistência
Produtividade
Abstração “Geração de código é outro elo nacadeia 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]. “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].
DSL Encoder
Console
Log
Info
Warning
Success
ErrorDSL Encoder
Hot-Spots
Extensível
Reutilizável
Plug-ins
Framework Extensions Languages Templates Plugins Ajax Tree Toolbar Tabs Dialog Console IDE FileTypes <<interface>> FileStorage LocalStorageDSL Encoder
Plug-ins
JavaScript
Extensibilidade
Reuso
Adaptação
Configuração
Tempo de ExecuçãoUso da Ferramenta
Linguagens
JSON
DslTemplateOptions
DslType
DslTypeItemUso da Ferramenta
Templates
JSON Template
JavaScript Template
{% %}Uso da Ferramenta
Plug-ins
JavaScript
Id, name
load();
#nopluginsUso da Ferramenta
Programa DSL
JSON
language
main
Validate
GenerateElementos de Formulário
Label
Textfield
Textarea
Select
Checkbox
Slider
ButtonUm Caso Prático
org.dsle.FormUI.dsl
DslTypes
Templates org.dsle.formUi.jQueryMobile.tpl .html org.dsle.formUi.Titanium.tpl .jsUm Caso Prático
Front-End
E-Mail (Textfield)
Password (Textfield)
I Accept This Terms. (Checkbox)
Create Account (Button)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" }
] } } }
Designer
Fullname (Textfield)
E-Mail (Textfield)
Password (Textfield)
I Accept This Terms. (Checkbox)
Create Account (Button)Um Caso Prático
{
"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" } ...
Resultado
Aumento da Abstração
Fácil Utilização porConhecedores do Domínio
Geração de Código jQuery Mobile
Appcelerator Titanium