Professional Documents
Culture Documents
PARTE 1
1. Introdução
2. Motivação
3. Interfaces de Usuário
PARTE 2
4. Geração Automática de Interface
5. MDA
PARTE 3
6. Visão geral da Abordagem
7. Estereótipos de Interface
8. Metamodelo de IHC
PARTE 4
9. Conclusões
PARTE 1
1. Introdução
2. Motivação
3. Interfaces de Usuário
Introdução
Contextualização
Esta apresentação resume o trabalho de pesquisa sendo realizado na Iniciação
Científica da autora
Objetivos
Apresentar o conceito de geração de IU defendido pelas MDA e um
panorama geral dessa tecnologia na atualidade
Experiência Profissional
A criação de UI é uma tarefa repetitiva, cansativa em com
baixos índices de reuso
Interfaces CRUD
Acrônimo do inglês Create, Retrieve, Update and Delete, 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
São as IU mais simples, e todos os elementos da IU existem em função de
Um-Para-Um
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
Interfaces de Usuário
Conceito Básico de Geração das IU CRUD
Mapeamento de um objeto de dados para uma I U CRUD simples
: Funcionario
4.
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
1. Modelo de Dados
Semelhante a um modelo relacional, foca os dados persistentes da aplicação
2. Modelo de Domínio
Extende o Modelo de Dados, agregando conceitos semelhantes a OO
3. Modelo de Tarefas
Foca as regras de negócio da aplicação e as operações e restrições relacionadas
4. 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
5. Modelo de Diálogo
Correlato ao Modelo de Tarefas, focaliza a conversação do usuário com a IU
6. Modelo de Usuário
Define aspectos de personalização da IU para determinados usuários ou grupos
7. Modelo de Aplicação
Efetua a ligação das IU com o meio externo da aplicação
8. Modelo de Plataforma
Variante do Modelo de Aplicação, foca mais detalhes do ambiente operacional
9. Modelo de Contexto
Semelhante ao Modelo de Usuário, enfatiza aspectos dependentes do uso do
sistema
MBUIDE
Exemplos de Modelos de
MBUIDE
Modelos de Apresentação Modelo de Tarefas na TRIDENT
TRIDENT (1994)
DEFINE INTERACTION-OBJECT ID_Label; Acess and Manage Patient
WORDING IS " I d . " ; Information
MNEMONIC IS " I " ;
>> >
PROMPT IS " : " ;
>
IS INSTANCE OF Identification
Manage Patiente Information
Label; Close
IS COMPONENT OF Sessio
| ||
DEFINE
Customer_GroupB
INTERACTION-OBJECT Id_EditBox; n
MAX-LENGTH IS 6 ;
ox; | ||
LINEARITY SIMPLE; Inser Insert
IS INSTANCE OF EditBox; t Passwor Manage Patiente Medical File
Logi d Monitor Real Time Patient Information
IS COMPONENT OF Customer_GroupBox; IS
ATTACHED TO Cust_id; n > >
> >
Visualize Patiente Medical Modify Patiente Medical File
Merlin (2007) Request File
Patient || | || |
@Properties(“mnemonic=I;”) File
@Group(“Customer”)
@Length(max=6) Visualiz Visualiz Add Delete
String i d ; e e Text Informatio Informatio
Pictures n n
BODART, LEHEUREUX e Adaptado de SOUCHON, LIMBOURG e VANDERDONCK (2002)
VANDERDONCKT
(1994)
e MRACK (2007)
MBUIDE
Arquitetura das MBUIDE
Arquitetura geral das MBUIDE em relação ao processo de geração da IU
Gerador de Gerador de
Interpretador de Interpretador de
código- código
tempo de tempo de
fonte intermediário
execução execução
Nova IU
Refatoração
Ajustes e
Geração da
Criação Adição Geração de Detalham entos integração
IU ou
dos de versões de mais com o
código-fonte
m odelos funcio prelim inares baixo nível restante
final
nalida do sistema
des
5. Merlin
6. Estudo de
Caso
Merlin
É uma MBUIDE com Ênfase no Cenário Profissional
que:
1. Tem foco específico em interfaces CRUD
Na versão corrente suporta CRUD simples, do tipo Um-Para-Um
2. 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
3. Não gera nenhum tipo de código-fonte
A transformação dos modelos em IU ocorre totalmente em tempo de execução
4. Vale-se de heurísticas plugáveis para geração da IU
Podendo serem definidas em linguagem nativa ou usando mecanismos externos
5. Utiliza um conjunto realimentado de configurações
Inferência de comportamento com base em informações históricas e taxas de
acerto
6. É neutra em relação a pacote gráfico e ambiente de uso
Web, desktop ou dispositivos móveis podem ser alcançados
7. 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
Layout
essencialmen
te tabular Operações
CRUD
essenciais
Máscaras
e
Dependências
tamanhos
de Ligação
preenchiment básica de
o funções de
Agrupamento negócio
s simples
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ística
s
O Merlin utiliza 5 tipos de modelos para geração das IU, todos orbitando
Modelos
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
Uma classe de persistência utilizada como base de um conjunto de modelos
1
2 class Cl i e n t e extends Pessoa implements IPessoaFisica {
3
4
5
6
7 float salario;
8
9 boolean c arta oCre di to;
10
11
12
13 S t r i n g e m a i l ;
14
15 Estado estado;
16
17 Cidade cidade;
18 }
Merlin
Características
Modelos no Merlin, um exemplo
Uma classe de persistência utilizada como base de um conjunto de modelos
1 @Caption(“Cadastro de Cl i e n t e Pessoa F í s i c a ” )
2 class Cl i e n t e extends Pessoa implements IPessoaFisica {
3 @Agent( e v e n t = { “ f o cu s L o s t ” },
4
5 action={“habilitarCartao”}
6 condition={“length>0”})
7 float salario;
8 @NotNull
9 boolean
10 ca rta oCre dit o;
11 @Email @Column(length=“40”)
12 @Property(“foreground=Color.blue” )
13 @Order(after=“nome”)
14 S t r i n g e ma i l ;
15 @Capt i on( “ UF
16 ” )
17 Estado estado;
18 } @Render As( Lookup. cl as
s)
Cidade cidade;
Merlin
Características
Arquitetura
Estrutura geral de funcionamento do software Merlin
Histórico
M odelos
Classes da Aplicação
Anotações
Estimativas
Heurísticas
I nterpretador IU Gerada
Resolvedores de Tempo de
Execução
Legenda
1
1 Programador usa IDE
7
E
ID
o
ã
ç
a
ic
pl
A
2 Programador cria classes
3 Programador insere anotações
4 Programador compila sistema
2 3 4 5 6 5 Merlin interpreta modelos
Tempo de projeto Tempo de execução 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 Um resolvedor simples em código Groovy instrumentado + BeanShell
p u b l i c @interface @ResolverFor(Capitalized.class )
C a p it a lize d { } class CapitalizedResolver extends AbstractResolver {
A telade Cliente
Cadastro A classe
1 class C lde
i e ndados
te {
Salário
2 @Order(after=“observacoes”)
Observações
3 S t r i n g nome;
Observações 4 float salario;
5 5 @Caption(pos=Caption.TOP_LEFT)
6 S t r i n g observacoes;
7 }
2 Nome
Merlin
Funcionalidades
Layout customizado por anotações (uma IU inteira)
Redefinindo a ordem de controles e a posição de labels na tela
class C l i e n t e Observação
Similar
{ @RenderAs(JTextArea.cla P roduto
ss) S t r i n g observacao; Observações
}
Modelo de Domínio B Nota Fiscal
{ String
observacoes; Sinônimo
}
Modelo de Domínio
C
class NotaFiscal {
S t r i n g obs;
}
Merlin
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)
Assistência de edição de modelos no Eclipse IDE
{ “focosLost” }
Legenda
Roo LIB class Root = Bootstrap classloader
t s es LIB = Pacote de classes
C = Classloader
C S class
es S = Sistema
1 1
class
es
C S
class
2 2 es
C S
n n
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
C S class
es
1 1
class Histórico
es
C S
class
2 2 es
C S
n n
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
Federação Federação 2
1
Grupo Grupo Grupo
1 2 3
S S S
S2 S2 S
S 3 S 3
S1 3
2
1 1
Estudo de Caso
Geração de uma Interface CRUD simples
1. Definir um conjunto de classes, que é a base do Modelo de
Domínio
2. Gerar uma Interface CRUD para esse Modelo de Domínio
3. Refatorar o sistema, inserindo anotações sobre as classes, as
quais vão evoluir o Modelo de Domínio e formar os outros
modelos
4. Efetuar uma nova geração da IU CRUD e comparar os
resultados
Estudo de Caso
1. 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
2 S t r i n g nome;
1 p u b l i c class C l i e n te {
3 String
4 sexo;
5 Date
6 dataDeNasci
7 mento;
8 S t r i n g descri cao;
9 S t r i n g observacoes;
boolean a t i v o ;
10 }
boolean v i p ;
String email;
Estudo de Caso
2. Gerar a Interface CRUD
Passo 1– Código da aplicação
principal
Código-fonte da aplicação principal
2
1 p u b l i c class TesteMerlin {
3 p u b l i c s t a t i c void m a i n ( S t r i n g [ ] s ) {
4 I M e r l i n m = Merlin.getInstance(SWING);
5 JPanel crud = (JPanel) m.createIU(new C l i e n t e ( ) ) ;
6 JFrame frame = new Frame(“TesteMerlin”);
7 frame.add(crud,CENTER);
8 frame.setVisible(true);
9 }
10 } '
Passo
1
Estudo de Caso
2. Gerar a Interface CRUD
Passo 2 – Resultado da geração da
IU
Interface CRUD simples resultante
TesteM erlin
Painel de Controles de
mensage IU por tipo de
ns dado
Adequação
de textos Heurísticas
de
tamanho
Correção
ortográfic
a Não gerado
pela
Layout tabular ferramenta
Passo
2
Estudo de Caso
3. 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)
2 NAO_DECLARADO, MASCULINO, FEMININO
1 public enum Sexo {
3}
4
5public class Pessoa {
6 @Agent(event = { "focusLost" } , a c ti o n = { "proposeEmail" } )
7 @NotNull
8 S t r i n g nome = "marcelo";
9 p u b l i c Sexo sexo = Sexo.MASCULINO;
1 @Agent(property = { "foreground=Color.blue" } , binder =
0 DateToTextComponentBinder.class)
1 Date dataDeNascimento = new Date(1977-1900,9,02);
1 }
12
Estudo de Caso
3. Refatorar e Evoluir o
Sistema
Novas
• classes, anotações
Evoluindo e regras
a classe C l i e nde
t e negócio (classe Cliente)
1 @Caption("Cadastro de C l i e n t e s " )
2 p u b l i c class C l i e n t e extends Pessoa {
3 @Agent(event = { " f ocusLost " } , a c t i o n = { " i s P r e f e r e n c i a l " })
4 @Caption("Salário ( R $ ) " ) i n t s a l a r i o ;
5 @Order(after = "observacoes") S t r i n g descricao;
6 @RenderAs(CHECKBOX) @Dependence("descricao")
7 @Agent(property = { " s elec t ed=t rue" } )
8 S t r i n g observacoes;
9 @Dependence(“[:alnum:]")
10@Order(Order.FIRST)
11@Agent(property = { " s e l e c t e d = t r u e ; " } )
12boolean a t i v o ;
13 @RenderAs(value = J Te x t F i e l d . c l a s s , binder =
BooleanToTextComponentBinder.class)
14@Order(LAST)
15boolean v i p = t r u e ;
16@Order( after = "nome") @NotNull @Length(min=12)
String email;
17 }
Estudo de Caso
3. Refatorar e Evoluir o Sistema
• Adicionando a classe AlgumasRegras
Novas classes, anotações e regras de negócio (classe AlgumasRegras)
1 p u b l i c class AlgumasRegras {
2
3 @In Context c t x ;
4
5 p u b l i c void i s P r e f e r e n c i a l ( )
6 { ctx.eval("$vip.text=$salario.text>1500 ?
7 'SIM':'NÃO'");
8 }
9 p u b l i c void proposeEmail()
1 { ctx .e va l ( "$e m a i l . te xt= $ no m e.te xt.tri m + ' @ me r l i n .co m '
0 " );
11 }
12 }
Estudo de Caso
4. Efetuar uma nova geração
Essas alterações poderiam ter sido feitas com o sistema em
execução
Interface CRUD simples resultante
Painel de mensagens após as refatorações e melhorias
TesteM erlin Campos obrigatórios
preenchidas em destaque
Campo Ativo é
Tipo multivalorado
o primeiro da
tela
Preenchimento Rótulo customizado
pela regra e regra de
associada negócio
TesteMerlin TesteMerlin
PARTE 4
7.
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