Você está na página 1de 44

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
 Reuso de Software

Quando Utilizar
 Notação

 Geração de Código
 Aumento da Abstração  Produtividade

 Automação de Tarefas
 Linhas de Produto  Estrutura de Dados
 Representação  Intercâmbio

 Confiabilidade
 Manutenabilidade  Portabilidade

 Interfaces do Usuário

Domain-Specific Languages
Fases
 Análise do Domínio

 Projeto
 Desenvolvimento

Domain-Specific Languages
Análise
 Coleta de Informações

Resultado Formal
 Metodologias
 ODM – Organization Domain
Modeling  FODA – Feature-Oriented Domain Analysis  DSSA – Domain-Specific Software Architetures

 Noções Semânticas
 Operações  Informalmente

 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
Ferramenta
MetaEdit+ (MetaCase) GME (Vanderbilt University) DSL Tools (Microsoft) MPS (JetBrains) Eclipse Modeling Project (Eclipse) Visual Studio 2005 Professional Edition Java Virtual Machine (JVM) Java Virtual Machine (JVM)

Dependências

Gratuita
Não Sim Não Sim Sim

Sistemas Operacionais Suportados
Windows, Linux e Mac OS X Windows Windows Windows, Linux e Mac OS X 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
 Mashups  APIs

Protocolos usados por APIs

SOAP 23%

 Simple Object Access
Protocol (SOAP)

 Representational State
Transfer (REST)

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 JSONP OAuth 2 SOAP 35.40% 34.60% 29.20% 13.10% 12.30% 11.50% 10.00% 8.50% 6.90% 2.30% 85.40%

RSS/Atom feeds
WebSockets CORS WS-*

Webhooks
OAuth 1.0a PubSubHubbub

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
 HTML5 Filesystem API
Local Storage

Filesystem

 Web Database
 SQLIte  IndexedDB
IndexedDB Local Storage

SQLite

 Local Storage
 Cloud Storage  Dsle.Filestorage
IndexedDB Local Storage SQLite

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)

Gerar

DSL Sistema Processo de r Arquivos Obter Linguagem Linguagem Obter Templates Templates Salvar Arquivos Gerados

 Analisa a Linguagem
 Instancia a Linguagem  Valida o Programa DSL

org.dsle.Math.json

 Executa o Programa DSL
Arquivos Gerados

DSL Encoder
Template Engine
 JSON Template

 JavaScript Template
 Registro de Engines

DSL Encoder
Code Generator
 Qualidade
“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].

 Consistência
 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
 Extensível
Languages
Toolbar Extensions FileTypes Tree

 Reutilizável
 Plug-ins  Framework
Plugins Dialog Templates IDE Tabs

<<interface>> 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
{

Front-End
 E-Mail (Textfield)

 Password (Textfield)

 I Accept This Terms. (Checkbox)  Create Account (Button)

"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" } ] } }

}

Um Caso Prático

Um Caso Prático
Designer
 Fullname (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" } ...

 E-Mail (Textfield)
 Password (Textfield)

 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
 Aumenta Abstração

DSL Encoder
 Ferramenta Alternativa

 Aumenta Produtividade
 Necessita de Ferramentas
Especializadas

 Web como plataforma
 Inteligência Coletiva  Extensível

 Reutilizável

Trabalhos Futuros
DSL Encoder
 Realizar Estudo Formal

 Realizar Comparativo
 Melhoria do Framework  Cloud Storage

 Versionamento

Dúvidas?

Obrigado!