СРЕДСТВА РАЗРАБОТКИ

     Выпустив в 1983 г. первую версию языка и среды программирования Turbo Pascal, компания Borland Software (www.borland.com) открыла новую страницу в истории развития средств разработки приложений. Через 12 лет, в 1995-м, увидела свет и первая версия Delphi (оказавшаяся в то же время последним 16-разрядным компилятором), в которой была реализована основанная на компонентах методология быстрой разработки приложений (RAD). Однако с появлением среды разработки JBuilder развитие Delphi несколько затормозилось, хотя было выпущено еще семь версий этого мощного инструмента. И вот теперь корпорация Borland объявила о выходе Delphi 2005, связавшего в единой среде поддержку языков Object Pascal для Win32 и .NET и C# для .NET, средства работы с Web и базами данных, а также основанную на моделях разработку приложений и инструменты управления жизненным циклом приложений (ALM).

Интегрированная среда разработки

Delphi 2005 обеспечивает единую интегрированную среду разработки (IDE) для всех типов ПО (например, Win32 на Паскале или .NET на C#), однако при этом автоматически учитываются особенности каждого вида разработки. Так, если создается веб-страница ASP.NET, то прибегают к помощи конструктора HTML (HTML Designer), позволяющего размещать и настраивать веб-компоненты и сразу оценивать полученный результат. Если же проектируется приложение Win32, то применяется конструктор VCL (VCL Designer; VCL - библиотека визуальных компонентов). Естественно, в зависимости от вида проекта используется тот или иной набор инструментов (палитра компонентов, отладчик, средства редактора кода и т. п.).

Некоторые разработчики, имевшие дело с Delphi 8, жаловались на отсутствие традиционного для предыдущих версий "плавающего" конструктора VCL. В новой версии появился выбор: можно использовать либо "плавающий конструктор", либо встроенный конструктор .NET-стиля.

Очень удобным средством является окно структур (Structure Pane), содержимое которого зависит от того, какое основное окно разработки задействовано в данный момент. Например, если разработчик находится в редакторе кода, в окне структур отображаются все классы, типы, интерфейсы и другие символы текущего файла. Если же идет проектирование формы Win32, окно структур показывает использованные на форме компоненты. С помощью этого окна можно быстро перейти к редактированию свойств нужного компонента или участка кода, нужно лишь дважды щелкнуть мышью на его названии.

В Delphi 2005 усовершенствована палитра компонентов (Component Palette). Если раньше она служила только для выбора и переноса в форму требуемых компонентов, то теперь с ее помощью можно создавать новые проекты, файлы и объекты, а также получать доступ к имеющимся мастерам (Wizards) и использовать стандартные фрагменты кода. Расширены также средства выбора компонентов из палитры: достаточно набрать часть имени объекта, и палитра автоматически откроет список подходящих компонентов. Наконец, теперь реализовано перетаскивание компонентов на форму с помощью технологии drag& drop, ранее же для этого надо было дважды щелкнуть мышью (впрочем, этот способ сохранился и в новой версии).

Расширился набор визуальных компонентов для VCL-приложений. Особенно обогатилась библиотека компонентов для приложений .NET, что облегчает перенос проектов Win32 на новую платформу.

Доработкам подвергся и инспектор объектов (Object Inspector). Помимо своего прямого назначения - редактирования свойств используемых компонентов и назначения обработчиков событий - он теперь позволяет просматривать и изменять характеристики объектов, выбранных в менеджере проектов (Project Manager), например переименовывать файлы, входящие в проект.

Значительно вырос набор мастеров, что связано прежде всего с поддержкой разных платформ и языков программирования. Кроме того, появился мастер, помогающий осуществить перенос Win32-приложения на платформу .NET.

Среди других дополнений и улучшений можно отметить средства для импорта или экспорта .NET-проектов на языке C# между Delphi 2005 и Visual Studio .NET, полную поддержку кодировки UTF-8 во всех мастерах и компонентах IDE, а также встроенные в оболочку средства передачи в Borland сообщений о возникших ошибках.

Редактор кода

Хотя редактор кода (Code Editor) относится к IDE, внесенные в него улучшения и дополнения столь существенны и многочисленны, что целесообразно поговорить о них отдельно.

Delphi 2005 включает средства поддержки переработки приложений (Refactoring). К этой переработке прибегают, когда необходимо улучшить читаемость и эффективность кода, не изменяя при этом поведения приложения. Типичными приемами переработки является присвоение переменным, типам и классам более выразительных имен, вынос повторяющихся участков кода в отдельные процедуры, замена непосредственных значений именованными константами.

Средства переименования символов, в отличие от обычной операции поиска и замены, учитывают контекст, в котором применяются переименовываемые символы. Такими символами могут быть имена классов и интерфейсов, свойства, методы, процедуры и функции, переменные и константы. Естественно, учитывается область видимости символов; например, локальная переменная будет переименована только в пределах той процедуры, где она определена. Действие переименования символов распространяется также на классы - наследники того класса, символ которого переименовывается, и на файлы ресурсов. Без этого механизма "глобальное" переименование зачастую становилось тяжким трудом, сопряженным с появлением множества ошибок.

Для большего удобства работы в Delphi 2005 введено специальное диалоговое окно для объявления локальной переменной или поля записи. Теперь нет нужды путешествовать туда-сюда по коду каждый раз, когда надо описать новую переменную. Эта возможность поддерживается только для языка Object Pascal.

Еще одним средством "только для Паскаля" является переработка ресурсов (Resource Refactoring), заключающаяся в замене строковых констант, находящихся прямо в исполняемом коде, на блоки строковых ресурсов. Особенно полезен этот механизм при разработке приложений, которые в будущем предполагается локализовать для других стран. В языке C# механизм блоков строковых ресурсов отсутствует.

Средства извлечения методов позволяют, выделив несколько строчек кода Object Pascal, создать на их основе новый метод, а сами строчки заменить вызовом этого метода. Такой механизм весьма интеллектуален: например, он "понимает", какие переменные передавать методу по значению, а какие - по ссылке. Для C# подобного средства пока нет.

Весьма удобен механизм импорта пространства имен для C# или поиска модуля для Object Pascal. Он дает возможность быстро отыскать нужное пространство или модуль для заданного символа и подключить его к проекту.

Средство синхронного редактирования (SyncEdit) является дополнением механизма переименования символов, но в отличие от последнего действует лишь в выделенном блоке кода, зато производит указанную замену не только собственно в коде, но и в комментариях, попавших в выделенный блок.

Механизм предупреждения ошибок (Code Insight) основан на непрерывном контроле вводимого в редакторе кода. Ранее подобный контроль применялся только для выделения ключевых слов, имен переменных, констант и т. п., теперь же автоматически осуществляется синтаксический анализ кода и проблемные фрагменты подчеркиваются красной волнистой линией, как это делает Microsoft Word для тех слов, которые ему кажутся неправильными. Наведя курсор мыши на подчеркнутый элемент, можно получить информацию о том, что же именно не понравилось редактору. Кроме того, помимо отображения ошибок в окне редактора кода все проблемы заносятся в окно структур (Structure Pane). Это позволяет программисту быстро переходить от одной ошибки к другой, не прокручивая сам текст программы.

Автоматическая помощь (Help Insight) вызывается, когда курсор мыши задерживается некоторое время на имени какого-либо класса, свойства или метода. Это средство дополняет традиционную систему помощи, однако не заменяет ее полностью, поскольку возможности "автоматики" ограниченны.

Менеджер изменений (History Manager) сохраняет старые версии исходных файлов кода и форм в отдельной папке и позволяет всегда вернуться к предыдущей версии, а также сравнить одну версию с другой, показав внесенные изменения. Он может взаимодействовать также с сервером контроля версий Borland StarTeam, отслеживая изменения, вносимые разными членами команды разработчиков.

Значительно расширились средства навигации по коду. Так, теперь одним нажатием комбинации клавиш можно "перепрыгнуть" от объявления метода к его телу или наоборот. Стали более богатыми и возможности закладок, благодаря чему, например, можно определять постоянные закладки, которые удаляются только явным образом (ранее закладка сохранялась только во время сеанса редактирования).

Появилось средство быстрого "отключения" блока кода путем размещения признака комментария (символов & quot;// ") в начале каждой его строки, а также выполнения обратного процесса.

Наконец, в редактор была добавлена возможность перекодировки исходных файлов. Такое средство бывает полезным, когда, скажем, надо отредактировать HTML-страницу, созданную с использованием одной кодировки, и сохранить ее в другой.

 

Библиотека визуальных компонентов (VCL) для .NET

VCL для .NET пополнилась помимо новых компонентов и новым механизмом вызова процедур и функций, находящихся в обычных DLL платформы Win32, - интерфейсом виртуальных библиотек (Virtual Library Interface, VLI). Поддерживаемый платформой .NET сервис вызовов PInvoke имел ограниченные возможности и был довольно неудобен в использовании: так, с его помощью нельзя было обратиться к библиотеке, местоположение которой становилось известным только во время выполнения приложения. VLI и снимает подобные ограничения.

Компиляторы

В состав Delphi 2005 входят три компилятора. Один из них, лицензированный у корпорации Microsoft (www.microsoft.com), обеспечивает трансляцию приложений, созданных на языке C#, в промежуточный язык (Intermediate Language, IL) платформы .NET. Порождаемый им код полностью совпадает с тем, который генерируется компилятором C#, входящим в состав Microsoft Visual Studio for .NET. Два других компилятора разработаны корпорацией Borland и обеспечивают трансляцию программ на языке Object Pascal в машинный код для исполнения на платформе Win32 или в IL-код для использования на платформе .NET.

По сравнению с предыдущими версиями синтаксис языка Object Pascal был несколько расширен. Например, был введен новый цикл for... in, который обеспечивает последовательный перебор элементов коллекции и по своим функциям аналогичен циклу foreach языка C#.

Новые компиляторы способны транслировать исходные файлы в кодировке UTF-8 или Unicode. Предшествующие версии могли работать только с файлами в кодировке ANSI.

Важнейшим изменением в компиляторе для .NET стала возможность образовывать единое пространство имен для группы модулей или даже группы приложений (в Delphi 8 каждый модуль имел свое собственное пространство имен, что казалось неудобным разработчикам, привыкшим к языку C#).

В компиляторе для Win32 появилась возможность встраивания (inlining) процедур и функций. Когда функция объявлена как встраиваемая, компилятор при обращении к ней не генерирует инструкцию вызова подпрограммы, а размещает в точке вызова сам код функции. Поскольку инструкции вызова и возврата из подпрограмм относятся к одним из самых медленных, подобное средство в определенных случаях помогает существенно поднять производительность приложения.

Еще одним нововведением для платформы Win32 стала поддержка вложенных типов, т. е. определения одного типа внутри определения другого. Кроме того, теперь можно объявлять константы внутри объявлений классов. На платформе .NET эти средства имелись еще в прошлой версии.

На основе исходного кода Win32 сегодня можно генерировать файлы документации в формате XML. Эта возможность также позаимствована у компилятора для платформы .NET.

Наконец, компилятор для Win32 способен генерировать код, оптимизированный для инструкций наборов SSE2 и SSE3, имеющихся в процессорах Pentium 4. При выполнении некоторых специфических задач это средство способно многократно повысить производительность приложения.

Отладчики

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

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

Отладчик для .NET "научился" показывать исходный текст программы, сгенерированный IL-код и соответствующий ему машинный код*.

Традиционные точки останова теперь могут в момент срабатывания записывать в протокол состояние стека вызова. Изменилось и само окно управления точками останова: его сделали более удобным.

Из отладчика для .NET в отладчик для Win32 перекочевала возможность просмотра локальных переменных любой процедуры из стека вызова (ранее обеспечивался просмотр переменных только текущей процедуры).

Управление жизненным циклом приложений

Delphi 2005 предоставляет полный доступ из IDE ко всем возможностям Borland StarTeam - системы управления коллективной работой, обеспечивающей контроль версий, управление требованиями, отслеживание ошибок, поддержку дискуссионных групп и удаленную разработку. Когда задействованы средства коллективной работы, менеджер изменений не сохраняет версии исходных файлов самостоятельно, а пользуется репозиторием StarTeam. Естественно, в этом случае отслеживаются изменения, вносимые любым членом команды разработчиков.

Еще одним нововведением является тестирование модулей - отдельных методов, функций и процедур, входящих в состав приложения. Тестирование каждого такого "кирпичика" является одним из основополагающих принципов экстремального программирования, но и те разработчики, что придерживаются иной методологии, зачастую находят нужным проверить те или иные компоненты приложения отдельно.

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

Enterprise Core Objects (ECO)

ECO - это технология управляемой UML-моделями разработки .NET-приложений. Такой подход к разработке часто называют архитектурой, управляемой моделями (Model Driven Architecture, MDA).

В большинстве случаев модели UML применяются исключительно как руководство для разработчика: они лишь определяют классы, которые должны быть реализованы в приложении. Однако в ECO модели интегрированы с процессом разработки самым тесным образом: их используют для автоматической генерации классов и поддерживающего кода, составляющих ядро приложения. Если в приложение должны быть внесены изменения, программист возвращается к моделям и вносит изменения в них, что автоматически отражается на собственно коде проекта.

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

В обычных приложениях, работающих с базами данных, значительные усилия тратятся на проектирование самой базы. В случае ECO хранилище данных создается автоматически, программист же имеет дело с бизнес-объектами, и у него нет надобности спускаться на более низкий уровень. При необходимости можно поступить и по-другому: отобразить уже имеющуюся базу на модели UML.

В дополнение к UML в ECO поддерживается язык OCL (Object Constraint Language), позволяющий определить правила вычисления или управления значениями атрибутов объектов. Использование OCL, как и UML, позволяет свести к минимуму ручное программирование рутинных задач. В Delphi 2005 ECO поддерживается для обоих языков программирования - Object Pascal и C#.

Помимо перечисленных в Delphi 2005 вошло немало иных нововведений. Хотя практически каждое из улучшений не является чем-то принципиально новым, их объединение в одно целое позволило корпорации Borland вот уже в третий раз вывести средства разработки приложений на качественно иной уровень. Оценить новые средства Delphi 2005 может каждый разработчик: пробная версия доступна для скачивания на веб-узле www.borland.com. * Иногда возможность отладки на уровне машинных команд просто неоценима. Например, у меня был случай, когда небольшая программа на Visual C++ 6.0 упорно не хотела работать, и только "спустившись" к машинному коду, я увидел, что компилятор сгенерировал неверную последовательность команд.