Borland не намерена сдавать свои позиции на рынке средств быстрой разработки для Cи++. Появление пакета Borland C++Builder 4 тому подтверждение. Особенно когда упоминаются распределенные приложения на основе CORBA.

Вероятно, те, кто работал с пакетом Borland Delphi 4, бегло осмотрев последнюю, четвертую версию пакета C++Builder (кодовое название «Thunder») этой же фирмы, не найдет ничего сногсшибательного. Но компания Borland — мастер готовить всякие сюрпризы! Наимудрейший Козьма Прутков советовал: «Зри в корень!» И нам тоже не мешает посмотреть, что там, за пользовательским интерфейсом? Хотя, следуя традиции, свое знакомство с C++Builder 4 мы начнем именно со среды разработчика.

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

Как мы заметили, среда разработчика C++Builder 4 переняла свой внешний вид у аналогичной среды Delphi 4. Ее характерными атрибутами можно назвать перетаскиваемые линейки инструментов и швартуемые (dockable) окна.

Швартуемые окна

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

Рис. 1. Все, что может напомнить о бывшей самостоятельности окна, так это двойная полоска для захвата мышью (грабер) и маленькая кнопка для закрытия окна

Вы просто перетаскиваете одно окно внутрь другого, где оно «швартуется», т. е. как бы «растворяется». У него исчезает рамка и заголовок, а само «приклеившееся» окно превращается в панель главного окна. Примером таких окон могут служить Class Explorer в окне редактора, Object Inspector и Project Manager (рис. 1).

Точно так же в любой момент вы можете извлечь «пришвартованное» окно и сделать его самостоятельным. В C++Builder 4 подобным образом можно поступить со многими окнами, которые вызываются на экран с помощью меню View и Run. Распознать швартуемое окно весьма просто — у него более тонкий заголовок по сравнению с обычными окнами.

Другая проблема: как не дать служебному окну C++Builder «зашвартоваться». Здесь есть два решения: перетаскивая швартуемое окно на новое место, удерживать нажатой клавишу Ctrl, или же отключить свойство окна Dockable в его контекстом меню.

Менеджер проектов

Менеджер проектов C++Builder 4 претерпел некоторые изменения. В целом он продолжает линию, начатую еще в третьей версии пакета, — работа с группами проектов вместо одиночных проектов. Но теперь в менеджере появился удобный селектор проекта в виде раскрывающегося списка (рис. 2).

Рис. 2. Активизировать проект можно с помощью специального селектора либо кнопки Activate

Аналогично можно активизировать проект, открыв любой из его элементов.

Добавление и удаление файлов проекта в C++Builder 4 упрощается за счет использования обычного перетаскивания. Достаточно выделить один или несколько файлов в любой папке файловой системы и перетащить их в окно менеджера проектов. Теперь, если отпустить кнопку мыши, все перетаскиваемые файлы присоединятся к активному проекту. Точно так же файлы могут быть скопированы или перенесены (используя буфер обмена данными) стандартными клавишными комбинациями +X, +C и +V.

ClassExplorer

Мощь среды разработки наглядно представлена в окне ClassExplorer. По умолчанию оно «пришвартовано» в окне редактора исходных текстов в виде панели с левого края. Это многофункциональное средство для навигации по описаниям классов, быстрого поиска полей и методов, а заодно и добавления новых объектов. В дереве структуры текущего модуля, отображаемого ClassExplorer, показаны все типы, классы, свойства, методы, глобальные переменные и функции (рис.3).

Рис. 3. Один из вариантов перехода к выбранному объекту - выбрать пункт Go to Declaration в контекстном меню

Перемещение между объектами внутри модуля осуществляется двойным щелчком мыши на имени объекта в ClassExplorer. Можно также выбрать пункт Go to Declaration в контекстном меню выбранного метода или переменной. В длинных листингах без такого рода помощи пришлось бы весьма тяжело.

С добавлением новых внутренних объектов класса дело обстоит просто замечательно. Все в том же контекстном меню ClassExplorer имеются три пункта: New Field, New Property и New Method. Выбирая их, пользователь получает в свое распоряжение маленькие программы-мастера для создания новых полей класса, свойств и методов. Довольно простой интерфейс этих мастеров, состоящий из списков и кнопок, интуитивно понятен и не требует длительного изучения. Особенно это заметно при вызове мастера создания нового свойства (New Property). В принципе создать свойство не трудно и вручную. Но задача эта довольно занудная. И главное, каждый раз нужно проделать одну и ту же операцию: описать свойство, поле для хранения его значения, а еще и задать его методы установки и чтения. Поэтому маленький мастер New Property снизит вероятность появления ошибки и опечатки, освободив вас от рутины (рис. 4).

Рис. 4. Даже такую несложную операцию, как создание нового свойства, можно упростить

Чуть более детальную информацию о классе можно получить, вызвав из контекстного меню пункт Class Hierarchy: откроется отдельное окно с параметрами класса и его элементов.

Редактор

Редактор исходных текстов C++Builder 4 перенял у Delphi 4 пару нужных технологических новинок. Во-первых, появился менеджер автоматизации ввода Code Insight, завершающий за программиста ввод типовых конструкций языка Cи++, во-вторых, в исходный текст теперь можно вставлять закладки для быстрого перемещения от одного участка листинга к другому.

Завершение вводимого текста уже знакомо программистам. Однако только сейчас Code Insight в C++Builder вышел, что называется, «на проектную мощность» и умеет делать все то же, что и его собратья в других пакетах компании Borland, а именно: завершать за программиста вводимые выражения вызова методов класса и обращения к его полям, выводить список параметров текущего описываемого метода и переходить от выбранного объекта к месту, где он декларируется. Последняя возможность особенно интересна, поскольку выполнена нетривиально. К примеру, вы обнаружили переменную, описание которой вас заинтересовало. Нужно навести на нее указатель мыши и нажать клавишу , после чего переменная превратится в гипертекстовую ссылку прямо в исходном тексте. Через мгновение вы увидите описание этой переменной. Для возврата назад нужно воспользоваться другой полезной мелочью — кнопками навигации по ссылкам, которые размещены в правом верхнем углу окна и очень похожи на аналогичные в браузерах Web.

Все для кодирования

Разработчики компании Borland продолжают совершенствовать компилятор C++Builder. В препроцессоре добавились опции для директивы #pragma. Опция alignment выводит сообщение о текущем выравнивании и размере элементов перечислений. Опция checkoption проверяет, установлены ли определенные флаги командной строки, и выводит сообщение об ошибке, если заданные в ней флаги отсутствуют. Множественные мелкие изменения добрались до шаблонов Cu++, битовых полей и выравнивания кода. А еще в компиляторе языка Cи благодаря появлению ключевого слова __inline стало возможно использование подставляемых функций.

Неясно пока, зачем библиотека времени исполнения C++Builder обзавелась новыми функциями поддержки чисел с плавающей запятой, работы с потоками выполнения и строками. Многие из них пересекаются с аналогичными, применяемыми в средствах разработки Microsoft. К тому же, кажется, компания Borland взяла курс на сближение с компилятором Microsoft Visual C++. Одних только заголовочных файлов от Microsoft добавилось 400 штук! Что касается популярной библиотеки Standard Template Library (STL), то с четвертой версии C++Builder поставляется вариант STL от RogueWave (2.02).

Не обошлось без изменений и в главной компонентной библиотеке Borland — VCL. Ее иерархия была расширена добавлением новых компонентов, среди которых компоненты интерфейса Windows 98: MonthCalendar, PageScroller, ControlBar и Flat Scrollbar. Введено специальное средство создания списка действий (action list). Список действий — идеальное решение для централизованной обработки сообщений.

Другое расширение VCL касается решения проблемы 2000 года. Функции StrToDate и StrToDateTime используют новую глобальную переменную TwoDigitYearCenturyWindow для интерпретации в программе года, представленного двумя последними цифрами.

На все руки мастера

Должно быть, вам будет небезынтересно узнать, что C++Builder 4 пополнился четырьмя прекрасными мастерами. Один из них сделал возможным создание сервисов для операционной системы Microsoft Windows NT, два других производят генерацию базового кода для оконного приложения на основе популярных библиотек OWL и MFC. При этом можно создавать одно- и многооконные программы на основе динамических и статических библиотек времени исполнения (рис. 5).

Рис. 5. Проекты на основе библиотеки OWL можно сделать VCL-совместимыми

И наконец, четвертый мастер служит для импорта проектов, созданных в среде Microsoft Visual C++, в проекты C++Builder. Он может запускаться как из меню Tools среды разработчика, так и из командной строки.

Ловушка «Combat»

Как и обычные домашние тараканы, их программные собратья требуют бдительности. Потому и процессу совершенствования ловушки для них нет предела. C++Builder 4 старается сделать все, что только можно, для удобной отладки проектов.

Удаленная отладка всегда была любимым коньком Borland. С появлением распределенных приложений отладка в той же среде, в которой предстоит работать программе, становится вдвойне актуальной. Поэтому C++Builder 4 позволяет находить ошибки в приложениях и динамически загружаемых библиотеках и модулях, содержащих отладочную информацию. Если создание приложения ведется на компьютере под управлением операционной системы Windows NT, то, не покидая среды разработчика, реально отладить сразу несколько локальных или удаленных процессов. Так, синхронно можно отлаживать клиенты и COM-, и CORBA-сервера.

Рис. 6. Подключение к работающим процессам - это реальная помощь в обнаружении ошибок, сделанных не вашими руками

А вот что действительно достойно всяческих похвал, так это новые возможности отладчика C++Builder подключаться к сторонним выполняющимся процессам (рис. 6) и всплывающие подсказки возле точек останова, отображающие параметры их настройки.

Шаг навстречу Microsoft

Как мы заметили, похоже Borland решила не биться с Microsoft за пальму первенства на рынке средств разработки. Где-то глубоко в недрах генерального штаба компании, у какого-то здравомыслящего человека родилась смелая идея дать пользователю такой инструмент, чтобы отпала необходимость в других. Ну а поскольку единственная альтернатива Borland C++Builder — это Microsoft Visual C++, то решено было взять из последнего полезные технологии, но реализовать их в стиле Borland, т. е. доступно для разработчиков любого уровня. И здесь есть на что взглянуть.

COM и ActiveX

Уже в C++Builder 3 присутствовала поддержка объектной технологии Microsoft COM, которая базируется на использовании библиотеки ATL. Специальная утилита Type Library Еditor значительно облегчила создание компонентов ActiveX и библиотек типов (TLB), позволяя в интерактивном режиме редактировать COM-интерфейсы, атрибуты COM-классов и многое другое, параллельно наблюдая и корректируя описания этих элементов на языке IDL. Четвертая версия вносит технологическую новинку — привязку данных компонентов ActiveX. Суть ее в том, что свойства компонентов ActiveX, связанные с данными, могут быть подключены к компонентам VCL, отвечающим за обмен данными с базами.

Рис. 7. Какрас произвольного COM-объекта - за один шаг

Из более простых вещей Borland анонсирует синтаксис EZ-COM, упрощающий кодирование COM-клиентов на языке Cи++, и мастер COM Object Wizard (рис. 7).

Последний интересен тем, что умеет создавать COM-объект всего по трем параметрам: имя класса компонента (CoClass), поточная модель и краткое текстовое описание. Результат выглядит как описание на языке IDL компонентного класса, его интерфейса и, если была включена соответствующая опция, интерфейса поддержки сообщений. Одновременно в проект добавляются несколько файлов, реализующих сам компонент с применением библиотеки ATL, включая TLB-файл библиотеки типов компонента. Программисту остается лишь написать функциональную часть программы.

Поддержка MTS

Продвижение компонентных технологий привело к тому, что во многих проектах начинают усиленно применять серверы и службы транзакций. В частности, довольно большой популярностью на Windows-платформах пользуется Microsoft Transaction Server (MTS). Исходя из этого, создатели C++Builder 4 сделали программы-мастера поддержки MTS.

Чтобы создать MTS-объект, можно воспользоваться мастером MTS Object, вызываемым из закладки Multitier. И в этой же закладке вы обнаружите мастер, генерирующий модули данных MTS для многозвенных приложений обработки данных. Готовые объекты для Microsoft Transaction Server легко устанавливаются в MTS-пакеты мастером Install MTS Objects.

Но главное...

То, ради чего, похоже, затевался выпуск четвертой версии C++Builder, — это предоставление разработчику всего, что требуется для создания распределенных приложений CORBA. Конечно же, подобными возможностями оснащены не все поставки C++Builder, а только вариант Enterprise пакета. Но именно здесь собраны настоящие сокровища для создателей коммерческих распределенных информационных систем.

Рис. 8. Как и в случае с COM-объектами, серверы CORBA создаются за один шаг

Самый простенький из всех мастеров CORBA тот, который создает новый пустой IDL-файл. В нем на языке IDL для описания интерфейсов программист моделирует будущие объекты CORBA. Принципиально ничего полезного (помимо создания нового пустого файла с расширением IDL и включения его в проект) этот мастер не делает. Но вот редактор исходного текста обращает внимание на такого рода файлы и корректно выполняет цветовое выделение ключевых слов в исходных текстах. Скажем, если вы наберете на IDL тип int, то он не будет выделен цветом, как, например, long или float. А все потому, что среда знает: в IDL типа int не существует. При сборке проекта среда разработчика вызовет правильный компилятор для файлов IDL. А тот, соответственно, сгенерирует по IDL-описанию заглушки (stubs) и скелеты (skeletons), присущие объектам CORBA.

Рис. 9. Выберите из списка IDL-файлов требуемый и некоторые другие параметры

Создание серверов CORBA в C++Builder 4, как говорится, «не ракетная наука», т. е. со сложностями сталкиваться вам не придется. Запускается мастер CORBA Server, в нем указываются IDL-файлы с описанием реализуемых объектов и т. п. (рис. 8).

В результате работы мастера получается новый проект, в котором уже имеются строчки, вызывающие инициализацию брокера объектных запросов (ORB) и адаптера объектов (BOA). Таким образом, от запуска мастера до получения заготовки сервера CORBA проходит совсем мало времени.

Рис. 10. Даже если поменять тип переменной, это не скроется от

бдительного ока C++Builder 4

К готовому серверу нужно добавлять объекты, для чего в C++Builder 4 имеется мастер CORBA Object Implementation (рис. 9).

Одновременно серверный исходный текст обновляется так, чтобы создавался экземпляр объекта. Если включить опцию Show Updates, то в дальнейшем вы сможете отслеживать все изменения, произошедшие в проекте, если обратитесь к команде CORBA Refresh (рис. 10).

Одновременно с просмотром изменений можно редактировать исходный текст, если в сделанных изменениях что-то не так.

В меню Tools вы найдете еще два полезных, а точнее, просто необходимых инструмента для CORBA-систем: Smart Agent и IDL Repository.



* * *

Итак, остается понять, кому же нужен C++Builder 4. Конечно, профессионалам. Программисты-одиночки, создающие на досуге утилиты, смогут использовать только 20% его мощности, поэтому вряд ли стоит забивать микроскопом гвозди —имеющейся первой или третьей версии вполне достаточно. То количество высоких технологий, которые создатели упаковали в один продукт, — просто непосильная ноша для одного человека. Но если вы работаете слаженной командой и разрабатываете корпоративное программное обеспечение, то C++Builder 4 — для вас. Он даст вам все, что нужно для реализации проектов любой степени сложности и масштабируемости, с возможностью управления любыми данными. Да и уже имеющиеся исходные тексты, выполненные в Visual C++, не останутся без дела.

И в заключение маленький совет: используйте технологию CORBA, это поднимет ваши проекты на новую высоту.