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