AMULET
Automatic Manufacture of Usable and
Learnable Editors and Toolkits
Maria Alice G. V. Ferreira
Ver. 2003
Características
Novo modelo para desenvolvimento de interfaces
•
•
•
•
Brad Myers - Carnegie Mellon University
paradigma da orientação a objetos - C++
Plataformas: X11 - Windows 95 - Windows NT
propõe desenho, prototipação, implementação e avaliação de
interfaces
• novos modelos:
– para os objetos
– restrições
– animação
– entrada e saída
– comandos
– UNDO
Características
Arquitetura: aberta
• permite a investigação de novas soluções
• Ex: “constraints solvers” múltiplos
• Widgets modificáveis
Fornecer suporte de alto nível para os “insides”
dos programas
• “inside” - conteúdo dos programas. Ex: parte de desenho, como
em CADs, sistemas de visualização, editores gráficos, etc
“Application framework”
• sistema que permite implementar partes dos aplicativos e não
somente a interface
Características
Suporte:
•
•
•
•
“redesenho” automático
restrições entre widgets
funcionamento interativo facilitado
comandos de edição, tipo “cut”, “paste”, etc
objetos de interface estão disponíveis em tempo de
execução, podendo ser manipulados interativamente
EXEMPLO
Outros toolkits:
• menus
• barras de ferramentas
AMULET
• permite implementar o
circuito com suas restrições e compromissos
Destina-se a aplicações
de natureza gráfica,
principalmente.
Usuários potenciais:
estudantes, pesquisadores e desenvolvedores
Conceitos básicos
tudo é representado como objeto
Utiliza-se de um sistema de objetos denominado
“prototype-instance”  nenhuma distinção entre
classe e instância (no topo de C++), portanto uma
instância pode ser utilizada como protótipo para
outras instâncias (objetos)
Objetos possuem “slots” (atributos), porém podem
ser criados em tempo de execução (dinâmicos), tipos
podem ser atribuídos dinamicamente a estes slots,
que podem conter dados ou métodos
Herança é permitida dinamicamente, se o objeto
tiver um valor para o “slot”
Conceitos básicos
Criação de objetos
• por instanciação - herda “slots”, que podem ser “setados” com
novos valores
• por cópia - todos os “slots’ têm os valores copiados
• EX: Am_Bitmap  objeto de biblioteca Amulet
– and_bitmap_image  imagem adequada
Um programa - Hello World!
Padrão já visto em outros sistemas,
como VB, SUIT, Motif etc
Interactors
 O objeto interactor permite que cada objeto responda de forma
conveniente às entradas. Existem alguns tipos de Interactors
permitidos. Move Grow é um destes tipos e permite a
movimentação e redimensionamento dos objetos:
new_gate.Add_Part(Am_Move_Grow_Interactor.Create());
 Am_Move_Grow_Interactor  permite as ações de mover e
redimensionar o objeto ao qual é adicionado através de Add_Part;
por default, funciona com o botão esquerdo do mouse, porém isto
pode ser alterado. Em outras palavras, Add_Part adiciona uma
nova funcionalidade ao objeto new_gate, criado em uma das
transparências anteriores.
 Para cada plataforma, cada objeto mantém o “look and feel”
conveniente, automaticamente.
“Command objects”
Para executar comandos do aplicativo, alocam-se
instâncias de “Command objects”; estes possuem
métodos especificados nos slots Am_DO_METHOD
“Command objects” possuem slots para métodos
de Undoing, Redoing, Help, Repeating, Enabling e
Disabling
Existem “Command objects” de biblioteca, que
podem ser usados pelos programas
“Command objects”
Ex:
Am_Object my_button = Am_Button.Create().
Add_Part(Am_COMMAND, Am_Quit_Command.Create()
.Set(Am_LABEL,”Goodbye, World!”))));
Compromissos (“Constraints”)
Compromissos
Declarados pelo usuário e mantidos pelo sistema
Formula constraints - similar às das planilhas, e
descritas em C++. Definem procedimentos a serem
executados pela fórmula
Ex:
// define uma fórmula denominada right_of_tool_panel_formula
// que retorna uma valor inteiro
Am_Define_Formula(int, right_of_tool_panel_formula){
return (int)tool_panel.Get(Am_LEFT) +
(int)tool_panel.Get(Am_WIDTH) + 5;
Reconhecimento de gestos
Agate - uma ferramenta interativa que permite
este reconhecimento, através do fornecimento de
amostras de gestos pelo usuário, e que são
associadas a um nome (cadeia de caracteres)
Os nomes são associados com as operações
Exemplo: gestos associados à interface de circuitos
apresentada (criação de “gates”)
Reconhecimento de
gestos
Interface de Agate
(treinamento)
Animação
Animações são criadas com auxílio do sistema de
compromissos do Amulet
Quando um compromisso de animação é ligado a
um slot e o slot altera o seu valor, o novo valor é
removido do slot, este recebe o antigo valor e então,
de forma suave, novos valores interpolados entre o
valor antigo e o novo são colocados no slot;
lembrar que ao ser alterado o valor de um slot,
todo o sistema é redesenhado.
Exemplo: Mover os números 0 e 1 entre os gates do
circuito.
Animação
Arquitetura
Novo Modelo para objetos
ORE - Object Registering and Encoding - nível do
Amulet que implementa o sistema de protótipos e
intâncias de objetos (“prototype-instance object
system”) no topo da linguagem C++
Objetivos: adquirir um nível mais dinâmico de
manipulação dos objetos (manipulação em tempo
de execução), poder obter em tempo de execução
informação completa sobre os objetos e poder
sobrepor métodos de objetos em tempo de
execução.
No modelo de protótipos e instâncias dos objetos
não existe distinção entre classe e instância; toda
instância pode ser usada como protótipo para a
geração de novas instâncias
“Slots” - podem conter atributos ou métodos
Instanciação de objetos: os objetos podem ser
instanciados ou copiados. Os objetos instanciados
herdam todos os “slots” do protótipo; se estes
“slots” forem alterados no protótipo, todos os objetos instanciados são alterados também e, se houver alteração de aspecto gráfico, a tela é redesenhada. Os objetos instanciados que tiverem seus
valores redefinidos não são alterados, quando os
“slots” do protótipo são alterados.
No caso dos objetos copiados a alteração dos
“slots” do protótipo não altera os objetos copiados.
Este segundo modelo permite uma alternativa ao
modelo de instanciação.
Classes e objetos
 As instâncias podem ter os valores “default” (os do protótipo)
redefinidos através de comandos Set
Am_Object new_obj = zero_one_proto.Create( )
.Set(Am_LEFT,new_obj_left)
.Set(Am_TOP,new_obj_top);//comando instanciação
new_obj . Set (Am_LEFT,40);
redefinição dos comandos
new_obj . Set (Am_TEXT,“Hello!”);
 os “slots” podem ser excluídos ou adicionados aos objetos em
tempo de execução.
 os valores dos “slots” podem ser alterados em tempo de execução.
 os tipos de dados contidos nos “slots” podem ser alterados
dinamicamente. Para isso, todo um mecanismo que execute a
alteração destes tipos foi implementado.
“Wrapper” - uma classe que permite manipular os
tipos de dados do C++, em tempo de execução. Esta
classe deve ser usada quando se deseja armazenar
algum dado em um “slot” que tenha seu tipo
verificado pela linguagem.
Am_Object
Am_Object
Am_Object
Am_Object
Set (Am_Slot_Key key, Am_Wrapper* value);
Set (Am_Slot_Key key, void* value);
Set (Am_Slot_Key key, int value);
Set (Am_Slot_Key key, float value);
Um “slot” contendo dados pode ser sobreposto por
um método, em qualquer instante.
Amulet utiliza um procedimento especial para o
mecanismo que nos demais UIMS é manipulado
via “callback”, o Am_DO_METHOD.
Am_Define_Method - macro que cria um novo
método que tem o tipo do primeiro parâmetro
(Am_Object_Method). Este método chama uma
função que retorna o tipo do segundo parâmetro
(void); a função tem o nome do terceiro parâmetro
(clear_selection). O quarto parâmetro especifica a
lista de parâmetros, a serem utilizados pelo método
Am_Define_Method (Am_Object_Method, void, clear_selection,
(Am_Object /*cmd*/)) {
y_selection . Set (Am_VALUE, NULL);
Para se colocar a especificação do método no “slot”
conveniente utiliza-se o método Get_Part
tool_panel . Get_Part (AM_COMMAND)
. Set (Am_DO_METHOD, clear_selection);
Hierarquia “Part-Owner”
“Owner” - grupo de objetos ou objetos associados
a uma janela
“Part” - outros grupos ou primitivos como linhas,
textos ou retângulos
Hieraquia “Part-Owner” - é uma hierarquia estrutural, que permite herança estrutural
Interactors
“Interactor” - um objeto que pode ser ligado às
entradas do sistema, para que um objeto gráfico
responda a essas entradas.
O “interactor” - por default - inicia sua operação
ao ser pressionado o botão esquerdo do mouse,
porém este default pode ser alterado.
O “interactor” fornece feedback ao usuário
(através de movimentação, redimensionamento dos
objetos ou através de caixas de diálogo
convenientes).
O “interactor” pode ter seu funcionamento
abortado através de chaves apropriadas ou através
de chamada, pelo programa, de um método que
realiza esta tarefa.
Ao se abortar uma interação, restaura-se o estado
do programa.
Quando a interação se encerra normalmente, o
feedback é encerrado, e um objeto de comando é
atribuído ao sistema
“Interactors” possuem vários parâmetros, o que
permite alto grau de variação de funcionamento
(início, fim, abortamento da interação, tipo de
feedback, etc)
Existem 6 tipos diferentes de “interactors”
Um mesmo “interactor” pode operar sobre um
conjunto de objetos. Ex: move_grow_interactor,
ligado a uma janela, opera sobre todos os objetos
na janela
“Interactors”- Choice Interactor
Escolhe um objeto dentro de um conjunto de
objetos. O usuário move o mouse sobre o conjunto
de objetos até encontrar o item desejado. Pode ser
usado, também, para a seleção entre itens de menu
ou botões de comandos. Permite a selação de um
único item (um item de um menu) ou de múltiplos
itens (vários arquivos a serem copiados de um
diretório).
“Interactors” - Disparo e MoveGrow
Disparo - É utilizado quando se deseja que alguma
coisa ocorra logo após o disparo, como por exemplo
a digitação de uma tecla, um click do mouse, etc.
Move-Grow - É utilizado para movimentar ou
alterar o tamanho de um objeto, como: atividades
de “dragging” numa “scroll-bar”, operações de
edição de um objeto, etc
“Interactors”: New Points, Text e
Reconhecimento de Gestos
New Points - permite que se introduza pontos que
podem indicar a posição de novos objetos
Text Edit - permite a introdução de texto nas
formas padrões e permite tabelas de tradução e
comandos de edição
Reconhecimento de Gestos - Gestos são definidos
através de exemplificação e o sistema utiliza o
reconhecedor denominado Agate
“Interactors” são ligados aos objetos que devem
sofrer interação
Um “interactor” pode ser ligado a um conjunto de
objetos
// permite a movimentação de my_object com a pressão do botão
// esquerdo do mouse
my_object . Add_Part (A_Move_Grow_Interactor . Create());
// permite que qualquer parte de my_group tenha tamanho
// alterado, com pressão do botão direito do mouse
my_group. Add_Part (A_Move_Grow_Interactor . Create()
.Set (Am_GROWING, true)
.Set (Am_START_EVENT, “RIGHT_DOWN”));
Referências Bibliográficas
Links:
http://www-2.cs.cmu.edu/~amulet/
permite a obtenção de todo material bibliográfico a
respeito, bem como de novos projetos
Figuras:
http://www2.cs.cmu.edu/afs/cs/project/amulet/www/amuletall-pictures.html
Download

AMULET