Guilherme Pires Gustavo Royer Chaurais Orientação: Olinto José Varela Furtado Banca: José Eduardo De Lucca e Ricardo Azambuja Silveira Cada vez mais Pessoas capazes de desenvolver seu próprio software Produtividade Evolução natural Muitos conceitos atuais tentam Em vez de escrevermos código compreensível pelo computador, faremo-lo entender o que queremos de uma maneira inteligível por nós Novo paradigma a substituir a Orientação a Objetos Possibilidade de mais pessoas poderem construir seu software Aumento da compreensão e, portanto, da produtividade no desenvolvimento Fortemente baseado em Domain Specific Languages 00010371803200717370000000000000000000000000000000000000 10112345 LUIZ INÁCIO DA SILVA31032007000019450000 10254321 FERNANDO HENRIQUE CARDOSO31032007000200030000 10312121 ITAMAR FRANCO31032007000112350000 90317370000000000000000000000000000000000000000000000000 procedure LeiaLinha(const Linha: TLinha); begin if PegaCaracteres(Linha, 0, 1) = 0 then //HEADER begin NroBanco := PegaCaracteres(Linha, 2, 3); DataGeracao := PegaCaracteres(Linha, 8, 8); HoraInicioGeracao := PegaCaracteres(Linha, 17, 4); end else if PegaCaracteres(Linha, 0, 1) = 1 then //REGISTRO begin NSR := PegaCaracteres(Linha, 4, 5); NomeCliente := PegaCaracteres(Linha, 9, 28); DataVencto := PegaCaracteres(Linha, 37, 8); ValorAPagar := PegaCaracteres(Linha, 45, 8); end; else if PegaCaracteres(Linha, 0, 1) = 9 then //TRAILER begin NroRegistros := PegaCaracteres(Linha, 2, 2); HoraTerminoGeracao := PegaCaracteres(Linha, 4, 4); end; end; LER LINHA Se linha for HEADER NroBanco inicia em 2, contando 3 caracteres, DataGeracao inicia em 8, contando 8 caracteres, HoraGeracao inicia em 17, contando 4 caracteres. Se linha for REGISTRO NSR inicia em 4, contando 5 caracteres, NomeCliente inicia em 9, contando 28 caracteres, DataVencto inicia em 37, contando 8 caracteres, ValorAPagar inicia em 45, contando 8 caracteres. Quem de nós (desenvolvedores) nunca imaginou uma tarefa que pudesse ser automatizada e seu resultado fosse código fonte? Problema: sistema para setor imobiliário Solução procurar uma DSL para o domínio Caso exista Utilizá-la Caso contrário Criamos uma Resultado final: código construído por uma ou mais Domain Specific Languages focados em uma plataforma/framework. Estudo de caso em sistema para Cálculo de Folhas de Pagamento Desenvolvimento de duas versões: Orientada a Objetos Language Oriented Posterior análise comparativa Versão Orientada a Objetos Linguagem de Programação: C# Ambiente de Desenvolvimento: Microsoft Visual Studio 2005 Metodologia Utilizada: Test-Driven Development Versão Language Oriented Ferramenta para construção de DSLs: Microsoft DSL Tools Versão Orientada a Objetos Módulos resultantes PayrollCalc PayrollTests PayrollInterface PayrollCalc.Regras PayrollCalc.Exportadores Versão Language Oriented Linguagens construídas/utilizadas Payrule – Regras Payxport - Exportadores Vídeo de Exemplo Geração de Código Final em LOP Raramente um programa executável será resultante Ferramentas Utilizadas O Microsoft DSL Tools é baseado em diagramas gráficos Talvez para a linguagem Payxport seria mais fácil utilizarmos um ambiente baseado em texto LOP torna muito mais fácil a compreensão sobre o programa escrito Muito facilmente alguém que possua conhecimentos em Cálculos de Folha de Pagamento poderia realizar uma alteração nas Regras Tempo para a construção de um projeto Language Oriented Conhecimento sobre metodologia e ferramenta de desenvolvimento das DSLs Documentação e exemplos disponíveis Pré-existência das linguagens envolvidas Necessita amadurecimento Facilita a compreensão por qualquer pessoa Agiliza o processo Caso não seja com esse nome, muitos conceitos estarão presentes no próximo paradigma Previsões Padrões para desenvolvimento de DSLs Diferença bastante grande entre programador de Domain Specific Languages e desenvolvedor de sistemas Empresas especializadas na construções desse tipo de linguagem Domain-specific language approach to modelling UI architecture of mobile telephony systems (Lee, J.-S.; Chae, H.S.) Using domain specific languages to instantiate object-oriented frameworks (Fontoura, M.; Braga, C.; Moura, L.; Lucena, C.) A domain-specific language approach to programmable networks (G. Muller; J.L. Lawall; S. Thibault; R.E. Voel Jensen) Construção de ferramenta para a elaboração de Domain Specific Languages Utilização de uma DSL por não-programadores Desenvolvimento de padrões para construção e uso de DSLs Orientandos Orientação Guilherme Pires Gustavo Royer Chaurais Olinto José Varela Furtado Banca José Eduardo De Lucca Ricardo Azambuja Silveira