SlideShare a Scribd company logo
1 of 6
Download to read offline
Naked Objects View Language
                         Marcius Gomes Brandão1, Mariela Ines Cortés1, Enyo J. T. Gonçalves 2


   Abstract— A critical constraint to the use of the Naked        interface de usuário a partir de uma linguagem definida no
Objects architectural pattern is the automatic generation of a    próprio modelo de negócio através de meta informações. O
single generic user interface. For many developers and users,     artigo está organizado como segue: na Seção II, os trabalhos
this restriction prevents the use of frameworks based on this
                                                                  relacionados são apresentados. Na Seção III é apresentado o
archetype. This article presents the Naked Objects View
Language, a language for customization of user interfaces that    referencial teórico em relação aos padrões Naked Objects e
uses the Naked Objects. The biggest benefit of this language is   MVC, a notação EBNF e diagramas de sintaxe utilizados na
the ability to define multiple views for the same naked object,   criação da linguagem e a técnica de design Layout Grid. Na
regardless of the platform used and maintaining the               Seção IV é apresentada a Naked Objects View Language
characteristics of the pattern.                                   (NOVL). Na Seção V é ilustrado um estudo de caso. E por
                                                                  fim, na Seção VI, são apresentadas as conclusões e
   Resumo— Uma restrição crítica ao uso do padrão                 sugestões para trabalhos futuros.
arquitetural Naked Objects reside na geração automática de
uma única interface genérica de usuário. Para muitos
desenvolvedores e usuários essa restrição impede a utilização                    II. TRABALHOS RELACIONADOS
de frameworks baseados em tal arquétipo. Este artigo                Vários frameworks têm sido implementados com a
apresenta a Naked Objects View Language, uma linguagem            proposta do padrão Naked Objects, no entanto praticamente
para a customização das interfaces de usuários que utiliza o
padrão Naked Objects. O maior benefício dessa linguagem é a       nenhum deles oferece suporte adequado à customização do
possibilidade de definir múltiplas visões para o mesmo naked      layout da interface do usuário de forma consistente com o
object, independentemente da plataforma utilizada e mantendo      referido padrão.
as características do padrão.                                       Naked Objects Framework (NOF) [6] é a primeira
                                                                  implementação do padrão, liderado pelo próprio autor do
  Index Terms— Naked Objects; User Interface; Frameworks;         arquétipo, Richard Pawson. As versões iniciais escritas em
Object-oriented programming.                                      Java 1.1 não permitiam nenhum tipo de personalização da
                                                                  interface genérica do usuário. Só em 2010, quando foi
                       I. INTRODUÇÃO
                                                                  lançada a nova versão „Naked Objects MVC‟, agora

C    om a crescente demanda por sistemas desenvolvidos
     utilizando linguagens de programação orientadas a
objeto, há necessidade de implementação da „completeza
                                                                  proprietário e para a plataforma dotNET, foi possível a
                                                                  customização da interface [5]. Entretanto estas
                                                                  personalizações são baseadas em código CSS e HTML que,
comportamental‟ por estes sistemas [1], de modo que um            além de espalhar as características visuais do modelo entre as
objeto modele completamente o comportamento do que ele            camadas da aplicação, cria um nível de acoplamento muito
se propõe a representar [2].                                      alto com a plataforma web, dificultando, por exemplo, a
  Naked Objects (NO) [3] é uma abordagem de                       reutilização do modelo em outra plataforma, como desktop.
desenvolvimento de sistemas em que o núcleo dos objetos             Apache ISIS [7] está sendo desenvolvido para a
de negócio é mostrado diretamente na interface do usuário e       plataforma Java como alternativa gratuita ao Naked Objects
todas as interações consistem em invocar os métodos desses        MVC para dotNET e é liderado por Dan Haywood (ex-
objetos. As vantagens dessa abordagem são (i) um rápido           integrante do projeto original NOF) e pretende gerar
ciclo de desenvolvimento; (ii) grande agilidade; (iii) fácil      aplicações que sejam executáveis tanto na plataforma web
análise de requisitos e (iv) uma interface de usuário mais        quanto para desktop. O projeto ainda está em
poderosa, pois tratam o usuário como um solucionador de           desenvolvimento e a documentação atual não explicita a
problemas e não como um seguidor de processo [3][4].              forma de customização das interfaces, mas deixa claro que
  Embora o principal caso de sucesso do Naked Objects             dependerá da plataforma de execução.
tenha sido um aplicativo de missão-crítica de 1500 usuários         Domain Object Explorer [8] permite a customização dos
para um departamento do Governo irlandês, onde a interface        controles de interfaces do usuário para as propriedades do
não-personalizável funciona perfeitamente bem, esta mesma         objeto de domínio (rótulo, ordem de apresentação, tamanho,
interface não-personalizável é um dos maiores fatores que         etc.). Entretanto uma customização completa é realizada por
limitou a aplicabilidade do padrão Naked Objects em outros        meio de uma ferramenta externa que gera arquivos xml ou
domínios [5]. Outra desvantagem é o mapeamento 1:1 entre          jfrm ou por código Java baseando na API (Application
o modelo e a visão, ou seja, para cada objeto do modelo           Programming Interface) Swing [9], uma biblioteca contendo
tem-se uma única interface gráfica.                               diversos componentes que permitem a criação de interfaces
  Este artigo apresenta uma abordagem de customização da          gráficas de usuários (GUI) para desktop. Em ambos os casos
                                                                  os artefatos gerados devem ser anexados ao projeto na
  marcius.brandao@uece.br, mariela@larces.uece.br, enyo@ufc.br    mesma pasta e nome da classe de negócio.
  1
     Mestrado Acadêmico em Ciência da Computação - Universidade     JMatter [10] é um framework proprietário e tem seu
Estadual do Ceará                                                 principal mecanismo de geração de interfaces do usuário
  2
    Universidade Federal do Ceará
baseado em Swing. As customizações de GUI do JMatter             completos, pois este modelo promove a separação continua
podem ser em arquivos XML complementados com                     entre dados e procedimentos [3].
sobreposição de códigos em classes do framework ou pela
construção completa da GUI através de código baseado na
API Swing mais sobreposição de código e implementação
de interfaces do framework [11].
  Independente da forma de customização todas as
alternativas apresentadas, além de aumentarem o nível de
acoplamento com a tecnologia utilizada, quebram um dos
princípios básicos do Naked Objects Pattern (NOP) que é a
geração automática das interfaces totalmente baseada na
definição dos objetos de domínio[1][3], tirando o foco do               Figura 1 - Arquitetura padrão em 4-camadas [3]
desenvolvimento para as demais camadas da aplicação.               No padrão Naked Objects as funções de visualização e
Todos eles também estão atrelados à idéia da geração de          controlador (como originalmente definidas no MVC) são
uma única GUI para cada objeto de domínio. Outros                completamente genéricas e, por tanto, não há nenhum outro
frameworks como dotObjects [12], Sanssouci [13] e Trails         lugar para por as regras de negócios exceto nas entidades do
[14] não apresentam documentação e nenhum indicativo se          domínio (ou seja, no modelo), promovendo assim a
o projeto está ativo ou não.                                     modelagem de objetos com completude comportamental [3].

                 III. REFERENCIAL TEÓRICO
  Nesta seção são apresentados, de maneira sucinta, os
padrões Naked Objects e MVC, bem como o design Layout
Grid, que formam a base conceitual e técnica utilizadas para
elaboração da linguagem NOVL. Também é apresentada a
notação EBNF e Diagrama de Sintaxe utilizados na
definição formal da linguagem para a compreensão de
compiladores e desenvolvedores, respectivamente.
A. Naked Objects Pattern (NOP)                                           Figura 2 - Arquitetura com Naked Objects [3]
  O conceito básico por trás do Naked Objects é que, ao
                                                                 B. O padrão MVC
escrever um aplicativo de negócios, o desenvolvedor deve
criar apenas os naked objects (os objetos de negócio que           O padrão Model-View-Controller (MVC) [5] é amplamente
modelam o domínio [2][15]) e as suas respectivas lógicas de      utilizado tanto pela indústria quanto pelo meio acadêmico.
negócio encapsuladas. O framework que utilizar a                 Utilizado para separação das atribuições, permite que objetos
tecnologia se encarrega de disponibilizar, a partir dos          de modelo (Model) se preocupem apenas com recursos de
objetos de negócio, a aplicação com interface gráfica,           negócios de modelagem, não com a forma como serão
persistência e gerenciamento desses objetos. Além de             apresentados para o usuário (View) e nem com a captura ou
eliminar a necessidade de escrever uma camada de interface       resposta às entradas do usuário (Controller).
do usuário e a camada de acesso a dados, o padrão Naked            MVC separa as visões e modelos através do
Objects também facilita uma boa modelagem dos objetos -          estabelecimento de um protocolo de inscrição/notificação
porque o protótipo do modelo de domínio é transformado           entre eles. Uma visão deve assegurar que sua aparência
diretamente em um aplicativo que pode ser avaliado pelos         reflete o estado do modelo e o modelo, sempre que é
usuários de negócios [16].                                       modificado, notifica as visões que dependem dele. Essa
  Os três princípios do NOP são: (i) toda a lógica de negócio    abordagem permite criar e adicionar vários modos de
deve ser encapsulada nos objetos de domínio, (ii) a interface    exibição para um modelo sem reescrevê-lo [17].
de usuário deve refletir completamente os objetos de               O diagrama a seguir mostra um modelo com três modos de
domínio, incluindo todas as ações do usuário, como criar e       exibição. O modelo contém alguns valores de dados e os
recuperar os objetos de domínio e (iii) a criação da interface   modos de exibição em forma de planilha, histograma e
de usuário deve ser inteiramente automatizada a partir dos       gráfico de pizza exibem esses dados de várias maneiras [17].
objetos de domínio [1][2].
  O padrão arquitetural Naked Objects surgiu como uma
alternativa ao padrão 4-camadas (Figura 1). Neste padrão,
um simples conceito de negócio (por exemplo, um Cliente)
será normalmente representado em todas as quatro camadas,
em diferentes formas. Além disso, como indicado no
diagrama, as relações entre os elementos nessas quatro
camadas muitas vezes exigem um mapeamento complexo
(muitos-para-muitos). Embora cada uma das camadas possa            Figura 3 – Exemplo de três visões do mesmo modelo [17]
ser orientada a objeto em um certo sentido, está muito longe
do princípio original de objetos comportalmentalmente
C. Layout Grid                                                  para EBNF. Diagramas de sintaxe são mais facilmente
  O alinhamento de elementos visuais é uma das principais       compreendidos pela maioria das pessoas, uma vez que
maneiras que projetistas podem ajudar os usuários a             permitem a exposição concisa e lúcida de uma sintaxe de
experimentar um produto de uma forma organizada e               forma rigorosa, porém amigável. A regra básica para a
sistemática. Textos, controles e grupos de controles devem      interpretação de um diagrama de sintaxe é que qualquer
ser alinhados horizontal e verticalmente (ver Figura 4). Em     caminho traçado junto às direções diante das setas produzirá
geral, todos os elementos na tela devem ser alinhados com       um comando sintaticamente válido. A Figura 5 exibe o
tantos outros elementos quanto possível. A decisão de não       digrama de sintaxe equivalente à notação EBNF do arquivo
alinhar dois elementos ou grupos de elementos deve ser feita    XML:
criteriosamente e sempre para obter um efeito específico de
diferenciação [18].

                                                                     Figura 5 - Diagrama de Sintaxe para arquivos XML
                                                                  O conteúdo dentro das caixas de vértices arredondados
                                                                deve aparecer literalmente no comando, enquanto o
                                                                conteúdo das caixas retangulares indica o tipo de
                                                                informação a ser escrita.

                                                                      IV. NAKED OBJECTS VIEW LANGUAGE (NOVL)
                                                                  Naked Objects View Language ou NOVL é uma
 Figura 4 - Adobe Lightroom: uso eficaz de alinhamento em       linguagem de descrição de layout para o padrão Naked
                uma grade de layout[18]                         Objects. Seu objetivo é de personalizar as interfaces de
  Um esquema em grade é uma das mais poderosas                  usuário de forma simples e rápida utilizando texto simples
ferramentas disponíveis para o projetista visual.               no lugar de estruturas mais sofisticadas como SWING, CSS,
Popularizada por tipógrafos suíços após a Segunda Guerra        XML, HTML, etc., e sem a necessidade de um editor
Mundial, o uso de uma grade fornece uma estrutura uniforme      gráfico de interface ou ferramentas externas.
e consistente para um layout, que é particularmente               NOVL se diferencia de outras linguagens de interface no
importante durante a criação de uma interface com vários        sentido em que ela especifica a forma da interface e não o
níveis de complexidade visual ou funcional. A utilização de     caminho para chegar a ela. Isto reduz o ciclo de aprendizado
um sistema de grade no projeto de interface visual fornece      daqueles que se iniciam na linguagem.
vários benefícios como usabilidade, apelo estético e              A NOVL é baseada no uso de layout grid [18] para dividir
eficiência. Uma grade bem projetada melhora a legibilidade      o espaço da tela, onde uma grade alinha e organiza
da tela, cria uma sensação de ordem e deixa o usuário           diferentes tipos de elementos inter-relacionados. Desta
confortável e predisposto a interagir com o produto.            forma, a idéia é dividir a interface em linhas e colunas
                                                                flexíveis e alinhar os componentes nas células da grade
D. EBNF e Diagramas de Sintaxe                                  retangular que formam a tela, permitindo que cada
  Componentes gerais de uma linguagem de programação            componente ocupe uma ou mais células.
são a sua sintaxe e a sua semântica. A sintaxe de uma             As próximas subseções definem e detalham a NOVL.
linguagem influencia na maneira como os programas são
escritos pelos programadores, lidos por outros                  A. Definição formal da NOVL
programadores e reconhecidos pelo computador. A                   Para que os frameworks possam validar a sintaxe e
semântica de uma linguagem determina como os programas          interpretar os comandos da NOVL para gerar a GUI
são resolvidos pelos programadores, entendidos por outros       utilizou-se a meta-linguagem EBNF [20], que define formal
programadores e interpretados pelo computador [19].             e matematicamente uma linguagem. Na Figura 6 temos a
  A Extended Backus–Naur Form [20] é uma meta-                  descrição completa da NOVL em EBNF. A linguagem é
linguagem utilizada para expressar e definir de maneira         divida em três elementos. (i) view, que define a grade e a
formal e matematicamente a sintaxe de uma linguagem não         distribuição dos componentes na tela, (ii) component, que
apenas de programação de computador, mas para definições        define o tipo de componente que será inserido na grade, e
formais. A maioria dos padrões de linguagem de                  (iii) member, um subcomponente que define qual e como
programação usa alguma variante da EBNF para definir a          uma propriedade ou método de um naked object ou
gramática da língua, possibilitando a construção de             controlador será apresentado.
compiladores porque o analisador para o compilador pode
ser gerado automaticamente com um compilador de
compilador como YACC[21].
  Por exemplo, a seguinte notação define a sintaxe de um
arquivo XML:
  XML::= "<" tag ">" ( XML+ | dado )? "</" tag ">"
  A partir desta definição é possível gerar automaticamente o
diagrama de sintaxe [19][22] que é uma alternativa gráfica
                                                                            Figura 6 – Definição EBNF da NOVL
As próximas subseções descrevem os três elementos da           nova grade de duas colunas e duas linhas que ocupará as três
NOVL utilizando diagramas de sintaxe gerados a partir da        colunas da quarta linha da grade principal.
definição EBNF [22].                                             1    componentA:3;
                                                                 2    componentB,componentC,componentD;
B. O elemento View                                               3    componentE,componentF:2;
  A Figura 7 mostra o diagrama de sintaxe do elemento            4    [componentG,componentH;
                                                                 5    componentI,componentJ]:3
view que define a grade do layout da tela. Para distribuir os
                                                                          Figura 9 - Exemplo de um comando NOVL
componentes em colunas utilizam-se vírgulas {,}, para
                                                                  Embora o rótulo de um componente, principalmente um
indicar que um determinado componente ocupa mais de uma
                                                                member, deva permanecer inalterado para manter a
coluna (colspan) utiliza-se o símbolo dois pontos {:}           consistência visual entre as diversas visões, há casos
seguido da quantidade de colunas como sufixo do                 excepcionais onde se torna necessário modificá-lo. Nestes
componente. Finalmente, para a distribuição em linhas           casos um novo rótulo, delimitado por aspas simples {‘},
utiliza-se o ponto-e-vírgula {;}.                               pode ser prefixado ao nome do membro separado por dois
                                                                pontos {:}.
                                                                D. O elemento member
                                                                  Um membro é uma propriedade ou método de um naked
                                                                object ou controlador (MVC), que será representado por seu
                                                                respectivo controle visual na GUI de acordo com o tipo da
                                                                propriedade (numérico, data, texto, etc.) e tecnologia utilizada
                                                                pelo framework. Sua sintaxe é mostrada na Figura 10.

      Figura 7 - Diagrama de sintaxe do elemento View
C. O elemento Component
  Um componente pode ser um simples texto (label), um
membro ou uma nova grade, e assim sucessivamente. Para
definir uma nova grade, envolvemos os componentes com
colchetes {[...]}. O diagrama de sintaxe do elemento
component é mostrado na Figura 8.




  Figura 8 - Diagrama de Sintaxe do elemento Component
  Por exemplo, a Tabela 1 apresenta uma grade que
distribui dez componentes necessários para a formação de
uma determinada GUI.
                      componentA
   componentB        componentC         componentD
   componentE                 componentF
        componentG                componentH
        componentI                 componentJ
         Tabela 1 - Exemplo de estrutura de layout
  A Figura 9 apresenta o comando NOVL para a montagem                Figura 10 - Diagrama de sintaxe do elemento Member
desta grade. Na linha (1) o sufixo {:3} no componente A           Para identificar um membro utiliza-se o nome do membro
seguido por {;} indica que a grade principal terá 3 colunas e   em case-sensitive. Para diferenciar visualmente uma
este componente irá ocupar todas as colunas da primeira         propriedade de um método, estes devem ter dois parênteses
linha da grade. Na linha (2), as vírgulas {,} distribuem os     {()} como sufixo e para diferenciar um membro do naked
componentes B,C e D pelas três colunas da segunda linha da      object de um membro do controlador, estes devem ter o
grade. Na linha (3), temos a mesma distribuição da linha dois   prefixo {Ctrl.} mais o nome do controlador. Composições
por vírgulas para os componentes E e F, sendo que o sufixo      podem ser aninhadas por ponto {.}. Por exemplo:
{:2} de F indica que o mesmo ocupa duas colunas. Nas linhas     endereco.cidade.estado.sigla.
(4) e (5), os colchetes com o sufixo {:3} determinam uma          Um asterisco {*} como prefixo indica que o membro é
apenas para leitura, e uma hashtag {#} indica que o membro      uma possível personalização e a notação equivalente em
sempre estará em modo de entrada de dados pelo usuário.         NOVL utilizando vários dos recursos da linguagem.
Por exemplo, o comando *modifiedDate indica que o
                                                                A. Interface típica de um framework NOP
membro é apenas para exibição na visão.
  O suporte a propriedades do tipo coleção ou listas de           Podendo variar de acordo com o framework e tecnologia
objetos é um dos diferenciais da linguagem, pois permite o      utilizados, a Figura 11 mostra um layout típicamente
projeto de subviews em uma sub-grade com os membros dos         empregado na maioria dos frameworks que programam o
elementos da lista, que por sua vez podem ser outras            NOP. Qualquer exibição de outro naked object seguirá o
coleções, recursivamente. Esta sub-grade é definida             mesmo modelo. Na tela na figura, gerada pelo NOF-MVC
delimitando a subview com os sinais de menor e maior            para o naked object Product, todas as propriedades são
{<...>} como prefixo da propriedade do tipo coleção.            expostas verticalmente. A maioria dos frameworks permite a
  Em GUIs é comum a utilização de componentes visuais que       definição da ordem em que as propriedades são exibidas. As
se expandem ou se colapsam. Para determinar que um desses       ações do naked object são expostas em um menu suspenso
componentes apareça colapsado utiliza-se como sufixo o sinal    acima da grade principal, e as ações dos controladores abaixo.
de menos {-} e o sinal de mais {+} para expandido.
  A Tabela 2 explana todos os elementos da NOVL:
 Convenção                     Usado para
              Nome case-sensitive da propriedade do naked
  property
              object ou do controlador.
              Nome case-sensitive do método do naked
   Action
              object ou do controlador.
       ,      Separador de colunas.
       ;      Separador de linhas.
              Colspan define quantas colunas o membro deve
   :colspan
              ocupar na grade
              (readonly) O membro sempre será exibido em                   Figura 11 - GUI gerada pelo NOF-MVC
      *       modo de       leitura (saída de dados)
              incondicionalmente.                               B. Interface personalizada usando NOVL
              (writeonly) O membro sempre será exibido em         A apresentação das mesmas informações pode ser
      #       modo de edição (entrada de dados)                 personalizada usando a NOVL. Na Figura 12 é apresentada
              incondicionalmente.                               uma possível interface para Product. Observe que nesta visão
              É um texto simples que será atribuído ao          as propriedades e ações são agrupadas por co-relação.
    'label'   próximo elemento. No caso de um membro,           Propriedades importantes para o usuário ficam em primeiro
              substitui o rótulo padrão.                        plano e as menos importantes em segundo plano ou ocultas.
      []      Define uma sub-grade.
              Indica que o componente deve ser apresentado
      +
              inicialmente no modo expandido.
              Indica que o componente deve ser apresentado
       -
              inicialmente no modo recolhido.
              Delimita uma sub-grade que será apresentada a
    <...>
              partir dos membros do domínio de uma coleção.
                Tabela 2 - Convenções da NOVL
 No estudo de caso a seguir são apresentandos exemplos
mais detalhados sobre os membros.

                      V. ESTUDO DE CASO
  Nesta seção é apresentado um estudo de caso utilizando o
                                                                             Figura 12 - GUI gerada pela NOVL
banco de dados “Adventure Works Sample Database” [23],
                                                                  A grade principal na tela é formada por duas colunas e
que contem, dentre outras informações, dados sobre
                                                                duas linhas (em azul), a primeira linha é preenchida por uma
produção, vendas e comercialização de uma empresa
                                                                sub-grade 2x4 que ocupa as duas colunas (em amarelo), e na
multinacional fictícia chamada Adventure Works Cycles que
                                                                segunda linha cada coluna é preenchida por uma sub-grade
fabrica e vende bicicletas e seus acessórios. Neste estudo de
                                                                1x2, e assim sucessivamente (em vermelho).
caso o foco será na personalização da interface de usuário
                                                                  Baseando-se na estrutura apresentada na Figura 12 , o
do naked object Product. Para fins didáticos, inicialmente
                                                                código NOVL necessário é detalhado na Figura 13.
será apresentada uma interface típica dos frameworks, no
caso gerada pelo NOF-MVC, e em seguida será apresentada
sem o uso de editores visuais de interfaces. Com isso, o
                                                                 ciclo de aprendizado pode ser reduzido, se comparado a
                                                                 outras tecnologias e a manutenção facilitada.
                                                                   Como trabalhos futuros é sugerido uma implementação de
                                                                 referência da linguagem para alguma tecnologia de projeto
                                                                 de GUI´s como Swing, JSF, HTML, etc., a utilização da
                                                                 linguagem em algum framework NOP, bem como a
                                                                 avaliação e extensão da linguagem para abordar outros
                                                                 aspectos das interfaces gráficas de usuários.
                                                                   Assim, os desenvolvedores poderão beneficiar-se do uso
                                                                 de NOVL e suas futuras aplicações para concentrar seus
                                                                 esforços apenas no domínio da aplicação, sem a
                                                                 preocupação de como a interface será implementada.

                                                                                       REFERÊNCIAS BIBLIOGRÁFICAS
                                                                  [1] Aruna Raja and Devika Lakshmanan, "Naked Objects Framework,"
                                                                      International Journal of Computer Applications, vol. I, no. 20, 2010.
                                                                  [2] Richard Pawson and Robert Matthews, Naked Objects. New York:
                                                                      Wiley, 2002.
                                                                  [3] Richard Pawson, Naked Objects, Phd thesis. Dublin: Trinity College,
                                                                      2004.
   Figura 13 – Código NOVL de customização de Product.            [4] Richard Pawson and Robert Matthews, "Naked objects: a technique
  Inicialmente foram definidos quatro agrupamentos                    for designing more expressive systems," ACM SIGPLAN Notices, vol.
                                                                      36, no. 12, 2001.
principais: Product (linha 69 a 72), Dates (linha 75 a 78),
                                                                  [5] Richard    Pawson.     (2010,     Novembro)         InfoQ.    [Online].
Estoque (linha 79 a 86) e Details (linha 91 a 98). Note que           http://www.infoq.com/articles/Nacked-MVC
este último deve aparecer no modo colapsado para o usuário        [6] Naked Objects Group. (2010) Naked Objects MVC. [Online].
e por isto é sufixado com o sinal de menos.                           http://nakedobjects.net
   O primeiro ponto-e-vírgula (linha 73) logo após o              [7] Apache         Isis.     (2010)        Apache       Isis.     [Online].
primeiro componente sufixado com {:2} (linhas 69 a 72),               http://incubator.apache.org/isis/index.html
uma sub-grade com rótulo „Product‟, definem a grade               [8] Domain Object Explorer for JPA / EJB3 entity beans. [Online].
principal em duas colunas e duas linhas e este componente             http://java.net/projects/doe/pages/Home
ocupará as duas colunas da primeira linha, enquanto que na        [9] Oracle and/or its affiliates. (2012) The Java Tutorials. [Online].
segunda linha uma subgrade de duas linhas é definida para             http://docs.oracle.com/javase/tutorial/ui/overview/intro.html
cada coluna (linhas 74, 87 a 89 e 99).                           [10] Jmatter. [Online]. http://jmatter.org/
  Observe que tanto as ações do domínio como as do               [11] Eitan Suez, "Customized Views and Editors," in Building Software
                                                                      Applications with JMATTER.: JMatterSoft LLC, 2009, ch. 14, pp. 171-
controlador podem ser posicionadas livremente em qualquer
                                                                      182.
parte da visão, de acordo com as necessidades ou gosto dos
                                                                 [12] CodePlex        -     Open      Source      Community.        [Online].
usuários (linhas 71,72, 84, 85, 86 e 90). Observe também que          http://dotobjects.codeplex.com/
a propriedade photos (linha 90) é do tipo coleção de fotos e     [13] Free Code. [Online]. http://freecode.com/projects/sanssouci
uma subvisão foi criada para exibir os seus membros:a            [14] Trails. [Online]. http://www.trailsframework.org/
propriedade largePhoto e o método para adicionar mais
                                                                 [15] Richard Pawson and Robert Matthews, Naked Objects, tradução ed.,
fotos addOrChangePhoto(). Como photos está prefixada com              Osvaldo Kotaro Takai and João Eduardo Ferreira, Eds., 2002.
asterisco o componente visual para este membro deve sempre       [16] Richard    Pawson.     (2008,    Dezembro)   InforQ.          [Online].
estar em modo de leitura, mesmo que a tela mude para o                http://www.infoq.com/articles/RAD-Naked-Objects
modo de edição. Photos também teve seu rótulo removido           [17] Erich Gama, Richard Helm, Ralph Johnson, and John Vlissides,
para evitar uma repetição indesejável com o rótulo do painel.         Design Patterns - Elements of Reusable Object-Oriented Software.:
                                                                      Addison-Wesley, 1998.
          VI. CONCLUSÕES E TRABALHOS FUTUROS                     [18] Alan Cooper, Robert Reimann, and David Cronin, About Face 3 : The
                                                                      Essentials of Interaction Design. Indianapolis: Wiley Publishing, Inc.,
  Este artigo apresenta a Naked Objects View Language,                2007.
que possibilita a definição de múltiplas visualizações através   [19] David A. Watt, Programming Language Concepts and Paradigms.:
de metadados em cada objeto do domínio. Desta forma                   Prentice Hall, 1990.
interfaces de usuário personalizadas podem ser                   [20] ISO/IEC 14977, Information technology—Syntactic metalanguage—
                                                                      Extended BNF., 1996.
especificadas através da linguagem. Com isso, um dos
                                                                 [21] John R. Levine, Tony Mason, and Doug Brown, Lex & Yacc, 2nd ed.,
principais limitadores da utilização do padrão Naked
                                                                      Dale Dougherty, Ed. United States of America: O'Reilly, 1992.
Objects pode ser contornado, sem ferir o padrão, pois nem o
                                                                 [22] Gunther Rademacher. (2012, Janeiro) Railroad Diagram Generator.
comportamento nem a forma de armazenamento dos objetos                [Online]. http://railroad.my28msec.com/rr/ui
são modificados.                                                 [23] Microsoft.    MSDN.    [Online].   http://msdn.microsoft.com/en-
  Por diferenciar-se de outras linguagens de interface no             us/library/ms124501%28v=sql.100%29.aspx
sentido em que ela especifica a forma da interface e não o
caminho para chegar a ela, é possível a codificação direta

More Related Content

What's hot

Arquitetura De Ap Is GráFicas Do Java Dtv Lwuit E Dtv Ui
Arquitetura De Ap Is GráFicas Do Java Dtv   Lwuit E Dtv UiArquitetura De Ap Is GráFicas Do Java Dtv   Lwuit E Dtv Ui
Arquitetura De Ap Is GráFicas Do Java Dtv Lwuit E Dtv UiErisvaldo Junior
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvcJhordam Siqueira
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) Grupo Treinar
 
Seminário flyweight
Seminário flyweightSeminário flyweight
Seminário flyweightMateus Amaral
 
MVC já era! O negócio é DCI!
MVC já era! O negócio é DCI!MVC já era! O negócio é DCI!
MVC já era! O negócio é DCI!Flávio Lisboa
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Ryan Padilha
 
Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Ryan Padilha
 
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de software
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de softwareAplicação de Padrões de Projeto para a melhoria da manutenabilidade de software
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de softwareCesar Rocha
 
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...Lucas Furtado de Oliveira
 
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...Lucas Furtado de Oliveira
 
TEES - MDA Apresentação Final
TEES - MDA Apresentação FinalTEES - MDA Apresentação Final
TEES - MDA Apresentação Finalguestc7f5eb
 
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...Édipo Souza
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 

What's hot (19)

Desenvolvendo Interfaces de Usuário Multiplataformas utilizando MDA
Desenvolvendo Interfaces de Usuário Multiplataformas utilizando MDADesenvolvendo Interfaces de Usuário Multiplataformas utilizando MDA
Desenvolvendo Interfaces de Usuário Multiplataformas utilizando MDA
 
Arquitetura De Ap Is GráFicas Do Java Dtv Lwuit E Dtv Ui
Arquitetura De Ap Is GráFicas Do Java Dtv   Lwuit E Dtv UiArquitetura De Ap Is GráFicas Do Java Dtv   Lwuit E Dtv Ui
Arquitetura De Ap Is GráFicas Do Java Dtv Lwuit E Dtv Ui
 
Programação orientada à objetos & mvc
Programação orientada à objetos & mvcProgramação orientada à objetos & mvc
Programação orientada à objetos & mvc
 
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO) CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
CURSO DELPHI FUND. CLIENT SERVER (DIURNO)
 
Seminário flyweight
Seminário flyweightSeminário flyweight
Seminário flyweight
 
MVC já era! O negócio é DCI!
MVC já era! O negócio é DCI!MVC já era! O negócio é DCI!
MVC já era! O negócio é DCI!
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)
 
Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)Orientação a Objetos no Delphi - Controle de Estoque (II)
Orientação a Objetos no Delphi - Controle de Estoque (II)
 
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de software
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de softwareAplicação de Padrões de Projeto para a melhoria da manutenabilidade de software
Aplicação de Padrões de Projeto para a melhoria da manutenabilidade de software
 
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
Entendendo a Tríade Model-View-Controller (MVC) Utilizando Padrões de Projeto...
 
DCI com PHP
DCI com PHPDCI com PHP
DCI com PHP
 
Framework Miolo
Framework MioloFramework Miolo
Framework Miolo
 
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
Entendendo a Tríade Model-View-Controller (MVC) utilizando padrões de projeto...
 
TEES - MDA Apresentação Final
TEES - MDA Apresentação FinalTEES - MDA Apresentação Final
TEES - MDA Apresentação Final
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
Apostila uml
Apostila umlApostila uml
Apostila uml
 
Apostila uml
Apostila umlApostila uml
Apostila uml
 
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
Estudo comparativo das linguagens kotlin e java no desenvolvimento de aplicac...
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 

Viewers also liked

Qualificação MACC- Entities
Qualificação MACC- EntitiesQualificação MACC- Entities
Qualificação MACC- EntitiesMarcius Brandão
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoMarcius Brandão
 
Framework Entities na CBSoft
Framework Entities na CBSoftFramework Entities na CBSoft
Framework Entities na CBSoftMarcius Brandão
 
Framework Entities - Dissertação
Framework Entities - DissertaçãoFramework Entities - Dissertação
Framework Entities - DissertaçãoMarcius Brandão
 
La teoría de los sistemas ecológicos de U. Bronfenbrenner
La teoría de los sistemas ecológicos de U. BronfenbrennerLa teoría de los sistemas ecológicos de U. Bronfenbrenner
La teoría de los sistemas ecológicos de U. Bronfenbrennermarianavaldezt
 

Viewers also liked (8)

Framework Entities
Framework EntitiesFramework Entities
Framework Entities
 
SBQS kanban e burndown
SBQS kanban e burndownSBQS kanban e burndown
SBQS kanban e burndown
 
Qualificação MACC- Entities
Qualificação MACC- EntitiesQualificação MACC- Entities
Qualificação MACC- Entities
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da Dissertacao
 
Framework Entities na CBSoft
Framework Entities na CBSoftFramework Entities na CBSoft
Framework Entities na CBSoft
 
Framework Entities - Dissertação
Framework Entities - DissertaçãoFramework Entities - Dissertação
Framework Entities - Dissertação
 
Urie Bronfenbrenner
Urie BronfenbrennerUrie Bronfenbrenner
Urie Bronfenbrenner
 
La teoría de los sistemas ecológicos de U. Bronfenbrenner
La teoría de los sistemas ecológicos de U. BronfenbrennerLa teoría de los sistemas ecológicos de U. Bronfenbrenner
La teoría de los sistemas ecológicos de U. Bronfenbrenner
 

Similar to Paper NOVL - Naked Objects View Language- InfoBrasil 2012

Desenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioDesenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioGeovani Ferreira Gonçalves
 
01 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.101 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.1César Augusto Pessôa
 
Reutilização
ReutilizaçãoReutilização
Reutilizaçãoemjorge
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetosPaulo Carvalho
 
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...tdc-globalcode
 
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...tdc-globalcode
 
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...Marcelo Palladino
 
Plataformas Monolíticas, redescobrindo o Desktop e sendo Ágil para Web.
Plataformas Monolíticas, redescobrindo o Desktop e sendo Ágil para Web.Plataformas Monolíticas, redescobrindo o Desktop e sendo Ágil para Web.
Plataformas Monolíticas, redescobrindo o Desktop e sendo Ágil para Web.Cristofer Sousa
 
Criando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMindCriando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMindJaydson Gomes
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento webArlindo Santos
 
Introdução ao desenvolvimento front end usando bootstrap e angular js
Introdução ao desenvolvimento front end usando bootstrap e angular jsIntrodução ao desenvolvimento front end usando bootstrap e angular js
Introdução ao desenvolvimento front end usando bootstrap e angular jsCloves Moreira Junior
 
RIA e Flex - Dando formas à Inovação
RIA e Flex - Dando formas à InovaçãoRIA e Flex - Dando formas à Inovação
RIA e Flex - Dando formas à InovaçãoLeonardo Braga
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKRyan Padilha
 

Similar to Paper NOVL - Naked Objects View Language- InfoBrasil 2012 (20)

Desenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual StudioDesenvolvimento de Aplicações com Visual Studio
Desenvolvimento de Aplicações com Visual Studio
 
01 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.101 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.1
 
Reutilização
ReutilizaçãoReutilização
Reutilização
 
Corbawebserves
CorbawebservesCorbawebserves
Corbawebserves
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetos
 
Adobe Flex
Adobe FlexAdobe Flex
Adobe Flex
 
Adobe Flex
Adobe FlexAdobe Flex
Adobe Flex
 
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
TDC2016SP - Revitalizando aplicações desktop usando CefGlue, MessageBus e Rea...
 
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...TDC2016POA | Trilha Arquetetura -  Revitalizando aplicações desktop usando Ce...
TDC2016POA | Trilha Arquetetura - Revitalizando aplicações desktop usando Ce...
 
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...TDC2016SP  Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
TDC2016SP Trilha Arquitetura.NET - Revitalizando aplicações desktop usando C...
 
Asp net mvc
Asp net mvcAsp net mvc
Asp net mvc
 
InfraGUIBuilder
InfraGUIBuilderInfraGUIBuilder
InfraGUIBuilder
 
Plataformas Monolíticas, redescobrindo o Desktop e sendo Ágil para Web.
Plataformas Monolíticas, redescobrindo o Desktop e sendo Ágil para Web.Plataformas Monolíticas, redescobrindo o Desktop e sendo Ágil para Web.
Plataformas Monolíticas, redescobrindo o Desktop e sendo Ágil para Web.
 
Criando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMindCriando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMind
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento web
 
Introdução ao desenvolvimento front end usando bootstrap e angular js
Introdução ao desenvolvimento front end usando bootstrap e angular jsIntrodução ao desenvolvimento front end usando bootstrap e angular js
Introdução ao desenvolvimento front end usando bootstrap e angular js
 
Cursos
CursosCursos
Cursos
 
Introdução C#
Introdução C#Introdução C#
Introdução C#
 
RIA e Flex - Dando formas à Inovação
RIA e Flex - Dando formas à InovaçãoRIA e Flex - Dando formas à Inovação
RIA e Flex - Dando formas à Inovação
 
Plataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDKPlataforma Android: Produtividade Além do SDK
Plataforma Android: Produtividade Além do SDK
 

Paper NOVL - Naked Objects View Language- InfoBrasil 2012

  • 1. Naked Objects View Language Marcius Gomes Brandão1, Mariela Ines Cortés1, Enyo J. T. Gonçalves 2 Abstract— A critical constraint to the use of the Naked interface de usuário a partir de uma linguagem definida no Objects architectural pattern is the automatic generation of a próprio modelo de negócio através de meta informações. O single generic user interface. For many developers and users, artigo está organizado como segue: na Seção II, os trabalhos this restriction prevents the use of frameworks based on this relacionados são apresentados. Na Seção III é apresentado o archetype. This article presents the Naked Objects View Language, a language for customization of user interfaces that referencial teórico em relação aos padrões Naked Objects e uses the Naked Objects. The biggest benefit of this language is MVC, a notação EBNF e diagramas de sintaxe utilizados na the ability to define multiple views for the same naked object, criação da linguagem e a técnica de design Layout Grid. Na regardless of the platform used and maintaining the Seção IV é apresentada a Naked Objects View Language characteristics of the pattern. (NOVL). Na Seção V é ilustrado um estudo de caso. E por fim, na Seção VI, são apresentadas as conclusões e Resumo— Uma restrição crítica ao uso do padrão sugestões para trabalhos futuros. arquitetural Naked Objects reside na geração automática de uma única interface genérica de usuário. Para muitos desenvolvedores e usuários essa restrição impede a utilização II. TRABALHOS RELACIONADOS de frameworks baseados em tal arquétipo. Este artigo Vários frameworks têm sido implementados com a apresenta a Naked Objects View Language, uma linguagem proposta do padrão Naked Objects, no entanto praticamente para a customização das interfaces de usuários que utiliza o padrão Naked Objects. O maior benefício dessa linguagem é a nenhum deles oferece suporte adequado à customização do possibilidade de definir múltiplas visões para o mesmo naked layout da interface do usuário de forma consistente com o object, independentemente da plataforma utilizada e mantendo referido padrão. as características do padrão. Naked Objects Framework (NOF) [6] é a primeira implementação do padrão, liderado pelo próprio autor do Index Terms— Naked Objects; User Interface; Frameworks; arquétipo, Richard Pawson. As versões iniciais escritas em Object-oriented programming. Java 1.1 não permitiam nenhum tipo de personalização da interface genérica do usuário. Só em 2010, quando foi I. INTRODUÇÃO lançada a nova versão „Naked Objects MVC‟, agora C om a crescente demanda por sistemas desenvolvidos utilizando linguagens de programação orientadas a objeto, há necessidade de implementação da „completeza proprietário e para a plataforma dotNET, foi possível a customização da interface [5]. Entretanto estas personalizações são baseadas em código CSS e HTML que, comportamental‟ por estes sistemas [1], de modo que um além de espalhar as características visuais do modelo entre as objeto modele completamente o comportamento do que ele camadas da aplicação, cria um nível de acoplamento muito se propõe a representar [2]. alto com a plataforma web, dificultando, por exemplo, a Naked Objects (NO) [3] é uma abordagem de reutilização do modelo em outra plataforma, como desktop. desenvolvimento de sistemas em que o núcleo dos objetos Apache ISIS [7] está sendo desenvolvido para a de negócio é mostrado diretamente na interface do usuário e plataforma Java como alternativa gratuita ao Naked Objects todas as interações consistem em invocar os métodos desses MVC para dotNET e é liderado por Dan Haywood (ex- objetos. As vantagens dessa abordagem são (i) um rápido integrante do projeto original NOF) e pretende gerar ciclo de desenvolvimento; (ii) grande agilidade; (iii) fácil aplicações que sejam executáveis tanto na plataforma web análise de requisitos e (iv) uma interface de usuário mais quanto para desktop. O projeto ainda está em poderosa, pois tratam o usuário como um solucionador de desenvolvimento e a documentação atual não explicita a problemas e não como um seguidor de processo [3][4]. forma de customização das interfaces, mas deixa claro que Embora o principal caso de sucesso do Naked Objects dependerá da plataforma de execução. tenha sido um aplicativo de missão-crítica de 1500 usuários Domain Object Explorer [8] permite a customização dos para um departamento do Governo irlandês, onde a interface controles de interfaces do usuário para as propriedades do não-personalizável funciona perfeitamente bem, esta mesma objeto de domínio (rótulo, ordem de apresentação, tamanho, interface não-personalizável é um dos maiores fatores que etc.). Entretanto uma customização completa é realizada por limitou a aplicabilidade do padrão Naked Objects em outros meio de uma ferramenta externa que gera arquivos xml ou domínios [5]. Outra desvantagem é o mapeamento 1:1 entre jfrm ou por código Java baseando na API (Application o modelo e a visão, ou seja, para cada objeto do modelo Programming Interface) Swing [9], uma biblioteca contendo tem-se uma única interface gráfica. diversos componentes que permitem a criação de interfaces Este artigo apresenta uma abordagem de customização da gráficas de usuários (GUI) para desktop. Em ambos os casos os artefatos gerados devem ser anexados ao projeto na marcius.brandao@uece.br, mariela@larces.uece.br, enyo@ufc.br mesma pasta e nome da classe de negócio. 1 Mestrado Acadêmico em Ciência da Computação - Universidade JMatter [10] é um framework proprietário e tem seu Estadual do Ceará principal mecanismo de geração de interfaces do usuário 2 Universidade Federal do Ceará
  • 2. baseado em Swing. As customizações de GUI do JMatter completos, pois este modelo promove a separação continua podem ser em arquivos XML complementados com entre dados e procedimentos [3]. sobreposição de códigos em classes do framework ou pela construção completa da GUI através de código baseado na API Swing mais sobreposição de código e implementação de interfaces do framework [11]. Independente da forma de customização todas as alternativas apresentadas, além de aumentarem o nível de acoplamento com a tecnologia utilizada, quebram um dos princípios básicos do Naked Objects Pattern (NOP) que é a geração automática das interfaces totalmente baseada na definição dos objetos de domínio[1][3], tirando o foco do Figura 1 - Arquitetura padrão em 4-camadas [3] desenvolvimento para as demais camadas da aplicação. No padrão Naked Objects as funções de visualização e Todos eles também estão atrelados à idéia da geração de controlador (como originalmente definidas no MVC) são uma única GUI para cada objeto de domínio. Outros completamente genéricas e, por tanto, não há nenhum outro frameworks como dotObjects [12], Sanssouci [13] e Trails lugar para por as regras de negócios exceto nas entidades do [14] não apresentam documentação e nenhum indicativo se domínio (ou seja, no modelo), promovendo assim a o projeto está ativo ou não. modelagem de objetos com completude comportamental [3]. III. REFERENCIAL TEÓRICO Nesta seção são apresentados, de maneira sucinta, os padrões Naked Objects e MVC, bem como o design Layout Grid, que formam a base conceitual e técnica utilizadas para elaboração da linguagem NOVL. Também é apresentada a notação EBNF e Diagrama de Sintaxe utilizados na definição formal da linguagem para a compreensão de compiladores e desenvolvedores, respectivamente. A. Naked Objects Pattern (NOP) Figura 2 - Arquitetura com Naked Objects [3] O conceito básico por trás do Naked Objects é que, ao B. O padrão MVC escrever um aplicativo de negócios, o desenvolvedor deve criar apenas os naked objects (os objetos de negócio que O padrão Model-View-Controller (MVC) [5] é amplamente modelam o domínio [2][15]) e as suas respectivas lógicas de utilizado tanto pela indústria quanto pelo meio acadêmico. negócio encapsuladas. O framework que utilizar a Utilizado para separação das atribuições, permite que objetos tecnologia se encarrega de disponibilizar, a partir dos de modelo (Model) se preocupem apenas com recursos de objetos de negócio, a aplicação com interface gráfica, negócios de modelagem, não com a forma como serão persistência e gerenciamento desses objetos. Além de apresentados para o usuário (View) e nem com a captura ou eliminar a necessidade de escrever uma camada de interface resposta às entradas do usuário (Controller). do usuário e a camada de acesso a dados, o padrão Naked MVC separa as visões e modelos através do Objects também facilita uma boa modelagem dos objetos - estabelecimento de um protocolo de inscrição/notificação porque o protótipo do modelo de domínio é transformado entre eles. Uma visão deve assegurar que sua aparência diretamente em um aplicativo que pode ser avaliado pelos reflete o estado do modelo e o modelo, sempre que é usuários de negócios [16]. modificado, notifica as visões que dependem dele. Essa Os três princípios do NOP são: (i) toda a lógica de negócio abordagem permite criar e adicionar vários modos de deve ser encapsulada nos objetos de domínio, (ii) a interface exibição para um modelo sem reescrevê-lo [17]. de usuário deve refletir completamente os objetos de O diagrama a seguir mostra um modelo com três modos de domínio, incluindo todas as ações do usuário, como criar e exibição. O modelo contém alguns valores de dados e os recuperar os objetos de domínio e (iii) a criação da interface modos de exibição em forma de planilha, histograma e de usuário deve ser inteiramente automatizada a partir dos gráfico de pizza exibem esses dados de várias maneiras [17]. objetos de domínio [1][2]. O padrão arquitetural Naked Objects surgiu como uma alternativa ao padrão 4-camadas (Figura 1). Neste padrão, um simples conceito de negócio (por exemplo, um Cliente) será normalmente representado em todas as quatro camadas, em diferentes formas. Além disso, como indicado no diagrama, as relações entre os elementos nessas quatro camadas muitas vezes exigem um mapeamento complexo (muitos-para-muitos). Embora cada uma das camadas possa Figura 3 – Exemplo de três visões do mesmo modelo [17] ser orientada a objeto em um certo sentido, está muito longe do princípio original de objetos comportalmentalmente
  • 3. C. Layout Grid para EBNF. Diagramas de sintaxe são mais facilmente O alinhamento de elementos visuais é uma das principais compreendidos pela maioria das pessoas, uma vez que maneiras que projetistas podem ajudar os usuários a permitem a exposição concisa e lúcida de uma sintaxe de experimentar um produto de uma forma organizada e forma rigorosa, porém amigável. A regra básica para a sistemática. Textos, controles e grupos de controles devem interpretação de um diagrama de sintaxe é que qualquer ser alinhados horizontal e verticalmente (ver Figura 4). Em caminho traçado junto às direções diante das setas produzirá geral, todos os elementos na tela devem ser alinhados com um comando sintaticamente válido. A Figura 5 exibe o tantos outros elementos quanto possível. A decisão de não digrama de sintaxe equivalente à notação EBNF do arquivo alinhar dois elementos ou grupos de elementos deve ser feita XML: criteriosamente e sempre para obter um efeito específico de diferenciação [18]. Figura 5 - Diagrama de Sintaxe para arquivos XML O conteúdo dentro das caixas de vértices arredondados deve aparecer literalmente no comando, enquanto o conteúdo das caixas retangulares indica o tipo de informação a ser escrita. IV. NAKED OBJECTS VIEW LANGUAGE (NOVL) Naked Objects View Language ou NOVL é uma Figura 4 - Adobe Lightroom: uso eficaz de alinhamento em linguagem de descrição de layout para o padrão Naked uma grade de layout[18] Objects. Seu objetivo é de personalizar as interfaces de Um esquema em grade é uma das mais poderosas usuário de forma simples e rápida utilizando texto simples ferramentas disponíveis para o projetista visual. no lugar de estruturas mais sofisticadas como SWING, CSS, Popularizada por tipógrafos suíços após a Segunda Guerra XML, HTML, etc., e sem a necessidade de um editor Mundial, o uso de uma grade fornece uma estrutura uniforme gráfico de interface ou ferramentas externas. e consistente para um layout, que é particularmente NOVL se diferencia de outras linguagens de interface no importante durante a criação de uma interface com vários sentido em que ela especifica a forma da interface e não o níveis de complexidade visual ou funcional. A utilização de caminho para chegar a ela. Isto reduz o ciclo de aprendizado um sistema de grade no projeto de interface visual fornece daqueles que se iniciam na linguagem. vários benefícios como usabilidade, apelo estético e A NOVL é baseada no uso de layout grid [18] para dividir eficiência. Uma grade bem projetada melhora a legibilidade o espaço da tela, onde uma grade alinha e organiza da tela, cria uma sensação de ordem e deixa o usuário diferentes tipos de elementos inter-relacionados. Desta confortável e predisposto a interagir com o produto. forma, a idéia é dividir a interface em linhas e colunas flexíveis e alinhar os componentes nas células da grade D. EBNF e Diagramas de Sintaxe retangular que formam a tela, permitindo que cada Componentes gerais de uma linguagem de programação componente ocupe uma ou mais células. são a sua sintaxe e a sua semântica. A sintaxe de uma As próximas subseções definem e detalham a NOVL. linguagem influencia na maneira como os programas são escritos pelos programadores, lidos por outros A. Definição formal da NOVL programadores e reconhecidos pelo computador. A Para que os frameworks possam validar a sintaxe e semântica de uma linguagem determina como os programas interpretar os comandos da NOVL para gerar a GUI são resolvidos pelos programadores, entendidos por outros utilizou-se a meta-linguagem EBNF [20], que define formal programadores e interpretados pelo computador [19]. e matematicamente uma linguagem. Na Figura 6 temos a A Extended Backus–Naur Form [20] é uma meta- descrição completa da NOVL em EBNF. A linguagem é linguagem utilizada para expressar e definir de maneira divida em três elementos. (i) view, que define a grade e a formal e matematicamente a sintaxe de uma linguagem não distribuição dos componentes na tela, (ii) component, que apenas de programação de computador, mas para definições define o tipo de componente que será inserido na grade, e formais. A maioria dos padrões de linguagem de (iii) member, um subcomponente que define qual e como programação usa alguma variante da EBNF para definir a uma propriedade ou método de um naked object ou gramática da língua, possibilitando a construção de controlador será apresentado. compiladores porque o analisador para o compilador pode ser gerado automaticamente com um compilador de compilador como YACC[21]. Por exemplo, a seguinte notação define a sintaxe de um arquivo XML: XML::= "<" tag ">" ( XML+ | dado )? "</" tag ">" A partir desta definição é possível gerar automaticamente o diagrama de sintaxe [19][22] que é uma alternativa gráfica Figura 6 – Definição EBNF da NOVL
  • 4. As próximas subseções descrevem os três elementos da nova grade de duas colunas e duas linhas que ocupará as três NOVL utilizando diagramas de sintaxe gerados a partir da colunas da quarta linha da grade principal. definição EBNF [22]. 1 componentA:3; 2 componentB,componentC,componentD; B. O elemento View 3 componentE,componentF:2; A Figura 7 mostra o diagrama de sintaxe do elemento 4 [componentG,componentH; 5 componentI,componentJ]:3 view que define a grade do layout da tela. Para distribuir os Figura 9 - Exemplo de um comando NOVL componentes em colunas utilizam-se vírgulas {,}, para Embora o rótulo de um componente, principalmente um indicar que um determinado componente ocupa mais de uma member, deva permanecer inalterado para manter a coluna (colspan) utiliza-se o símbolo dois pontos {:} consistência visual entre as diversas visões, há casos seguido da quantidade de colunas como sufixo do excepcionais onde se torna necessário modificá-lo. Nestes componente. Finalmente, para a distribuição em linhas casos um novo rótulo, delimitado por aspas simples {‘}, utiliza-se o ponto-e-vírgula {;}. pode ser prefixado ao nome do membro separado por dois pontos {:}. D. O elemento member Um membro é uma propriedade ou método de um naked object ou controlador (MVC), que será representado por seu respectivo controle visual na GUI de acordo com o tipo da propriedade (numérico, data, texto, etc.) e tecnologia utilizada pelo framework. Sua sintaxe é mostrada na Figura 10. Figura 7 - Diagrama de sintaxe do elemento View C. O elemento Component Um componente pode ser um simples texto (label), um membro ou uma nova grade, e assim sucessivamente. Para definir uma nova grade, envolvemos os componentes com colchetes {[...]}. O diagrama de sintaxe do elemento component é mostrado na Figura 8. Figura 8 - Diagrama de Sintaxe do elemento Component Por exemplo, a Tabela 1 apresenta uma grade que distribui dez componentes necessários para a formação de uma determinada GUI. componentA componentB componentC componentD componentE componentF componentG componentH componentI componentJ Tabela 1 - Exemplo de estrutura de layout A Figura 9 apresenta o comando NOVL para a montagem Figura 10 - Diagrama de sintaxe do elemento Member desta grade. Na linha (1) o sufixo {:3} no componente A Para identificar um membro utiliza-se o nome do membro seguido por {;} indica que a grade principal terá 3 colunas e em case-sensitive. Para diferenciar visualmente uma este componente irá ocupar todas as colunas da primeira propriedade de um método, estes devem ter dois parênteses linha da grade. Na linha (2), as vírgulas {,} distribuem os {()} como sufixo e para diferenciar um membro do naked componentes B,C e D pelas três colunas da segunda linha da object de um membro do controlador, estes devem ter o grade. Na linha (3), temos a mesma distribuição da linha dois prefixo {Ctrl.} mais o nome do controlador. Composições por vírgulas para os componentes E e F, sendo que o sufixo podem ser aninhadas por ponto {.}. Por exemplo: {:2} de F indica que o mesmo ocupa duas colunas. Nas linhas endereco.cidade.estado.sigla. (4) e (5), os colchetes com o sufixo {:3} determinam uma Um asterisco {*} como prefixo indica que o membro é
  • 5. apenas para leitura, e uma hashtag {#} indica que o membro uma possível personalização e a notação equivalente em sempre estará em modo de entrada de dados pelo usuário. NOVL utilizando vários dos recursos da linguagem. Por exemplo, o comando *modifiedDate indica que o A. Interface típica de um framework NOP membro é apenas para exibição na visão. O suporte a propriedades do tipo coleção ou listas de Podendo variar de acordo com o framework e tecnologia objetos é um dos diferenciais da linguagem, pois permite o utilizados, a Figura 11 mostra um layout típicamente projeto de subviews em uma sub-grade com os membros dos empregado na maioria dos frameworks que programam o elementos da lista, que por sua vez podem ser outras NOP. Qualquer exibição de outro naked object seguirá o coleções, recursivamente. Esta sub-grade é definida mesmo modelo. Na tela na figura, gerada pelo NOF-MVC delimitando a subview com os sinais de menor e maior para o naked object Product, todas as propriedades são {<...>} como prefixo da propriedade do tipo coleção. expostas verticalmente. A maioria dos frameworks permite a Em GUIs é comum a utilização de componentes visuais que definição da ordem em que as propriedades são exibidas. As se expandem ou se colapsam. Para determinar que um desses ações do naked object são expostas em um menu suspenso componentes apareça colapsado utiliza-se como sufixo o sinal acima da grade principal, e as ações dos controladores abaixo. de menos {-} e o sinal de mais {+} para expandido. A Tabela 2 explana todos os elementos da NOVL: Convenção Usado para Nome case-sensitive da propriedade do naked property object ou do controlador. Nome case-sensitive do método do naked Action object ou do controlador. , Separador de colunas. ; Separador de linhas. Colspan define quantas colunas o membro deve :colspan ocupar na grade (readonly) O membro sempre será exibido em Figura 11 - GUI gerada pelo NOF-MVC * modo de leitura (saída de dados) incondicionalmente. B. Interface personalizada usando NOVL (writeonly) O membro sempre será exibido em A apresentação das mesmas informações pode ser # modo de edição (entrada de dados) personalizada usando a NOVL. Na Figura 12 é apresentada incondicionalmente. uma possível interface para Product. Observe que nesta visão É um texto simples que será atribuído ao as propriedades e ações são agrupadas por co-relação. 'label' próximo elemento. No caso de um membro, Propriedades importantes para o usuário ficam em primeiro substitui o rótulo padrão. plano e as menos importantes em segundo plano ou ocultas. [] Define uma sub-grade. Indica que o componente deve ser apresentado + inicialmente no modo expandido. Indica que o componente deve ser apresentado - inicialmente no modo recolhido. Delimita uma sub-grade que será apresentada a <...> partir dos membros do domínio de uma coleção. Tabela 2 - Convenções da NOVL No estudo de caso a seguir são apresentandos exemplos mais detalhados sobre os membros. V. ESTUDO DE CASO Nesta seção é apresentado um estudo de caso utilizando o Figura 12 - GUI gerada pela NOVL banco de dados “Adventure Works Sample Database” [23], A grade principal na tela é formada por duas colunas e que contem, dentre outras informações, dados sobre duas linhas (em azul), a primeira linha é preenchida por uma produção, vendas e comercialização de uma empresa sub-grade 2x4 que ocupa as duas colunas (em amarelo), e na multinacional fictícia chamada Adventure Works Cycles que segunda linha cada coluna é preenchida por uma sub-grade fabrica e vende bicicletas e seus acessórios. Neste estudo de 1x2, e assim sucessivamente (em vermelho). caso o foco será na personalização da interface de usuário Baseando-se na estrutura apresentada na Figura 12 , o do naked object Product. Para fins didáticos, inicialmente código NOVL necessário é detalhado na Figura 13. será apresentada uma interface típica dos frameworks, no caso gerada pelo NOF-MVC, e em seguida será apresentada
  • 6. sem o uso de editores visuais de interfaces. Com isso, o ciclo de aprendizado pode ser reduzido, se comparado a outras tecnologias e a manutenção facilitada. Como trabalhos futuros é sugerido uma implementação de referência da linguagem para alguma tecnologia de projeto de GUI´s como Swing, JSF, HTML, etc., a utilização da linguagem em algum framework NOP, bem como a avaliação e extensão da linguagem para abordar outros aspectos das interfaces gráficas de usuários. Assim, os desenvolvedores poderão beneficiar-se do uso de NOVL e suas futuras aplicações para concentrar seus esforços apenas no domínio da aplicação, sem a preocupação de como a interface será implementada. REFERÊNCIAS BIBLIOGRÁFICAS [1] Aruna Raja and Devika Lakshmanan, "Naked Objects Framework," International Journal of Computer Applications, vol. I, no. 20, 2010. [2] Richard Pawson and Robert Matthews, Naked Objects. New York: Wiley, 2002. [3] Richard Pawson, Naked Objects, Phd thesis. Dublin: Trinity College, 2004. Figura 13 – Código NOVL de customização de Product. [4] Richard Pawson and Robert Matthews, "Naked objects: a technique Inicialmente foram definidos quatro agrupamentos for designing more expressive systems," ACM SIGPLAN Notices, vol. 36, no. 12, 2001. principais: Product (linha 69 a 72), Dates (linha 75 a 78), [5] Richard Pawson. (2010, Novembro) InfoQ. [Online]. Estoque (linha 79 a 86) e Details (linha 91 a 98). Note que http://www.infoq.com/articles/Nacked-MVC este último deve aparecer no modo colapsado para o usuário [6] Naked Objects Group. (2010) Naked Objects MVC. [Online]. e por isto é sufixado com o sinal de menos. http://nakedobjects.net O primeiro ponto-e-vírgula (linha 73) logo após o [7] Apache Isis. (2010) Apache Isis. [Online]. primeiro componente sufixado com {:2} (linhas 69 a 72), http://incubator.apache.org/isis/index.html uma sub-grade com rótulo „Product‟, definem a grade [8] Domain Object Explorer for JPA / EJB3 entity beans. [Online]. principal em duas colunas e duas linhas e este componente http://java.net/projects/doe/pages/Home ocupará as duas colunas da primeira linha, enquanto que na [9] Oracle and/or its affiliates. (2012) The Java Tutorials. [Online]. segunda linha uma subgrade de duas linhas é definida para http://docs.oracle.com/javase/tutorial/ui/overview/intro.html cada coluna (linhas 74, 87 a 89 e 99). [10] Jmatter. [Online]. http://jmatter.org/ Observe que tanto as ações do domínio como as do [11] Eitan Suez, "Customized Views and Editors," in Building Software Applications with JMATTER.: JMatterSoft LLC, 2009, ch. 14, pp. 171- controlador podem ser posicionadas livremente em qualquer 182. parte da visão, de acordo com as necessidades ou gosto dos [12] CodePlex - Open Source Community. [Online]. usuários (linhas 71,72, 84, 85, 86 e 90). Observe também que http://dotobjects.codeplex.com/ a propriedade photos (linha 90) é do tipo coleção de fotos e [13] Free Code. [Online]. http://freecode.com/projects/sanssouci uma subvisão foi criada para exibir os seus membros:a [14] Trails. [Online]. http://www.trailsframework.org/ propriedade largePhoto e o método para adicionar mais [15] Richard Pawson and Robert Matthews, Naked Objects, tradução ed., fotos addOrChangePhoto(). Como photos está prefixada com Osvaldo Kotaro Takai and João Eduardo Ferreira, Eds., 2002. asterisco o componente visual para este membro deve sempre [16] Richard Pawson. (2008, Dezembro) InforQ. [Online]. estar em modo de leitura, mesmo que a tela mude para o http://www.infoq.com/articles/RAD-Naked-Objects modo de edição. Photos também teve seu rótulo removido [17] Erich Gama, Richard Helm, Ralph Johnson, and John Vlissides, para evitar uma repetição indesejável com o rótulo do painel. Design Patterns - Elements of Reusable Object-Oriented Software.: Addison-Wesley, 1998. VI. CONCLUSÕES E TRABALHOS FUTUROS [18] Alan Cooper, Robert Reimann, and David Cronin, About Face 3 : The Essentials of Interaction Design. Indianapolis: Wiley Publishing, Inc., Este artigo apresenta a Naked Objects View Language, 2007. que possibilita a definição de múltiplas visualizações através [19] David A. Watt, Programming Language Concepts and Paradigms.: de metadados em cada objeto do domínio. Desta forma Prentice Hall, 1990. interfaces de usuário personalizadas podem ser [20] ISO/IEC 14977, Information technology—Syntactic metalanguage— Extended BNF., 1996. especificadas através da linguagem. Com isso, um dos [21] John R. Levine, Tony Mason, and Doug Brown, Lex & Yacc, 2nd ed., principais limitadores da utilização do padrão Naked Dale Dougherty, Ed. United States of America: O'Reilly, 1992. Objects pode ser contornado, sem ferir o padrão, pois nem o [22] Gunther Rademacher. (2012, Janeiro) Railroad Diagram Generator. comportamento nem a forma de armazenamento dos objetos [Online]. http://railroad.my28msec.com/rr/ui são modificados. [23] Microsoft. MSDN. [Online]. http://msdn.microsoft.com/en- Por diferenciar-se de outras linguagens de interface no us/library/ms124501%28v=sql.100%29.aspx sentido em que ela especifica a forma da interface e não o caminho para chegar a ela, é possível a codificação direta