# Jade (banco de dados)

JADE é uma linguagem de programação orientada a objetos que exibe uma grande integração com um SGBD orientado a objetos. Ele foi criado para ser uma ferramenta de desenvolvimento fim-a-fim que permite que os sistemas sejam codificados de uma das linguagens do servidor de banco de dados para os clientes.
Como uma linguagem de programação seus principais concorrentes são o Java e o C#, enquanto banco de dados ele compete com outros bancos de dados orientados a objetos tais como o Caché e o Matisse e também com os tradicionais bancos de dados relacionais tais como Oracle e Microsoft SQL Server.
Como uma linguagem proprietária seu uso requer o pagamento de taxas. Uma versão limitada e gratuita é disponibilizada pelo fabricante.

## História

JADE foi originalmente concebida por Sir Gil Simpson e é atualmente mantida pela Jade Software Corporation. A primeira versão do JADE foi JADE 3, finalizada em Setembro de 1996. Desde então, JADE tem aumentado sua popularidade e agora já está presente em sistemas de informação de missão-crítica de algumas das mais importantes corporações do mundo. JADE é usado em todos os hospitais públicos do norte da Austrália e está presente também no software de controle da maior operadora de trilhos da Grâ Bretanha. Atualmente, a última versão do JADE é o JADE 6.1.

## Linguagem

Em termos de sintaxe, JADE é muito similar à linguagem Pascal. Sua sintaxe é baseada na linguagem Modula-2, que é derivada do Pascal. Como uma nova linguagem, JADE inclui inovações que não existiam nem em Pascal e nem em Modula-2, porém ela é deficiente em outras características de linguagens modernas orientadas a objeto como C# e Java.

### Modelo de programação

Como todas as outras linguagens de programação populares usadas para criar software de banco de dados, JADE é orientada a objetos. JADE foi projetada para ter as mais importantes características de uma linguagem de programação orientada a objetos, mas também foi projetada para ser simples, e não contém um completo leque de ferramentas que algumas outras linguagens tem. Por exemplo, JADE não tem sobrecarga de métodos e operadores. Isto pode parecer uma grande perda para alguns programadores, mas para programação de banco de dados, que é para que o JADE foi projetado, as partes deficientes não causam maiores transtornos, uma vez que dificilmente são necessárias. Uma característica notável do JADE é a falta de construtores parametrizados, o que pode levar a algumas conseqüências perigosas uma vez que não é possível se saber se o objeto foi devidamente inicializado.
Classes em JADE são mantidas unidas em schemas. Schemas servem para o mesmo propósito que os pacotes do Java ou namespaces do C++ e do.NET, porém eles são muito diferentes porque schemas têm hierarquias e herdam classes de superschemas. Isto se torna útil especialmente quando um programador usando a metodologia Modelo-visão-controlador, ao modelar as classes, pode colocá-las em um schema, então as classes controladoras e visoras podem ser criadas em cima das classes de modelo como um subschema.

### Estrutura de Programa

Aplicações JADE são estruturadas de maneira completamente diferente de muitas linguagens de programação, os programas JADE não são desenvolvidos escrevendo código em arquivos grandes e então compilados todos os arquivos juntos de uma vez. Os programas JADE são atualmente desenvolvidos usando uma interface de usuário que permite aos programadores visualmente criar classes e definir suas propriedades e métodos.
Ao invés de se encontrar métodos em grandes arquivos, os programadores selecionam o método que eles gostariam de editar e somente o código para este método em particular é mostrado. Também em vez de se compilar todo o código de um programa de uma só vez, no JADE, cada método é compilado individualmente assim que o método for terminado, significando que o método pode ser verificado imediatamente.
Todo o código para uma aplicação JADE é armazenada em sua base de dados orientada a objetos. Isto tem algumas vantagens. Primeiro, ele permite o desenvolvimento por vários usuários, porque a base de dados mantem o controle de simultaneidade.
Segundo, com cada pedaço do código sendo um objeto separado no banco de dados, em muitos casos é possível reescrever o sistema enquanto ele está executando, contanto que as partes do sistema que estão sendo modificadas não estejam em uso.

## Características

O principal objetivo do JADE é fornecer aos programadores o que eles querem — uma boa linguagem de programação integrada que permita aos desenvolvedores criar uma aplicação uma única aplicação fim-a-fim ao invés de criar três aplicações separadas para o servidor de banco de dados, o servidor de aplicação e o software cliente e então escrever um código que faça eles se comunicarem entre si.

### Banco de dados orientado a objetos

A maior diferença entre o JADE e outras linguagens de programação orientadas a objeto é que o banco de dados orientado a objetos é parte nativa da linguagem. Por exemplo, ao criar um objeto em JADE, ele pode ser criado como transiente ou persistente. Criar um objeto como transiente é o mesmo que criar objetos em outras linguagens de programação orientadas a objetos. O objeto é simplesmente criado na memória e então perdido quando o programa termina. Por outro lado, quando um objeto é criado como persistente, quando o programa termina, o objeto vai continuar existindo e ainda estará lá quando o programa for inicializado novamente. Em outras palavras, quando um objeto é persistente, o JADE automaticamente "trabalha nos bastidores" para salvar e recuperar os objetos do banco de dados quando for necessário.
Existem poucas diferenças entre manipular objetos transientes e persistentes. Já se foi dito que o JADE faz com que pareça que para o programador, todos os objetos estejam na memória local. Na maioria das vezes, o banco de dados orientado a objetos do JADE é usado em ambientes multi-usuários, e isto permite que se possa dizer o JADE faz parecer que para o programador, todos os objetos do banco de dados estão armazenados em alguma memória compartilhada que todos os usuários conectados ao sistema podem acessar, mesmo de computadores diferentes.
Com todo o código do programa centralizado no servidor junto com os dados, JADE atinge o seu objetivo de ser um sistema fim-a-fim, uma vez que JADE apresenta tal nível de abstração que todos os nodos clientes podem ser programados como se estivessem executando no servidor de banco de dados. Isto é desejável pela maioria dos programadores uma vez que eles não têm que manter diferentes números de tecnologias e uní-las, eles apenas criam uma aplicação para tudo.
O uso do banco de dados orientado a objetos do JADE também é inerentemente orientado a objetos, o que elimina a perda de desempenho em um sistema Mapeamento objeto relacional onde os objetos devem ser constantemente convertidos da forma orientada a objetos para a forma relacional. Também, como todos os demais SGBDs comerciais, o JADE tem todas as características padrões para transações atômicas, isolamento, rollback, recuperação de falhas e a habilidade de manter um servidor de banco de dados secundário sincronizado com a base de dados principal por razões de confiabilidade e desempenho.

### Modelo de três camadas

Frequentemente, para softwares orientados a banco de dados, a metodogia de três camadas é seguida. Isto significa que as aplicações são divididas em três camadas: armazenamento de dados; processamento e apresentação. Múltiplos computadores, chamados nós podem estar envolvidos em cada camada, e cada uma tem um nome diferente. Servidores de banco de dados armazenam os dados, servidores de aplicação fazem o processamento e softwares de apresentação provêem a interface com o usuário. Tradicionalmente, estas três camadas são criadas combinando-se três programas e fazendo um "conversar" com o outro para criar um único sistema. Ter diferentes programas separados tem muitas vantagens, a principal é que o sistema se torna escalável, ou seja, aumenta-se o poder de processamento ao simplesmente se adicionarem mais nós a este.
Criar um sistema como este faz com que o programador precise tomar uma decisão sempre que quiser acrescentar uma nova função ao sistema. Ele precisa decidir se a função será mais adequada no servidor de banco de dados, no servidor de aplicação ou no software de apresentação antes de começar a escrever o código, uma vez que é difícil voltar atrás desta decisão depois que a função estiver codificada em alguma das camadas.
Isto é diferente para aplicações JADE, uma vez que elas são codificadas como uma aplicação fim-a-fim. Ao se criar uma aplicação JADE, o programador pode querer criar o programa como se todo o armazenamento dos dados, processamento e apresentação estivessem no mesmo computador. Quando o programa roda em três camadas, JADE automaticamente irá rodar todo o código no servidor de aplicação de todo o código do servidor de aplicação e enviar requisições de banco de dados ao servidor de banco de dados e informações da interface com o usuário para a camada de apresentação. Porém, é muito fácil para o programador trocar o local onde um método em particular roda e movê-lo para o servidor de banco de dados ou para o cliente de apresentação apenas alterando as propriedades do método. Como isto é um ciclo, retrabalhar o código para rodar em partes fins diferentes do sistema acaba sendo mais fácil porque o JADE proporciona programação fim-a-fim.

### Tipos de Clientes

Programadores podem permitir que três tipos diferentes de clientes se conectem a um sistema JADE. Estes três tipos de clientes são chamados:
* JADE Forms
* Documentos HTML
* Web Services
No mesmo schema, um desenvolvedor JADE pode criar muitas aplicações completamente separadas que podem fornecer diferentes interfaces para acessar a mesma base de dados.

#### JADE Forms

Aplicações JADE Forms são compostas de formulários (tal como o nome sugere). O cliente se conecta através do JADE Smart Thin Client (Cliente magro esperto) ou através do Standard Client (cliente padrão) para poder executar aplicações que usem JADE Forms.
O Smart Thin Client funciona ao conectar com o Servidor de Aplicação que geralmente faz todo o processamento por trás do Smart Thin Client, o que significa que o cliente magro apenas é responsável por exibir os formulários e obter a entrada. Portanto o cliente magro não precisa ser um computador muito poderoso, e não requer uma conexão de rede de alta velocidade uma vez que ele não carrega dados do banco de dados, sendo que em alguns casos ficam rodando até mesmo sobre conexões discadas. A razão pela qual eles são chamados de clientes magros é que eles não necessitam de poder computacional para executar estes clientes. Porém, como já foi citado acima, é permitido ao programador rodar partes particulares do código em clientes magros para melhorar o desempenho, por isso a palavra smart (esperto) em Smart Thin Client.
O Standard Client (cliente padrão) é apenas o Smart Thin Client combinado com um Servidor de Aplicação em um mesmo computador. Neste caso, o nodo rodando o cliente realiza todo o processamento, bem como a apresentação. Clientes padrão têm maior demandas por poder computacional do que clientes magros, uma vez que eles necessitam carregar dados do banco de dados para fazer o seu próprio processamento.
Algumas das vantagens de utilizar-se JADE Forms são:
* Dos três tipos de clientes, JADE Forms é o que provê o menor tempo de desenvolvimento em aplicações JADE.
* Permite aos desenvolvedores usar a mesma tecnologia fim-a-fim.
* Smart thin clients podem ser empacotados para que possam ser instalados e executados em computadores clientes com apenas alguns cliques.
As desvantagens são:
* Não podem alcançar uma audiência mundial como é possível com a World Wide Web.
JADE Forms tem uma interessante peculiaridade também: É possível rodar uma aplicação JADE Forms através de um navegador web apenas alterando-se o seu modo para web-enabled (web ativado). Quando isto acontece JADE automaticamente gera código HTML para fazer as páginas se parecerem com os formulários e controles sem quaisquer modificações no código. Isto faz com que programadores que não são competentes com HTML e outras tecnologias web poderem entregar um programa pela web.

#### Documentos HTML

A world wide web é vista como a maneira mais rápida de se alcançar um vasto número de pessoas. JADE suporta a distribuição de aplicações na web através de documentos HTML. Isso funciona similarmente ao ASP.NET, onde os desenvolvedores criam moldes de páginas HTML e deixam partes do molde para serem preenchidos pelo programa.
As vantagens de se usar documentos HTML são:
* Permite que a aplicação tenha uma audiência mundial.
As desvantagens são:
* Quando uma aplicação JADE usa documentos HTML, eles não estão usando a mesma tecnologia fim a fim.
* Deslocar algum processo para o cliente final não é mais tão fácil ou seguro.

#### Web services

Web services são usados para permitir que programas diferentes se comuniquem remotamente em um formulário orientado a objetos. Web services não podem ser acessados por usuários humanos diretamente. Um dos usos de web services com JADE é permitir que outras tecnologias como.NET ou Java usem JADE como seu banco de dados orientado a objetos.

#### Outros tipos de clientes

JADE também é capaz de conectar-se com outros programas através de chamadas a DLLs. Isto permite que outros programas acessem objetos e executem métodos, e poderia ser usado para fornecer uma interface diferente para a aplicação JADE.

### Capacidades multi-língues

JADE nativamente suporta programas multilíngues. Ele faz isto de vários jeitos:
* Strings podem ser marcadas como traduzíveis, o que significa que elas podem mudar de acordo com a linguagem corrente.
* Muitas versões do mesmo formulário podem ser criadas para cada linguagem. Isto significa que as interfaces podem parecer completamente diferentes entre uma linguagem e outra.
* O desenvolvedor tem métodos disponíveis para acessar o locale corrente do sistema e daí podem implementar suas próprias funcionalidades dependentes de linguagem.
JADE vai automaticamente trocar para a linguagem que ele detectar no sistema se a linguagem for especificada pelo desenvolvedor.

### Portabilidade

Atualmente os aplicativos JADE podem ser executados fim-a-fim no Windows e Linux. Semelhante ao Java, JADE procura permitir que os programadores desenvolvam uma aplicação apenas uma vez e que estas estejam prontas para serem executadas em ambas as plataformas com o mínimo de mudanças possível.

## Exemplos de código-fonte

Nesta seção estão alguns pequenos exemplos de códigos-fonte escritos em JADE.

### Hello World!

De acordo com a tradição, o primeiro programa que muitas pessoas escrevem em qualquer linguagem é o "Hello World!" Este código é como ele seria escrito em JADE:
ou