Geracao Automatica Assistida Iu Marcelo Mrack
Upcoming SlideShare
Loading in...5
×
 

Geracao Automatica Assistida Iu Marcelo Mrack

on

  • 1,996 views

 

Statistics

Views

Total Views
1,996
Views on SlideShare
1,989
Embed Views
7

Actions

Likes
0
Downloads
18
Comments
0

1 Embed 7

http://www.slideshare.net 7

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Autoria e Conteúdo AUTOR: Marcelo Mrack – mmrack@gmail.com. Universidade Federal do Rio Grande do Sul (UFRGS) – Porto Alegre, RS – Brasil. 2008. CONTEÚDO: Apresentação criada para Defesa de Mestrado de Marcelo Mrack na Universidade Federal do Rio Grande do Sul (UFRGS) em 27-06-2008 sob o título Geração Automática e Assistida de Interfaces de Usuário, pesquisa esta que representa o detalhamento teórico do projeto Merlin e das ferramentas Model Based User Interface Development Environment (MBUIDE) em geral. Sobre os Direitos Autorais Essa apresentação pode ser copiada e impressa, sendo que qualquer parte de seu conteúdo pode ser reutilizada em outras obras, públicas ou privadas. Em qualquer caso é necessário manter a referência para o autor e instituição acima identificado. É expressamente proibida a exibição em público desse documento, seja na forma de palestra, workshop, feira ou qualquer outro evento similar sem o consentimento do autor.

Geracao Automatica Assistida Iu Marcelo Mrack Geracao Automatica Assistida Iu Marcelo Mrack Presentation Transcript

  • Geração Automática e Assistida de Interfaces de Usuário <Título> - <Subtítulo> slide de xx aluno Marcelo Mrack orientador Prof. PhD Álvaro Freitas Moreira co-orientador Prof. D. Marcelo Soares Pimenta Instituto de Informática – PPGC – Mestrado Universidade Federal do Rio Grande do Sul junho/2008
  • Sumário
    • PARTE 1
      • Introdução
      • Motivação
      • Interfaces de Usuário
    • PARTE 2
      • MBUIDE
    • PARTE 3
      • Merlin
      • Estudo de Caso
    • PARTE 4
      • Conclusões
  • PARTE 1
    • Introdução
    • Motivação
    • Interfaces de Usuário
  • Introdução
    • Contextualização
      • Esta apresentação resume o trabalho de pesquisa realizado durante o Programa de Pós-Graduação em Computação do Instituto de Informática da UFRGS e que teve como ênfase o projeto Merlin, que vem sendo desenvolvido desde 2001
      • O Merlin é um software para geração automatizada de Interfaces de Usuário (IU) que segue as premissas das MBUIDE, e que tem foco específico no mercado profissional de desenvolvimento de sistemas
    • Objetivos
      • Apresentar o conceito de geração de IU defendido pelas MBUIDE e um panorama geral dessa tecnologia na atualidade
      • Detalhar as bases do projeto Merlin e sua relação com as demais MBUIDE, buscando evidenciar os seus diferenciais
      • Apresentar um pequeno Estudo de Caso, onde o Merlin é utilizado para gerar uma IU de baixa complexidade
      • Mostrar os resultados obtidos até o momento, os pontos em aberto e os direcionamentos da pesquisa
  • Motivação
    • Experiência Profissional
      • A criação de UI, principalmente em sistemas de banco de dados, é uma tarefa repetitiva, cansativa em com baixos índices de reuso
    • Custo Expressivo para a Criação das IU
      • De forma geral, pesquisas demonstram que os custos de criação de IU são significativos, mesmo na atualidade
    Quanto custa a IU nos sistemas em geral Sistema Completo Interface do Usuário 100% 50% User Interface Software Tools; MEYERS (1994,2002)
  • Interfaces de Usuário
    • Cenário Atual na Criação de IU
      • Escrita de código-fonte
        • Programador escreve c ó digo-fonte usando API de um toolkit gr á fico
      • Uso de ferramentas WYSIWYG
        • Programador usa o conceito de arrastar e soltar elementos de IU
      • Uso de assistentes de criação
        • Wizards coletam informa ç ões do meio do sistema e geram c ó digo-fonte
      • Geração Automatizada
        • Templates
          • Esqueletos de c ó digo substitu í veis otimizam a programa ç ão
        • Model Driven Architecture (MDA)
          • Cartuchos de gera ç ão transformam modelos abstratos em c ó digo
  • Interfaces de Usuário
    • Problemas Recorrentes nas Abordagens Descritas
      • Tempo elevado de construção de estruturas genéricas
        • Quanto custa criar um template realmente genérico?
      • Demora nas alterações
        • Como refatorar artefatos gerados se o c ó digo j á foi alterado manualmente?
      • Falta de reuso
        • Posso reusar o rótulo “ Nome do cliente ” em projetos diferentes?
      • Gerência de código
        • C ó digo template ou não? E a versão? Onde é utilizado?
      • Refatoração
        • E se o template contiver erros?
  • Interfaces de Usuário
    • Tipos de Interfaces de Usuário
      • Uso Geral
        • São interfaces de usu á rio que não têm rela ç ão espec í fica com os dados do sistema, e são orientadas para satisfazer as mais variadas regras de neg ó cio
        • Devido a sua generalidade, a automa ç ão de gera ç ão dessas IU é reduzida
      • Interfaces CRUD
        • Acrônimo do inglês C reate, R etrieve, U pdate and D elete, são IU destinadas a visualizar e manipular os dados existentes na aplicação
        • Por possu í rem uma rela ç ão muito forte com os dados do sistema, tendem a ser beneficiadas por recursos de gera ç ão automatizada
        • Presentes em 100% dos sistemas que operam sobre banco de dados
  • Interfaces de Usuário
    • Tipos de Interfaces CRUD
      • Um-Para-Um
        • São as IU mais simples, e todos os elementos da IU existem em fun ç ão de um objeto de dados com propriedades primitivas ou com associa ç ões de cardinalidade m á xima igual a 1 no destino
        • EXEMPLO: Tela de cadastro de um produto
      • Um-Para-Muitos (Mestre-Detalhes)
        • De m é dia complexidade, os elementos da IU representam objetos de dados com associa ç ões de cardinalidade maior que 1 no destino, e exatamente 1 na origem
        • EXEMPLO: Tela de cadastro de uma nota fiscal e seus itens
      • Muitos-Para-Muitos
        • De alta complexidade, representam dados relacionados por estruturas com cardinalidade maior que 1 em ambas extremidades
        • Na pr á tica, durante a implementa ç ão, são transformadas em IU Um-Para-Muitos isom ó rficas
        • EXEMPLO: Tela de cadastro de cursos e disciplinas
    • Conceito Básico de Geração das IU CRUD
    Interfaces de Usuário Mapeamento de um objeto de dados para uma IU CRUD simples codigo = “RH0001” : String nome = “Marcelo Mrack” : String ativo = true : boolean dataDeNascimento = 02/10/1977 : Date observacoes = null : String : Funcionario
  • Interfaces de Usuário
    • Foco do Software Proposto
      • 100% das interfaces CRUD elementares com custo zero de configuração
      • 100% das interfaces CRUD com algum trabalho de configuração que tenha melhor custo-benefício do que as abordagens existentes
    Abrangência da ferramenta Merlin descrita no trabalho IU CRUD em geral 50% 30% CRUD elementar 18% Sistema completo 100% Merlin: Um Novo Horizonte na Criação de Telas de Cadastro; MRACK (2007)
  • PARTE 2
    • MBUIDE
  • MBUIDE
    • Model-Based User Interface Development Environment (MBUIDE)
      • São ferramentas que objetivam produzir IU através do uso de modelos declarativos de alto nível
      • Os modelos são processados por um mecanismo de transformação que tem como resultado as IU do sistema
      • São semelhantes à tecnologia MDA, porém:
        • Dão grande ênfase para a geração de IU
        • Valem-se de de processos, linguagens e mecanismos de transformação proprietários
        • Seguem metodologias próprias de trabalho
  • MBUIDE
    • Origens nas Antigas UIMS
      • User Interface Management System (UIMS)
      • Início dos anos 80
      • Primeira alternativa utilizada para produzir IU sem escrever diretamente código-fonte
    • Características das UIMS
      • Focada no resultado final pela visão do desenvolvedor e sem processos ou metodologias claras de trabalho
      • Sem grande preocupação com integrações ou refatoramento
      • Utilização de linguagens ou sintaxes próprias
      • Uso de diagramas de estados e transições para modelar o diálogo entre o usuário e o sistema
    • Resultados das UIMS
      • Geração dos principais menus do sistema, caixas de diálogo, mensagens simples e invocação de funções pré-determinadas
  • MBUIDE
    • Evolução
      • Grande crescimento entre os anos 80 e 90
      • Evolução das linguagens e sintaxes de especificação mais ricas
      • Separação de conceitos: Elementos de IU, Tarefas, Dados, etc.
    • Modelos
      • Formam a base das MBUIDE
      • Estruturas declarativas que armazenam aspectos relevantes do sistema a ser gerado e que, em conjunto, podem detalhar todas as informações necessárias para geração de uma aplicação
      • Definidos, os modelos servem como entrada para os mecanismos de geração da MBUIDE que, através de ciclos evolutivos e incrementais, produz as IU do sistema
  • MBUIDE
    • Tipos de Modelos
      • Modelo de Dados
        • Semelhante a um modelo relacional, foca os dados persistentes da aplica ç ão
      • Modelo de Domínio
        • Extende o Modelo de Dados, agregando conceitos semelhantes a OO
      • Modelo de Tarefas
        • Foca as regras de neg ó cio da aplica ç ão e as opera ç ões e restri ç ões relacionadas
      • Modelo de Apresentação
        • D á ênfase para os elementos gr á ficos da IU
        • Abstract Interface Object (AIO) e Concrete Interface Object (CIO) são suportados
      • Modelo de Diálogo
        • Correlato ao Modelo de Tarefas, focaliza a conversa ç ão do usu á rio com a IU
      • Modelo de Usuário
        • Define aspectos de personaliza ç ão da IU para determinados usu á rios ou grupos
      • Modelo de Aplicação
        • Efetua a liga ç ão das IU com o meio externo da aplica ç ão
      • Modelo de Plataforma
        • Variante do Modelo de Aplica ç ão, foca mais detalhes do ambiente operacional
      • Modelo de Contexto
        • Semelhante ao Modelo de Usu á rio, enfatiza aspectos dependentes do uso do sistema
  • MBUIDE
    • Exemplos de Modelos de MBUIDE
    BODART, LEHEUREUX e VANDERDONCKT (1994) e MRACK (2007) Modelos de Apresentação Modelo de Tarefas na TRIDENT DEFINE INTERACTION-OBJECT ID_Label; WORDING IS &quot;Id.&quot;; MNEMONIC IS &quot;I&quot;; PROMPT IS &quot;:&quot;; IS INSTANCE OF Label; IS COMPONENT OF Customer_GroupBox; DEFINE INTERACTION-OBJECT Id_EditBox; MAX-LENGTH IS 6; LINEARITY SIMPLE; IS INSTANCE OF EditBox; IS COMPONENT OF Customer_GroupBox; IS ATTACHED TO Cust_id; @Properties(“mnemonic=I;”) @Group(“Customer”) @Length(max=6) String id; Merlin (2007) TRIDENT (1994) Adaptado de SOUCHON, LIMBOURG e VANDERDONCK (2002) ||| >> >> ||| >> ||| >> ||| Acess and Manage Patient Information Manage Patiente Information Identification Insert Login Insert Password Request Patient File Visualize Pictures Visualize Text Add Information Delete Information Manage Patiente Medical File Visualize Patiente Medical File Modify Patiente Medical File Monitor Real Time Patient Information Close Session
  • MBUIDE
    • Arquitetura das MBUIDE
    Adaptado de PINHEIRO (2001) (1) TEALLACH e TADEUS (2) TRIDENT e METAGEN (3) MERLIN e MECANO Conjunto de modelos Gerador de código-fonte Compilador Código principal da aplicação Código gerado para um toolkit gráfico específico Aplicação final Conjunto de modelos Gerador de código intermediário Compilador Código principal da aplicação Subconjunto otimizado dos modelos Aplicação final Conjunto de modelos Compilador Código principal da aplicação Aplicação final Interpretador de tempo de execução Interpretador de tempo de execução Biblioteca do toolkit gráfico específico Biblioteca do toolkit gráfico específico Biblioteca do toolkit gráfico específico Arquitetura geral das MBUIDE em relação ao processo de geração da IU
  • MBUIDE
    • Visão Geral das Arquiteturas das MBUIDE
      • Geradores de código-fonte
        • Aplicação final não possui dependência dos modelos da MBUIDE
        • MBUIDE deve (ou deveria) se preocupar com refatoração de código-fonte
        • Menor flexibilidade à mudanças, usando abordagem “uma via”
        • Maior desempenho da aplicação final (devido compilação total)
      • Geração de código intermediário
        • Menor dependência dos modelos da MBUIDE
        • Problemas de sincronização duplicados, devido 2 pontos de integração
        • Possível melhor desempenho
      • Geradores de tempo de execução (abordagem do Merlin)
        • Total dependência dos modelos da MBUIDE
        • Prototipação instantânea
        • Praticamente não sofrem problemas de refatoração
        • Possível pior desempenho
  • MBUIDE
    • Processo de Desenvolvimento
    Criação dos modelos Nova IU Adição de funcionalidades Geração de versões preliminares Detalhamentos de mais baixo nível Geração da IU ou código-fonte final Ajustes e integração com o restante do sistema IU Completa Refatoração Processo geral de desenvolvimento de IU usando MBUIDE (notação BPMN) Abstração Maior Menor
  • MBUIDE
    • Vantagens
      • Padronização e centralização de atividades
      • Trabalhos realizados em mais alto nível
      • Respostas rápidas nos primeiros ciclos de desenvolvimento
    • Problemas Recorrentes
      • Sintaxes e notações complicadas
      • Linguagens e metodologias proprietárias
      • Busca pela generalidade, implicando em modelos demasiadamente complexos e instáveis
      • Reuso de soluções não alcançado com praticidade
      • Fraco suporte à refatoração e evolução dos modelos
      • Desequilíbrio entre a pesquisa e a aplicação de conceitos
  • PARTE 3
    • Merlin
    • Estudo de Caso
  • Merlin
    • É uma MBUIDE com Ênfase no Cenário Profissional que:
      • Tem foco específico em interfaces CRUD
        • Na versão corrente suporta CRUD simples, do tipo Um-Para-Um
      • Utiliza uma estrutura única para o armazenamento dos seus modelos
        • Na prática, os modelos são as próprias classes compiladas da aplicação
      • Não gera nenhum tipo de código-fonte
        • A transformação dos modelos em IU ocorre totalmente em tempo de execução
      • Vale-se de heurísticas plugáveis para geração da IU
        • Podendo serem definidas em linguagem nativa ou usando mecanismos externos
      • Utiliza um conjunto realimentado de configurações
        • Inferência de comportamento com base em informações históricas e taxas de acerto
      • É neutra em relação a pacote gráfico e ambiente de uso
        • Web, desktop ou dispositivos móveis podem ser alcançados
      • Possui uma arquitetura focada em reuso e integração de tecnologias
        • Baseada na plataforma Java, inúmeras tecnologias correlatas podem ser acopladas
  • Merlin
    • Origens
      • Projeto Metagen na UNISC
        • Iniciado em 2001, era uma MBUIDE rudimentar
        • Gerava interfaces CRUD Um-Para-Um e Um-Para-Muitos
        • Foi utilizado com sucesso em sistemas profissionais de médio porte
        • Ênfase no Modelo de Dados
        • Utilizava código intermediário para os modelos
    • Carências do Metagen
      • Linguagem VB, Delphi e Kylix
        • Sem suporte Web, não era multi-plataforma e não permitia distribuição
      • Sem definição clara de modelos
      • Orientação a Objetos não era utilizada
      • Pouca preocupação com padrões e tecnologias de mercado
      • Reuso baseado em cópia e ajustes de configuração
      • Layout de IU sem grande flexibilidade
  • Merlin
    • Típica Interface CRUD Gerada pelo Metagen (2003)
    Interface CRUD Um-Para-Um de média complexidade gerada pelo Metagen Agrupamentos simples Layout essencialmente tabular Dependências de preenchimento Máscaras e tamanhos Ligação básica de funções de negócio Operações CRUD essenciais
  • Merlin
    • Iniciado em 2004, é a Continuação do Projeto Metagen
      • Uso da linguagem Java
        • Franco crescimento
        • Suporte Web, Desktop, multi-plataforma
        • Orientação a Objetos
      • Separação de conceitos
        • Modelos claros
          • Modelo de Domínio
          • Modelo de Tarefas
          • Modelo de Apresentação, com suporte AIO e CIO
          • Modelo de Diálogo
          • Modelo de Usuário
        • Pouca aderência dos outros modelos devido uso da Java
      • Flexibilidade total no layout da IU
      • Foco em reuso de configurações e integração de tecnologias
      • Geração da IU totalmente em tempo de execução
  • Merlin
    • Características
      • Modelos
        • O Merlin utiliza 5 tipos de modelos para geração das IU, todos orbitando sobre o Modelo de Domínio
        • Descritos através da própria linguagem Java, com o recurso conhecido como Metadata Facility, ou simplesmente Anotações (JSR 175)
        • Os modelos nada mais são do que as classes da aplicação (com ênfase nas de persistência) enriquecidas com Anotações, as quais:
          • São definidas pelo próprio Merlin
          • Podem ser reutilizadas de outros frameworks de mercado
          • Podem ser criadas pelo próprio programador
        • Como os modelos são as classes da aplicação e como as Anotações associadas são preservadas após a compilação do sistema, o Merlin não exige estruturas externas para armazenamento de configurações
  • Merlin
    • Características
      • Modelos no Merlin, um exemplo
    @Caption(“Cadastro de Cliente Pessoa Física”) class Cliente extends Pessoa implements IPessoaFisica { @Agent( event={“focusLost”}, action={“habilitarCartao”} condition={“length>0”}) float salario; @NotNull boolean cartaoCredito; @Email @Column(length=“40”) @Property(“foreground=Color.blue”) @Order(after=“nome”) String email; @Caption(“UF”) Estado estado; @RenderAs(Lookup.class) Cidade cidade; } 1 2 3 4 5 6 7 8 Uma classe de persistência utilizada como base de um conjunto de modelos 9 10 11 12 13 14 15 16 17 18
  • Merlin
    • Características
      • Modelos no Merlin, um exemplo
    @Caption ( “Cadastro de Cliente Pessoa Física” ) class Cliente extends Pessoa implements IPessoaFisica { @Agent ( event ={ “focusLost” }, action ={ “habilitarCartao” } condition ={ “length>0” }) float salario; @NotNull boolean cartaoCredito; @Email @Column ( length = “40” ) @Property ( “foreground=Color.blue” ) @Order ( after= “nome” ) String email; @Caption ( “UF” ) Estado estado; @RenderAs ( Lookup.class ) Cidade cidade; } 1 2 3 4 5 6 7 8 Uma classe de persistência utilizada como base de um conjunto de modelos 9 10 11 12 13 14 15 16 17 18
    • Características
      • Arquitetura
    Merlin Aplicação final Estrutura geral de funcionamento do software Merlin Modelos Interpretador de Tempo de Execução IU Gerada Classes da Aplicação Anotações Heurísticas Resolvedores AIO CIO Toolkit Gráfico Histórico Estimativas Meio Externo
    • Características
      • Processo de desenvolvimento
    Merlin Desenvolvimento de IU utilizando o software Merlin 2 1 3 4 5 6 7 IDE Aplicação Tempo de execução Tempo de projeto Legenda 1 Programador usa IDE 2 Programador cria classes 3 Programador insere anotações 4 Programador compila sistema 5 Merlin interpreta modelos 6 IU gerada pelo Merlin 7 Usuáirio utiliza o sistema final
  • Merlin
    • Funcionalidades
      • Heurísticas plugáveis
        • Nada mais são do que algoritmos que transformam as informações dos modelos nas características desejadas para a IU
        • Escritos em linguagem Java, Groovy, BeanShell ou delegados a mecanismos externos
          • JBoss Drools é uma máquina de processamento de regras de produção (um Sistema Especialista) que pode ser usado para inferir resultados com base nas classes anotadas do sistema (modelos).
          • A estrutura do Merlin permite integrações desse tipo, seja com delegação total, ou com um sistema híbrido de resolução de informações de geração
  • Merlin
    • Funcionalidades
      • Heurísticas plugáveis, um exemplo
    Implementando uma heurística simples em código Java Uma nova anotação public @interface Capitalized {} Uma classe decorada class Cliente { @Capitalized String nome; } Um resolvedor simples em código Groovy instrumentado + BeanShell @ResolverFor ( Capitalized.class ) class CapitalizedResolver extends AbstractResolver { void resolve(Object source, Object destination) { if (source.contains(annotation)) { set( “destination.text” , StringUtil.capitalize(destination)) } }
  • Merlin
    • Funcionalidades
      • Layout customizável
        • Por heurísticas
          • Regras de usabilidade são aplicadas nos algoritmos internos
          • Novas heurísticas podem ser criadas
        • Por anotações
        • Por design manual
  • Merlin
    • Funcionalidades
      • Layout customizado por anotações (um elemento de IU)
    Redefinindo a ordem de controles e a posição de labels na tela A classe de dados A tela class Cliente { @Order ( after =“ observacoes ”) String nome; float salario; @Caption ( pos = Caption.TOP_LEFT ) String observacoes; } Cadastro de Cliente Cadastro de Cliente 1 2 3 4 5 6 Observações 7 2 5 Observações Salário Nome
  • Merlin
    • Funcionalidades
      • Layout customizado por anotações (uma IU inteira)
    Redefinindo a ordem de controles e a posição de labels na tela A classe de dados A tela @Caption ( pos = Caption.TOP_LEFT ) class Cliente { @Order ( after =“ observacoes ”) String nome; float salario; String observacoes; } Cadastro de Cliente Cadastro de Cliente Salário 1 2 3 4 5 6 Nome Observações 7
    • Diferenciais
      • Similaridades e sinônimos
    Merlin class Cliente { @RenderAs ( JTextArea.class ) String observacao ; } class Produto { String observacoes ; } class NotaFiscal { String obs ; } Modelo de Domínio A Modelo de Domínio B Modelo de Domínio C Sinônimo Similar Utilizando similaridades e sinônimos para geração da IU Observação Cliente Observações Produto Obs Nota Fiscal
    • Diferenciais
      • Integração com ferramentas (plugins)
        • Edição Textual Assistida é uma tendência de mercado
          • Parsing de expressões e captura de erros
          • Preenchimento automático de informações
          • Navegação entre modelos
          • Code folding (Dobras de código no editor de texto)
    Merlin Assistência de edição de modelos no Eclipse IDE { “foc o sLost” } The event focosLost cannot be recognized. Available events are: focusLost focusGain see others... focusLost
  • Merlin
    • Diferenciais
      • API enxuta, dois métodos essenciais para o programador
        • getInstance(toolkit)
          • Obtém uma instância do gerador para o toolkit gráfico desejado
        • createIU(objeto, params)
          • Retorna uma IU CRUD completa
      • Integração com tecnologias
        • Java, Groovy, BeanShell
        • Java Annotations
        • Object Constraint Language (OCL) e Expression Language (EL)
        • Web Beans, Seam, EJB, WebServices
        • Hibernate, JPA, Beans Binding, Bean Validation, Hibernate Validator
        • Toolkits Gráficos: Swing (JSF, GWT, SWT)
        • Eclipse IDE
  • Merlin
    • Diferenciais
      • Configuração realimentada
        • Durante o uso, o mecanismo interpretador agrega informações de classes de sistemas já desenvolvidos, e com base nessas informações históricas, infere novos valores de geração
        • Na eventualidade de uma ação do gerador for inadequada, o programador utiliza a premissa de Configuração por Exceção e insere uma anotação com o comportamento desejado
        • Essas novas informações entram para o sistema de histórico que, com base em taxas de acertos e erros, adequa-se ao ambiente de desenvolvimento
      • Configuração distribuída
        • Diversos sistemas podem ser interconectados, de forma que as informações de geração propaguem-se entre eles
        • Bases de informações podem ser formadas e compartilhadas, maximizando o poder de geração
  • Merlin
    • Diferenciais
      • Configuração realimentada
        • Implementando o mecanismo de histórico em servidores de aplicação através da navegação entre os classloaders do container
    Classloaders em um servidor de aplicação Root LIBs classes S 1 S 2 S n C 1 C 2 C n classes classes classes C = Classloader S = Sistema LIB = Pacote de classes Root = Bootstrap classloader Legenda
  • Merlin
    • Diferenciais
      • Configuração realimentada
        • Implementando o mecanismo de histórico em servidores de aplicação através da navegação entre os classloaders do container
    Classloaders em um servidor de aplicação Root LIBs classes S 1 S 2 S n C 1 C 2 C n classes classes classes Histórico
  • Merlin
    • Diferenciais
      • Configuração distribuída
        • Como pode ser implementada a distruição da configuração entre diversos sistemas
    Uma base federada distribuída de configurações Grupo 1 S 1 S 2 S 3 Federação 2 Federação 1 Grupo 2 S 1 S 2 S 3 Grupo 3 S 1 S 2 S 3
  • Estudo de Caso
    • Geração de uma Interface CRUD simples
      • Definir um conjunto de classes, que é a base do Modelo de Domínio
      • Gerar uma Interface CRUD para esse Modelo de Domínio
      • Refatorar o sistema, inserindo anotações sobre as classes, as quais vão evoluir o Modelo de Domínio e formar os outros modelos
      • Efetuar uma nova geração da IU CRUD e comparar os resultados
  • Estudo de Caso
    • Criando uma classe simples
      • Criar código-fonte da classe-base de geração (Modelo de Domínio)
    Uma classe simples, base do Modelo de Domínio public class Cliente { String nome; String sexo; Date dataDeNascimento; String descricao; String observacoes; boolean ativo; boolean vip; String email; } 1 2 3 4 5 6 7 8 9 10
    • Gerar a Interface CRUD
      • Passo 1 – Código da aplicação principal
    Estudo de Caso Código-fonte da aplicação principal 1 2 3 4 5 6 7 8 9 10 Passo 1 public class TesteMerlin { public static void main(String[] s) { IMerlin m = Merlin.getInstance(SWING); JPanel crud = (JPanel) m.createIU(new Cliente()); JFrame frame = new Frame( “TesteMerlin” ); frame.add(crud,CENTER); frame.setVisible(true); } }'
  • Estudo de Caso
    • Gerar a Interface CRUD
      • Passo 2 – Resultado da geração da IU
    Interface CRUD simples resultante Passo 2 Painel de mensagens Adequação de textos Correção ortográfica Layout tabular Controles de IU por tipo de dado Heurísticas de tamanho Não gerado pela ferramenta TesteMerlin
  • Estudo de Caso
    • Refatorar e Evoluir o Sistema
      • Adicionando a enumeração Sexo e evoluindo a classe Pessoa
    Novas classes, anotações e regras de negócio (classes Sexo e Pessoa) public enum Sexo { NAO_DECLARADO, MASCULINO, FEMININO } public class Pessoa { @Agent ( event = { &quot;focusLost&quot; }, action = { &quot;proposeEmail&quot; }) @NotNull String nome = &quot;marcelo&quot; ; public Sexo sexo = Sexo.MASCULINO; @Agent ( property = { &quot;foreground=Color.blue&quot; }, binder = DateToTextComponentBinder.class) Date dataDeNascimento = new Date(1977-1900,9,02); } 1 2 3 4 5 6 7 8 9 10 11 12
  • Estudo de Caso
    • Refatorar e Evoluir o Sistema
      • Evoluindo a classe Cliente
    Novas classes, anotações e regras de negócio (classe Cliente) @Caption ( &quot;Cadastro de Clientes&quot; ) public class Cliente extends Pessoa { @Agent ( event = { &quot;focusLost&quot; }, action = { &quot;isPreferencial&quot; }) @Caption ( &quot;Salário (R$)&quot; ) int salario; @Order ( after = &quot;observacoes&quot; ) String descricao; @RenderAs (CHECKBOX) @Dependence ( &quot;descricao&quot; ) @Agent ( property = { &quot;selected=true&quot; }) String observacoes; @Dependence ( “[:alnum:]&quot; ) @Order ( Order.FIRST ) @Agent ( property = { &quot;selected=true;&quot; }) boolean ativo; @RenderAs ( value = JTextField.class, binder = BooleanToTextComponentBinder.class) @Order ( LAST ) boolean vip = true; @Order ( after = &quot;nome&quot; ) @NotNull @Length ( min =12) String email; } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
  • Estudo de Caso
    • Refatorar e Evoluir o Sistema
      • Adicionando a classe AlgumasRegras
    Novas classes, anotações e regras de negócio (classe AlgumasRegras) public class AlgumasRegras { @In Context ctx ; public void isPreferencial () { ctx .eval (&quot;$vip.text=$salario.text>1500 ? 'SIM' : 'NÃO' &quot; ); } public void proposeEmail () { ctx .eval( &quot;$email.text=$nome.text.trim+ '@merlin.com' &quot; ); } } 1 2 3 4 5 6 7 8 9 10 11 12
  • Estudo de Caso
    • Efetuar uma nova geração
      • Essas alterações poderiam ter sido feitas com o sistema em execução
    Interface CRUD simples resultante após as refatorações e melhorias Painel de mensagens preenchidas Campo Ativo é o primeiro da tela Preenchimento pela regra associada Formatação de data customizada Campos obrigatórios em destaque Rótulo customizado e regra de negócio Campo Observações agora é CheckBox Desabilitado devido dependência Tipo multivalorado Campo booleano com formatação especial e regra de negócio aplicada TesteMerlin
  • Estudo de Caso
    • Efetuar uma nova geração
      • Comparando as duas IU
    Interfaces CRUD antes (esquerda) e depois (direita) da evolução do sistema TesteMerlin TesteMerlin
  • PARTE 4
    • Conclusões
  • Conclusões
    • Este Trabalho Apresentou
      • Interfaces de Usuário
        • Um panorama sobre os custos de criação das IU em sistemas, principalmente as que operam sobre banco de dados
        • Uma divisão simplista das IU, com ênfase nas CRUD, objeto do trabalho
        • As tecnologias comumente utilizadas para criar esses tipos de IU
        • Os problemas recorrentes nas abordagens comumente utilizadas
      • Tecnologia MBUIDE
        • Origem e proposta das MBUIDE
        • Elementos básicos das MBUIDE, como seus modelos e geradores integrados
        • Distinção entre os tipos de modelos suportados pelas MBUIDE
        • Arquitetura geral e processo de desenvolvimento de IU nessa tecnologia
        • Problemas recorrentes nas MBUIDE
  • Conclusões
    • Este Trabalho Apresentou
      • Projeto Merlin, uma nova proposta nas área das MBUIDE
        • Origens do projeto e objetivos
        • Caraterísticas gerais, arquitetura e processo de desenvolvimento de IU
        • Funcionalidades adicionais frente outras MBUIDE
          • Similaridades e sinônimos
          • Heurísticas plugáveis descritas em linguagem comum ao programador
        • Capacidades de integração com ferramentas e tecnologias correlatas
        • Mecanismo de configurações realimentado e distribuído como diferencial
  • Conclusões
    • Problemas em Aberto
      • Suporte CRUD Um-Para-Muitos e Muitos-Para-Muitos
      • Finalizar suporte à OCL e EL
      • Maximizar algoritmos de layout integrados
        • Atualmente, somente o layout tabular é suportado
      • Implementar suporte para outros pacotes gráficos além do Swing
      • Desenvolver plugins para integração com ferramentas
    • Trabalhos Futuros
      • Sistema de configuração realimentada
        • Gerência de propagação, segurança, estimativas e outros
        • Possível trabalho de doutorado
  • Agradecimentos
    • CAPES
      • Pela bolsa de estudos durante o período da pesquisa
    • Orientadores
      • Pela dedicação, paciência, disponibilidade e sinceridade nas opiniões
    • UFRGS
      • Pelos espaços de estudo, biblioteca e laboratórios
    • Medicina
      • Hospital de Clínicas de Curitiba e Cristo Redentor de Porto Alegre
        • Pelo tratamento durante os longos 8 anos de quimioterapia
      • Hospital Amaral Carvalho de Jaú – SP
        • Pelo excelente trabalho e acompanhamento no meu transplante de medula
    • Doador de Medula Óssea
      • A quem devo a vida
  • Fim <Título> - <Subtítulo> slide de xx Geração Automática e Assistida de Interfaces de Usuário Marcelo Mrack
  • Sobre o autor
    • Marcelo Mrack, [email_address]
      • 30 anos, 9 em TI, 6 em Java
      • Bacharel em C. Computação, UNISC – 2001
      • Mestre em C. Computação, UFRGS – 2008
      • Atuação em projetos web e desktop n camadas
      • Diretor de P&D na 3Layer Tecnologia
      • Arquiteto JBoss na LM2
      • Consultor e instrutor Java EE
      • Especialidades: IHC, Patterns, geradores, PU Ágil e UML
      • http://merlin.dev.java.net
      • http://telasdecadastro.blogspot.com