//Из <Руководства разработчика Delphi 5>
1.2 Что такое Делфи?
Мы часто задаем вопросы типа: «Что делает Delphi таким хорошим?» и «Почему я предпочитаю Delphi другим инструментам программирования» и так далее. За прошедшие годы мы нашли два ответа на подобные вопросы: развернутый и краткий. Короткий ответ: эффективность. Для создания приложений Windows использование Delphi — самый простой способ, который мы можем найти. Конечно, некоторых людей (начальников и будущих клиентов) такой ответ не устраивает. Поэтому мы должны представить наш подробный ответ, который иллюстрирует сочетание факторов, которые делают Delphi настолько эффективным. Мы суммируем факторы, определяющие эффективность инструмента разработки программного обеспечения, в следующие пять пунктов:
• Производительность среды визуальной разработки.
• Скорость компилятора и эффективность скомпилированного кода.
• Возможности языков программирования и их сложность.
• Гибкость и масштабируемость структуры базы данных.
• Расширения Framework для шаблонов проектирования и использования.
Хотя необходимо учитывать множество других факторов, таких как конфигурация, документация, сторонняя поддержка и т. д., мы обнаружили, что это наиболее точный и простой способ объяснить людям, почему мы выбрали Delphi. Конечно, приведенные выше пять пунктов могут включать и некоторые субъективные факторы, но ключевой момент заключается в следующем: насколько эффективно вы можете быть, используя тот или иной инструмент разработки? Как показано на рисунке 1-1, все аспекты производительности инструмента оцениваются и оцениваются количественно (от 1 до 5) и отмечаются на каждой оси рисунка 1-1. Наконец, можно получить пятиугольник. Чем больше площадь пятиугольника, тем эффективнее этот инструмент.
Нет нужды рассказывать, какие ответы мы получили с помощью этого метода – вы сами узнаете, попробовав его! Давайте подробнее рассмотрим производительность Delphi в этих областях и сравним ее с другими инструментами разработки для Windows.
1.2.1 Визуальная среда разработки
Среда визуальной разработки обычно делится на три компонента: редактор, отладчик и дизайнер форм. Как и большинство современных инструментов RAD (быстрой разработки приложений), эти три части работают вместе. Пока вы работаете в дизайнере форм, Delphi автоматически генерирует код для элементов управления, которыми вы манипулируете в форме. Вы также можете самостоятельно добавить в редактор код, определяющий поведение приложения, а также можете отлаживать программу, устанавливая точки останова и точки мониторинга в том же редакторе.
В целом редактор Delphi похож на редакторы других инструментов, но его технология Code Insight позволяет сэкономить много входных данных. Эта технология основана на информации компилятора, а не на библиотеках типов, таких как Visual Basic, поэтому она имеет более широкий спектр приложений. Хотя редактор Delphi также имеет множество хороших опций конфигурации, я думаю, что редактор Visual Studio имеет больше возможностей для настройки. В версии 5 функция отладчика Delphi наконец-то догнала отладчик Visual Studio со многими расширенными функциями, такими как удаленная отладка, ассоциация процессов, отладка DLL и пакетов, автоматический локальный мониторинг и окна ЦП. Delphi также поддерживает произвольное размещение и стыковку окон во время отладки и сохранение этого состояния в качестве параметра рабочего стола команды. В результате в среде IDE Delphi реализована хорошая поддержка функций отладки.
Как часто можно увидеть в некоторых интегрированных средах (таких как VB и некоторые инструменты Java), преимущество очень полного отладчика состоит в том, что при отладке приложения он может модифицировать свой код, тем самым меняя свое поведение. К сожалению, эта функциональность не поддерживается Delphi, поскольку ее слишком сложно реализовать при компиляции в машинный код.
Для инструментов RAD (таких как Delphi, Visual Basic, C++Builder и PowerBilder и т. д.) дизайнер форм является уникальной функцией. Некоторые из более классических сред разработки, такие как VC++ и BC++, предоставляют диалоговые редакторы, но не интегрируют дизайнер форм в процесс разработки. Как видно из диаграммы эффективности на рисунке 1-1, отсутствие конструктора форм снизит общую эффективность инструмента разработки. В течение последних нескольких лет Delphi и Visual Basic жестко конкурировали за улучшение функциональности конструктора форм. Каждая из их новых версий имеет лучшие характеристики, чем предыдущая. Что делает конструктор форм Delphi уникальным, так это то, что Delphi построен на настоящей объектно-ориентированной платформе. Таким образом, изменения, внесенные вами в базовый класс, будут распространены на все производные классы. Одной из ключевых технологий, задействованных здесь, является VFI (наследование визуальной формы), то есть наследование визуальной формы. Технология VFI позволяет динамически наследовать любую другую форму текущего проекта или библиотеки объектов. При каждом изменении базовой формы производная форма немедленно обновляется. Эта важная функция подробно описана в главе 4 «Структура и проектирование приложений».
1.2.2 Скорость компилятора и эффективность скомпилированного кода
Быстрый компилятор позволяет вам разрабатывать программное обеспечение шаг за шагом, часто изменяя исходный код, перекомпилируя, тестируя, снова изменяя, снова компилируя, снова тестируя... образуя такой хороший цикл разработки. Если скорость компиляции очень низкая, разработчикам придется модифицировать код пакетно, внося несколько изменений перед каждой компиляцией, чтобы адаптироваться к неэффективному циклическому процессу. Он повышает эффективность работы, экономит время работы и генерирует более короткие двоичные коды. Его превосходство очевидно.
Возможно, самой известной особенностью компилятора Pascal является его скорость, и Delphi построен на этом компиляторе. Фактически, это может быть самый быстрый компилятор собственного кода языка высокого уровня для Windows. Компиляторы C++, которые раньше были медленными, в последние годы добились большого прогресса, добавив связывание и различные стратегии кэширования, особенно в Visual C++ и C++Builder. Но даже в этом случае компилятор C++ все равно в несколько раз медленнее, чем компилятор Delphi.
Обязательно ли скорость компиляции пропорциональна эффективности работы? Конечно, нет. Delphi и C++Builder используют одну и ту же внутреннюю часть компилятора, поэтому сгенерированный код эквивалентен коду, создаваемому хорошим компилятором C++. Согласно последним надежным стандартам оценки, Visual C++ во многих случаях считается наиболее эффективным с точки зрения скорости компиляции и длины генерируемого кода благодаря некоторым чрезвычайно мощным мерам оптимизации. Хотя эти небольшие преимущества трудно заметить при разработке типичных приложений, они могут проявиться, если вы пишете сложный вычислительный код.
Технология компиляции Visual Basic немного особенная. Во время разработки VB работает интегрированно и очень быстро реагирует. Этот компилятор медленнее, а генерируемый исполняемый код гораздо менее эффективен, чем инструменты Delphi и C++.
Java — еще один интересный язык. Новейшие языки инструментов на основе Java JB uilder и Visual J++ утверждают, что их скорость компиляции может соответствовать
Он сравним с Delphi, но эффективность выполнения сгенерированного кода неудовлетворительна, поскольку Java является интегрированным языком. Хотя Java стабильно развивается, его скорость работы в большинстве ситуаций все еще сильно отстает от Delphi и C++.
1.2.3 Функциональность и сложность языков программирования
Функциональность и сложность языка находятся в глазах смотрящего и являются предметом многочисленных споров. То, что просто для одного человека, может быть трудным для него; то, что может иметь ограниченную функциональность для одного человека, может быть идеальным для другого. Поэтому следующие пункты основаны только на личном опыте и понимании автора.
Ассемблер — это, по сути, самый мощный язык. С ним можно сделать практически всё. Однако разработать даже самое простое приложение на ассемблере очень сложно и может ни к чему не привести. Мало того, хранить кусок ассемблерного кода в среде групповой разработки в течение какого-то времени иногда просто невозможно. По мере того как код передается от одного человека к другому и к следующему человеку, идеи и намерения дизайна становятся все более неясными, пока код не станет похож на книгу с небес. В результате мы очень низко оцениваем сборку, поскольку она мощная, но слишком сложная почти для всех разработчиков.
C++ — еще один чрезвычайно мощный язык. С помощью его потенциальных возможностей (таких как макросы препроцессора, шаблоны, загрузка операторов и т. д.) вы практически можете создать свой собственный язык с использованием C++. Если вы правильно используете его богатые функциональные возможности, вы можете разрабатывать краткий, интуитивно понятный и простой в обслуживании код. Проблема, однако, в том, что многие разработчики злоупотребляют этими функциями, что легко может привести к серьезным ошибкам. На самом деле, написать плохой код на C++ проще, чем написать хороший код на C++. Потому что сам язык не будет двигаться в сторону хорошего дизайна — это дело разработчиков.
Object Pascal и Java кажутся нам очень похожими, поскольку они очень хорошо понимают баланс сложности и функциональности. Все они придерживаются подхода ограничения доступной функциональности для улучшения логического замысла разработчика. Например, оба избегают полностью объектно-ориентированной, но легко злоупотребляемой концепции множественного наследования и вместо этого реализуют один класс, который выполняет функциональность нескольких интерфейсов. Ни один из них не поддерживает красивую, но опасную загрузку операторов. Оба имеют некоторые мощные функции, такие как обработка исключений, информация о типе во время выполнения (RT TI) и самоуправляемая строковая память. В то же время ни один из языков не пишется специальной редакционной коллегией, а исходит от отдельных лиц или групп внутри одной организации, которые разделяют общее понимание языка.
Visual Basic изначально был разработан, чтобы новичкам было проще начать работу и быстрее прогрессировать (отсюда и название). Но как языку VB приходится постоянно учиться на своих сильных сторонах и компенсировать слабые стороны, что в последние годы делает его все более и более сложным. Чтобы скрыть эти детали от разработчиков, VB по-прежнему сохраняет несколько мастеров для создания сложных проектов.
1.2.4 Гибкость и масштабируемость структуры базы данных
Поскольку у Borland отсутствует схема базы данных, Delphi сохраняет, по нашему мнению, наиболее гибкую структуру базы данных из всех инструментов. BDE очень эффективен для большинства приложений, основанных на локальных, клиент-серверных платформах и платформах баз данных ODBC. Если вас это не устраивает, вы можете отказаться от использования BDE в пользу новых собственных компонентов ADO. Если у вас не установлен ADO, вы можете создать свои собственные классы доступа к данным или приобрести стороннее решение для доступа к данным. Кроме того, MIDAS упрощает реализацию многоуровневого доступа к источникам данных. Инструменты Microsoft (ODBC, OLE DB и другие) логически склонны поддерживать собственные базы данных Microsoft и решения для доступа к данным.
1.2.5 Расширения платформы для шаблонов проектирования и использования
Это важная особенность, которую часто упускают из виду другие инструменты проектирования программного обеспечения. VCL — наиболее важный компонент Delphi. Способность манипулировать компонентами во время разработки, создавать компоненты и использовать объектно-ориентированную технологию для наследования поведения других компонентов являются ключевыми факторами, определяющими эффективность Delphi. Во многих случаях компоненты VCL пишутся с использованием фиксированного объектно-ориентированного подхода к проектированию. Для сравнения, другие структуры, основанные на компонентах, часто бывают слишком жесткими или сложными. Например, элементы управления Active X имеют те же возможности времени разработки, что и элементы управления VCL, но не могут быть унаследованы для создания нового класса с другим поведением. Традиционные структуры классов, такие как OWL и MFC, требуют от вас глубоких знаний внутренней структуры, и без поддержки во время разработки со стороны инструментов RAD их функциональность будет ограничена. Инструментом, который в будущем может конкурировать по функциональности с VCL, является WFC (Windows Foundation Classes) Visual J++, который является классом Windows Foundation. Но поскольку иск Sun Microsystems по поводу проблем с Java все еще находится на рассмотрении, будущее Visual J++ остается неясным.