//Do <Guia do desenvolvedor Delphi 5>
1.2 O que é Delphi?
Frequentemente fazemos perguntas como: “O que torna o Delphi tão bom?” e “Por que prefiro o Delphi a outras ferramentas de programação?” Ao longo dos anos, criamos duas respostas, uma longa e outra curta, para perguntas como essas. A resposta curta é: eficiência. Para criar aplicativos Windows, usar Delphi é a maneira mais fácil que podemos encontrar. É claro que algumas pessoas (chefes e futuros clientes) não ficam satisfeitas com esta resposta. Portanto, devemos apresentar nossa resposta detalhada, que ilustra a combinação de fatores que tornam o Delphi tão eficaz. Resumimos os fatores que determinam a eficiência de uma ferramenta de desenvolvimento de software nos cinco pontos a seguir:
• Desempenho do ambiente de desenvolvimento visual.
• A velocidade do compilador e a eficiência do código compilado.
'As capacidades das linguagens de programação e sua complexidade.
• Flexibilidade e escalabilidade da estrutura do banco de dados.
• Extensões de estrutura para padrões de design e uso.
Embora existam muitos outros fatores que deveriam ser incluídos, como configuração, documentação, suporte de terceiros, etc., descobrimos que esta é a maneira mais precisa e simples de explicar às pessoas por que escolhemos o Delphi. É claro que os cinco pontos acima também podem incluir alguns fatores subjetivos, mas a chave é: quão eficiente você pode ser ao usar uma ferramenta específica para desenvolvimento? Conforme mostrado na Figura 1-1, todos os aspectos do desempenho de uma ferramenta são avaliados e quantificados (entre 1 e 5) e marcados em cada eixo da Figura 1-1. Finalmente, um pentágono pode ser obtido. Quanto maior a área do pentágono, mais eficiente é essa ferramenta.
Não há necessidade de dizer quais respostas obtivemos usando esse método - você descobrirá por si mesmo quando tentar! Vamos dar uma olhada mais de perto no desempenho do Delphi nessas áreas e compará-lo com outras ferramentas de desenvolvimento do Windows.
1.2.1 Ambiente de desenvolvimento visual
Um ambiente de desenvolvimento visual geralmente é dividido em três componentes: editor, depurador e designer de formulários. Como a maioria das ferramentas RAD (desenvolvimento rápido de aplicativos) modernas, essas três partes funcionam juntas. À medida que você trabalha no designer de formulários, o Delphi gera automaticamente código nos bastidores para os controles que você está manipulando no formulário. Você também pode adicionar código no editor para definir o comportamento do aplicativo e também pode depurar o programa definindo pontos de interrupção e pontos de monitoramento no mesmo editor.
Em geral, o editor do Delphi é semelhante aos editores de outras ferramentas, mas sua tecnologia Code Insight economiza muito trabalho de entrada. Essa tecnologia é baseada em informações do compilador, e não em bibliotecas de tipos como Visual Basic, portanto possui uma gama mais ampla de aplicações. Embora o editor do Delphi também tenha muitas boas opções de configuração, acho que o editor do Visual Studio tem mais espaço para configuração. Na versão 5, a função de depurador do Delphi finalmente alcançou o depurador do Visual Studio, com muitos recursos avançados, como depuração remota, associação de processos, depuração de DLL e pacotes, monitoramento local automático e janelas de CPU. O Delphi também suporta a colocação e encaixe aleatório de janelas enquanto depura e salva esse estado como uma configuração de área de trabalho de comando. Como resultado, o IDE do Delphi obteve um bom suporte para funções de depuração.
Como é frequentemente visto em alguns ambientes integrados (como VB e algumas ferramentas Java), a vantagem de um depurador muito completo é que quando a aplicação é depurada, ela pode modificar seu código, alterando assim seu comportamento. Infelizmente, esta funcionalidade não é suportada pelo Delphi porque é muito complexa para ser implementada quando compilada em código nativo.
Para ferramentas RAD (como Delphi, Visual Basic, C++Builder e PowerBilder, etc.), o designer de formulários é um recurso exclusivo. Alguns dos ambientes de desenvolvimento mais clássicos, como VC++ e BC++, fornecem editores de conversação, mas não integram o designer de formulários no processo de desenvolvimento. Como pode ser visto no gráfico de eficiência da Figura 1-1, a ausência de um designer de formulários reduzirá a eficiência geral da ferramenta de desenvolvimento. Nos últimos anos, Delphi e Visual Basic têm competido ferozmente para melhorar a funcionalidade do designer de formulários. Cada uma de suas novas versões possui recursos melhores que a anterior. O que torna o designer de formulários do Delphi único é que o Delphi é construído em uma estrutura verdadeiramente orientada a objetos. Dessa forma, as alterações feitas na classe base serão propagadas para todas as classes derivadas. Uma das principais tecnologias envolvidas aqui é VFI (herança de forma visual), que é herança de forma visual. A tecnologia VFI permite herdar dinamicamente de qualquer outro formato no projeto atual ou na biblioteca de objetos. Sempre que o formulário base é alterado, o formulário derivado é atualizado imediatamente. Esse importante recurso é explicado detalhadamente no Capítulo 4, “Estrutura e design do aplicativo”.
1.2.2 Velocidade do compilador e eficiência do código compilado
Um compilador rápido permite desenvolver software passo a passo, modificando frequentemente o código-fonte, recompilando, testando, modificando novamente, compilando novamente, testando novamente... formando um ciclo de desenvolvimento tão bom. Se a velocidade de compilação for muito lenta, os desenvolvedores terão que modificar o código em lotes, fazendo diversas alterações antes de cada compilação para se adaptar a um processo de loop ineficiente. Ele melhora a eficiência de execução, economiza tempo de execução e gera códigos binários mais curtos. Sua superioridade é evidente.
Talvez o recurso mais famoso do compilador Pascal seja sua velocidade, e o Delphi é construído neste compilador. Na verdade, pode ser o compilador de código nativo de linguagem de alto nível mais rápido para Windows. Compiladores C++ que costumavam ser lentos fizeram grande progresso nos últimos anos, adicionando links e várias estratégias de cache, especialmente em Visual C++ e C++Builder. Mas mesmo assim, o compilador C++ ainda é várias vezes mais lento que o Delphi.
A velocidade de compilação é necessariamente proporcional à eficiência de execução? Claro que não. Delphi e C++Builder compartilham o mesmo backend do compilador, portanto o código gerado é equivalente ao produzido por um bom compilador C++. De acordo com os mais recentes padrões de avaliação confiáveis, o Visual C++ é considerado em muitas ocasiões o mais eficiente em termos de velocidade de compilação e comprimento de código gerado, graças a algumas medidas de otimização extremamente poderosas. Embora essas pequenas vantagens sejam difíceis de notar no desenvolvimento típico de aplicativos, elas podem ser úteis se você estiver escrevendo código computacional complexo.
A tecnologia de compilação do Visual Basic é um pouco especial. Durante o desenvolvimento, o VB opera de forma integrada e é bastante responsivo. Este compilador é mais lento e o código executável gerado é muito menos eficiente que as ferramentas Delphi e C++.
Java é outra linguagem interessante. As mais recentes linguagens de ferramentas baseadas em Java, JB uilder e Visual J++, afirmam que sua velocidade de compilação pode corresponder
É comparável ao Delphi, mas a eficiência de execução do código gerado não é satisfatória porque Java é uma linguagem integrada. Embora o Jave esteja progredindo constantemente, sua velocidade de execução ainda está muito atrás do Delphi e do C++ na maioria das situações.
1.2.3 Funcionalidade e Complexidade das Linguagens de Programação
A funcionalidade e a complexidade de uma linguagem estão nos olhos de quem vê e são objeto de muito debate. O que é simples para uma pessoa pode ser difícil para essa pessoa; o que pode ser de funcionalidade limitada para uma pessoa pode ser perfeito para outra. Portanto, os pontos a seguir baseiam-se apenas na experiência e compreensão pessoal do autor.
Assembly é fundamentalmente a linguagem mais poderosa. Você pode fazer quase tudo com isso. No entanto, desenvolver até mesmo a aplicação mais simples em montagem é muito difícil e pode resultar em nada. Não apenas isso, mas manter um trecho de código assembly em um ambiente de desenvolvimento de grupo por qualquer período de tempo às vezes é simplesmente impossível. À medida que o código é passado de uma pessoa para outra e de outra, as ideias e intenções do design tornam-se cada vez mais confusas, até que o código parece um livro do céu. Como resultado, avaliamos o assembly como muito baixo, pois é poderoso, mas muito complexo para quase todos os desenvolvedores.
C++ é outra linguagem extremamente poderosa. Com a ajuda de seus recursos potenciais (como macros de pré-processador, modelos, carregamento de operadores, etc.), você quase pode projetar sua própria linguagem usando C++. Contanto que você use suas ricas opções funcionais de maneira adequada, você poderá desenvolver código conciso, intuitivo e fácil de manter. O problema, porém, é que muitos desenvolvedores abusam desses recursos, o que pode facilmente levar a erros graves. Na verdade, é mais fácil escrever um código C++ ruim do que escrever um código C++ bom. Porque a linguagem em si não irá na direção de um bom design - isso depende dos desenvolvedores.
Object Pascal e Java parecem muito semelhantes a nós porque compreendem muito bem o equilíbrio entre complexidade e funcionalidade. Todos eles adotam a abordagem de limitar a funcionalidade disponível para aprimorar o design lógico do desenvolvedor. Por exemplo, ambos evitam o conceito de herança múltipla totalmente orientado a objetos, mas facilmente abusado, e em vez disso implementam uma única classe que executa a funcionalidade de múltiplas interfaces. Nenhum dos dois suporta carregamento bonito, mas perigoso, do operador. Ambos possuem alguns recursos poderosos, como tratamento de exceções, informações de tipo de tempo de execução (RT TI) e memória vitalícia de string autogerenciada. Ao mesmo tempo, nenhuma das línguas é escrita por um conselho editorial dedicado, mas vem de indivíduos ou grupos dentro de uma única organização que partilham um entendimento comum da língua.
O Visual Basic foi originalmente projetado para facilitar o início e o progresso mais rápido dos iniciantes (daí o nome). Mas como linguagem, o VB tem que aprender constantemente com seus pontos fortes e compensar seus pontos fracos, o que o torna cada vez mais complexo nos últimos anos. Para esconder esses detalhes dos desenvolvedores, o VB ainda mantém alguns assistentes para criação de projetos complexos.
1.2.4 Flexibilidade e escalabilidade da estrutura do banco de dados
Como a Borland não possui um esquema de banco de dados, o Delphi mantém o que consideramos ser a estrutura de banco de dados mais flexível de todas as ferramentas. O BDE é muito poderoso para a maioria das aplicações baseadas em plataformas de banco de dados local, cliente/servidor e ODBC. Se não estiver satisfeito com isso, você pode evitar o uso do BDE em favor dos novos componentes nativos do ADO. Se não tiver o ADO instalado, você poderá criar suas próprias classes de acesso a dados ou adquirir uma solução de acesso a dados de terceiros. Além disso, o MIDAS facilita a implementação do acesso em vários níveis às fontes de dados. As ferramentas da Microsoft (ODBC, OLE DB ou outras) tendem logicamente a suportar o banco de dados e as soluções de acesso a dados da própria Microsoft.
1.2.5 Extensões de estrutura para padrões de design e uso
Este é um recurso importante que muitas vezes é esquecido por outras ferramentas de design de software. VCL é o componente mais importante do Delphi. A capacidade de manipular componentes em tempo de design, criar componentes e usar tecnologia OO (orientada a objetos) para herdar o comportamento de outros componentes são fatores-chave que determinam a eficiência do Delphi. Em muitos casos, os componentes VCL são escritos usando uma abordagem de design OO fixa. Em comparação, outras estruturas baseadas em componentes são muitas vezes demasiado rígidas ou complexas. Por exemplo, os controles Active X têm os mesmos recursos de tempo de design que os controles VCL, mas não podem ser herdados para criar uma nova classe com comportamentos diferentes. Estruturas de classes tradicionais, como OWL e MFC, exigem que você tenha muito conhecimento da estrutura interna e, sem suporte em tempo de design das ferramentas RAD, sua funcionalidade será inibida. Uma ferramenta que pode rivalizar com a funcionalidade da VCL no futuro é o WFC (Windows Foundation Classes) do Visual J++, que é a Windows Foundation Class. Mas com o processo da Sun Microsystems sobre questões de Java ainda pendente, o futuro do Visual J++ não está claro.