Visão Geral sobre Delphi
Autor: Vidal Martins - GPT - Ramal 463
Este artigo tem por objetivo apresentar a ferramenta de desenvolvimento de aplicações cliente/servidor Delphi 2.0. Baseia-se em informações obtidas em um curso oficial da Borland, realizado entre os dias 23/09/96 e 27/09/96, nos manuais do produto e em material obtido via Internet. Ele foi dividido em três seções para facilitar a leitura daquelas pessoas que estão interessadas em aspectos específicos do produto e não dispõem de tempo para ler o documento completo. São elas:
- Visão geral: descreve o objetivo da ferramenta, diferencial de mercado, versões disponíveis para compra, templates, recursos para a geração de relatórios e fala sobre a disponibilidade dos fontes da VCL;
- Acesso a banco de dados: apresenta dois diagramas que refletem a arquitetura do Delphi para acesso a dados e descreve diversos aspectos dessa arquitetura;
- Recursos avançados: fala sobre assuntos que não foram vistos no curso, mas que têm que ser considerados em uma avaliação de ferramenta de desenvolvimento - browser de classes, infra-estrutura para aplicações three-tier e integração com Internet.
VISÃO GERAL
Delphi é uma ferramenta RAD (Rapid Application Development), baseada em Object Pascal, que pode ser utilizada tanto para o desenvolvimento de aplicações cliente/servidor quanto para aplicações de uso genérico, como editores de textos, planilhas eletrônicas, etc. Portanto, quem já conhece Pascal, uma linguagem muito difundida nos meios acadêmicos, aprende Delphi com maior facilidade. Quem ainda não a conhece terá que aprendê-la para programar em Delphi.
Algumas das características que a Borland divulga como diferencial do seu produto em relação aos concorrentes são as seguintes:
- possui o compilador mais rápido e otimizado de todas as ferramentas;
- gera executáveis, sem a necessidade da utilização de bibliotecas RunTime para a distribuição de aplicações. A conseqüência disto é uma performance muito superior às outras ferramentas;
- possibilita a criação de componentes nativos, ou seja, permite que façamos extensões ao próprio Delphi;
- é uma ferramenta two-way, isto é, cada componente visual é implementado através de um conjunto de linhas de código Object Pascal e esses dois elementos, componente visual e linhas de código, estão intimamente relacionados, de tal forma que uma alteração em qualquer um deles se reflete no outro;
- a linguagem possui mecanismos especiais para manipulação de exceção (exception handling), o que permite a criação de aplicações mais robustas;
- excelente conectividade com bancos de dados, através do Borland Database Engine (BDE);
- é totalmente orientada a objetos.
Existem três versões disponíveis para a compra do Delphi: Desktop, Developer e Client/Server. A versão Desktop inclui os seguintes softwares: o compilador Delphi; o Delphi IDE (Integrated Development Environment) que é um ambiente integrado para desenvolvimento, teste e depuração de aplicações; o Borland Database Engine (BDE) que inclui DBase, Paradox e suporte a ODBC; a Visual Component Library (VCL) com mais de 90 componentes; o Database Desktop que permite criar, visualizar, classificar, modificar e consultar tabelas de dados de diversos formatos, incluindo Paradox, DBase e SQL; e o Database Explorer que é um browser hierárquico de banco de dados, com capacidade de visualizar esquemas de banco de dados, criar, visualizar e editar dados em tabelas, criar e manter alias, executar comandos SQL, criar e manter dicionário de dados. Neste contexto, um alias é um nome que identifica onde estão armazenados os objetos de um banco de dados, tais como tabelas, triggers, stored procedures, etc. Esse nome pode apontar para um diretório (bancos de dados DBF e Paradox), ou para um servidor de banco de dados.
A versão Developer contém tudo o que a Desktop contém, mais os seguintes produtos: o código fonte da VCL; o InstallShield Express, uma ferramenta para criar software de instalação; o Local Interbase Server que é o sistema gerenciador de banco de dados relacional da Borland; o ReportSmith, um poderoso gerador de relatórios, com conexão para bancos de dados PC (DBase e Paradox); interface para o software PVCS da Intersolv, o qual se destina ao gerenciamento de trabalho em equipe; OCX de exemplo para criar gráficos, verificação ortográfica, etc.
A versão Client/Server inclui tudo o que foi listado anteriormente, mais os seguintes produtos: drivers SQL Link nativos para Oracle, Sybase, Interbase e SQL Server; SQL Database Explorer; ReportSmith com conexões para bancos de dados padrão SQL; Visual Query Builder, uma ferramenta visual que auxilia a construção de comandos SQL; Data Pump Expert, uma ferramenta usada para realizar migração de bases de dados; o servidor de banco de dados Interbase para Windows NT, com licença para 2 usuários; o software PVCS da Intersolv.
Com relação ao ambiente (IDE) e à filosofia de desenvolvimento de aplicações, o Delphi não possui diferenças significativas em relação aos seus concorrentes. Para construir formulários, basta fazer drag-and-drop em componentes predefinidos. Cada componente possui uma série de propriedades, que podem ser editadas tanto a nível de projeto, quanto a nível de execução do código. Existe também uma série de eventos associados a esses componentes, os quais, quando ocorrem, disparam trechos de programa codificados pelo desenvolvedor.
Um recurso interessante do Delphi são os templates (modelos). O Delphi permite que o desenvolvedor construa formulários e projetos padronizados e armazene-os em um repositório, para serem reutilizados em trabalhos posteriores. Na hora de usar um template, podemos fazê-lo de três formas diferentes:
- cópia: gera uma réplica do objeto que se encontra no repositório, dentro da sua aplicação;
- referência: faz um link direto entre a sua aplicação e o código compilado do template. Este tipo de template lembra funções de biblioteca;
- herança: neste caso, cria-se um novo objeto que herda as características do template.
Com relação à geração de relatórios, o Delphi possui duas alternativas de solução. A primeira é um conjunto de componentes da própria linguagem, que podem ser arrastados para um formulário (drag-and-drop) e formatados, conforme a necessidade do usuário. Esse conjunto de componentes chama-se QuickReports. A vantagem da sua utilização é que a geração do relatório também é transformada em código de máquina, o que garante excelente performance durante a sua execução. A desvantagem é que a segunda alternativa é mais amigável. Essa segunda alternativa é um produto completo, chamado ReportSmith. Originalmente, esse gerador de relatório não era da Borland. Ele foi comprado por ela e integrado ao IDE. A desvantagem do ReportSmith é que ele exige um RunTime.
Outra característica que chama a atenção no Delphi é o fato de que a VCL (Visual Component Library) é aberta, ou seja, quando um determinado componente da linguagem não atende exatamente as nossas expectativas, podemos personalizá-lo, alterando diretamente seu código fonte.
Acesso a Banco de Dados
Vamos analisar, agora, como o Delphi trata o acesso a banco de dados, afinal, a maioria das aplicações desenvolvidas ou contratadas pela Celepar utilizam esse recurso. A figura 1 resume o ambiente de desenvolvimento cliente/servidor proporcionado pelo Delphi.
Na primeira camada desse modelo encontra-se o IDE e todos os seus componentes. Na segunda camada, a de middleware, encontra-se o BDE com todos os seus drivers de conexão. E na terceira camada encontram-se as fontes de dados que o Delphi é capaz de acessar, tanto em ambiente local quanto em ambiente remoto. Cada uma dessas camadas merece alguns comentários.
Figura 1 - Ambiente de Desenvolvimento Delphi Cliente/Servidor
Vamos começar pelo IDE. Observe que no repositório de objetos aparece um elemento chamado Data Modules, sobre o qual nada foi falado ainda. Pois bem, esse é o primeiro passo da Borland em direção às aplicações three-tier. Qual é a idéia?
Figura2 - Relacionamento entre os componentes de banco de dados de uma aplicação
Quem acompanha a evolução das tecnologias cliente/servidor já está "careca" de saber que as camadas de uma aplicação dessa categoria são: apresentação, regras de negócio, e persistência. Também deve saber que toda a lógica de apresentação fica no cliente, a camada de persistência é implementada através de um sistema gerenciador de banco de dados, e que as regras de negócio não têm um lugar bem definido; depende da infra-estrutura disponível.
Em aplicações pessoais e de suporte à decisão, recomenda-se que as regras de negócio sejam colocadas no cliente (fat-client). Já para as aplicações missão-crítica sugere-se regras de negócio no servidor. Mas qual servidor? Se a aplicação não é tão pesada assim (TP-Lite), que pode ser implantada através de uma arquitetura two-tier, a palavra servidor refere-se ao servidor de banco de dados. Porém, se a aplicação é muito crítica (TP-Heavy), a palavra servidor refere-se a um servidor de aplicações que utiliza um monitor de transações para otimizar o processo.
Mas, o que tudo isso tem a ver com os Data Modules? Os Data Modules são formulários do Delphi que contêm apenas componentes de acesso a Dados, como mostra a figura 2. Nesses módulos não há nenhuma codificação de lógica de apresentação, nem de lógica de acesso a dados, apenas lógica de negócio utilizando os dados disponibilizados pelos referidos componentes. Em outras palavras, a arquitetura da ferramenta Delphi induz projetistas e programadores a desenvolverem aplicações three-tier, o que é muito bom.
Esse desenho representa de forma muito clara a divisão entre as três camadas. A camada de apresentação é a responsável pela comunicação entre o aplicativo e o usuário. Ela se concretiza através de formulários que contêm controles visuais (grids, botões de navegação, combo boxes, etc.). Esses controles são alimentados com informações contidas em componentes do tipo TDataSource, os quais encapsulam toda a lógica de negócio e a base de dados que dá suporte à aplicação.
A camada de lógica do negócio é implementada através dos Data Modules. Dentro deles são colocados todos os tipos de componentes necessários para a codificação das transações, que implementam as regras de negócio. As conexões com os bancos de dados são encapsuladas por componentes do tipo TDatabase e TSession, e o acesso às informações propriamente ditas está encapsulado através de componentes do tipo TTable, TQuery e TStoredProc. Como os próprios nomes sugerem, esses componentes referem-se, respectivamente, a uma tabela física do banco de dados, ao resultado de uma consulta e a uma stored procedure. Usando esses componentes, o programador não precisa codificar procedimentos básicos de acesso aos dados, tais como inclusão, exclusão, alteração e diversos tipos de consulta aos registros (primeiro, último, próximo, anterior, os que atendem determinado critério, etc.). Tudo isso já está implementado como métodos dos referidos componentes. O melhor da história é que, além de ganhar produtividade e confiabilidade ao reusar código, no caso do Delphi, não perdemos nada em performance, pois tudo é transformado em código nativo durante a compilação.
A camada de persistência é implementada através de um SGBD e acessada pelos componentes de acesso a dados por intermédio do BDE (Borland Database Engine). Em outras palavras, esses componentes encapsulam a comunicação com o Middleware (BDE).
Sobre o BDE é interessante comentar o seguinte: estruturalmente e funcionalmente ele equivale a um driver ODBC misto (Single Tier e Multiple Tier). É claro que a implementação é diferente, senão chamar-se-ia ODBC. Mas, o que são drivers ODBC Single Tier e Multiple Tier?
- Single Tier: o driver processa as chamadas à API e também age como "SQL Engine". Isto é, analisa, valida e otimiza os comandos SQL, e recupera os dados diretamente da respectiva fonte de dados. Este tipo de driver é comumente utilizado quando não há um SGBD entre a aplicação e os dados. Eles são limitados quanto ao suporte a SQL e não possuem características avançadas como processamento de transações.
- Multiple Tier: o driver processa as chamadas às funções e passa os comandos SQL para o SGBD ou para um gateway. Estes drivers podem ser "two tiered", "three tiered", etc. O driver é two tiered se ele envia a SQL diretamente para o SGBD. É three tiered se envia a SQL para um gateway que encaminha para o SGBD.
Trocando em miúdos, o BDE possui um "SQL Engine" para acessar bancos DBF e Paradox, o que equivale aos drivers ODBC single tier. Esta característica nos permite implantar aplicações monousuário ou multiusuário de pequeno porte, por exemplo, sem precisar comprar ou instalar um SGBD. Além disso, o BDE possui links nativos para os SGBDRs mais usados, compatíveis com o padrão IDAPI, o que equivale aos drivers ODBC multiple tier.
Embora só apareçam quatro SGBDRs no desenho que representa o ambiente cliente/servidor do Delphi, o BDE possui acesso nativo para Sybase, Oracle, SQL Server, Interbase, DB2 e Informix. Os drivers (SQL Links) para DB2 e Informix não estão embutidos na versão 2.0, mas podem ser solicitados à Borland.
Recursos Avançados
Os temas tratados a seguir não foram objeto de estudo no curso básico sobre Delphi, porém, devem ser considerados quando se trata da avaliação de uma nova ferramenta de desenvolvimento: browser de classes, infra-estrutura para a implementação de aplicações three-tier e integração com Internet.
O Delphi realmente é um produto aberto, pois nos permite criar novos componentes de software partindo do "zero" ou de componentes já existentes. Para este último caso, existem duas formas de reutilizar o código disponível: herança e réplica. O fato da VCL (Visual Component Library) ser entregue acompanhada dos respectivos fontes facilita esse processo. Mas, por que estamos falando em criação de componentes de software? Porque no momento em que a Celepar começar a fazer esse tipo de trabalho, será indispensável o uso de uma ferramenta que permita visualizar quais são as classes disponíveis em nosso ambiente, seus atributos e métodos, afinal, não basta boa intenção para propiciar reuso de código, é imprescindível a existência de algum meio eficiente de divulgação de componentes. Nesse sentido, o Delphi é uma boa opção, pois possui um browser de classes no IDE (Integrated Development Environment).
O segundo tema que foi comentado é a infra-estrutura para aplicações three-tier. Qual é a importância disso no contexto do desenvolvimento de aplicações cliente/servidor? Recomenda-se que os sistemas com processamento transacional pesado, acessados por um número muito grande de usuários (mais de 100, por exemplo), sejam implementados através de servidores especializados, isto é, servidores dedicados ao gerenciamento dos bancos de dados e servidores dedicados ao processamento de transações. Esta última categoria é conhecida como servidores de aplicação. Eles contêm as transações que devem ser executadas e softwares especiais para processá-las. Mas, o que o Delphi tem a ver com isso?
Outro passo significativo da Borland na sua estratégia cliente/servidor foi a compra da Open Environment Corporation (OEC), uma empresa pioneira no desenvolvimento de soluções cliente/servidor altamente escaláveis. Na primeira fase da aquisição, a Borland venderá os produtos da OEC como eles estão, servindo de complemento para as suas ferramentas. Na segunda fase, a Borland vai integrar as tecnologias OEC às suas ferramentas e anunciar novos produtos.
A OEC já possui uma família de produtos chamada Entera (ENTERprise Arquitecture) que suporta a criação de aplicações distribuídas multi-tier (também chamadas three-tier ou n-tier). Entera simplifica bastante o processo de criação de aplicações corporativas, reduzindo a complexidade das tecnologias de computação distribuída, tais como comunicação baseada em RPC, serviços de computação distribuída (CORBA, DCE, DCOM), acesso a bancos de dados corporativos (Oracle, Sybase, Informix, DB2, Ingres, Rdb, EDA/SQL) e aplicações mainframe (IBM 3270, DEC VT100). Entera é um sistema aberto, o que significa que pode ser utilizado em conjunto com Delphi, C++, Java, Power Builder, ou Visual Basic. Segundo a OEC, aplicações escritas com Entera podem ser acessadas por milhares de usuários dispersos geograficamente.
As tecnologias Entera da OEC fornecem conectividade e suporte para uma ampla variedade de plataformas, dentre as quais podemos citar: IBM 3270, Open Edition MVS, AIX/6000, OS/2, Digital OSF/1, HP-UX, Unisys SVr4, Sun Solaris, Macintosh e Microsoft Windows 95 e Windows NT.
A OEC possui também um produto novo chamado OLEnterprise, que provê interoperabilidade direta com Microsoft DCOM (Distributed Commom Object Model), o que significa integração completa com ferramentas de desenvolvimento Windows e aplicações que rodam no desktop. O OLEnterprise inclui o OLE Gateway que suporta RPC e CORBA para fornecer uma solução aberta e confiável de computação distribuída, permitindo que ferramentas de desenvolvimento Windows se integrem com sistemas de informação de uma variedade de ambientes Unix e mainframe.
O último tema que comentamos ser importante na avaliação de uma ferramenta é a integração com a Internet. O que o Delphi tem a oferecer nessa área? O Internet Solution Pack. Ele permite que os desenvolvedores Delphi apliquem diretamente seu conhecimento na construção de aplicações Web. Esse pacote contém oito componentes ActiveX que nos permitem construir Web Browsers customizados, gerenciar correio eletrônico na Internet, transferir arquivos ou conectar com newsgroups (grupos de discussão).
Atualmente, os desenvolvedores usam protocolo CGI para estabelecer uma comunicação entre um servidor web e um servidor de banco de dados. Quando o usuário faz uma requisição de informação, o browser empacota a query, passa-a para o servidor web e este despacha a requisição, via CGI, para o banco de dados apropriado. Uma vez que o Delphi possui um compilador que gera código nativo, você pode escrever DLLs de alta performance que se comunicam via ISAPI, NSAPI ou CGI com o servidor Internet. Isso estende as aplicações cliente/servidor para a Internet ou Intranet. ISAPI e NSAPI são APIs proprietárias para servidores, cujo objetivo é estender as funcionalidades do protocolo CGI. A primeira é da Microsoft e a segunda da Netscape.
Além de tudo isso, a Borland está produzindo um ambiente de desenvolvimento baseado em Java, apelidado Latte, que permite a instalação de aplicações Internet em diversas plataformas. Esse produto estará disponível comercialmente no final deste ano, nas versões desktop e client/server.