Os Naked Objects são uma criação de Richard Pawson e Robert Mathews e que tem vindo a provocar alguma discussão na comunidade de desenvolvimento. O ênfase desta plataforma passa pela definição de "objectos comportamentalmente completos" (behaviourally-complete objects) e sua exposição directa ao utilizador.
Por "objectos completos" entende-se objectos com responsabilidades bem definidas e que assumem todos os comportamentos que se esperam do conceito ou entidade que representam no domínio do problema. Por exemplo, no âmbito de um processador de texto, um caracter deve saber criar a sua representação visual a partir do seu tipo de letra, tamanho e outros estilos que lhe tenham sido aplicados. Não deve existir um objecto que pegue no caracter e decida sobre a sua representação visual, senão caímos na armadilha dos objectos estúpidos (só dados) mais objectos omniscientes (só funções).
A exposição directa dos objectos significa que não existe nenhuma camada entre estes e o utilizador, nem scripts, nem wizards, nem menús, nada. A plataforma encarrega-se utilizar reflexão sobre os objectos e gera a GUI automaticamente, funcionando tudo à base de ícones, drag-and-drop, menús de contexto, e formulários. Os ícones representam classes e objectos. O drag-and-drop permite estabelecer associações entre objectos ou enviar mensagens para um objecto que necessite de um outro como parâmetro. Os menús de contexto expõem as mensagens que lhe podem ser enviadas. As propriedades de um objecto são visualizadas através de um formulário.
As imagens seguintes, linkadas do site dos Naked Objects, mostram o aspecto da interface.

Nesta imagem, podemos ver as classes à esquerda e um objecto com as suas propriedades expostas à direita.

Aqui podemos ver os comportamentos, activáveis através das mensagens expostas através do menú de contexto do objecto.
Todo o conceito é extremamente simples e apresenta múltiplas vantagens:
- Aumento considerável da produtividade. Tanto a geração da GUI como a persistência é tratada pela plataforma.
- Fomenta a programação orientada-a-objectos correcta, obrigando à definição de objectos realmente representativos do domínio do problema. Normalmente, nunca existe um número muito grandes deste tipo de objectos. Se existir, é altura de rever o desenho.
- É extensível sendo possível definir múltiplas vistas e mecanismos de persistência diferentes.
- A aplicação fica muito mais flexível e simples. Tem menos classes, menos métodos, menos linhas de código.
- Possibilita prototipagens rápidas e eficientes. Nas experiências que fiz, vi a aplicação a crescer à frente dos meus olhos. Confesso que faz algum efeito. ;)
- Funciona em .Net e em Java.
Por outro lado, apresenta algumas desvantagens, essencialmente relacionadas com a imaturidade da plataforma. A GUI gerada ainda é algo primitiva (embora tenham existido algumas experiências de geração automática de gráficos bastante interessantes) e os mecanismos de persistência também.
No entanto ela está em desenvolvimento activo, no âmbito de um projecto para o estado da Irlanda e promete. Esperemos pelos próximos episódios. Acho que vale a pena esperar.
Posted
10-12-2004 22:12
por
João Hugo Miranda