Onde fica a rua do porto? Siga reto nessa rua mesmo, depois vire à direita no semáforo. Passe um posto de gasolina, é a terceira rua! www.oliverdominguez.com Quais as forças que atuam sobre a asa de uma nova aeronave sendo projetada?
Como ficará a ocupação urbana da capital Xangai em 2020? Pedro tem dois irmãos Daqui a cinco anos, o mais novo terá a metade da idade de Pedro Daqui a dez anos, o mais velho terá o triplo da idade do mais novo Quantos anos tem Pedro e os irmãos? O uso de modelos pode ajudar a respondê-las Modelos abstraem detalhes Modelos representam conceitos Modelos possuem informação útil Modelos são fáceis de compreender Outras propriedades... 2
/23/2009 maps.google.com 3
Idade de Pedro hoje = x Idade do irmão mais novo hoje = y Idade do irmão mais velho hoje = z Sistema y+5 = (x+5)/2 z+0 = (y+0)3 Modelo de Classes Modelo de interface Requisitos Rabiscos Modelo de Dados Modelo de Casos de Uso Modelo de Componentes Um modelo de um sistema é uma descrição ou especificação daquele sistema e seu ambiente, para um determinado propósito. Um modelo é frequentemente apresentado como uma combinação de desenhos e texto. O texto pode ser em uma linguagem de modelagem ou uma linguagem natural. 4
Modelos devem servir de entrada para geradores, transformadores, etc... Portanto, precisam ser automaticamente intepretáveis Por uma máquina Capacidade cognitiva limitada Devem ser Estruturados Formalmente definidos Sintaticamente corretos Completos Não ambíguos... Calculadora Some 56 com treze, e depois quarenta e cinco. Do total, subtraia cinquenta e sete. Tudo isso vezes meia-meia. 56 +3 +45-57 66 Software que entende um modelo Realiza ações Demonstração - calculadora 5
Preciso de: Um formato que o computador entenda Um analisador Dentro da ciência da computação Compiladores Linguagens Autômatos Linguagem natural Ainda está distante... Análise-Síntese Lê um programa em uma linguagem de origem Escreve um programa equivalente em uma linguagem de destino Exibe erros Analisador três fases Análise linear Caracteres são lidos, da esquerda para a direita Agrupados em tokens (sequência de caracteres que possuem um significado coletivo) Análise hierárquica Tokens são agrupados em coleções que possuem um significado Análise semântica Verificações para garantir que os componentes do programa fazem sentido 6
Análise linear Análise léxica ou scanning posicao := inicial + taxa 60. Identificador posicao 2. Sinal de atribuição := 3. Identificador inicial 4. Sinal de soma + 5. Identificador taxa 6. Sinal de multiplicação 7. Número 60 Expressões regulares Definem as combinações de caracteres que caracterizam um token Tokens: { Sinal de Atribuição = :=, Sinal de Soma = +, Sinal de Multiplicação =, Número = ( - )?[0-9]+, Identificador = [a-za-z][a-za-z0-9] } posicao := inicial + taxa 60 Tokens: { Sinal de Atribuição = :=, Sinal de Soma = +, Sinal de Multiplicação =, Número = ( - )?[0-9]+, Identificador = [a-za-z][a-za-z0-9] } 7
posicao igual inicial mais taxa vezes 60 Tokens: { Sinal de Atribuição = igual, Sinal de Soma = mais, Sinal de Multiplicação = vezes, Número = ( - )?[0-9]+, Identificador = [a-za-z][a-za-z0-9] } Análise hierárquica Análise sintática ou parsing Atribuição Identificador posicao := + Identificador inicial Identificador taxa Número 60 Regras sintáticas Atribuição Identificador := ; Identificador Número + ; 8
posicao := inicial + taxa 60 Atribuição Identificador := ; Identificador Número + ; Atribuição Identificador posicao := inicial + taxa 60 + Identificador taxa 60 inicial Identificador taxa Número 60 posicao := inicial + taxa 60 Atribuição Identificador := ; Identificador Número + ; Atribuição Identificador posicao Identificador inicial := + Identificador taxa Número 60 Programa prog { (Comando ; ) } ; Comando Atribuição Laço Se; Atribuição Identificador := ; Identificador Número + ; Laço... prog { a = 2; b = a + 5; se (b < 4) a = 0; } 9
Análise semântica Checagens diversas (tipo, declaração, etc) prog { a = 2.573f; b = a + 5; se (a == 5 && c < 4) a = 0; } Sintaxe abstrata vs sintaxe concreta Atribuição Identificador posicao := + Identificador inicial Identificador taxa Número 60 Sintaxe abstrata vs sintaxe concreta Atribuição Identificador t id t2 Identificador t3 id2 Identificador id3 Número n 0
id t id2 t2 id3 t3 n posicao := inicial + taxa 60 Sintaxe abstrata Voltada ao compilador Estrutura Formalismo Validade Computabilidade Sintaxe concreta Voltada ao programador Aparência Legibilidade Expressividade Muito mais detalhes Implementação Otimizações Técnicas/abordagens Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman - Compiladores Princípios, Técnicas e Ferramentas Editora: Ltc, 995
Modelo Representação, abstração, especificação... Sistema / ambiente Propósito Linguagem de modelagem Linguagem Interpretada por uma máquina Técnicas de compiladores Objeto Linguagem Sintaxe abstrata Tamanho Peso Sintaxe concreta Alavanca Comprimento Força Ponto de apoio Pessoa Idade Objeto o ( Tamanho (3,4,2) Peso 20kg ) Pessoa p ( Idade 20 ) Objeto o ( Tamanho (3,4,2) Peso 20kg ) Pessoa p ( Altura,80 ) public class Objeto { int larg, alt, prof; float peso; } public class pessoa { int altura; } 2 Tarefa impossível! São necessárias: -3 pessoas (>,70) -6 alavancas (> 5.5m) 3 20kg 4 7 2
AST Parsing Ações semânticas Objeto o ( Tamanho (3,4,2) Peso 20kg ) Pessoa p ( Altura,80 ) Geração de código Execução canônica Cálculos Demonstração São boas para modelos hierárquicos (árvore) Classes, Tabelas, Objetos, Atributos, etc São boas para aspectos de algoritmos Sequência de passos, comandos Expressões regulares Funcionam bem com sistemas de controle de versões (CVS, SVN,...) 3
Linguagens textuais Árvores Sempre que é necessária uma referência Precisa percorrer a árvore novamente Demonstração Utilizar um modelo Orientado a Objetos Sintaxe abstrata Ainda precisa percorrer várias vezes a árvore Porém, uma vez lida, a informação fica mais fácil de ser consultada Demonstração public class Endereco { String rua; int numero; } Pessoa public class Pessoa { String nome; enderecoprofissional Endereco enderecoresidencial; Endereco enderecoprofissional; } Endereco rua:string numero:int enderecoresidencial 4
public class Pessoa { String nome; Endereco enderecoresidencial; Endereco enderecoprofissional; } Pessoa public class Endereco { String rua; int numero; } enderecoprofissional Endereco rua:string numero:int?? enderecoresidencial Programas Sentenças Palavras Caracteres Regras Léxicas Sintáticas Parsers precisavam ser implementados à mão Tabela de símbolos Máquina de estados Otimizações Obs: para linguagens complexas, ainda é necessário 5
Compiler Compiler Ou geradores de compiladores Parser generators YACC, ANTLR,... Regras (léxica + sintática) CC Parser Código Ferramentas para Modelagem Textual Parser + Metamodelo Eclipse TCS Textual Concrete Syntax Xtext (OpenArchitectureWare) Regras (léxica + sintática) CC Parser API metamodelo Código Facilita a construção de interpretadores Maior flexibilidade Poder computacional Facilidade de manutenção Mudanças nas regras são propagadas para o parser e metamodelo Demonstração Xtext 6
XML (extensible Markup Language) SAX Simple API for XML À base de eventos Árvore é percorrida e eventos são disparados quando elementos são encontrados DOM Document Object Model Modelo OO do documento Vantagens Parsers já existem! Permite a checagem de metadados XMLSchema / DTD Consulta facilitada (XPath) Desvantagens Baixa legibilidade Prejudica seu poder expressivo Ainda é uma árvore! Demonstração Para as linguagens que são naturalmente grafos Modelos estruturais (arquiteturas, topologias, etc) Diagramas blocos e setas Orientação a Objetos Entidade-Relacionamento Muitos outros Sintaxe abstrata orientada a objetos 7
Sintaxe Abstrata Concreta Sintaxe abstrata Modelo orientado a objetos Estrutura dos modelos (classes, relacionamentos, herança, atributos,...) MetaModelo atributos ClasseUML lados AssociaçãoUML AtributoUML tipo:string 2 LadoAssociaçãoUML multiplicidade: String participante AgregaçãoUML referencia:boolean Produto:ClasseUML Cliente:ClasseUML produto fabricante:string email:string preço:currency fone:string Compra:ClasseUML data:date depto comprador Departamento:ClasseUML obj:cliente nome = João 0/03/2008 email=joao@email.com fone=6 3627 46 obj2:cliente nome = Pedro email=pedro@bol.com fone= 342 566 obj3:produto nome = Secadora fabricante = Brastemp preço = R$ 2600,00 depto = Eletrodomésticos obj4:departamento nome = Eletrodomésticos 8
AssociaçãoUML atributos ClasseUML lados Metamodelo AtributoUML 2 tipo:string LadoAssociaçãoUML AgregaçãoUML multiplicidade: String referencia:boolean participante Produto:ClasseUML Cliente:ClasseUML produto Modelo fabricante:string email:string preço:currency fone:string Departamento:ClasseUML Compra:ClasseUML data:date depto comprador obj:cliente nome = João 0/03/2008 email=joao@email.com obj3:produto Informação fone=6 3627 46 nome = Secadora fabricante = Brastemp preço = R$ 2600,00 obj2:cliente depto = Eletrodomésticos obj4:departamento nome = Pedro nome = Eletrodomésticos email=pedro@bol.com fone= 342 566 M2 AssociaçãoUML atributos ClasseUML lados Metametadados AtributoUML 2 tipo:string LadoAssociaçãoUML AgregaçãoUML multiplicidade: String referencia:boolean participante Cliente:ClasseUML email:string fone:string M comprador Produto:ClasseUML produto Metadados fabricante:string preço:currency Departamento:ClasseUML Compra:ClasseUML data:date depto obj:cliente nome = João 0/03/2008 email=joao@email.com obj3:produto Dados fone=6 3627 46 nome = Secadora fabricante = Brastemp preço = R$ 2600,00 obj2:cliente depto = Eletrodomésticos nome = Pedro email=pedro@bol.com fone= 342 566 M0 obj4:departamento nome = Eletrodomésticos atributos Entidade Relacionamento Atributo Papel cardinalidade: {,N} participante 3 papéis Cliente Fabricante Nome N Produto Nome Departamento Nome E-mail Tabela Clientes ID Nome E-mail João joao@email.com 2 Pedro pedro@email.com Tabela Produtos ID Nome Fabricante DeptoID Secadora Brastemp 2 Fogão Dako 2 Tabela Departamentos ID Nome Eletrodomésticos 2 Cozinha Restrição de chave estrangeira Produtos(DeptoID) Departamentos(ID) 9
Objeto tipo Mensagem ordem:int conteudo:string de para Classe 5: verifica() 4: envia(txt) s:sms c:central 3: conecta(nro) : new() :AplicativoMIDP 2: enviatexto( 92-8282, Mensagem ) public class SMS { public Central c; public void enviatexto(string nro, String txt) { c.conecta(nro); c.envia(txt); c.verifica(); } } public class Central { public void conecta(string nro) {... } public void envia(string txt) {... } public void verifica() {... } } public class AplicativoMIDP { void main{ SMS s = new SMS(); s.enviatexto( 92-8282, Mensagem ); } } Metamodelo Colaboração UML Mensagem ordem:int conteudo:string Objeto tipo Classe de para Metamodelo E-R atributos Entidade Relacionamento Atributo Papel cardinalidade: {,N} participante 3 papéis Metamodelo Classes UML atributos ClasseUML lados AssociaçãoUML AtributoUML tipo:string 2 LadoAssociaçãoUML multiplicidade: String participante AgregaçãoUML referencia:boolean M3 Metametamodelo Metametametadados Metametamodelo M2 Metamodelo Metametadados Metamodelo UML Metamodelo E-R M Modelo Metadados Modelo de classes Modelo E-R Modelo de colaboração M0 Informação Dados objetos objetos tabelas tabelas programas 20
Deve ser rica o bastante para descrever modelos de vários domínios Portanto, deve ser capaz de descrever a si mesma MOF Meta-Object Facility OMG Diagrama classes UML simplificado Ecore Eclipse EMF MOF adaptado para maior eficiência MetaGME MIC Vanderbilt Generic Modeling Environment Sintaxe abstrata Voltada ao computador Metamodelo Sintaxe concreta Voltada ao ser humano Ícones Caixas Linhas Setas Cores... Múltiplas sintaxes concretas Exemplo Diagrama de sequência Diagrama de colaboração 2
GME Demonstração Através de API Como no exemplo no início desta apresentação Benefícios da orientação a objetos Métodos Coleções Referências Builder Object Network (GME) Originalmente em C++ Existe uma versão em Java Demonstração Visual (estrutura) Analisar a tarefa Linguagem Abstrata Concreta Analisar o domínio do problema Domínio Modelo Textual (hierarquia, algoritmo) Gerar código Simular Experimentar Problema Testar Analisar 22
Especialista do domínio Especialista em TI finanças medicina economia jogos turismo geologia esportes Problema MODELOS componentes classes subrotinas frameworks bits código máquina padrões bytes objetos Solução Como definir linguagem Ferramentas para linguagem Visual Textual E quanto à UML? Modelagem de software não é sinônimo de UML? É a linguagem mais conhecida Com maior suporte de ferramentas Grande documentação Supre as principais necessidades Análise, casos de uso, negócio, aspectos estáticos e dinâmicos, componentes, implantação... 23
Um organograma Um circuito elétrico Um esquema físico de BD Uma GUI Mesmo com perfis Ainda tem pouca capacidade expressiva Fica preso à semântica da UML No contexto do MDD É uma falha grave Domínios técnicos (horizontais): aspectos técnicos comuns a diversas aplicações Distribuição GUI Persistência Domínios funcionais (verticais): aspectos de negócio, organizacionais Bancos Finanças Seguros Aeronáutica Sistemas automotivos Sistemas embarcados Diesel Controladores de motor Gas 24
Sistemas web E-Commerce Aplicações ebusiness E-Banking Sistema Persistência GUI Comunicação Transações Segurança E-commerce Web Compras Cartão de crédito Boleto Fórum Showroom Sistemas automotivos Linguagens de modelagem de propósito geral GPL General Purpose Language Sistemas embarcados Controladores de motor Diesel Gas Sistemas web E-Commerce Aplicações ebusiness E-Banking 25
Focada Em um problema Em uma organização Em um projeto Linguagem pequena, normalmente declarativa, que oferece poder expressivo focado em um domínio de problema em particular Arie van Deursen, Paul Klint, and Joost Visser. Domain-specific languages: An annotated bibliography. SIGPLAN Notices - ACM Press, 35(6):2636, 2000. Sistemas embarcados Sistemas automotivos Controladores de motor Diesel Gas Linguagens de modelagem de propósito geral GPL General Purpose Language Linguagens específicas de domínio DSL Domain-Specific Language Sistemas web E-Commerce Aplicações ebusiness E-Banking Eficiência Produtividade Dificuldade na implementação GPL DSL Aplicabilidade (nro. de cenários) Facilidade de utilização (ferramentas prontas) 26
Eficiência Produtividade Tecnologia de DSL MDA Ferramentas atuais Dificuldade na implementação Aplicabilidade (nro. de cenários) Facilidade de utilização (ferramentas prontas) GPL DSL Flexibilidade Proximidade do domínio Possibilidade de customização ) Defina uma gramática para a linguagem SQL abaixo SELECT tabela. campo, tabela. campo2, tabela2. campo3 FROM tabela, tabela2 WHERE tabela. campo = tabela2.campo AND tabela. campo2 = tabela2. campo2 Exemplo: Consulta : SELECT Campos From Tabelas...; Campos:... 27
2) Esboce o metamodelo OO criado para esta linguagem Exemplo: Consulta Campos... Preciso ler arquivos de dados Os arquivos estão em um formato texto Cada linha do arquivo é uma sequência de campos separados por um caractere qualquer Cada linha pode ser um tipo de registro diferente, os três primeiros caracteres indicam o tipo Cada registro possui um identificador, localizado nos três caracteres após o tipo Podem existir referências entre os registros, indicadas através do identificador PES00:João:END00:6-4242-5535 PES002:Carlos:END002:2-5324-0098 END00:Rua treze de maio:35:jardim II:São Carlos:SP PES003:Maria:END00:6-3565-233 END002:Rua central:000:centro:são Paulo:SP DEP00:Pedrinho:0:PES00 DEP002:Paulinho:5:PES00 DEP003:Sofia::PES003 28
Defina uma linguagem textual para descrever os tipos de registros (estilo JavaBeans) Defina uma linguagem textual para descrever o formato do arquivo, relacionando-a com os tipos de registros Defina o metamodelo para a seguinte linguagem visual: Início Questão 5 Questão 2 Resposta Resposta 4 Resposta 5 Resposta 8 Resposta 2 Questão 6 Questão Questão 3 Resposta 6 Resposta 9 Mensagem 2 Resposta 3 Questão 4 Mensagem Resposta 7 Defina o metamodelo para definir conexões físicas de rede, com os elementos: Computador Nome Endereço IP HUB Nome Portas Roteador Nome Endereço IP Portas 29
Sugestões: Qual linguagem de metamodelagem é melhor? Ecore, MOF ou MetaGME? É possível criar modelos visuais fora do padrão blocos e setas? É possível combinar modelos visuais e textuais? Quanto está custando o kg da picanha bovina? Sério! Vai ter coffe break?? Estamos sozinhos no universo? Soluções de valor zero matematicamente interessantes da função zeta de Riemann todas tem uma forma a + bi? Os matemáticos conseguirão libertar os poderes das equações de Navier-Stokes? 30