Você está na página 1de 44

DSL Encoder

Uma ferramenta web para desenvolvimento de linguagens especificas de dominio

Mestrado Profissional em Engenharia de Software Bruno Falco Leo Maia


Ph.D. Vinicius Cardoso Garcia (orientador) M.Sc. Leandro Marques do Nascimento (co-orientador)

Agenda
Domain-Specific Languages

Web Programvel
DSL Encoder Uso da Ferramenta Um Caso Prtico Concluses Trabalhos Futuros

Domain-Specific Languages
O Que ?
Dcada de 50 (APT)

Linguagem Pequena
Declarativa Notaes Especficas

Domnio do Problema
SQL, HTML, LaTeX

linguagem pequena, usualmente declarativa, que oferece poder expressivo focado em um dominio de um problema particular [2].

Domain-Specific Languages
Motivaes
Reuso de Software

Quando Utilizar
Notao

Gerao de Cdigo
Aumento da Abstrao Produtividade

Automao de Tarefas
Linhas de Produto Estrutura de Dados
Representao Intercmbio

Confiabilidade
Manutenabilidade Portabilidade

Interfaces do Usurio

Domain-Specific Languages
Fases
Anlise do Domnio

Projeto
Desenvolvimento

Domain-Specific Languages
Anlise
Coleta de Informaes

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

Noes Semnticas
Operaes Informalmente

Domain-Model Vocabulrio 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
Implementao
Compilao e Interpretao

Incorporao
Processamento e Macro-processamento Compilador ou Interpretador Extensvel

Ferramentas Especializadas
Verificador de Inconsistncias IDE
desenvolvimento de DSL difcil, exigindo tanto conhecimento do domnio quanto experincia 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)

Dependncias

Gratuita
No Sim No 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 Programvel
Web 2.0

Web como plataforma


Inteligncia Coletiva Co-desenvolvedores

Beta Perptuo
Rich Internet Applications AJAX

Software Acima do Nvel de


um nico Dispositivo

Web Programvel
Web Programvel

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 faa alguma coisa interessante usando uma API [12].
Fonte: Programmable Web

Web Programvel
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 Programvel
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 Programvel
JSON JSONP

DSL Encoder

DSL Encoder
Caractersticas
IDE Web como plataforma Cdigo Aberto HTML5 JavaScript JSON Extensvel Linguagens, Templates
e Plug-ins.

DSL Encoder

DSL Encoder
Cdigo Aberto
New BSD

Co-desenvolvedores
Deteco e Correo de
Erros

Melhoria da Qualidade Estrutura Modularizada Crescimento e Evoluo

dados olhos suficientes, todos os erros sao triviais [21].

DSL Encoder
Web como plataforma
Multiplataforma

Instant Deploy World Wide


HTML5, CSS3, WebGL
+ AJAX e JSONP

FileSystem Offline Applications Local Storage


aplicaes binrias convencionais esto 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 Aplicao DSL Encoder

Internet

Servidor de API de Terceiros

Servidor de API de Terceiros


Comunicao com a Ferramenta Comunicao 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

Indentacao Automatica
Live syntax checker
Apesar do interesse crescente em interfaces icnicas e mtodos de programao visual, o texto onipresente no ambiente de computador e sua importncia no diminui [26].

Ele combina as caractersticas 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 codigo um auto mato que acessa modelos, extrai informacoes a partir deles, e transforma-os em producao em uma sintaxe especifica [1].

Consistncia
Produtividade Abstrao

Geracao de codigo e outro elo na cadeia evolutiva da crescente abstracao. Com ela, voce vai produzir rapidamente codigo de maior qualidade, e assim ser capaz de responder as necessidades de mudanca com facilidade [32].

DSL Encoder
Console
Log

Info
Warning Success

Error

DSL Encoder
Hot-Spots
Extensvel
Languages
Toolbar Extensions FileTypes Tree

Reutilizvel
Plug-ins Framework
Plugins Dialog Templates IDE Tabs

<<interface>> FileStorage

Ajax

Console

LocalStorage

DSL Encoder
Plug-ins
JavaScript

Extensibilidade
Reuso Adaptao

Configurao
Tempo de Execuo

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 Prtico
Elementos de Formulrio
Label

Textfield
Textarea Select

Checkbox
Slider Button

Um Caso Prtico
org.dsle.FormUI.dsl
DslTypes

Templates
org.dsle.formUi.jQueryMobile.tpl .html org.dsle.formUi.Titanium.tpl .js

Um Caso Prtico
{

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 Prtico

Um Caso Prtico
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 Prtico

Um Caso Prtico
Resultado
Aumento da Abstrao

Fcil Utilizao por


Conhecedores do Domnio

Gerao de Cdigo
jQuery Mobile Appcelerator Titanium

Concluses
DSL
Aumenta Abstrao

DSL Encoder
Ferramenta Alternativa

Aumenta Produtividade
Necessita de Ferramentas
Especializadas

Web como plataforma


Inteligncia Coletiva Extensvel

Reutilizvel

Trabalhos Futuros
DSL Encoder
Realizar Estudo Formal

Realizar Comparativo
Melhoria do Framework Cloud Storage

Versionamento

Dvidas?

Obrigado!