Naked Objects View Language

Transcrição

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

Documentos relacionados