Linguagens Especificas de Dominio

4,599 views

Published on

Apresentação sobre DSL para a cadeira de Projeto e Análise Orientado a Objetos para o curso de Engenharia de Software da Poli-UFRJ. Turma 8.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,599
On SlideShare
0
From Embeds
0
Number of Embeds
56
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • É uma maneira particular de escrever sobre uma linguagem. São chamadas de DSL embutidas ou interfaces fluentes.
  • AQUI temos toda a magia da DSL. Inicialmente criamos um cliente com sua matricula e seu nome definidos; Logo em seguida definimos uma locação e definimos “para” quem é a locação; Logo após, definimos qual vídeo será locado. Para efeito ilustrativo, adicionamos a definição dos atributos neste slide. Atentem para o nome das operações que definem os atributos. E por fim, implementamos a locação. Adicionando o título (nome do objeto), quando será devolvido e se já foi pago ou não. Chamo a atenção mais uma vez para o nome das operações. Elas são claras e qualquer pessoa com o conhecimento do domínio conseguiria identificar o que este trecho de código está fazendo.
  • Aqui vemos a implementação da classe Video. Não temos nenhum mistério, apenas a definição de alguns atributos a partir de algumas operações.
  • Aqui vemos a implementação da classe Locação. Não temos nenhum mistério, apenas a definição de alguns atributos a partir de algumas operações. No entanto, já temos algumas definições mais elaboradas, mas nada de diferente.
  • Na classe DataUtil não temos nenhum mistério. Temos alguns atributos estáticos definidos, notem que o nome de cada atributo é bem claro quanto ao seu significado. Percebam também que temos implementado o operador daquiA que retorna a data atual acrescida de dataMs que é um valor inteiro (atentem ao fato dos atributos também serem inteiros, isso fará todo sentido mais a frente)
  • Linguagens Especificas de Dominio

    1. 1. Linguagens Específicas de Domínio Alexandre Nunes Fabio Felgueiras Saldanha Hallison Marques Luiz Eduardo Araujo Marcelo Lecar Vinicius Gonçalves
    2. 2. Introdução <ul><li>Escopo </li></ul><ul><ul><li>Domínio </li></ul></ul><ul><ul><li>O que é DSL </li></ul></ul><ul><ul><li>Padrões de Linguagens </li></ul></ul><ul><ul><li>Tipos de DSL </li></ul></ul><ul><ul><li>Exemplos </li></ul></ul><ul><ul><li>Conclusão </li></ul></ul><ul><ul><li>Referências </li></ul></ul>
    3. 3. Domínio <ul><li>É uma área de conhecimento </li></ul><ul><li>Usado para satisfação dos stakeholders </li></ul><ul><li>Grupo de conceitos e terminologias entendidas e praticadas </li></ul><ul><li>Analogia </li></ul><ul><li>Exemplos </li></ul><ul><ul><li>Área Médica </li></ul></ul><ul><ul><li>Área de Direito </li></ul></ul><ul><ul><li>Trabalhos de Pesquisa </li></ul></ul>
    4. 4. O que é?  <ul><li>As Linguagens Específicas de Domínio surgiram para resolver problemas específicos, focadas em um domínio de problema particular </li></ul><ul><li>Também são conhecidas, entre outros nomes, como: pequenas linguagens, linguagens orientadas a problemas e linguagens de tarefas específicas </li></ul>
    5. 5. O que é? <ul><li>Geralmente elas são pequenas, oferecendo apenas um conjunto restrito de notações e abstrações </li></ul><ul><li>Linguagens como Cobol e Fortran, que poderiam ser vistas como linguagens para o domínio de negócio e científico, não são consideradas DSLs porque elas não são pequenas e porque o seu poder não se limita a esses domínios </li></ul>
    6. 6. Aplicação de um padrão de DSL <ul><li>Modelo: representa o problema. Pode ser uma expressão textual ou um diagrama </li></ul><ul><li>Plataforma:  utilizada para a execução do problema </li></ul><ul><li>Integração: método para integrar a expressão da linguagem na plataforma </li></ul>
    7. 7. Aplicação de um padrão de DSL
    8. 8. Meios de Integração <ul><li>Interpretação: parte da própria plataforma fica dedicada ao reconhecimento de expressões da DSL e à execução dos seus objetivos </li></ul><ul><li>Geração: um procedimento separado é usado para converter a expressão DSL em algo que a plataforma reconheça de modo nativo </li></ul><ul><li>Técnicas artesanais: utilizadas quando um determinado modelo não é suficiente para resolver o problema inteiro </li></ul>
    9. 9. Tipos de DSL <ul><li>  Interna </li></ul><ul><ul><li>É uma DSL onde utiliza-se uma linguagem de programação já existente (linguagem hospedeira), adaptando-a para ser usada em um domínio específico </li></ul></ul><ul><li>Externa </li></ul><ul><ul><li>Cria-se uma nova linguagem de programação para atender ao domínio </li></ul></ul>
    10. 10. DSL Externa <ul><li>Independe de uma linguagem de programação em particular </li></ul><ul><li>O criador da linguagem tem a liberdade de criar a sintaxe da maneira que quiser </li></ul><ul><li>É necessário criar um compilador para parsear, processar a sintaxe e mapear na semântica </li></ul><ul><li>O criador pode escolher os símbolos, as operações, os construtores e a estrutura que deseja para se adequar ao domínio </li></ul><ul><li>Muita flexibilidade, mas gasta-se bastante tempo para criar e manter o compilador </li></ul>
    11. 11. DSL Interna <ul><li>Normalmente são fáceis de implementar </li></ul><ul><li>Depende de uma linguagem de programação </li></ul><ul><li>É beneficiada pelos recursos existentes da linguagem hospedeira </li></ul><ul><li>É limitada por causa das regras e restrições da linguagem hospedeira </li></ul><ul><li>Podem ser legíveis até a pessoas que não saibam nada sobre a linguagem, mas que tenham experiência no domínio </li></ul>
    12. 12. Exemplos – DSL Externa <ul><li>Linguagens de Configuração do UNIX </li></ul><ul><li>SQL </li></ul><ul><li>HTML </li></ul>
    13. 13. Exemplos – DSL Interna
    14. 14. Exemplo – Operação <ul><li>Cliente ana1 = new Cliente (“ 123 ”,” Ana Maria ”) </li></ul><ul><li>Locacao locacao1 = Locacao .para(ana1) </li></ul><ul><li>Video alta1 = new Video (“ Alta Fidelidade ”); </li></ul><ul><li>alta1.nomeOriginal(“ Alta Fidelidade ”) </li></ul><ul><li>.doGenero(“ Comédia ”) </li></ul><ul><li>.com(“ Jonh Cussak, Jack Black ”) </li></ul><ul><li>.pequenoResumo(“ Vendedor de discos rever seus relacionamentos após rompimento com namorada.”); </li></ul><ul><li>locacao1.adicionar(alta1) </li></ul><ul><li>.paraDevolver(daquiA(DOIS_DIAS)) </li></ul><ul><li>.aPagar(); </li></ul>
    15. 15. Exemplo - Video <ul><li>public Video nomeOriginal( String nome){ </li></ul><ul><li>this.nomeOriginal = nome; </li></ul><ul><li>return this; </li></ul><ul><li>} </li></ul><ul><li>public Video doGenero( String genero){ </li></ul><ul><li>this.genero = genero; </li></ul><ul><li>return this; </li></ul><ul><li>} </li></ul><ul><li>public Video pequenoResumo( String resumo){ </li></ul><ul><li>this.sinopse = resumo; </li></ul><ul><li>return this; </li></ul><ul><li>} </li></ul>
    16. 16. Exemplo - Locação <ul><li>public static Locacao para( Cliente cliente){ </li></ul><ul><li>return new Locacao (cliente); </li></ul><ul><li>} </li></ul><ul><li>public Locacao adicionar( Video ... Videos){ </li></ul><ul><li>for (Video vd: videos){ </li></ul><ul><li>relacaoVideo.add(vd); </li></ul><ul><li>} </li></ul><ul><li>return this; </li></ul><ul><li>} </li></ul><ul><li>public Locacao paraDevolver( Date data){ </li></ul><ul><li>dataDevolucao = data; </li></ul><ul><li>return this; </li></ul><ul><li>} </li></ul><ul><li>public Locacao aPagar(){ </li></ul><ul><li>pago = false ; </li></ul><ul><li>return.this; </li></ul><ul><li>} </li></ul>
    17. 17. Exemplo - DataUtil <ul><li>public class DataUtil{ </li></ul><ul><li>public static final int UM_DIA = 1; </li></ul><ul><li>public static final int DOIS_DIAS = 2; </li></ul><ul><li>public static final int TRES_DIAS = 3; </li></ul><ul><li>public static final int QUATRO_DIAS = 4; </li></ul><ul><li>public static Date daquiA(int dataMs){ </li></ul><ul><li>dataMs = new Date().getDate() + dataMs; </li></ul><ul><li>Date data = new Date(); </li></ul><ul><li>data.setDate(dataMs); </li></ul><ul><li>return data; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
    18. 18. Vantagens <ul><li>Programação mais facil </li></ul><ul><ul><li>Soluções no próprio idioma e na esfera de domínio </li></ul></ul><ul><ul><li>Aumenta o nível de abstração </li></ul></ul><ul><ul><li>O que programar - Não como programar </li></ul></ul><ul><ul><li>Acentuação da produtividade </li></ul></ul><ul><ul><li>Encapsula o problema (Quando aplicada internamente) </li></ul></ul>
    19. 19. Vantagens <ul><li>Reutilização Sistêmica </li></ul><ul><ul><li>Gerar códigos concisos </li></ul></ul><ul><ul><li>Preparar o código para o reuso </li></ul></ul><ul><ul><li>Gerar documentação suficiente </li></ul></ul>
    20. 20. Vantagens <ul><li>Dá ao experte em domínio o entendimento do sistema </li></ul><ul><ul><li>Proporciona confiabilidade frente ao problema </li></ul></ul><ul><ul><li>Com a linguagem restrita o desenvolvedor pode se preocupar com outras partes de negócio do sistema </li></ul></ul><ul><ul><li>Pode ser aplicada em técnicas de CRC (Class Responsibility and Collaboration) </li></ul></ul>
    21. 21. Vantagens <ul><li>Facil Verificação </li></ul><ul><ul><li>Conserva-se o conhecimento do problema </li></ul></ul><ul><ul><li>Permitir validação e otimização no nível de domínio </li></ul></ul>
    22. 22. Desvantagens <ul><li>Necessidade de atenção com os custos elevados </li></ul><ul><li>Necessita de técnicos com expertise em domínios </li></ul><ul><li>Juntar e definir todo o conhecimento relevante ao domínio </li></ul><ul><li>Os expertes devem possuir maturidade nos problemas de domídio </li></ul><ul><li>Dificuldade em buscar o escopo geral e a construção das linguagens específicas de domínios </li></ul>
    23. 23. Conclusão <ul><li>A linguagem específica de domínio tem grande tendência para simplificar a programação, mas não é a solução de todos os problemas </li></ul><ul><li>Há limites naturais em linguagem específica de domínio. Como em qualquer outro nível/cenário de programação </li></ul><ul><li>A linguagem específica de domínio não alcança todos os problemas da Vida Real </li></ul><ul><li>Os problemas para aplicação da linguagem específica de domínios ainda estão sendo definidos </li></ul><ul><li>Há espaço para aprofundar as abordagens e tendências da linguagem específica de domínios </li></ul>
    24. 24. Referências <ul><li>Apresentação DSL - Martin Fowler </li></ul><ul><ul><li>http://www.infoq.com/presentations/domain-specific-languages </li></ul></ul><ul><li>Mundo Java – Edição 30 </li></ul><ul><li>Prévia do Livro do Martin Fowler </li></ul><ul><ul><li>http://martinfowler.com/dslwip </li></ul></ul><ul><li>Wikipedia </li></ul><ul><ul><li>http://en.wikipedia.org/wiki/Domain-specific_programming_language </li></ul></ul>

    ×