Continuando nossa cobertura do evento, gostaria de comentar um pouco sobre a palestra que considero ser uma das principais do evento. Hoje à tarde, tive a oportunidade de conferir em primeiríssima mão uma apresentação do Delphi 2006, ministrada pelos próprios arquitetos e desenvolvedores do Delphi. Este foi um preConference Tutorial, destinado a um público seleto, incluindo jornalistas e personalidades da comunidade internacional. Teremos mais palestras durante a DevCon sobre o Delphi 2006, porém essa foi sem dúvida a que trouxe mais detalhes sobre a última versão da ferramenta, afinal, foram 5 horas seguidas de apresentação.

Vou comentar aqui um pouco do que vi por lá, como meu tempo aqui é curto e geralmente estamos correndo para não perder nada, vou colocar algumas coisas de forma sucinta, vou procurar abordar mais detalhes ao longo da cobertura e também em futuros artigos para a Revista ClubeDelphi. Durante a palestra, fiz uma versão “draft” deste documento, somente ao chegar ao hotel novamente é que conseguir complementá-lo um pouco.

A palestra foi conduzida por Anders Ohlsson, Staff Enginer / Developer Relations da Borland US. Também estavam presentes David Intersimone (que filmou toda a sessão) e Allen Bauer, que mais tarde iria apresentar algumas novidades da IDE. Antes de começar, gostaria de colocar o leitor a par da atual situação do Delphi.

Atenção: Solicitei autorização especial da Borland para publicar neste documento alguns screen-shots da IDE, visto que participi do beta-test do produto e ainda não foi liberada a versão comercial do produto. Agradeço desde já o Anders Ohlsson e John Kaster da Borland.

Borland Developer Studio 2006 (4.0)

Vou explicar um pouco a atual situação do Delphi para que eu possa conduzir o restante deste overview. A Borland, por volta de 2001, anunciou na época os seus planos para a criação de uma IDE única que suportasse várias linguagens, para competir com o Visual Studio da Microsoft. O codinome do projeto dado na época, para quem lembra, foi “Galileo”. O projeto veio à tona com o lançamento do C#Builder 1.0. O C#Builder, ferramenta Borland para desenvolvimento de aplicações .NET com o C#, usava o Galileo como IDE base. Nesse ponto, a IDE tomou um nome comercial, chamado Borland Developer Studio 1.0 (BDS). No ano seguinte, a Borland anunciou o Delphi 8, com suporte ao .NET Framework. O Delphi 8 estava “hospedado” na versão 2.0 do Borland Developer Studio.

Em 2005, a Borland “unificou” o Delphi for .NET (D8) e o C#Builder no BDS, na sua versão 3.0. Além disso, foi adicionado o suporte ao Delphi Win32 (D7), além de uma série de outras novidades como vimos na edição 57 da Revista ClubeDelphi, incluindo ECO 2, novos componentes ASp.NET, ALM, StarTeam, Refactoring, Deploy Manager, History Manager etc. Apesar da nova IDE ser uma “união” de 3 linguagens (chamadas de “personalidades”), o nome comercial dado foi “Delphi 2005”, suportando C#, Delphi for .NET e Delphi Win32.

A partir de agora o nome utilizado para referenciar a IDE é Borland Developer Studio 2006 (a versão 4.0), previamente conhecido pelo codinome “Dexter”. O BDS 2006 comporta agora quatro produtos em um só (ao adquirir qualquer um deles, você tem direito a utilizar os demais gratuitamente):

  • Delphi 2006 - Win32;
  • Delphi 2006 - .NET;
  • C#Builder 2006;
  • C++Builder 2006 (nova personalidade suportada agora no BDS 4.0);

É claro, devido a popularidade da “marca” Delphi, muitas referências ao BDS 4.0 são feitas com o nome “Delphi 2006”. O “DeXter”, conforme enfatiza o próprio nome, é a décima (10ª) versão do Delphi.

Delphi 2006

Delphi 2006: Missão

Anders falou da “missão” do Delphi 2006, ou seja, os principais objetivos e novidades da ferramenta. Em linhas gerais, no Delphi 2006 temos:

  • Melhorias na qualidade e performance da IDE;
  • ECO “basic” em todas as versões – para incentivar o uso do ECO (Enterprise Core Objects), a Borland distribuir agora o framework em todas as versões do produto, incluindo professional, Enterprise e Architect;
  • VCL Design Guidelines – novas melhorias no Form Designer;
  • Together – aqui provavelmente está uma das principais novidades da IDE, agora temos o suporte full ao Together, ferramenta para design e modelagem UML da Borland. Tudo está integrado na mesma IDE;
  • Live Templates – modelos de código para serem usados com o Code Insight e editor;
  • MUITOS novos modelos para Refactoring;
  • Suporte a personalidade C++, incluindo VCL para C++;
  • Detalharei mais sobre cada umas dessas novidades mais adiante.

O que não está no Delphi 2006

para deixar de fora qualquer dúvida inicial, veja o que não está no Delphi 2006:

  • Suporte a CLX;
  • Suporte ao .NET Compact Framework – existe no entanto um “preview”, bastante limitado, que inclusive está disponível para Delphi 2005, mas não existem ainda os designers para desenvolvimento mobile; provavelmente isso venha no Delphi 2007;
  • Suporte ao .NET 2.0 – provavelmente isso venha no Delphi 2007; o Delphi 2006, assim como o 2005, usa a versão 1.1 do .NET Framework.

Roadmap

A seguir, Anders expôs o “Roadmap” do produto, política que a Borland adotou para o Delphi, permitindo que os desenvolvedores saibam como a Borland planeja conduzir o desenvolvimento da ferramenta para os próximos 3 anos.

Resumindo o RoadMap:

  • Delphi 2005
  • Delphi Win32, .NET
  • ECO II
  • Dexter (Delphi 2006)
  • Delphi, C# and C++ na mesma IDE
  • 64 bit .NET
  • ECO 3 – State Machines – máquina de estado
  • ECO “basics” em todas as edições
  • Together para Delphi
  • performance e Qualidade
  • “HighLander” – 2006/2007
  • VCL for .NET 2.0
  • VCL for Compact Framework
  • 64 bit .NET 2.0
  • Delphi for Windows Vista – 2007
  • VCL for Avalon
  • Indigo
  • Delphi/C++ for Win 64 – 2007/2008

Analisando o RoadMap, vemos uma clara preocupação da Borland com a VCL, o que acho muito bom. pelo que vemos no Roadmap, está nos planos colocar a VCL sob o .NET Compact Framework. Isso vai permitir que portemos nossas atuais aplicações Delphi para rodarem em dispositivos portáteis e wire-less, como pocket pCs, Smartphones etc. É claro, levando em consideração as limitações impostas pela plataforma. Isso é interessante porque não será necessário reescrever tudo em Windows Forms, por exemplo, para suportar esse tipo de aplicação.

Além disso, temos a VCL para Avalon prevista para 2007. Avalon, para quem não sabe, é a nova tecnologia da Microsoft (como parte do Windows Vista) destinada a criação de interfaces gráficas. Ela usa o XAML par definir elementos gráficos, semelhante a um ASpX / DFM, com isso, poderemos portar nossas aplicações Delphi VCL para Avalon sem muita recodificação. Só por curiosidade, o ex-arquiteto do Delphi 2->8, Chuck J, é hoje um dos arquitetos do Avalon na Microsoft (de forma semelhante ao Anders Hejs*, criador do Delphi, que é arquiteto do .NET e C#).

para finalizar essa parte da palestra, Anders comparou o comparou a plataforma SDp da Borland (Software Delivery Optimization) com o Borland Developer Studio.

Delphi 2006: “All in One”

Anders comentou em alto nível sobre as tecnologias suportadas na nova IDE. Temos:

  • Delphi
  • VCL, Win32, IntraWeb (versão 8.0)
  • C++Builder
  • VCL, Win32, IntraWeb (versão 8.0)
  • Delphi for .NET
  • VCL Forms .NET, Windows Forms, ASp.NET, ECO
  • C#
  • Windows Forms, ASp.NET, ECO
Delphi 2006 - New Itens

A VCL continua suportando as principais tecnologias das versões anteriores, inclusive na versão .NET: dbExpress, BDE, DbGo (ADO), IBX (Interbase Express), Indy, IntraWeb etc.

Como apoio ao desenvolvimento e parte integrante do Application LifeCycle Management, temos as ferramentas CaliberRM (para gerenciamento de requisitos), StarTeam (para controle de configuração) e Together (para Design e Modelagem).

Dica: para uma introdução ao CaliberRM com Delphi, consulte as edições 58 e 59 da Revista ClubeDelphi. para conhecer o StarTeam, veja as edições 57 e 60.

Delphi 2006 – Qualidade, performance, Bug Report e pacotes

Muitos desenvolvedores criticaram problemas de performance e qualidade do Delphi 2005, conforme posts reportados pela própria Borland. Um intensivo esforço foi feito na nova versão do produto para garantir melhores resultados nesse sentido, principalmente pela adição de um novo Memory Manager.

Mas o que é um Memory Manager? Toda alocação e gerenciamento de variáveis e objetos em memória em aplicações Delphi é feito por um Memory Manager, basicamente uma “classe”. Nós nunca usamos essa classe diretamente, mas ela tem um papel importantíssimo. por exemplo, quando você chama rotinas e métodos como Create, NewInstance, GetMen, Finalize, FreeMem, New etc., o Delphi em baixo nível delega a alocação e liberação para um ponteiro que referencia um Memory Manager.

No Delphi 2006, o Memory Manager foi totalmente substituído. Devido ao uso de ponteiros, você não precisa se preocupar com isso, pois a mudança acontece em baixo nível e não tem impacto no código existente. O novo Memory Manager aloca e gerencia memória de forma mais rápida e otimizada. Como o Delphi foi construído em Delphi, claro, a própria IDE faz uso do novo gerenciador. Ou seja, a IDE está mais rápida tanto para inicializar, para operar, abrir projetos etc. Suas aplicações VCL, quando compiladas no Delphi 2006, também ficarão mais rápidas devido ao novo Memory Manager.

Dica: Caso tenha se interessado pelo assunto e queira saber mais sobre Memory Manager, deixo aqui uma ótima sugestão de leitura que me veio em mente agora. Certa vez li o livro “Delphi in a Nutshell”, de todos os livros de Delphi que li foi o único que abordou em detalhes o uso de Memory Managers, inclusive mostrando como construir seu próprio.

Além do novo Memory Manager, foram resolvido muitos BUGs da versão anterior do produto (Delphi 2005 Update 3). A IDE está respondendo bem mais rapidamente a ações do desenvolvedor, como reforçou Anders. Além disso, temos agora suporte integrado a um sistema automático de “Bug Report”. Isso é, se ao trabalhar no Delphi 2006 você observar um BUG, ele será poderá ser automaticamente reportado à equipe do Delphi, através do Quality Central (qc.borland.com). Você poderá acompanhar o plano de resolução e status de correção do problema reportado.

Além disso, agora você pode acessar diretamente as personalidades da IDE a partir do menu Iniciar. Antes, ao abrir a IDE, tudo era inicializado em conjunto (Delphi, C#, .NET etc.). Tínhamos que configurar pacotes ou o Delphi Configuration Manager para personalizar a IDE (como vimos na ed. 57). Agora isso já vem previamente definido, ou seja, ao abrir o ícone “Delphi 2006 Win32” o BDS vai carregar somente os pacotes necessários para o desenvolvimento Win32 com o Delphi, por exemplo, o que tornar mais rápida a inicialização e operação.

D2006 – produtividade ao desenvolvedor - Melhorias na IDE

Esta parte da palestra foi apresentada por Allen Bauer, atual arquiteto-chefe do Delphi. para aumentar a produtividade no desenvolvimento de aplicações com o Delphi, temos algumas novas melhorias no Designer, conforme destaco a seguir:

  • Design Guidelines – Quando você coloca vários componentes no form designer, a IDE exibe “linhas” que ajudam você a organizar e alinhar controles em tela; Além disso, controles ficam agora circulados por pequenas esferas azuis que reforçam a indicação da seleção e movimentação durante o design;
    Desgin Guidelines
  • StrongLive Templates – Modelos de código que auxiliam na codificação. Aqui usamos o termo “Live” porque o editor aciona o recurso automaticamente conforme você vai digitando. por exemplo, se você digitar um “IF”, a IDE já coloca todo o template da implementação. Temos vários tipos de templates disponíveis, para as principais construções da linguagem. Além disso, esses templates aparecem agora no Code Insight. Antes, não era possível, por exemplo, usar o Code Insight para elementos da linguagem (for, repeat, while, procedure), somente objetos, tipos e membros. Agora tudo isso é possível, inclusive você pode adicionar seus próprios templates clicando em View>Templates: tudo é armazenado em modelos XML; No Code Insight, repouse o mouse sobre o template para adicionar o Help Insight para o item;
    StrongLive Templates
  • Block Completion – o editor completa automaticamente blocos de código como Begin End, ( ), etc.
  • Novos itens para Refactorings: push, pull, Extract Interface, Extract Super Class, Safe Delete etc.
  • Surround – esse é um novo interessante recurso do editor – selecione um bloco de código, clique de direita e no menu “Surround” escolha o que você quer fazer para “envolver” o bloco selecionado, como colocar um if then, repeat until, while, for, for in, procedure, function, colocar uma “region” (novo recurso da IDE que permite ocultar blocos de código com ícones “+” e “-“);
    Surround
  • Change Bar – no editor, uma barra aparece ao lado da numeração de linhas indicando o atual estado de um bloco de código. por exemplo, se você abrir uma unit e incluir algumas linhas, a IDE vai destacar em amarelo que aquilo foi modificado desde a última vez que você salvou o arquivo. Esse recurso funciona integrado ao History Manager;
    Change Bar
  • Âncora para navegação – clique com o botão do meio do mouse no editor ou em janelas como a Tool palette para fazer com que a IDE acione o modo de navegação com rolagem estilo um browser;
  • Melhorias no Debugger: Temos agora o Tooltip na forma de TreeView para objetos (Watch). É possível habilitar/desabilitar Watches simplesmente marcando ou desmarcando o CheckBox na Watch List; Remote Debugger está de volta (ele não estava no D8 nem D2005) – você pode agora depurar suas aplicações remotamente, inclusive ASp.NET e IW
    Mlehorias no Debugger

Dica: para saber mais sobre o Remote Debugger, consulte um artigo que fiz para a edição 32 da Revista ClubeDelphi.

Algumas outras novidades:

  • No canto inferior esquerdo do form designer temos uma “miniatura” do formulário atual;
  • para aplicações que usam código “markup”, como HTML, ASpX, XML, uma interessante e bastante solicitada mudança é que agora a IDE preserva mudanças que você tenha feito diretamente no arquivo ASpX;
  • Error Insight no Tag Editor ASpX pode agora indicar o nome inválido para um atributo de um elemento ASpX ou HTML, além de outros erros na estrutura;
Tag Editor

Novos components na VCL

  • Temos agora dois novos componentes na VCL, destinados ao melhor gerenciamento e organização de controles na interface de usuário. TGridpanel e TFlowpanel podem ser usados para gerenciar o posicionamento de controles, semelhante a técnicas já bastante utilizadas por desenvolvedores Web, ASp.NET e Java. por exemplo, TGridpanel pode ser usado para criar uma área no formulário dividida em 4 partes, sendo que possível colocar controles em cada parte. Ao redimensionar o form, os controles se ajustam automaticamente dentro de sua respectiva “área”. O TFlowpanel é semelhante ao estilo de design Web, onde os controles podem agora ser posicionados um abaixo/lado do outro e se ajustando conforme você redimensiona o form. Isso é uma novidade bastante interessante, porque até agora nós desenvolvedores Delphi sempre estávamos acostumados a utilizar o modelo absoluto de posicionamento.
    Form 5
    Form 5

C++

A personalidade C++ da IDE suporta a maioria dos recursos citados anteriormente, incluindo ChangeBar, Regions, Surround, Templates etc. Além disso, temos vários opções exclusiva para desenvolvimento com a linguagem. por exemplo, clicando em project>Build Configurations, podemos escolher qual o compilador a ser usado pela IDE. Em project>Options, existem centenas de opções adicionais.

C++

Together

Dando continuidade a apresentação, subiu ao palco Jason da Borland, que falou sobre uma das principais características da nova IDE. Temos agora suporte completo ao Together, tanto para as linguagens Delphi quanto C#. Outra vantagem é que você pode usar esse suporte sem necessariamente ter que usar o ECO. para quem nunca ouviu falar em Together, essa ferramenta é bem semelhante (mas bem mais poderosa) ao ModelMaker que vinha com o Delphi 7.

Abrindo o Object Repository, temos agora o item New Design project, que permite criar projetos para design UML versões 1.5 e 2.0, além de importar modelos (MDL). Você pode assim importar modelos construídos em outras ferramentas para poder gerar uma implementação em Delphi, por exemplo.

O recurso de LiveSource permite que mudanças no código reflitam automaticamente no modelo UML, e vice-versa. Faça um teste, crie um projeto VCL e acione o Model View: você deverá ver a classe TForm1 representada no modelo (engenharia-reversa). Adicione uma propriedade no código e veja que já aparece no diagrama de classes. O contrário também é verdadeiro.

Além disso, você pode usar agora a IDE do Delphi 2006 para criar praticamente qualquer tipo de diagrama UML: Classes, Use Cases, Sequência, Colaboração, Estado, Deployment, Atividade e Component. A IDE também suporta o uso de Design patterns e Refactoring no Together.

Together

Um recurso realmente interessante e que apreciei bastante é o Audits e Metrics (Auditorias e Métricas de código), feitas pelo Together. podemos fazer auditoria no código-fonte da aplicação para verificar itens como:

  • Código-fonte em conformidade com regras;
  • Violações de regras de codificação;
  • Conformidade com convenções de nomeação da linguagem;
  • problemas de design;
Qa Audits

Ou seja, esse recurso permite que você faça um “check-up” no seu código Delphi procurando por eventuais problemas, detectando código duplicado, falhas no código, como acesso inválido a arrays, loops infinitos, variáveis não usadas etc.

De forma semelhante, as Métricas de código permitem:

  • A avaliação da complexidade de objetos e código;
  • Quantificação do código;
  • Destaca necessidades de redesign;
  • Análise de impacto em mudanças.
Qa Metric

Dica: para uma introdução a métricas de código, veja o artigo da edição 63 da Revista ClubeDelphi.

E não pára por aí: o Together pode gerar a documentação completa do seu código e diagramas UML em formato HTML.

A seguir Jason fez um exemplo prático no Delphi 2006. primeiramente, criou uma aplicação VCL e ativou o Model View, que já mostrou o diagrama de classes. Clicou em uma propriedade da classe no diagrama e a IDE já navegou até o código. Definiu uma nova unit com várias classes (criou na verdade uma hierarquia de classes TFoo, TFoo2, TFoo3 etc.). Foi para o model view e mostrou que a IDE já representou a hierarquia no modelo UML diagrama. Salientou que mudanças no código refletem no modelo, fez um exemplo inclusive, criou uma property no código, que já apareceu no modelo. Ao contrário, criou uma property no modelo, que virou código. Uma opção interessante é que, clicando de direita na classe e chamando refactoring, podemos acionar opções como mover classes, extrair interface etc. para finalizar, apresentou o recurso de Design patterns e fez auditoria no código.

ECO

Muitas novidades no ECO, que está na terceira versão no Delphi 2006. Henrik Jondell começou falando sobre o que é o ECO e a relação com a UML. A seguir, destacou as novidades da versão que acompanhar o Delphi 2006:

  • State Machine;
  • Eco Action language;
  • Auto Forms, agora em ASp.NET!
  • Multiple DataBase Support;
  • Schema Editor, engenharia-reversa;
  • Together UML Designer melhorado;
  • Actions form menu itens;

Fez então uma aplicação prática em 20 min. Apresentou os requisitos de uma aplicação (“Travel Demo”), criando o diagrama de classes no ECO e compilando o código gerado em um Assembly .NET que foi compartilhado por duas interfaces distintas: Windows Forms e ASp.NET.

Borland Developer Stuido 2006

ASp.NET

O próximo a subir ao palco foi Nick Hodges. A apresentação foi bem básica, mostrou uma aplicação simples ASp.NET no BDS 2006, explicando fundamentos da criação de aplicações ASp.NET com Delphi, como uso de code-behind, Server Controls, ASpX etc.

Novidades no acesso a banco de Dados

John Kaster da Borland falou sobre as novidades no acesso a banco de dados no Delphi 2006, o que destaco:

  • Data Explorer para dbExpress – quem já usou o Data Explorer no Delphi 2005 sabe que ele só funciona para aplicações .NET e conexões BDp. Agora ele suporta dbExpress. Além disso, arrastando conexões ou tabelas para o designer faz criar os respectivos controles dbExpress previamente configurados, como SQLConnection, SQLDataSet etc.
  • BDp Connection pooling (veja explicação a seguir);
  • Drivers atualizados para acesso a BD, incluíndo IB 7.5, Oracle 10g, MS SQL Server 2005, Informix 9x, IBM DB2 8, MySQL 4.0.24, SQL Anywhere 9, SyBase 12.5;
  • DBGo for ADO, IBX and BDE, Win32 e .NET;
  • Novo componente BdpConnectionManager, utilizado gerenciar conexões BDp. podemos, por exemplo, usar seu método getConnectionNames para recuperar as conexões configuradas no Data Explorer.

O que é Connection pool:

Connection pooling é o mecanismo que possibilita o “reaproveitamento” de conexões com o banco de dados. Imagine a seguinte situação: um usuário acessa a aplicação, conectamos ao BD para extrair informações e a exibimos no formulário. A seguir, fechamos a conexão e devolvemos o resultado ao browser. Como aplicações Web são stateless (sem estado), se esse mesmo ou outro usuário se conectar a aplicação, uma nova conexão precisará ser restabelecida. Conectar ao BD a cada requisição de usuário é literalmente um “suicídio” em ambiente Web, onde uma aplicação pode ter centenas e até milhares de conexões simultâneas.

O BDp resolve isso de forma bastante elegante, com o novo suporte a Connection pooling nativo (não suportado no BDp do Delphi 2005). Após a página ser enviada ao browser, a conexão com o BD não é liberada, mesmo que você tenha chamado explicitamente o método Close do BdpConnection. O BDp guarda automaticamente a conexão em pool (imagine isso como uma espécie de cache de conexões). Ou seja, a conexão fica aberta com o banco de dados e persiste entre requisições. Quando outro usuário conectar na aplicação, o BDp verifica se existe uma conexão disponível no pool e caso a encontre, passa a utilizá-la. Com isso, todo o tempo necessário para localizar o servidor de BD, estabelecer uma conexão, autenticar um usuário e verificar permissões não será mais consumido a cada requisição. E o melhor de tudo, você não precisa fazer nada para usar esse recurso, pois ele já é ativado por padrão no BDp do Delphi 2006.

O Connection pooling só pode ser usado em ambiente multi-threading (uma aplicação Web, por exemplo), onde temos várias threads simultâneas processando solicitações clientes. Não faz sentido, por exemplo, usar Connection pooling em uma aplicação Windows Forms tradicional (duas camadas).

Data Explorer

Depois do término da sessão, conversei um pouco com o Anders e Kaster, comentando um pouco sobre o nosso trabalho junto a comunidade Delphi brasileira. Conversando com David I, comentou vários e interessantes assuntos relacionados ao futuro do Delphi, que estarei comentando em futuros posts aqui no site.

Não perca os próximos artigos desta cobertura, até lá!

Apresentação do Borland Developer Studio 2006
Apresentação do Borland Developer Studio 2006
ECO em ação
ECO em ação