Delphi 8: на стыке программных технологий

29 август, 2004 - 23:00Богдан Вакулюк
Вне сомнений, самые современные и прогрессивные идеи, касающиеся разработки приложений для ОС Windows, сосредоточены вокруг платформы .NET -- виртуальной среды исполнения компактного байт-кода, а также комплекта библиотек производительных классов "на все случаи" .NET FCL (Framework Class Library), предназначенных специально для создания .NET-приложений.

Сейчас в этой области сконцентрировал основные усилия традиционный лидер в выпуске Windows-инструментария -- Microsoft, однако и другие крупные игроки не отстают. И первый среди них, конечно же, Borland -- компания, которая не нуждается в особом представлении.

Delphi 8 на стыке программных технологий
Borland Delphi 8. Предоставлен компанией "Софтпром", тел. 242­5300.
Цена в Киеве: Architect SmallTeamPack -- $6048, Enterprise SmallTeamPack -- $5040


Сегодня в ее .NET-арсенале уже имеется солидный противовес MS Visual Studio -- RAD-пакет C# Builder, успевший за неполные два года своего существования приобрести немалую популярность. Однако то, что на этом инженеры Borland не остановятся, стало очевидным уже в конце прошлого года, когда в поставку любой из версий Delphi 7 была включена бета .NET-компилятора языка Object Pascal.

Delphi 8 на стыке программных технологий
Общий вид рабочего пространства обновленного IDE Delphi
Delphi 8 на стыке программных технологий
В новую версию Delphi интегрированы базовые средства высокоуровневого моделирования приложения
Delphi 8 на стыке программных технологий
Контекст отладки -- в основном рабочем пространстве остаются лишь необходимые окна
Delphi 8 -- это и есть результат полугодового эксперимента. Только теперь в его состав входит уже полноценный компилятор, а сам пакет значительно трансформировался, для того чтобы наилучшим образом соответствовать современным требованиям к продуктам такого рода, и ориентирован исключительно на разработку .NET-приложений.

Поначалу такая строгая направленность Delphi 8 вызвала у пользователей некоторую настороженность -- далеко не все из них были готовы окончательно и бесповоротно мигрировать на инновационную платформу от Microsoft. Именно поэтому Borland предприняла стратегически бесспорно верное решение -- и включила в каждую поставку Delphi 8 полный вариант Delphi 7. Теперь владелец данного пакета свободен в выборе платформы и может совершать переход от Win32 к .NET постепенно.

Конечно, цена любой редакции Delphi 8 не отличается особой скромностью, однако на то есть свои причины. Ведь Delphi 8 -- это не только удобный и эффективный RAD-пакет, вместе с ним в распоряжение поль-зователя попадает целая серия мощных и уникальных инструментов. Достаточно сказать, что полная "коробочная" поставка состоит из 10 компакт-дисков! Два из них занимает собственно пакет Delphi 8 со своими бесчисленными компонентами, такими как сервер баз данных Interbase, клиенты для различных серверов контроля версий и т. д. Еще один CD (Delphi 8 Partner CD) содержит множество ознакомительных версий компонентов и модулей, созданных сторонними разработчиками.

Отдельный CD отдан для Delphi 7 и еще два диска -- для компонентов, модулей и документации. Однако наибольший интерес должно вызывать то, что вместе с Delphi 8 поставляются полная версия MS SQL Server 2000 (для разработчиков, два CD) и мощный сервер баз данных IBM DB2 (два CD), как для Windows, так и для Linux. Таким образом, Delphi 8 -- своего рода программное окружение, позволяющее создавать и разворачивать кросс-платформенные проекты фактически любой сложности.

Традиционно для Borland Delphi 8 доступен в трех редакциях -- Architect, Enterprise и Professional. Architect-издание содержит все средства и функции, которые обеспечивает пакет; владельцы Enterprise-версии будут лишены возможности моделировать приложения с применением Borland LiveSource и архитектуры MDA (о них позднее), совершать тонкую настройку производительности приложения с помощью полного варианта мощного профайлера Optimizeit для .NET; пользователям Delphi 8 Professional, помимо вышеназванных инструментов, недоступны функции интеграции с различными серверами контроля версий (кроме CaliberRM) и некоторые компоненты для работы с базами данных.

Теперь, когда поверхностный обзор содержимого коробки с надписью Delphi 8 закончен, время рассмотреть этот пакет поближе.


Delphi 8

IDE. Пользовательский интерфейс Delphi "осовременился". Основное рабочее пространство выполнено на манер Visual Studio -- четко разделено на функциональные зоны, каждая из которых является связанной док-панелью. При этом есть несколько контекстов -- например, при кодировании расположение и количество панелей одно, а в режиме отладки -- совершенно другое, переключение между ними осуществляется буквально одним нажатием мыши. Такой подход сделал работу с пакетом намного удобнее -- ведь обилие плавающих панелей и окон годится для графического редактора, но не упрощает использование RAD-пакета. Для тех же, кому былая парадигма Borland в организации рабочего пространства более по душе, пре-дусмотрен контекст Classic Undocked.

Впрочем, определенное сходство с MS VS на этом не заканчивается. Наиболее ярко оно проявляется в том, как выглядит основное окно, показывающее как сам код, так и визуальный конструктор пользовательского интерфейса, -- теперь основная форма не "висит в воздухе", как в прошлых версиях пакета, а заключена в рамки панели в закладке Design -- код соответствующего модуля можно увидеть, переключившись в закладку Code. Для компонентов, которые не имеют визуального отображения, предусмотрена специальная зона (component tray) в нижней части панели -- теперь они уже не будут нагромождаться на форме и зачастую мешать эффективной разработке дизайна UI.

Сам же список компонентов вынесен в отдельную палитру Tool Palette (снова-таки подобно Visual Studio!), где их можно отсортировать по различным категориям, каждая из которых выделена собственным цветом.

Редактор кода Code Editor обзавелся режимом отображения номеров строк и автоматическим (или ручным) разделением программы на регионы (regions), позволяющие скрывать или показывать фрагменты кода -- это помогает сосредоточиться на написании какой-либо одной процедуры и лучше представлять структуру программы в целом.

Также новая версия Delphi использует модернизированную систему документации MS Help 2 -- ту, в формате которой поставляется вся справочная информация MSDN и Visual Studio. Кстати, наряду с достоинствами в таком подходе есть и свои недостатки. Так, например, для того чтобы файл справки можно было просмотреть в новом help-браузере, его необходимо "зарегистрировать" на системном уровне -- при установке BDS по какой-то причине в реестр была внесена только справка по .NET Framework, а собственно документация Delphi -- нет! До тех пор пока не загрузили и не установили специальный патч для документации с сервера Borland, воспользоваться им с помощью штатных средств Windows было невозможно.

Object Pascal. Решив перенести такой богатый и одновременно простой язык программирования, как Object Pascal, на платформу .NET, разработчики, безусловно, попытались ограничиться минимумом изменений его семантики и синтаксиса (для большей совместимости с прошлыми и будущими пакетами), но, тем не менее, совсем без них не обошлось. Для того чтобы приспособить Object Pascal к языковой среде CLR, его арсенал пришлось пополнить множеством новых конструкций.

Например, ввести понятие пространства имен (namespace), которое является базовым при определении иерархии классов .NET Framework. Теперь отдельно реализованный класс можно адресовать глобально и локально, как имя_проекта.имя_модуля.класс.

В связи с тем что сейчас старые операторы private и protected, указывающие область видимости членов класса, трактуются несколько по-иному (доступность на уровне сборок), появились новые директивы strict private и strict protected, которые ограничивают видимость на уровне одного класса и его наследников соответственно.

Также в угоду идеологии .NET были введены новые типы членов класса (методы, поля и свойства) -- Static Class. Поля и свойства, определенные таким образом, напоминают традиционные статические члены класса -- это означает, что к ним можно получить доступ, даже если ни одного экземпляра данного класса не создано. Несколько отличаются методы типа class static -- по сути, такие функции-члены не получают при своем вызове обязательной в подобных случаях ссылки на текущий объект, которому принадлежит данная функция. Это означает, что методы типа class static не могут обращаться к другим полям или свойствам этого же класса. Самое распространенное использование членов такого типа -- объединение в рамках одного класса (а значит, и одного пространства имен!) однородных функций и констант, как это и сделано в большинстве служебных классов .NET Framework. Обычно они снабжаются и новой опцией sealed, которая говорит о том, что данный класс не подлежит наследованию.

Конечно, поддерживается Delphi 8 и система атрибутов, столь необходимая JIT-компилятору для определения различных свойств отдельных классов и объектов во время выполнения. Атрибуты могут быть как предопределенные платформой .NET (например, serializable), так и пользовательские, создаваемые на основе соответствующих классов.

Среди заметных усовершенствований, пожалуй, стоит отметить и средства перегрузки в классах встроенных операторов Delphi, таких как битовые и арифметические операции, операции сравнения, побитовые сдвиги и явные и неявные преобразования типов.

Привести же полный список небольших изменений в синтаксисе Object Pascal на страницах журнала попросту невозможно из-за ограниченного объема.

Несмотря на то что семантика Delphi 8 не идеально "ложится" на архитектуру .NET, а компилированные приложения (подобно подавляющему большинству других .NET-языков) нуждаются в так называемой "связывающей библиотеке" (binding library), все же для Object Pascal размер кода такой библиотеки (Borland.Delphi.dll) значительно меньше остальных -- всего около 64 KВ против 300 KВ для Visual Basic или 700 KВ для Jscript.

VCL против WinForms. Приятным сюрпризом для поклонников Delphi может служить тот факт, что Delphi 8, кроме поддержки WinForms (часть библиотеки FCL для конструирования пользовательского интерфейса) также содержит почти полный набор портированных для .NET VCL-компонентов, причем не только визуальных.

Инженеры Borland вкратце поделились соображениями, которыми они руководствовались, проделывая этот труд.

Исследуя внутреннее строение WinForms, они обнаружили ряд недостатков и тот факт, что эти компоненты, подобно VCL, основываются на вызовах WinAPI, поэтому потенциально и те, и другие должны функционировать одинаково на платформе .NET. Более того, они могут работать даже лучше, поскольку обладают функциями передачи и сохранения дескрипторов графических контекстов, перьев и кистей. Маркетологи Borland утверждают, что код, основанный на VCL, будет без каких-либо трансформаций совместим и с будущей платформой Longhorn -- их предположение базируется на заявлении Microsoft о том, что, несмотря на значительные изменения в построении приложений в целом (новая архитектура Avalon) и в частности -- к программированию пользовательского интерфейса, ОС Longhorn будет поддерживать Win-Forms API. А поскольку компоненты Win-Forms и VCL построены на схожих принципах, последние также "не пропадут".

В связи с применением VCL вместо "родных" для .NET WinForms возникает еще и логичный вопрос об удобстве портирования таких приложений для мобильных платформ, поддерживающих .NET Framework. Ведь по задумке Microsoft программы, использующие WinForms, могут переноситься фактически без изменений. В свое оправдание Borland утверждает, что на практике такой подход применить крайне сложно, поэтому в данном аспекте компоненты WinForms и VCL фактически равноценны. Для разработки же мобильных приложений компания предлагает отдельный инструментарий, разговор о котором еще предстоит в недалеком будущем.

Впрочем, использовать или нет VCL на платформе .NET -- выбирать, разумеется, конечному разработчику. Стоит лишь напомнить о том, что если проект довольно крупный и предполагает реализацию сложной бизнес-логики и разноплановых клиентских программ, может появиться потребность в переносе части рабочих мест на платформу Linux -- а здесь (благодаря пакету Kylix и кросс-платформенным компонентам CLX, с которыми VCL-классы имеют много общего) в части быстрого портирования приложений с развитым GUI у Delphi фактически нет конкурентов.

Еще один аргумент, приводимый в пользу VCL-компонентов компанией Borland, -- это то, что свойства элементов VCL .NET по-прежнему описываются во внешнем файле, в то время как код конструктора и инициализации Windows Forms должен находиться непосредственно в теле модуля -- что в случае сложного UI сильно загромождает текст кода.

Базы данных. Что касается работы с удаленными информационными источниками и доступа к базам данных с помощью Delphi, то здесь возможности этого пакета крайне широки. Во-первых, Delphi 8 как среда, ориентированная на создание .NET-приложений, может в полной мере использовать высокопроизводительные классы и средства доступа к базам данных, содержащиеся в API ADO. NET (а также классы OLE DB .NET, что, впрочем, не рекомендуется инженерами Microsoft).

Во-вторых, для замены малоэффективных средств OLE DB .NET, которые вызывают функции COM Interop для связи с обычными библиотеками OLE DB, содержащими неуправляемый (not managed) код, и из-за этого сильно теряют в быстродействии, компания Borland создала собственный набор классов доступа к различным базам данных Borland Data Providers, BDP. NET. Это API лишено подобных недостатков, поскольку разрабатывалось фактически с чистого листа. Оно позволяет осуществлять прямой доступ к следующим "хранилищам" информации: Oracle, Interbase, DB2, MSDE и MS SQL Server.

Большинство VCL-компонентов, обеспечивающих в предыдущих версиях пакетов работу с базами данных, также были портированы для .NET -- поэтому множество старых приложений может быть перекомпилировано без значительных изменений. Ну а кроме вышесказанного, в состав Borland Developer Studio (Delphi 8) входят уже зарекомендовавшие себя технологии и компоненты, такие как dbExpress .NET, BDE .NET и IBX .NET (Interbase для .NET).

Web. С помощью Delphi 8, естественно, можно создавать полноценные Web-службы и приложения ASP .NET. Правда, последние разрабатываются исключительно с применением технологии Code Behind, когда весь программный код выносится во внешний модуль и компилируется отдельно от html-страницы, содержащей пользовательский интерфейс. Также не поддерживает Delphi и скриптовые процедуры, внедренные непосредственно в код aspx-страницы.

Для тестирования и отладки Web-приложений, как Web-служб, так и динамических ASP .NET-страниц, даже поставляется отдельный Web-сервер Cassini (на тот случай, если на рабочей станции отсутствует установленный IIS), который поддерживает соответствующие сервисы.

UML. В новой версии Delphi в полной мере воплощена новая парадигма быстрой разработки приложений, получившая название Borland MDA (Model Driven Architecture). Она позволяет создавать модель программ в схематической форме, и, естественно, в ее основе лежит подмножество языка UML, известное как Object Constraint Language (OCL). После того как в специальном окне diagram выполнен набросок иерархии классов, в дело вступает еще одна флагманская технология Borland -- ECO (Enterprise Core Objects). Она представляет собой своеобразную "прослойку" между высокоуровневыми схемами MDA и кодом Object Pascal, которая состоит из набора интерфейсов, классов и атрибутов.

После генерации классов IDE автоматически подключает в активный проект необходимые модули и заполняет их соответствующим образом -- создает интерфейсы, классы, реализующие их, добавляет методы, поля и свойства.

Функции ECO позволяют гибко обновлять структуру приложения после того, как трансформировалась схема, которая представляет ее, или же наоборот -- автоматически модифицировать диаграммы кода сообразно внесенным в него изменениям.

Навигация между этими двумя представлениями осуществляется либо непосредственно, переключением из окна кода в окно схемы (при этом автоматически выделяется класс, соответствующий текущему фрагменту кода), либо с помощью новой панели Model View (впрочем, пользователи C# Builder уже наверняка знакомы с ней), где диаграммы отображаются в виде иерархической структуры. Она позволяет в удобной форме отследить иерархию классов и принадлежность их к тем или иным рабочим пространствам имен.


Delphi 7

Строго говоря, Delphi 7 уже далеко не новый продукт, но все же стоит сделать небольшой обзор его "свежих" возможностей, потому что большинство из них получило свое логическое продолжение в Delphi 8.

Характерной особенностью данной версии пакета был тот факт, что в нем синтаксис Object Pascal не претерпел практически никаких изменений, -- это говорит о том, что он (в версии для Win32) обрел окончательную и совершенную форму.

Наибольшей модернизации под-верглись IDE-оболочка пакета и редактор кода -- стали доступны средства автодополнения кода документов, для которых существует DTD-описание (HTML, XSL, WML и др.), удобнее использование плавающих панелей с компонентами, результатами отладки. Ощутимо расширился список кросс-платформенных CLX-компонентов. Усовершенствовались средства создания приложений Web-сервисов и поддержки протокола SOAP. Также именно в версии Delphi 7 впервые появились средства высокоуровневого моделирования на основе MDA и ECO.

Впрочем, в полной мере описать все средства и инструменты, которые предоставляет набор Delphi 8, невозможно в рамках одной статьи. Те, кто заинтересовался новой средой разработки от Borland, могут загрузить trial-версию продукта по адресу: www.borland.com/products/downloads/download_delphi_net.html. Здесь же на сайте производителя доступно множество дополнительной информации об этом продукте.